2010-08-04 6 views
0

Ce que je cherche à faire est de dessiner un polygone incomplet en utilisant Java. J'ai compris comment dessiner seulement le polygone en un coup, ou même remplir le polygone. Je peux également dessiner le polygone incomplet en utilisant des segments de ligne, mais le problème est que le BasicStroke.JOIN_BEVEL ne s'applique pas aux segments de ligne. Voici comment je le fais avec les segments de ligne:Comment dessiner un polygone incomplet en utilisant Java

//polygon is not Java's Polygon, my own implementation, and the methods do as 
//they imply 
for(int i = 0; i < polygon.getNumberOfPoints(); i++){ 
    Point2D.Double first = polygon.getPoint(i); 
    Point2D.Double second = new Point2D.Double(); 
    if(polygon.getPoint(i+1) != null){ 
     second = polygon.getPoint(i+1); 
     trans1 = /* some graphic translation of first */ 
     trans2 = /* some graphic translation of second */ 
     g.setColor(polygon.getColor()); 
     g.setStroke(new BasicStroke(polygon.getWeight(), BasicStroke.JOIN_BEVEL, BasicStroke.CAP_BUTT)); 
     g.draw(new Line2D.Double(trans1[0], trans1[1], trans2[0], trans2[1])); 
    } 
} 

cela fonctionne très bien, mais ce que je ne travaillerais pas exactement comme à. Le g.setStroke(/*stuff here*/); n'a aucun effet sur les articulations.

Répondre

0

Créez un Path2D.Double, mais n'appelez simplement pas closePath().

 
Path2D.Double path = new Path2D.Double(); 
for (int i = 0; i < polygon.getNumberOfPoints(); i++) { 
    Point2D.Double point = polygon.getPoint(i); 
    trans1 = /* some graphic translation */; 
    if (i == 0) 
    path.moveTo(trans1[0], trans1[1]); 
    else 
    path.lineTo(trans1[0], trans2[0]); 
} 
g.setColor(polygon.getColor()); 
g.setStroke(new BasicStroke(polygon.getWeight(), BasicStroke.JOIN_BEVEL, BasicStroke.CAP_BUTT)); 
g.draw(path); 
+0

J'ai essayé d'utiliser Path2D.Double, mais le problème est que la dernière extrémité du polygone suivra ma souris depuis le dernier endroit où j'ai cliqué, et même en utilisant le Path2D.Double, il a semblé réagir de la même manière que le dessin le polygone avec le premier et le dernier point n'étant pas égaux, java dessine une lingue entre eux de toute façon. Je vais essayer à nouveau et voir si j'ai regardé quelque chose. – heater

3

Eh bien, j'ai complètement manqué une méthode.

g.drawPolyline(int[] xCoords, int[] yCoords, int numPoints) 

Cela a résolu mon problème.