多窗口范例(二),做一个划线生成图像的应用,最后结果:









子窗口划线,主窗口复制多个画布叠加并添加了旋转动画。

范例程序

主程序:

package syf.demo.multiwindow2;

import processing.core.PApplet;
import processing.core.PGraphics; public class TwoWindowApp extends PApplet { ChildWindow childwindow;
Canvas canvas;
PGraphics pg; @Override
public void settings() {
size(800,800);
}
@Override
public void setup() {
pg = createGraphics(200,200);
pg.beginDraw();
pg.clear();
pg.background(0,0);
pg.endDraw();
canvas = new Canvas(this,pg);
childwindow = new ChildWindow(this,pg); background(0);
}
@Override
public void draw() {
//background(20); 这里就暂时不刷新
canvas.update();
canvas.draw();
} public static void main(String[] args) {
String[] appletArgs = new String[] {"syf.demo.multiwindow2.TwoWindowApp"};
PApplet.main(appletArgs);
}
}

子窗口类:

package syf.demo.multiwindow2;

import javafx.stage.Screen;
import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PGraphics; import java.awt.*; public class ChildWindow extends PApplet{
PGraphics pg;
PApplet app;
int preposx;
int preposy;
Dimension screen;
ChildWindow(PApplet _app,PGraphics _pg){
super();
pg = _pg;
app = _app;
PApplet.runSketch(new String[]{this.getClass().getName()},this); Toolkit toolkit = Toolkit.getDefaultToolkit();
screen = toolkit.getScreenSize();
} @Override
public void settings() {
size(pg.width, pg.height);
} @Override
public void setup() {
background(0);
//让其窗口依附在主窗口左边
surface.setLocation(screen.width/2-app.width/2-this.width,screen.height/2-app.height/2);
pg.colorMode(PConstants.HSB,360,100,100);
pg.strokeWeight(8); } @Override
public void draw() {
pg.beginDraw();
pg.background(0,10); //背景刷新,加点透明度
//pg.stroke(250);
pg.stroke((frameCount*2)%360,100,100,150);//变颜色,颜色模式 HSB
pg.line(mouseX,mouseY,preposx,preposy);
pg.endDraw(); set(0,0,pg); preposx = mouseX;
preposy = mouseY;
}
}

画布类:

package syf.demo.multiwindow2;

import processing.core.PApplet;
import processing.core.PGraphics; public class Canvas { private PApplet app;
PGraphics pg;
float rotvalue; Canvas(PApplet _app, PGraphics _pg){
app = _app;
pg = _pg;
} void update(){
rotvalue += 0.06; //让它自转
} void draw(){
for (int i = 0; i < 10; i++) {
app.push();
app.translate(app.width/2,app.height/2);
app.rotate(360/10*i+rotvalue); //中心旋转扩散呈现
//app.set(0,0, pg); set 位置不受translate影响
app.image(pg, 0, 0);
app.pop();
}
}
}

总结

可以看到有了子窗口能清楚的看到用户的绘制过程和结果,在日后开发和维护都能有作用,说白了,是应用更自然更有范儿了~~~

Processing多窗口程序范例(二)的更多相关文章

  1. Python面向对象编程 - 一个记事本程序范例(二)

    给程序加上控制台菜单 menu.py import sys from notebook import Notebook, Note class Menu: '''Display a menu and ...

  2. Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑

    在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...

  3. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  4. 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

    32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...

  5. win32程序之窗口程序,以及消息机制

    win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...

  6. 第一个手写Win32窗口程序

    第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...

  7. 使用Qt生成第一个窗口程序

    一.打开QtCreater,点击New Project 二.在Qt中,最常用的窗口程序为widgets控件程序,这里我们选择Qt Widgets Application 三.Qt生成的debug和re ...

  8. 微信小程序配置二

    tabBar 客户端窗口底部的tab页面切换,只能配置最好两个.最多5个tab 属性说明: 属性 类型 必填 默认值 描述 color HexColor 是 tab上的文字默认颜色 selectedC ...

  9. 第15.35节 PyQt编程实战:结合QDial实现的QStackedWidget堆叠窗口程序例子

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...

  10. C++小项目:directx11图形程序(二):systemclass

    先上代码: systemclass.h #pragma once #include"graphicsclass.h" const bool FULLSCREEN = true; c ...

随机推荐

  1. HarmonyOS鸿蒙开发 - 解决上下两栏白边 - 沉浸式效果

    鸿蒙应用开发从入门到入行 预览器上下两栏白边 自从HarmonyOS升级到release版后,很多同学会问猫林老师:为什么他的预览器上下有白边,为什么明明根容器写了宽高百分百但没铺满.如下图 白边原因 ...

  2. 给我2分钟,保证教会你在Vue3中实现一个定高的虚拟列表

    前言 虚拟列表对于大部分一线开发同学来说是一点都不陌生的东西了,有的同学是直接使用第三方组件.但是面试时如果你简历上面写了虚拟列表,却给面试官说是通过三方组件实现的,此时空气可能都凝固了.所以这篇文章 ...

  3. NATS: 对象存储

    https://natsbyexample.com/examples/os/intro/dotnet2 NATS 中的对象存储能力是在 Stream 之上的一种抽象,它将消息的主题视为类似键值对中的键 ...

  4. 【Rive】Android与Rive交互

    1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationView android: ...

  5. PM的正交解调法

    1.PM的模拟调制过程 ​ PM信号是一种相位调制信号,其携带的信息保存在其信号的相位中,通过改变载波的相位来实现基带数据的传输. 其函数表达式如下: \[s(t) = A*cos(w_c*t + K ...

  6. arm mattermost

    It's not so hard, here is my working steps for arm64 device. cd ~/build/mattermost wget https://raw. ...

  7. mysql转换类型、类型转换、查询结果类型转换

    一.问题来源 数据库一张表的主键id设为了自增,那就是int型的,但是其他表的关联字段又设置成了字符串! 而且已经开发了很久才发现问题,既然出现了问题肯定需要解决 如图 很明显id是不一样的,花了点时 ...

  8. Qt编写视频监控系统76-Onvif跨网段组播搜索和单播搜索的实现

    一.前言 在视频监控行业一般会用国际onvif工具来测试设备是否支持onvif协议,工具的名字叫ONVIF Device Manager(还有个工具叫ONVIF Device Test Tool,专用 ...

  9. Qt开发经验小技巧141-145

    QImage支持xpm图标,查看Qt内置的QStyle风格的代码中可以发现大量的xpm图标定义,通过代码的形式来产生图标,哇咔咔好牛逼. static const char * const imgDa ...

  10. Qt音视频开发9-ffmpeg录像存储

    一.前言 上一篇文章写道直接将视频流保存裸流到文件,尽管裸流文件有一定的好处,但是 毕竟大部分用户需要的不是裸流而是MP4视频文件,所以需要将视频流保存成MP4文件,毕竟电脑上的播放器包括默认的播放器 ...