private void initListeners() { ValueChangedListener listener = (lastValue, newValue, source) -> { if (newValue != lastValue) { control.showOrientationCross(showOrientationcross.isYesSelected()); control.setDrawMode(interpolateValues.isYesSelected() ? DrawMode.FILL : DrawMode.LINE); control.setLeftWallVisible(showLeftWall.isYesSelected()); control.setRightWallVisible(showRightWall.isYesSelected()); control.setTopWallVisible(showTopWall.isYesSelected()); control.setBottomWallVisible(showBottomWall.isYesSelected()); control.setFrontWallVisible(showFrontWall.isYesSelected()); control.setBackWallVisible(showBackWall.isYesSelected()); control.activateDynamicWalls(dynamicWalls.isYesSelected()); updateControls(); } }; dynamicWalls.addValueChangedListener(listener); showOrientationcross.addValueChangedListener(listener); interpolateValues.addValueChangedListener(listener); showLeftWall.addValueChangedListener(listener); showRightWall.addValueChangedListener(listener); showTopWall.addValueChangedListener(listener); showBottomWall.addValueChangedListener(listener); showFrontWall.addValueChangedListener(listener); showBackWall.addValueChangedListener(listener); }
@Override protected Group buildGroup() { mb = new MeshBuilder(); triangleMesh = mb.getTriangleMesh(); meshView = new MeshView(triangleMesh); material = new PhongMaterial(); material.setDiffuseColor(Color.LIGHTGRAY); material.setSpecularColor(Color.rgb(30, 30, 30)); meshView.setMaterial(material); //Set Wireframe mode meshView.setDrawMode(DrawMode.FILL); meshView.setCullFace(CullFace.BACK); meshView.setScaleX(SCALE); meshView.setScaleY(SCALE); meshView.setScaleZ(SCALE); grp = new Group(meshView); return grp; }
/** * Set all the MeshViews in the group to the given draw mode, as well as the * children of any child groups. * * @param group * The group whose children will have their draw modes set. * @param mode * The mode to be set to the group's children. */ private void setMode(Group group, DrawMode mode) { // Handle each of the group's children for (Node node : group.getChildren()) { // If the node is a mesh view, set its material if (node.getClass() == MeshView.class) { ((MeshView) node).setDrawMode(mode); } // Otherwise, recursively handle the child group else if (node.getClass() == Group.class) { setMode((Group) node, mode); } } }
public KnotMesh(double majorRadius, double minorRadius, double wireRadius, double p, double q, int rDivs, int tDivs, int lengthCrop, int wireCrop) { setMajorRadius(majorRadius); setMinorRadius(minorRadius); setWireRadius(wireRadius); setP(p); setQ(q); setLengthDivisions(rDivs); setWireDivisions(tDivs); setLengthCrop(lengthCrop); setWireCrop(wireCrop); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public IcosahedronMesh(int level, float diameter){ setLevel(level); setDiameter(diameter); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); diameterProperty().addListener((obs,f0,f1)->{ if(mesh!=null && f0!=null && f1!=null && f0.floatValue()>0 && f1.floatValue()>0){ updateVertices(f1.floatValue()/f0.floatValue()); } }); levelProperty().addListener((obs,i0,i1)->{ if(mesh!=null && i1!=null && i1.intValue()>=0){ updateMesh(); } }); }
public CurvedSpringMesh(double majorRadius, double minorRadius, double wireRadius, double pitch, double length, int rDivs, int tDivs, int lengthCrop, int wireCrop) { setMajorRadius(majorRadius); setMinorRadius(minorRadius); setWireRadius(wireRadius); setPitch(pitch); setLength(length); setLengthDivisions(rDivs); setWireDivisions(tDivs); setLengthCrop(lengthCrop); setWireCrop(wireCrop); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public SpringMesh(double meanRadius, double wireRadius, double pitch, double length, int rDivs, int tDivs, int lengthCrop, int wireCrop) { setMeanRadius(meanRadius); setWireRadius(wireRadius); setPitch(pitch); setLength(length); factor=length/pitch; setLengthDivisions(rDivs); setWireDivisions(tDivs); setLengthCrop(lengthCrop); setWireCrop(wireCrop); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
@Override public Group testObject3D() { Group group = new Group(); TetrahedraMesh tetra = new TetrahedraMesh(10, 7, null); // cylinder = new PrismMesh(0.2,2,3); //,new Point3D(-5,5,0),new // Point3D(0,0,5)); tetra.setDrawMode(DrawMode.LINE); tetra.setCullFace(CullFace.NONE); // NONE // cylinder.setTextureModeNone(Color.ROYALBLUE); // IMAGE // tetra.setTextureModeImage(getClass().getResource("res/steel-mesh.jpg").toExternalForm()); // tetra.setTextureModeVertices1D(6, t->t); // cylinder.setColorPalette(ColorPalette.GREEN); // DENSITY tetra.setTextureModeVertices3D(1530, p -> p.magnitude()); // cylinder.setTextureModeVertices3D(1530,p->(double)cylinder.unTransform(p).magnitude()); // FACES // tetra.setTextureModeFaces(1530); group.getChildren().add(tetra); return group; }
private void createPlane(double length) { Box xzPlane = new Box(length, PLANE_THICKNESS, length); xzPlane.setDrawMode(DrawMode.LINE); xzPlane.setTranslateX(length / 2.0); xzPlane.setTranslateZ(length / 2.0); Box xyPlane = new Box(length, length, PLANE_THICKNESS); xyPlane.setDrawMode(DrawMode.LINE); xyPlane.setTranslateX(length / 2.0); xyPlane.setTranslateY(length / 2.0); Box yzPlane = new Box(PLANE_THICKNESS, length, length); yzPlane.setDrawMode(DrawMode.LINE); yzPlane.setTranslateY(length / 2.0); yzPlane.setTranslateZ(length / 2.0); this.group.getChildren().addAll(xzPlane, xyPlane, yzPlane); }
/** * Construct a new MultiLine3D object. * * @param lines list of lines */ public MultiLine3D(List<Line3D> lines) { lineMaterial.setDiffuseColor(color); lineMaterial.setSpecularColor(color); //The MeshView allows you to control how the TriangleMesh is rendered meshView.setDrawMode(DrawMode.FILL); //Fill so that the line shows width // meshView.setDrawMode(DrawMode.LINE); // only show lines meshView.setCullFace(CullFace.NONE); // no culling (backs are black) meshView.setMaterial(lineMaterial); this.getChildren().add(meshView); // add dummy Texture Coordinate mesh.getTexCoords().addAll(0, 0); setDepthTest(DepthTest.INHERIT); if (!lines.isEmpty()) { refresh(lines); } }
private void updateControlPanel() { if (controlPanel != null) { SwingUtilities.invokeLater(() -> { controlPanel.setDynamicWalls(dynamicWallsEnabled); controlPanel.setLeftWallVisible(cube.isLeftWallVisible()); controlPanel.setRightWallVisible(cube.isRightWallVisible()); controlPanel.setTopWallVisible(cube.isTopWallVisible()); controlPanel.setBottomWallVisible(cube.isBottomWallVisible()); controlPanel.setFrontWallVisible(cube.isFrontWallVisible()); controlPanel.setBackWallVisible(cube.isBackWallVisible()); controlPanel.setInterpolateValues(drawMode == DrawMode.FILL); controlPanel.setShowOrientationCross(axisOrientation.isVisible()); }); } }
@Override public void setDrawMode(final DrawMode mode) { new GetAction() { @Override public void run(Object... os) throws Exception { getShapesApp().setDrawMode(mode); } }.dispatch(Root.ROOT.getEnvironment()); }
/** * Test that the vertex can be drawn in wireframe mode */ @Test @Ignore public void checkWireframe() { // Create a view for a vertex FXVertexView view = new FXVertexView(new Vertex(0, 0, 0)); // The view should start off opaque assertFalse(view.isWireframe()); // Make the view transparent view.setWireframeMode(true); // Check that the transparency flag is set assertTrue(view.isWireframe()); // Whether a sphere shape has been found while searching the JavaFX // node's children. boolean sphereFound = false; // Get the group containing the node Representation<Group> representation = view.getRepresentation(); // Search all of the node's children for (Node node : (representation.getData()).getChildren()) { // If the child is a 3D shape, it should be transparent if (node instanceof Shape3D) { assertTrue(((Shape3D) node).getDrawMode() == DrawMode.LINE); sphereFound = true; break; } } // A child sphere corresponding to the vertex should have been found assertTrue(sphereFound); }
/** * <p> * Creates scene elements that aren't meant to be manipulated by the user * (markers, camera, etc.) * </p> */ protected void setupSceneInternals(Group parent) { // Create scene plane for frame of reference. Box box = new Box(1000, 0, 1000); box.setMouseTransparent(true); box.setDrawMode(DrawMode.LINE); box.setMaterial(new PhongMaterial(Color.ANTIQUEWHITE)); AmbientLight ambientLight = new AmbientLight(Color.rgb(100, 100, 100)); PointLight light1 = new PointLight(Color.ANTIQUEWHITE); light1.setMouseTransparent(true); light1.setTranslateY(-350); PointLight light2 = new PointLight(Color.ANTIQUEWHITE); light2.setMouseTransparent(true); light2.setTranslateZ(350); PointLight light3 = new PointLight(Color.ANTIQUEWHITE); light3.setMouseTransparent(true); light3.setTranslateZ(-350); PointLight light4 = new PointLight(Color.ANTIQUEWHITE); light4.setMouseTransparent(true); light4.setTranslateZ(350); TransformGizmo gizmo = new TransformGizmo(1000); gizmo.showHandles(false); parent.getChildren().addAll(gizmo, box, light1, light2, light3, light4, ambientLight); }
/** * Check that the decorator will set the object's material correctly. */ @Test @Ignore public void checkMesh() { // Create a render object Shape shape = GeometryFactory.eINSTANCE.createShape(); FXRenderObject object = new FXRenderObject(shape, new FXMeshCache()); // Create an opacity decorator for it FXWireframeOption decorator = new FXWireframeOption(object); // Set the shape as a wireframe object.setProperty(WireframeOptionImpl.PROPERTY_NAME_WIREFRAME, true); // The child's draw mode should have been changed assertTrue(((MeshView) object.getMesh().getChildren().get(0)) .getDrawMode() == DrawMode.LINE); // Make the shape solid again and check that it was reset object.setProperty(WireframeOptionImpl.PROPERTY_NAME_WIREFRAME, false); assertTrue(((MeshView) object.getMesh().getChildren().get(0)) .getDrawMode() == DrawMode.FILL); // Sending an update from the shape should also set the wireframe mode shape.changeDecoratorProperty( WireframeOptionImpl.PROPERTY_NAME_WIREFRAME, true); assertTrue(((MeshView) object.getMesh().getChildren().get(0)) .getDrawMode() == DrawMode.LINE); // Deactivating the option should leave the object filled in decorator.setActive(false); assertTrue(((MeshView) object.getMesh().getChildren().get(0)) .getDrawMode() == DrawMode.FILL); }
@Override protected void setupSceneInternals(Group parent) { // Create scene plane for frame of reference. plane = new Box(1000, 0, 1000); plane.setMouseTransparent(true); plane.setDrawMode(DrawMode.LINE); plane.setMaterial(new PhongMaterial(Color.ANTIQUEWHITE)); AmbientLight ambientLight = new AmbientLight(Color.rgb(100, 100, 100)); PointLight light1 = new PointLight(Color.ANTIQUEWHITE); light1.setMouseTransparent(true); light1.setTranslateY(-350); PointLight light2 = new PointLight(Color.ANTIQUEWHITE); light2.setMouseTransparent(true); light2.setTranslateZ(350); PointLight light3 = new PointLight(Color.ANTIQUEWHITE); light3.setMouseTransparent(true); light3.setTranslateZ(-350); PointLight light4 = new PointLight(Color.ANTIQUEWHITE); light4.setMouseTransparent(true); light4.setTranslateZ(350); axes = new TransformGizmo(1000); axes.showHandles(false); parent.getChildren().addAll(axes, plane, light1, light2, light3, light4, ambientLight); }
@Override public void modify(Group element) { boolean wireframe = (boolean) parent .getProperty(PROPERTY_NAME_WIREFRAME); // Set the group's children to the correct drawing mode. if (!wireframe) { setMode(element, DrawMode.FILL); } else { setMode(element, DrawMode.LINE); } }
@Override public void setWireframeMode(boolean on) { wireframe = on; // Set the mesh to the correct draw mode if (mesh != null) { if (on) { mesh.setDrawMode(DrawMode.LINE); } else { mesh.setDrawMode(DrawMode.FILL); } } }
/** * The default constructor. * * @param model * The model which this view will display */ public FXVertexView(Vertex model) { this(); // Set the node's name node.setId(model.getProperty(MeshProperty.NAME)); // Get the model's transformation Transformation localTransform = model.getTransformation(); // Flatten the sphere into a circle localTransform.setScale(1, 1, 0.75); // Set the node's transformation node.getTransforms().setAll(Util.convertTransformation(localTransform)); // Create a Shape3D for the model mesh = new Sphere(1); // Set the sphere to the correct wireframe and opacity states if (transparent) { mesh.setOpacity(0d); } if (wireframe) { mesh.setDrawMode(DrawMode.LINE); } // Set the sphere to be the constructing material by default mesh.setMaterial(constructingMaterial); node.getChildren().add(mesh); }
@Override public void setWireframeMode(boolean on) { wireframe = on; // Set the mesh to the correct draw mode if (mesh != null) { if (wireframe) { mesh.setDrawMode(DrawMode.LINE); } else { mesh.setDrawMode(DrawMode.FILL); } } }
public CuboidMesh(double width, double height, double depth, int level, Point3D center){ setWidth(width); setHeight(height); setDepth(depth); setLevel(level); setCenter(center); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public SurfacePlotMesh(Function<Point2D,Number> function, double rangeX, double rangeY, int divisionsX, int divisionsY, double functionScale) { setFunction2D(function); setRangeX(rangeX); setRangeY(rangeY); setDivisionsX(divisionsX); setDivisionsY(divisionsY); setFunctionScale(functionScale); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public PrismMesh(double radius, double height, int level, Point3D pIni, Point3D pEnd){ setAxisOrigin(pIni==null?new Point3D(0,(float)height/2f,0):pIni); setAxisEnd(pEnd==null?new Point3D(0,-(float)height/2f,0):pEnd); setRadius(radius); setHeight(getAxisEnd().substract(getAxisOrigin()).magnitude()); setLevel(level); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public SegmentedTorusMesh(int rDivs, int tDivs, int crop, double majorRadius, double minorRadius) { setMajorRadiusDivisions(rDivs); setMinorRadiusDivisions(tDivs); setMajorRadiusCrop(crop); setMajorRadius(majorRadius); setMinorRadius(minorRadius); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public BezierMesh(BezierHelper spline, double wireRadius, int rDivs, int tDivs, int lengthCrop, int wireCrop) { setSpline(spline); setWireRadius(wireRadius); setLengthDivisions(rDivs); setWireDivisions(tDivs); setLengthCrop(lengthCrop); setWireCrop(wireCrop); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public SegmentedSphereMesh(int tDivs, int cropX, int cropY, double radius, Point3D center) { setRadiusDivisions(tDivs); setRadiusCropX(cropX); setRadiusCropY(cropY); setRadius(radius); setzOffset(1); setCenter(center); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public FrustumMesh(double majorRadius, double minorRadius, double height, int level, Point3D pIni, Point3D pEnd){ setAxisOrigin(pIni==null?new Point3D(0,(float)height/2f,0):pIni); setAxisEnd(pEnd==null?new Point3D(0,-(float)height/2f,0):pEnd); setMajorRadius(majorRadius); setMinorRadius(minorRadius); setLevel(level); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
public TetrahedraMesh(double height, int level, Point3D center){ setHeight(height); setLevel(level); setCenter(center); updateMesh(); setCullFace(CullFace.BACK); setDrawMode(DrawMode.FILL); setDepthTest(DepthTest.ENABLE); }
@Override public Group testObject3D() { Group group = new Group(); ClothMesh cloth = new ClothMesh(); cloth.setPerPointMass(10); cloth.setBendStrength(0.5); cloth.setStretchStrength(1.0); cloth.setShearStrength(0.55); cloth.setDrawMode(DrawMode.LINE); cloth.setCullFace(CullFace.NONE); // cloth.setDiffuseMap(new Image("https://kenai.com/attachments/wiki_images/duke/Duke3DprogressionSmall.jpg")); cloth.setSpecularPower(5); PointLight light2 = new PointLight(Color.GAINSBORO); light2.setTranslateZ(-1500); PointLight light3 = new PointLight(Color.AZURE); light3.setTranslateZ(2500); Group g = new Group(); g.getChildren().addAll(cloth, light2, light3); group.getChildren().add(g); group.setPickOnBounds(false); cloth.startSimulation(); return group; }
protected static Group aBunchOfCapsules() { Group capsuleGroup = new Group(); for(int i = 0; i < 50; i++) { Random r = new Random(); float randomRadius = (float) ((r.nextFloat() * 100) + 25); float randomHeight = (float) ((r.nextFloat() * 300) + 75); Color randomColor = new Color(r.nextDouble(), r.nextDouble(), r.nextDouble(), r.nextDouble()); Capsule cap = new Capsule(randomRadius, randomHeight, randomColor); cap.setEmissiveLightingColor(randomColor); cap.setEmissiveLightingOn(r.nextBoolean()); cap.setDrawMode(r.nextBoolean() ? DrawMode.FILL : DrawMode.LINE); double translationX = Math.random() * 1024 * 1.95; if(Math.random() >= 0.5) { translationX *= -1; } double translationY = Math.random() * 1024 * 1.95; if(Math.random() >= 0.5) { translationY *= -1; } double translationZ = Math.random() * 1024 * 1.95; if(Math.random() >= 0.5) { translationZ *= -1; } Translate translate = new Translate(translationX, translationY, translationZ); Rotate rotateX = new Rotate(Math.random() * 360, Rotate.X_AXIS); Rotate rotateY = new Rotate(Math.random() * 360, Rotate.Y_AXIS); Rotate rotateZ = new Rotate(Math.random() * 360, Rotate.Z_AXIS); cap.getTransforms().addAll(translate, rotateX, rotateY, rotateZ); capsuleGroup.getChildren().add(cap); } return capsuleGroup; }
protected static Group aBunchOfCones() { Group coneGroup = new Group(); for (int i = 0; i < 100; i++) { Random r = new Random(); //A lot of magic numbers in here that just artificially constrain the math float randomRadius = (float) ((r.nextFloat()*100) + 25); float randomHeight = (float) ((r.nextFloat()*300)+ 75); int randomDivisions = (int) ((r.nextFloat()*50) + 5); Color randomColor = new Color(r.nextDouble(), r.nextDouble(), r.nextDouble(), r.nextDouble()); Cone cone = new Cone(randomDivisions, randomRadius, randomHeight, randomColor); cone.setEmissiveLightingColor(randomColor); cone.setEmissiveLightingOn(r.nextBoolean()); cone.setDrawMode(r.nextBoolean() ? DrawMode.FILL : DrawMode.LINE); double translationX = Math.random() * 1024; if (Math.random() >= 0.5) { translationX *= -1; } double translationY = Math.random() * 1024; if (Math.random() >= 0.5) { translationY *= -1; } double translationZ = Math.random() * 1024; if (Math.random() >= 0.5) { translationZ *= -1; } Translate translate = new Translate(translationX, translationY, translationZ); Rotate rotateX = new Rotate(Math.random() * 360, Rotate.X_AXIS); Rotate rotateY = new Rotate(Math.random() * 360, Rotate.Y_AXIS); Rotate rotateZ = new Rotate(Math.random() * 360, Rotate.Z_AXIS); cone.getTransforms().addAll(translate, rotateX, rotateY, rotateZ); coneGroup.getChildren().add(cone); } return coneGroup; }
protected static Group aBunchOfSpheroid() { Group spheroidGroup = new Group(); for(int i = 0; i < 50; i++) { Random r = new Random(); // A lot of magic numbers in here that just artificially constrain // the math float randomMajorRadius = (float) ((r.nextFloat() * 300) + 50); float randomMinorRadius = (float) ((r.nextFloat() * 300) + 50); int randomDivisions = (int) ((r.nextFloat() * 64) + 1); Color randomColor = new Color(r.nextDouble(), r.nextDouble(), r.nextDouble(), r.nextDouble()); Spheroid sm = new Spheroid(randomDivisions, randomMajorRadius, randomMinorRadius, randomColor); sm.setDrawMode(DrawMode.LINE); double translationX = Math.random() * 1024 * 1.95; if(Math.random() >= 0.5) { translationX *= -1; } double translationY = Math.random() * 1024 * 1.95; if(Math.random() >= 0.5) { translationY *= -1; } double translationZ = Math.random() * 1024 * 1.95; if(Math.random() >= 0.5) { translationZ *= -1; } Translate translate = new Translate(translationX, translationY, translationZ); Rotate rotateX = new Rotate(Math.random() * 360, Rotate.X_AXIS); Rotate rotateY = new Rotate(Math.random() * 360, Rotate.Y_AXIS); Rotate rotateZ = new Rotate(Math.random() * 360, Rotate.Z_AXIS); sm.getTransforms().addAll(translate, rotateX, rotateY, rotateZ); spheroidGroup.getChildren().add(sm); } return spheroidGroup; }