Создание инструмента Curve с использованием Java2D и Swing для моего редактора векторной графики Java - PullRequest
1 голос
/ 14 декабря 2011

Я создаю редактор векторной графики и успешно создал кисть и некоторые базовые 2d фигуры, такие как Rectange, Ellipse, Line и т. Д. Теперь меня беспокоит инструмент Curved Line или Curve.Я создал другие, получив исходную точку от mousePressed и затем обновив вторую точку на каждой mouseDragged .Вот часть кода:

public void mousePressed(MouseEvent e){
    gfx.setColor(Tool.currentColor);
    pos1 = e.getPoint(); //Get the First Point
}
public void mouseReleased(MouseEvent e){
    if(!e.isAltDown() && !e.isMetaDown())

    if(currentShape != null) shapeSet.add(currentShape);
    currentShape = null;
}
public void mouseDragged(MouseEvent e){
    if(e.isAltDown() || e.isMetaDown()) return;
    //the mouse was dragged, so begin painting
    pos2 = e.getPoint();

    int ctool = Tool.currentTool;

    if(ctool == Tool.LINE){
        currentShape = new Line(pos1,pos2,Tool.currentColor,null);
    }else if(ctool == Tool.ELLIPSE){
        currentShape = new Ellipse(pos1,pos2,Tool.currentColor,null);
    }else if(ctool == Tool.RECTANGLE){
        currentShape = new Rectangle(pos1,pos2,Tool.currentColor,null);
    }

    this.repaint();
}

Классы Line, Ellipse и т. Д. Довольно просты, они просто берут точки и рисуют их позже при перерисовке.Все фигуры, временно сохраненные в currentShape , затем добавляются в shapeSet, который представляет собой ArrayList абстрактного класса Shape .

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);

    gfx.setBackground(Color.WHITE);

    gfx.clearRect(0, 0, img.getWidth(), img.getHeight());
    for(int i=0; i< shapeSet.size(); i++){
        shapeSet.get(i).draw(gfx);
    }
    if(currentShape != null){
        currentShape.draw(gfx);
    }

    g.drawImage(img, 0, 0, null);
} 

img является BufferedImage и gfx - это Графика img .

img = new BufferedImage(640,480,BufferedImage.TYPE_INT_RGB);
gfx = img.createGraphics(); //Graphics2D

Теперь, как именно я бы пошел о создании Curve Tool ?

PS Если вам нужен код классов Shape (Line, Ellipse и т. Д.), Просто прокомментируйте, и я опубликую его.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Вот редактор кривых Безье в Java , который может дать вам некоторые идеи, но я не уверен, как вы интегрируете его в свою программу.

1 голос
/ 14 декабря 2011

Использование http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/geom/PathIterator.html

Вы должны определить SEG_QUADTO или SEG_CUBICTO. Просто добавьте новый сегмент с двойными координатами propr.

...