我正在尝试使用处理构建绘图程序。我目前坚持使用PGrapchics
.
当用户绘制一个矩形时,它会显示正在绘制的形状。当用户释放他们的鼠标时,它会创建一个PGraphic
最终的形状。然后,我希望用户在此基础上进行绘制。这是我的问题:
绘制矩形时,我必须重置画布的背景,否则,它会显示矩形的轨迹。结果是,当用户绘制一个新的矩形时,旧的矩形消失并在鼠标被释放后又回来
一些想法:我还想添加用户可以在先前绘制的矩形上选择并更改其颜色、笔触、发送到后面、带到前面等的功能。
为了实现这一点,我将所有绘制的矩形(PGraphics)存储到一个ArrayList
将通过 for 循环绘制的矩形中。PGraphics
这将允许我通过上下移动元素来调整行为ArrayList
。
PS:与其创建我自己的类,Shape
不如使用 PShape 更好?
int startX;
int startY;
int endX;
int endY;
boolean drawing;
int strokeW = 3;
Shape shape;
PGraphics shapeLayer;
ArrayList<PGraphics> layersList = new ArrayList();
void setup() {
size(500, 500);
cursor(CROSS);
background(255);
smooth();
}
void draw() {
strokeWeight(strokeW);
if (key >= '0' && key <= '9') {
strokeW = key - '0';
}
for(int i = 0; i < layersList.size(); i++) {
image(layersList.get(i), 0, 0);
}
if (drawing) {
shape.createRectangle();
}
}
void mousePressed() {
startX = mouseX;
startY = mouseY;
shapeLayer = createGraphics(width, height);
shapeLayer.beginDraw();
}
void mouseDragged() {
drawing = true;
endX = constrain(mouseX, 0, 500);
endY = constrain(mouseY, 0, 500);
shape = new Shape(startX, startY, endX, endY);
shapeLayer.clear();
}
void mouseReleased() {
drawing = false;
shapeLayer.endDraw();
layersList.add(shapeLayer);
}
这是Shape
课程:
class Shape {
int startX;
int startY;
int endX;
int endY;
Shape(int x1, int y1, int x2, int y2) {
startX = x1;
startY = y1;
endX = x2;
endY = y2;
}
void createRectangle() {
background(255, 0);
shapeLayer.strokeWeight(strokeW);
shapeLayer.rectMode(CORNERS);
shapeLayer.rect(startX, startY, endX, endY);
rectMode(CORNERS);
rect(startX, startY, endX, endY);
}
}