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



子窗口划线,主窗口复制多个画布叠加并添加了旋转动画。
范例程序
主程序:
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多窗口程序范例(二)的更多相关文章
- Python面向对象编程 - 一个记事本程序范例(二)
给程序加上控制台菜单 menu.py import sys from notebook import Notebook, Note class Menu: '''Display a menu and ...
- Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑
在编写窗口程序时主要是5个步骤,创建窗口类.注册窗口类.创建窗口.显示窗口.消息环的编写.对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本上已经找到了答案,同时对于Windows ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...
- win32程序之窗口程序,以及消息机制
win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...
- 第一个手写Win32窗口程序
第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...
- 使用Qt生成第一个窗口程序
一.打开QtCreater,点击New Project 二.在Qt中,最常用的窗口程序为widgets控件程序,这里我们选择Qt Widgets Application 三.Qt生成的debug和re ...
- 微信小程序配置二
tabBar 客户端窗口底部的tab页面切换,只能配置最好两个.最多5个tab 属性说明: 属性 类型 必填 默认值 描述 color HexColor 是 tab上的文字默认颜色 selectedC ...
- 第15.35节 PyQt编程实战:结合QDial实现的QStackedWidget堆叠窗口程序例子
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...
- C++小项目:directx11图形程序(二):systemclass
先上代码: systemclass.h #pragma once #include"graphicsclass.h" const bool FULLSCREEN = true; c ...
随机推荐
- Gitbook在Docker中安装插件的方法
别光在那百度,什么先book.json添加plugin,然后在install? 哥,你现在用的是docker哎,docker都启动不了,你如何gitbook install呢? 乖乖听我的,按我的方法 ...
- 【Java】【Spring Boot】CP01:创建一个SpringBoot项目(Spring Initializr)
设置(可跳过这一步) 点击Apply 然后点击OK 创建项目 目前不需要勾选什么,以后根据需要勾选 创建一个名为controller的文件夹(控制层),并在文件夹中创建一个HelloControlle ...
- 实现一个分布式调用(OkHttp+SpringBoot)
很多情况,trace是分布在不同的应用中的,最常用的远程调用方式就是Http. 在这种情况下,我们通常通过增加额外的Http Header传递Trace信息,然后将其组织起来. 本部分通过构建一个目前 ...
- Datawhale 2025冬令营“嬛嬛,我来啦!”😘
Datawhale2025冬令营 Datawhale 2025 AI冬令营链接:https://www.datawhale.cn/activity/110/21/76?rankingPage=1 赠送 ...
- [转]点云库PCL从入门到精通 随书源码(百度网盘下载)
分享给需要的人. 这里有你想要的东西-暗号-pdx6 相关链接: PCL点云数据处理基础️️️目录
- 在Win7操作系统上安装VS2017报错:安装程序清单签名验证失败
方法1: 开始-运行-gpedit.msc-计算机配置-Windows 设置-安全设置-本地策略-安全选项-系统机密:将FIPS兼容算法用于加密.哈希和签名-设置禁用-退出安装程序,重新安装一次.亲测 ...
- 编译WorldWindJavav2.1.0中的ApplicationTemplate.java文件时有时报出“Exception in thread "main" java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V”错误的解决办法
1 问题 编译WorldWindJavav2.1.0中的ApplicationTemplate.java文件时有时报出如下错误: Exception in thread "main" ...
- [转]VC++中如何快速创建多层文件夹
在创建目录时,原来的可用的方法是 _mkdir()或 BOOL CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurit ...
- 开源即时通讯IM框架 MobileIMSDK v6.5 发布
一.更新内容简介 本次更新为次要版本更新,进行了bug修复和优化升级(更新历史详见:码云 Release Notes.Github Release Notes). MobileIMSDK 可能是市面上 ...
- 跟着源码一起学:手把手教你用WebSocket打造Web端IM聊天
本文作者芋艿,原题"芋道 Spring Boot WebSocket 入门",本次有修订和改动. 一.引言 WebSocket如今在Web端即时通讯技术应用里使用广泛,不仅用于传统 ...