How to select a line

后端 未结 4 1220
一个人的身影
一个人的身影 2020-12-07 04:40

So I\'m trying to figure out how to implement a method of selecting lines or edges in a drawing area but my math is a bit lacking. This is what I got so far:

  • A
4条回答
  •  粉色の甜心
    2020-12-07 05:11

    Best way to do this is to use the intersects method of the line. Like another user mentioned, you need to have a buffer area around where they clicked. So create a rectangle centered around your mouse coordinate, then test that rectangle for intersection with your line. Here's some code that should work (don't have a compiler or anything, but should be easily modifiable)

    // Width and height of rectangular region around mouse
    // pointer to use for hit detection on lines
    private static final int HIT_BOX_SIZE = 2;
    
    
    
    public void mousePressed(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
    
        Line2D clickedLine = getClickedLine(x, y);
    }
    
    
    /**
    * Returns the first line in the collection of lines that
    * is close enough to where the user clicked, or null if
    * no such line exists
    *
    */
    
    public Line2D getClickedLine(int x, int y) {
    int boxX = x - HIT_BOX_SIZE / 2;
    int boxY = y - HIT_BOX_SIZE / 2;
    
    int width = HIT_BOX_SIZE;
    int height = HIT_BOX_SIZE;
    
    for (Line2D line : getLines()) {
        if (line.intersects(boxX, boxY, width, height) {
            return line;
        }       
    }
    return null;
    

    }

提交回复
热议问题