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









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

范例程序

主程序:

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. aws命令行cli创建VPC网络、公有子网、私有子网、nat网关+EIP

    在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具cli创建VPC网络, a区和b区分别创建公有子 ...

  2. Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图

    一.前言说明 这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearove ...

  3. Qt开源作品44-超级曲线图表

    按照国际惯例,先吹吹牛,QCustomPlot这个开源图表组件,作者绝对是全宇宙Qt领域的天花板,设计的极其巧妙和精美,各种情况都考虑到了,将每个功能细分到不同的类,每个类负责管理自己的绘制和各种属性 ...

  4. [转]ptp(precision time protocol)时钟同步

    一.介绍1:什么是ptpPTP(Precision Time Protocol) 是一个通过网络同步时钟的一个协议.当硬件支持时,PTP 精度能达到亚微秒,比 NTP(Network Time Pro ...

  5. com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver的区别

    今天写东西测试的时候发现一个问题,如下: application.yml中数据源是这样配置的: 第一反应就是记忆中连接mysql的驱动不都是com.mysql.jdbc.Driver吗?com.mys ...

  6. 阿里云-物联网IOT

    https://iot.aliyun.com/?spm=5176.23056729.J_3207526240.265.3dcc3f06JR1HG2

  7. 面试题:关于StringBuffer()源码的深度理解Debug分析

    import org.junit.Test; /** * @author CH * @create 2021 上午 11:23 */ public class IDEADebug { @Test pu ...

  8. uni-app封装网络请求

    在项目下创建一个文件夹https 然后在文件夹下面创建两个文件api.js request.js api.js 用于存放项目的请求接口 request.js 用于存放封装的请求接口get post 在 ...

  9. AI+算力,赋予天翼云数字人“最强大脑”!

    3月31日至4月1日,以"音视频+无限可能"为主题的LiveVideoStackCon 2022音视频技术大会(北京站)圆满举办.天翼云科技有限公司AI产品研发总监陈金出席&quo ...

  10. 服务器安装jdk,tomcat,mysql等全系列

    安装jdk 执行如下命令, 然后等待安装完成 yum install -y java-1.8.0-openjdk-devel.x86_64 安装完毕后执行如下命令查看版本 java -version安 ...