Chức năng Select và Move cho chương trình vẽ

Mình đang làm 1 chương trình vẽ đơn giản. Hiện giờ mình đã vẽ đươc ra màn hình rồi (hình chữ nhật, tròn và tam giác vuông). Bây giờ mình cần làm chức năng Select và Move. Mình đang gặp vấn đề với Select. Nếu là hình chữ nhật thì nó dễ. Lưu lại điểm nhấp chuột rồi so sánh nó có nằm trong hình chữ nhật không. Nhưng nếu là hình tam giác vuông và hình tròn thì làm như thế nào? Mình phải viết code cho từng trường hợp sao? Có cách nào để nó xét tất cả các trường hợp thay vì dùng if-else như sau:

if (shape == rectangle){
//do something
}
else if (shape == circle){
//do something
else{
//do something
}

Đây là code của hình chữ nhật. Hình tròn và tam giác cũng như vậy, có thay đổi chút ít.

public class Rectangle_ implements IShape {
   private int x, y, width, height;
   private Color primaryColor, secondaryColor;
   private Graphics2D graphic;
   private ApplicationState appState;
   private ColorMap colorMap;
   private Point start, end;
public Rectangle_(Point start, Point end, ApplicationState appState, Graphics2D graphic) {
     this.x = Math.min (start.x, end.x);
     this.y = Math.min (start.y, end.y);
     this.width = Math.abs(start.x - end.x);
     this.height = Math.abs(start.y - end.y);
     this.graphic = graphic;
     this.appState = appState;
     this.start = start;
     this.end = end;
}
@Override
public void draw() {
  this.graphic.setStroke(new BasicStroke(3));
  switch (this.appState.getActiveShapeShadingType()) {
  case OUTLINE:
     this.drawOutline();
     break;
  case FILLED_IN:
     this.drawFill();
     break;
  case OUTLINE_AND_FILLED_IN :
     this.drawOut_Fill();
     break ;
}
}
}

Các bạn có thể gợi ý cho mình không?

Mở các chương trình vẽ lên và thao tác xem nó hoạt động ra sao. Paint trên Windows 7 trở đi chẳng hạn.

Hầu hết các trình vẽ đều quy mọi hình về một khung chữ nhật (vô hình) bao quanh hình đó. Khi nhấn chuột vào khung đó, xem như mình chọn hình đó. Nếu nhiều hình chồng nhau thì hình nằm trên nhất được chọn.

Cao hơn, thay vì xét theo khung chữ nhật bao quanh nó, xét điểm nhấn chuột có nằm trên đường vẽ (outline) hoặc phạm vi đổ màu (fill) hay không để chọn hình.

Tiếp theo di chuyển là thay đổi kích thước, xoay, đảo,…

3 Likes

Hi. Have you finished this project? Can I use it please?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?