本人日前在绘制立体感多变形时,方法是在响应鼠标事件时把每两个鼠标press和release间的点纪录,并各自取一定偏移量的辅助点,让这4个点组成一个多边形,并填充他们,多变形每画一条边就填充一次,从而形成立体感多变形!!会出现一个bug,就是鼠标绘制时,完全正常,而当在画另一个图形,而整个canvas重时,会出现立体感区域重叠的地方,颜色丢失的问题!!不知道如何决,请各位帮忙解释,谢谢!!!!mouseReleased的代码如下:
public void mouseReleased(PageMouseEvent e) {
Point2D p = gp.getCurrentPoint();
、
if (r.contains(e.getX(), e.getY())) {
drawLine(new Line2D.Double(p.getX(), p.getY(), dp.x, dp.y));
//设置临时点
dp.x = e.getX();
dp.y = e.getY();
this.drawMode();
drawLine(new Line2D.Double(p.getX(), p.getY(), e.getX(), e.getY()));
//增加新节点
gp.lineTo(e.getX(), e.getY()); //立体填充区域
temPoint1.x = temPoint.x + 10;
temPoint1.y = temPoint.y - 10; temEndPoint.x = e.getX();
temEndPoint.y = e.getY();
temEndPoint1.x = e.getX() + 10;
temEndPoint1.y = e.getY() - 10;
pp.moveTo(temPoint.x, temPoint.y);
pp.lineTo(temEndPoint.x, temEndPoint.y);
pp.lineTo(temEndPoint1.x, temEndPoint1.y);
pp.lineTo(temPoint1.x, temPoint1.y);
pp.lineTo(temPoint.x, temPoint.y); temPoint.x = e.getX();
temPoint.y = e.getY();
//绘制阴影部分
gp1.lineTo(e.getX() + 6, e.getY() + 6);
this.draw();
} this.dragMode();//xor成背景色
}
draw的部分:
if (stereo == true) { //立体
Color color = g2.getColor();
// AlphaComposite com = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
// 1.0f);
g2.setColor(Color.lightGray);
//g2.setComposite(com);
g2.fill(pp); //画立体
g2.setColor(Color.lightGray);
g2.fill(pp1); //画最后立体 g2.setColor(color);
if (fill == true) {
g2.fill(gp);
}
else {
g2.draw(gp);
}
}
public void mouseReleased(PageMouseEvent e) {
Point2D p = gp.getCurrentPoint();
、
if (r.contains(e.getX(), e.getY())) {
drawLine(new Line2D.Double(p.getX(), p.getY(), dp.x, dp.y));
//设置临时点
dp.x = e.getX();
dp.y = e.getY();
this.drawMode();
drawLine(new Line2D.Double(p.getX(), p.getY(), e.getX(), e.getY()));
//增加新节点
gp.lineTo(e.getX(), e.getY()); //立体填充区域
temPoint1.x = temPoint.x + 10;
temPoint1.y = temPoint.y - 10; temEndPoint.x = e.getX();
temEndPoint.y = e.getY();
temEndPoint1.x = e.getX() + 10;
temEndPoint1.y = e.getY() - 10;
pp.moveTo(temPoint.x, temPoint.y);
pp.lineTo(temEndPoint.x, temEndPoint.y);
pp.lineTo(temEndPoint1.x, temEndPoint1.y);
pp.lineTo(temPoint1.x, temPoint1.y);
pp.lineTo(temPoint.x, temPoint.y); temPoint.x = e.getX();
temPoint.y = e.getY();
//绘制阴影部分
gp1.lineTo(e.getX() + 6, e.getY() + 6);
this.draw();
} this.dragMode();//xor成背景色
}
draw的部分:
if (stereo == true) { //立体
Color color = g2.getColor();
// AlphaComposite com = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
// 1.0f);
g2.setColor(Color.lightGray);
//g2.setComposite(com);
g2.fill(pp); //画立体
g2.setColor(Color.lightGray);
g2.fill(pp1); //画最后立体 g2.setColor(color);
if (fill == true) {
g2.fill(gp);
}
else {
g2.draw(gp);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货