Non, il n'y a pas possibilité d'ajouter des bordures aux formes 3D, mais vous pouvez utiliser cyllinders très mince à la place (ne fonctionne que pour les boîtes bien):
public void createBoxLines(double contW, double contH, double contD, double x, double y, double z) {
//You call this method to create a box with a size and location you put in
//This method calls the createLine method for all the sides of your rectangle
Point3D p1 = new Point3D(x, y, z);
Point3D p2 = new Point3D(contW + x, y, z);
Point3D p3 = new Point3D(x, contH + y, z);
Point3D p4 = new Point3D(contW + x, contH + y, z);
createLine(p1, p2);
createLine(p1, p3);
createLine(p3, p4);
createLine(p2, p4);
Point3D p5 = new Point3D(x, y, contD + z);
Point3D p6 = new Point3D(contW + x, y, contD + z);
Point3D p7 = new Point3D(x, contH + y, contD + z);
Point3D p8 = new Point3D(contW + x, contH + y, contD + z);
createLine(p5, p6);
createLine(p5, p7);
createLine(p7, p8);
createLine(p6, p8);
createLine(p1, p5);
createLine(p2, p6);
createLine(p3, p7);
createLine(p4, p8);
}
double strokewidth = 1;
public void createLine(Point3D origin, Point3D target) {
//creates a line from one point3d to another
Point3D yAxis = new Point3D(0, 1, 0);
Point3D diff = target.subtract(origin);
double height = diff.magnitude();
Point3D mid = target.midpoint(origin);
Translate moveToMidpoint = new Translate(mid.getX(), mid.getY(), mid.getZ());
Point3D axisOfRotation = diff.crossProduct(yAxis);
double angle = Math.acos(diff.normalize().dotProduct(yAxis));
Rotate rotateAroundCenter = new Rotate(-Math.toDegrees(angle), axisOfRotation);
Cylinder line = new Cylinder(strokewidth, height);
line.getTransforms().addAll(moveToMidpoint, rotateAroundCenter);
myGroup.getChildren().add(line);
}
La méthode createLine peut être utilisé séparément pour faire des lignes entre différents points. Je ne peux pas fournir beaucoup de commentaires pour cette méthode, parce que j'ai essentiellement copié à partir d'un blog. Bien que j'ai du mal à trouver ce blog à nouveau.
Je suppose que vous ne parlez pas de dessiner des wireframes en utilisant 'drawMode'' DrawMode.LINE' ??? – fabian
Vous ne pouvez pas vraiment ajouter une bordure à un Shape3D arbitraire dans JavaFX via l'API. – Birdasaur
Vous pouvez créer un second maillage qui trace essentiellement les sommets du premier maillage en utilisant un algorithme comme l'algorithme FXyz3d.org PolyLine3D. Cela créerait essentiellement une structure de squelette comme un seul maillage. Quel que soit l'algorithme que vous avez implémenté, vous devez imiter le motif d'enroulement du maillage d'origine dans une certaine mesure. Cela devrait probablement être personnalisé pour un maillage particulier. Je ne suis pas sûr qu'il serait possible d'avoir un algorithme de traçage générique comme ça. (au moins dans JavaFX 3D) – Birdasaur