Java 类javafx.scene.shape.Cylinder 实例源码
项目:openjfx-8u-dev-tests
文件:ShapesPickingAbstractApp.java
@Override
protected void initKeys(Scene scene) {
scene.addEventHandler(KeyEvent.ANY, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
switch (t.getText()) {
case "1":
setShape(Shape.Sphere);
break;
case "2":
setShape(Shape.Box);
break;
case "3":
setShape(Shape.Cylinder);
break;
}
}
});
}
项目:openjfx-8u-dev-tests
文件:LightScopeTestApp.java
private Group buildMultipleShapes3D() {
Box box = new Box(100, 100, 100);
Sphere sphere = new Sphere(50);
Cylinder cyl = new Cylinder(50, 100);
Cone cone = new Cone(50, 100);
box.setTranslateX(-100);
box.setTranslateY(-150);
sphere.setTranslateX(100);
sphere.setTranslateY(-50);
cyl.setTranslateX(-100);
cyl.setTranslateY(50);
cone.getMesh().setTranslateX(100);
cone.getMesh().setTranslateY(150);
nodes.add(box);
nodes.add(sphere);
nodes.add(cyl);
nodes.add(cone.getMesh());
return new Group(box, sphere, cyl, cone.getMesh());
}
项目:singa
文件:StructureViewer.java
private Cylinder createCylinderConnecting(Vector3D source, Vector3D target) {
Vector3D delta = target.subtract(source);
double distance = source.distanceTo(target);
Cylinder bond = new Cylinder(0.4, distance, 10);
Vector3D newLocation = delta.divide(2).add(source);
bond.setTranslateX(newLocation.getX());
bond.setTranslateY(newLocation.getY());
bond.setTranslateZ(newLocation.getZ());
// phi
bond.getTransforms().add(new Rotate(90 + Math.toDegrees(Math.atan2(delta.getY(), delta.getX())), Rotate.Z_AXIS));
// theta
bond.getTransforms().add(new Rotate(90 + Math.toDegrees(Math.acos(delta.getZ() / distance)), Rotate.X_AXIS));
return bond;
}
项目:FX3DAndroid
文件:ScadaApplication.java
private Group makeBaseTube(double height, double r1, double r2) {
// horizontal tube with heads
double half = height / 2;
Cylinder t0 = new Cylinder(r1, height);
Cylinder t1 = new Cylinder(r2, 0.12);
Cylinder t2 = new Cylinder(r2, 0.12);
Cylinder t3 = new Cylinder(r2, 0.12);
Cylinder t4 = new Cylinder(r2, 0.12);
t0.setMaterial(material);
t1.setMaterial(material);
t2.setMaterial(material);
t3.setMaterial(material);
t4.setMaterial(material);
t1.setTranslateY(half + 0.13);
t2.setTranslateY(half);
t3.setTranslateY(-half + 0.7);
t4.setTranslateY(-half + 0.57);
return new Group(t0, t1, t2, t3, t4);
}
项目:FX3DAndroid
文件:ScadaApplication.java
public CSG servoHeadMale(double headHeight, double headDiameter, int toothCount, double toothHeight,
double toothWidth, double toothLength) {
double clear = 0.3;
double radius = headDiameter / 2 - toothHeight + clear;
CSG cylinder = new eu.mihosoft.vrl.v3d.Cylinder(new Vector3d(0, 0, 0), new Vector3d(0, 0, headHeight),
radius + 0.03, toothCount * 2).toCSG();
CSG t = Extrude.points(new Vector3d(0, 0, headHeight), new Vector3d(-toothLength / 2, 0),
new Vector3d(-toothWidth / 2, toothHeight), new Vector3d(toothWidth / 2, toothHeight),
new Vector3d(toothLength / 2, 0));
double delta = 360.0 / toothCount;
CSG result = makeTooth(radius, 0, t);
for (int i = 1; i < toothCount; i++) {
CSG tooth = makeTooth(radius, i * delta, t);
result = result.union(tooth);
}
return result.union(cylinder);
}
项目:RiggedHand
文件:Bone.java
public Bone(double scale, Point3D posJoint) {
Box origin=new Box(10,10,10);
origin.setMaterial(new PhongMaterial(Color.ORANGE));
Cylinder bone = new Cylinder(5, posJoint.magnitude()/scale);
double angle = Math.toDegrees(Math.acos((new Point3D(0,1,0)).dotProduct(posJoint)/posJoint.magnitude()));
Point3D axis = (new Point3D(0,1,0)).crossProduct(posJoint);
bone.getTransforms().addAll(new Rotate(angle,0,0,0,axis), new Translate(0,posJoint.magnitude()/2d/scale, 0));
bone.setMaterial(new PhongMaterial(Color.CADETBLUE));
Sphere end = new Sphere(6);
end.getTransforms().addAll(new Translate(posJoint.getX()/scale,posJoint.getY()/scale,posJoint.getZ()/scale));
end.setMaterial(new PhongMaterial(Color.YELLOW));
getChildren().addAll(origin, bone, end);
getTransforms().add(new Scale(scale, scale, scale));
}
项目:RiggedHand
文件:Axes.java
public Axes(double scale) {
Cylinder axisX = new Cylinder(3, 60);
axisX.getTransforms().addAll(new Rotate(90, Rotate.Z_AXIS), new Translate(0, 30, 0));
axisX.setMaterial(new PhongMaterial(Color.RED));
Cylinder axisY = new Cylinder(3, 60);
axisY.getTransforms().add(new Translate(0, 30, 0));
axisY.setMaterial(new PhongMaterial(Color.GREEN));
Cylinder axisZ = new Cylinder(3, 60);
axisZ.setMaterial(new PhongMaterial(Color.BLUE));
axisZ.getTransforms().addAll(new Rotate(90, Rotate.X_AXIS), new Translate(0, 30, 0));
getChildren().addAll(axisX, axisY, axisZ);
getTransforms().add(new Scale(scale, scale, scale));
}
项目:openjfx-8u-dev-tests
文件:DepthTestApp.java
@Override
protected Shape3D[] getShapes() {
Shape3D[] result = {
new Cylinder(1.3, 2),
new Cylinder(1.3, 2)
};
result[1].setTranslateX(2);
result[0].setTranslateX(-1);
return result;
}
项目:openjfx-8u-dev-tests
文件:IntersectionTestApp.java
@Override
protected Shape3D[] getShapes() {
Shape3D[] result = {
new Box(2, 2, 2),
new Cylinder(1, 4)
};
result[0].setTranslateX(1);
result[0].setRotationAxis(Rotate.Y_AXIS);
result[0].setRotate(45);
result[1].setRotationAxis(Rotate.X_AXIS);
result[1].setRotate(45);
return result;
}
项目:openjfx-8u-dev-tests
文件:IntersectionTestApp.java
@Override
protected Shape3D[] getShapes() {
Shape3D[] result = {
new Cylinder(1, 4),
new Cylinder(1, 4)
};
result[0].setTranslateX(1);
result[0].setRotationAxis(Rotate.Y_AXIS);
result[0].setRotate(45);
result[1].setRotationAxis(Rotate.X_AXIS);
result[1].setRotate(45);
return result;
}
项目:openjfx-8u-dev-tests
文件:IntersectionTestApp.java
@Override
protected Shape3D[] getShapes() {
Shape3D[] result = {
new Cylinder(1.5, 4),
new Sphere(1.5)
};
result[1].setTranslateX(1);
return result;
}
项目:openjfx-8u-dev-tests
文件:LightScopeTestApp.java
public void initTestCase(TestCaseType type) {
if (isThereTestCase) {
root.getChildren().clear();
nodes.clear();
lights.clear();
movers.clear();
}
switch (type) {
case SINGLE_SPHERE_CASE:
root.getChildren().add(buildSingle(new Sphere(50)));
break;
case SINGLE_BOX_CASE:
root.getChildren().add(buildSingle(new Box(100, 100, 100)));
break;
case SINGLE_CYLINDER_CASE:
root.getChildren().add(buildSingle(new Cylinder(50, 100)));
break;
case SINGLE_MESH_CASE:
Cone cone = new Cone(50, 100);
root.getChildren().add(buildSingle(cone.getMesh()));
break;
case MULTIPLE_SHAPE3D_CASE:
root.getChildren().add(buildMultipleShapes3D());
break;
case MULTIPLE_SHAPE_CASE:
root.getChildren().add(buildMultipleShapes());
break;
}
isThereTestCase = true;
}
项目:openjfx-8u-dev-tests
文件:LightScopeTestApp.java
private Group buildMultipleShapes() {
Box box = new Box(100, 100, 100);
Sphere sphere = new Sphere(50);
Cylinder cyl = new Cylinder(50, 100);
Cone cone = new Cone(50, 100);
Rectangle rect = new Rectangle(50, 50);
rect.setFill(Color.WHITESMOKE);
box.setTranslateX(-100);
box.setTranslateY(-150);
sphere.setTranslateX(100);
sphere.setTranslateY(-50);
cyl.setTranslateX(-100);
cyl.setTranslateY(50);
cone.getMesh().setTranslateX(100);
cone.getMesh().setTranslateY(150);
rect.setTranslateX(-25);
rect.setTranslateY(-25);
rect.setRotationAxis(Rotate.Y_AXIS);
rect.setRotate(45);
nodes.add(box);
nodes.add(sphere);
nodes.add(cyl);
nodes.add(cone.getMesh());
nodes.add(rect);
return new Group(box, sphere, cyl, cone.getMesh(), rect);
}
项目:fr.xs.jtk
文件:Histogram.java
private Node createDefaultNode(double barWidth, double barHeight) {
switch (defaultNodeType) {
case CYLINDER:
return new Cylinder(barWidth / 2, barHeight);
case CUBE:
return new Box(barWidth, barHeight, barWidth);
default:
return new Box(barWidth, barHeight, barWidth);
}
}
项目:fr.xs.jtk
文件:Axes.java
public Axes(double scale) {
Cylinder axisX = new Cylinder(3, 60);
axisX.getTransforms().addAll(new Rotate(90, Rotate.Z_AXIS), new Translate(0, 30, 0));
axisX.setMaterial(new PhongMaterial(Color.RED));
Cylinder axisY = new Cylinder(3, 60);
axisY.getTransforms().add(new Translate(0, 30, 0));
axisY.setMaterial(new PhongMaterial(Color.GREEN));
Cylinder axisZ = new Cylinder(3, 60);
axisZ.setMaterial(new PhongMaterial(Color.BLUE));
axisZ.getTransforms().addAll(new Rotate(90, Rotate.X_AXIS), new Translate(0, 30, 0));
getChildren().addAll(axisX, axisY, axisZ);
getTransforms().add(new Scale(scale, scale, scale));
}
项目:FXyzLib
文件:Histogram.java
private Node createDefaultNode(double barWidth, double barHeight) {
switch (defaultNodeType) {
case CYLINDER:
return new Cylinder(barWidth / 2, barHeight);
case CUBE:
return new Box(barWidth, barHeight, barWidth);
default:
return new Box(barWidth, barHeight, barWidth);
}
}
项目:FXyzLib
文件:Axes.java
public Axes(double scale) {
Cylinder axisX = new Cylinder(3, 60);
axisX.getTransforms().addAll(new Rotate(90, Rotate.Z_AXIS), new Translate(0, 30, 0));
axisX.setMaterial(new PhongMaterial(Color.RED));
Cylinder axisY = new Cylinder(3, 60);
axisY.getTransforms().add(new Translate(0, 30, 0));
axisY.setMaterial(new PhongMaterial(Color.GREEN));
Cylinder axisZ = new Cylinder(3, 60);
axisZ.setMaterial(new PhongMaterial(Color.BLUE));
axisZ.getTransforms().addAll(new Rotate(90, Rotate.X_AXIS), new Translate(0, 30, 0));
getChildren().addAll(axisX, axisY, axisZ);
getTransforms().add(new Scale(scale, scale, scale));
}
项目:javafx-dpi-scaling
文件:AdjusterTest.java
@Test
public void testGetCylinderAdjuster() {
Adjuster adjuster = Adjuster.getAdjuster(Cylinder.class);
assertThat(adjuster, is(instanceOf(NodeAdjuster.class)));
assertThat(adjuster.getNodeClass(), is(sameInstance(Node.class)));
}
项目:FX3DAndroid
文件:Histogram.java
private Node createDefaultNode(double barWidth, double barHeight) {
switch (defaultNodeType) {
case CYLINDER:
return new Cylinder(barWidth / 2, barHeight);
case CUBE:
return new Box(barWidth, barHeight, barWidth);
default:
return new Box(barWidth, barHeight, barWidth);
}
}
项目:FX3DAndroid
文件:ScadaApplication.java
private Group makePump(double height, double r1, double r2, PhongMaterial headMaterial) {
double half = height / 2;
Cylinder t1 = new Cylinder(r1, height);
Cylinder t2 = new Cylinder(r2, 0.2);
Cylinder t3 = new Cylinder(r2, 0.2);
t2.setTranslateY(half);
t3.setTranslateY(-half);
t1.setMaterial(material);
t2.setMaterial(headMaterial);
t3.setMaterial(material);
return new Group(t1, t2, t3);
}
项目:FX3DAndroid
文件:ScadaApplication.java
private Group makePump1(double height, double r1, double r2, PhongMaterial headMaterial) {
double half = height / 2;
Cylinder t1 = new Cylinder(r1, height);
Cylinder t2 = new Cylinder(r2, 0.2);
t2.setTranslateY(half);
t1.setMaterial(material);
t2.setMaterial(headMaterial);
return new Group(t1, t2);
}
项目:openjfx-8u-dev-tests
文件:LodTestAbstractApp.java
@Override
public void handle(KeyEvent t) {
System.out.println(t.getText());
switch (t.getText()) {
case "1":
selectType(ShapeType.Box);
break;
case "2":
selectType(ShapeType.Cone);
break;
case "3":
selectType(ShapeType.Plane);
break;
case "4":
selectType(ShapeType.SemiSphere);
break;
case "5":
selectType(ShapeType.Sphere);
break;
case "6":
selectType(ShapeType.Cylinder);
break;
case "l":
setLight(true);
break;
case "k":
setLight(false);
break;
case "z":
moveObject(-100);
break;
case "x":
moveObject(100);
break;
case "c":
moveGroup(-100);
break;
case "v":
moveGroup(100);
break;
case "a":
moveCamera(-100);
break;
case "s":
moveCamera(100);
break;
case "d":
moveCameraGroup(-100);
break;
case "f":
moveCameraGroup(100);
break;
}
}
项目:diozero
文件:MqttListener.java
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setResizable(false);
Scene scene = new Scene(root, 1024, 800, true);
// Create and position camera
Camera camera = new PerspectiveCamera();
camera.getTransforms().addAll(
new Rotate(0, Rotate.Y_AXIS),
new Rotate(0, Rotate.X_AXIS),
new Translate(-500, -425, 1200));
scene.setCamera(camera);
scene.setFill(Paint.valueOf(Color.BLACK.toString()));
// Box
testObject = new Cylinder(10, 50);
testObject.setMaterial(new PhongMaterial(Color.RED));
testObject.getTransforms().addAll(new Translate(50, 0, 0));
TdsModelImporter model_importer = new TdsModelImporter();
model_importer.read(getClass().getResource("/models/SpaceLaunchSystem.3DS"));
Node[] nodes = model_importer.getImport();
model_importer.close();
Group rocket = new Group(nodes);
rocket.getTransforms().addAll(new Translate(0, 25, 0));
// Build the Scene Graph
root.getChildren().addAll(testObject, rocket);
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
System.out.println(event);
if (event.getEventType().equals(WindowEvent.WINDOW_CLOSE_REQUEST)) {
System.exit(0);
}
}
});
mqttClient.subscribe(MQTT_TOPIC_IMU + "/#");
}
项目:singa
文件:StructureViewer.java
private void addLeafBond(LeafSubstructure origin, OakBond bond) {
Cylinder bondShape = createCylinderConnecting(bond.getSource().getPosition(), bond.getTarget().getPosition());
bondShape.setMaterial(getMaterial(origin, bond));
moleculeGroup.getChildren().add(bondShape);
}
项目:singa
文件:StructureViewer.java
private void addChainBond(Chain origin, OakBond bond) {
Cylinder bondShape = createCylinderConnecting(bond.getSource().getPosition(), bond.getTarget().getPosition());
bondShape.setMaterial(getMaterial(origin, bond));
moleculeGroup.getChildren().add(bondShape);
}
项目:eavp
文件:FXLinearEdgeView.java
/**
* Creates a cylinder between the start and end points of the edge.
*
* @return A JavaFX Cylinder representing the given LinearEdgeComponent
*/
private Cylinder createShape(Edge edgeComponent) {
// If the edge does not have two vertices, a new shape cannot be created
if (edgeComponent.getEntitiesFromCategory(MeshCategory.VERTICES)
.size() != 2) {
return null;
}
// Get the scale the vertices are being drawn at
int scale = ((FXVertexController) edgeComponent
.getEntitiesFromCategory(MeshCategory.VERTICES).get(0))
.getApplicationScale();
// Get the edge's endpoints
double[] start = edgeComponent.getStartLocation();
double[] end = edgeComponent.getEndLocation();
for (int i = 0; i < 3; i++) {
start[i] = start[i] * scale;
end[i] = end[i] * scale;
}
// Create a cylinder situated at the edge's midpoint with the edge's
// length.
Cylinder edge = new Cylinder(.6,
Math.sqrt((Math.pow(start[0] - end[0], 2))
+ (Math.pow(start[1] - end[1], 2))
+ (Math.pow(start[2] - end[2], 2))));
edge.setTranslateX((start[0] + end[0]) / 2);
edge.setTranslateY((start[1] + end[1]) / 2);
edge.setTranslateZ((start[2] + end[2]) / 2);
// Get the angle between the two points
Point3D start3D = new Point3D(start[0], start[1], start[2]);
Point3D end3D = new Point3D(end[0], end[1], end[2]);
Point3D angle = end3D.subtract(start3D);
// Get the axis of rotation for the cylinder
Point3D axis = angle.crossProduct(0f, 1f, 0f);
// Calculate the number of degrees to rotate about the axis.
double rotationAmount = Math
.acos(angle.normalize().dotProduct(0, 1, 0));
// Apply the rotation to the cylinder
Rotate rotation = new Rotate(-Math.toDegrees(rotationAmount), axis);
edge.getTransforms().addAll(rotation);
return edge;
}
项目:fr.xs.jtk
文件:TesselationTest.java
@Override
public void start(Stage primaryStage) throws Exception {
final PhongMaterial red = new PhongMaterial(Color.RED);
final PhongMaterial green = new PhongMaterial(Color.GREEN);
final PhongMaterial blue = new PhongMaterial(Color.BLUE);
final Box cube = new Box(200, 200, 200);
cube.setLayoutX(150);
cube.setLayoutY(800);
cube.setDrawMode(DrawMode.LINE);
cube.setMaterial(red);
final Cylinder cylinder = new Cylinder(150, 50);
cylinder.setLayoutX(500);
cylinder.setLayoutY(800);
cylinder.setDrawMode(DrawMode.LINE);
cylinder.setMaterial(green);
final Sphere sphere = new Sphere(100);
sphere.setLayoutX(850);
sphere.setLayoutY(800);
sphere.setDrawMode(DrawMode.LINE);
sphere.setMaterial(blue);
final AmbientLight light = new AmbientLight(Color.WHITE);
final Pane root = new Pane();
root.setStyle("-fx-background-color: transparent;");
root.getChildren().addAll(cube, cylinder, sphere, light);
final int[] tesselations = {1, 5, 10, 50, 100};
for (int index = 0; index < tesselations.length; index++) {
final int dx = 1000 / tesselations.length;
final int tesselation = tesselations[index];
final Sphere tesselatedSphere = new Sphere(75, tesselation);
tesselatedSphere.setDrawMode(DrawMode.LINE);
root.getChildren().add(tesselatedSphere);
tesselatedSphere.setTranslateX(100 + dx * index);
tesselatedSphere.setTranslateY(400);
final Cylinder tesselatedCylinder = new Cylinder(75, 50, tesselation);
tesselatedCylinder.setDrawMode(DrawMode.LINE);
root.getChildren().add(tesselatedCylinder);
tesselatedCylinder.setTranslateX(100 + dx * index);
tesselatedCylinder.setTranslateY(100);
}
final Scene scene = new Scene(root, 1000, 1000);
scene.setFill(Color.BLACK);
scene.setCamera(new PerspectiveCamera());
primaryStage.setScene(scene);
primaryStage.setTitle("Test_Triangle");
primaryStage.show();
}
项目:3D-Game
文件:MoleculeSampleApp.java
private void buildMolecule() {
final PhongMaterial redMaterial = new PhongMaterial();
redMaterial.setDiffuseColor(Color.DARKRED);
redMaterial.setSpecularColor(Color.RED);
final PhongMaterial whiteMaterial = new PhongMaterial();
whiteMaterial.setDiffuseColor(Color.WHITE);
whiteMaterial.setSpecularColor(Color.LIGHTBLUE);
final PhongMaterial greyMaterial = new PhongMaterial();
greyMaterial.setDiffuseColor(Color.DARKGREY);
greyMaterial.setSpecularColor(Color.GREY);
// Molecule Hierarchy
// [*] moleculeXform
// [*] oxygenXform
// [*] oxygenSphere
// [*] hydrogen1SideXform
// [*] hydrogen1Xform
// [*] hydrogen1Sphere
// [*] bond1Cylinder
// [*] hydrogen2SideXform
// [*] hydrogen2Xform
// [*] hydrogen2Sphere
// [*] bond2Cylinder
Xform moleculeXform = new Xform();
Xform oxygenXform = new Xform();
Xform hydrogen1SideXform = new Xform();
Xform hydrogen1Xform = new Xform();
Xform hydrogen2SideXform = new Xform();
Xform hydrogen2Xform = new Xform();
Sphere oxygenSphere = new Sphere(40.0);
oxygenSphere.setMaterial(redMaterial);
Sphere hydrogen1Sphere = new Sphere(30.0);
hydrogen1Sphere.setMaterial(whiteMaterial);
hydrogen1Sphere.setTranslateX(0.0);
Sphere hydrogen2Sphere = new Sphere(30.0);
hydrogen2Sphere.setMaterial(whiteMaterial);
hydrogen2Sphere.setTranslateZ(0.0);
Cylinder bond1Cylinder = new Cylinder(5, 100);
bond1Cylinder.setMaterial(greyMaterial);
bond1Cylinder.setTranslateX(50.0);
bond1Cylinder.setRotationAxis(Rotate.Z_AXIS);
bond1Cylinder.setRotate(90.0);
Cylinder bond2Cylinder = new Cylinder(5, 100);
bond2Cylinder.setMaterial(greyMaterial);
bond2Cylinder.setTranslateX(50.0);
bond2Cylinder.setRotationAxis(Rotate.Z_AXIS);
bond2Cylinder.setRotate(90.0);
moleculeXform.getChildren().add(oxygenXform);
moleculeXform.getChildren().add(hydrogen1SideXform);
moleculeXform.getChildren().add(hydrogen2SideXform);
oxygenXform.getChildren().add(oxygenSphere);
hydrogen1SideXform.getChildren().add(hydrogen1Xform);
hydrogen2SideXform.getChildren().add(hydrogen2Xform);
hydrogen1Xform.getChildren().add(hydrogen1Sphere);
hydrogen2Xform.getChildren().add(hydrogen2Sphere);
hydrogen1SideXform.getChildren().add(bond1Cylinder);
hydrogen2SideXform.getChildren().add(bond2Cylinder);
hydrogen1Xform.setTx(100.0);
hydrogen2Xform.setTx(100.0);
hydrogen2SideXform.setRotateY(104.5);
moleculeGroup.getChildren().add(moleculeXform);
world.getChildren().addAll(moleculeGroup);
}
项目:FX3DAndroid
文件:ScadaApplication.java
private Group makeGauge(double ratio) {
Group group = new Group();
ObservableList<Node> children = group.getChildren();
CSG outer = new eu.mihosoft.vrl.v3d.Cylinder(1 * ratio, 1.5, 100).toCSG();
eu.mihosoft.vrl.v3d.Cylinder inner = new eu.mihosoft.vrl.v3d.Cylinder(0.93 * ratio, 0.3, 100);
CSG sg = outer.difference(inner.toCSG());
double scales = 12;
double dt = 360 / scales;
// if do cylinder union verrrry slow
CSG c = new Cube(0.1, 0.93 * 2 * ratio, 0.1).toCSG();
CSG result = null;
// because the cube bar is symmetrical
for (int i = 0; i < scales / 2; i++) {
if (result == null) result = c.transformed(unity().rotZ(dt * i));
else result = result.union(c.transformed(unity().rotZ(dt * i)));
}
// remove inner of scale label
inner = new eu.mihosoft.vrl.v3d.Cylinder(0.6 * ratio, 0.3, 100);
result = result.transformed(unity().translateZ(0.15)).difference(inner.toCSG());
// center pol
CSGMesh pol = new CSGMesh(sg);
// PhongMaterial mat = new PhongMaterial();
// mat.setDiffuseColor(materialColor);
// Image image = FXUtil.loadImage("/images/cw.png");
// // mat.setBumpMap(image);
// mat.setSpecularMap(image);
// mat.setSpecularPower(64);
// // mat.setSelfIlluminationMap(image);//no effect
// pol.setMaterial(mat);
pol.setMaterial(material);
children.add(pol);
CSGMesh scal = new CSGMesh(result);
scal.setMaterial(material2);
children.add(scal);
Torus ring = new Torus(0.885 * ratio, 0.21);
ring.mesh.setMaterial(material2);
ring.getTransforms().addAll(new Translate(0, 0, 0.1));
children.add(ring);
String fontName= Font.getFontNames().get(0);
double radius = 0.93 * ratio * 14;
for (int i = 1; i <= 12; i++) {
// Museo Slab 500
// Museo Sans 500
// Museo 500
Text3DMesh scaleLabel = new Text3DMesh(String.valueOf(i), fontName, 11, true, 0.1, 0, 1);
// final int count=i;
// scaleLabel.setTextureModeVertices3D(1530,p->(double)(p.y/(20+count))*(p.x/(10+count)));
scaleLabel.setTextureModeNone(Color.ROYALBLUE);
scaleLabel.getTransforms().add(new Scale(0.040346851, 0.040346851));
double rad = Math.toRadians(dt * i);
double deltax = i < 10 ? 3 : 5;
double deltay = i == 10 ? 6 : 4;
scaleLabel.getTransforms().add(new Translate(-radius * Math.sin(rad) + deltax, //
radius * Math.cos(rad) * 0.95 - deltay, 0.1));
scaleLabel.getTransforms().add(new Rotate(180, Rotate.Z_AXIS));
children.add(scaleLabel);
}
CSGMesh center = new CSGMesh(new Sphere(0.2, 40, 10).toCSG().transformed(unity().translateZ(0.15)));
center.setMaterial(material2);
children.add(center);
FrustumMesh needle = new FrustumMesh(0.1, 0.035, 0.6 * ratio);
needle.setMaterial(material2);
needleTranslate = new Translate(0, -0.6, 0.05);
needleRotate = new Rotate(0, Rotate.Z_AXIS);
needle.getTransforms().addAll(needleTranslate, needleRotate);
children.add(needle);
return group;
}
项目:VRL-JFXVis
文件:Main.java
@Override
public void start(Stage primaryStage) throws Exception {
try {
currentStage = primaryStage;
ultraRoot = new Group();
// Create camera
camera = new PerspectiveCamera(true);
camera.setFarClip(100000);
// and position it
camera.getTransforms().addAll(
new Rotate(0, Rotate.Y_AXIS),
new Rotate(0, Rotate.X_AXIS),
new Translate(0, 0, -50));
// add camera as node to scene graph
VBox guiGroup = addGuiElements();
// Setup a scene
SubScene subscene = createScene3D(ultraRoot, camera);
VBox layout = new VBox( guiGroup, subscene);
subscene.heightProperty().bind(layout.heightProperty());
subscene.widthProperty().bind(layout.widthProperty());
layout.setSpacing(0.0);
scene = new Scene(layout, 1024, 768, true);
scene.setFill(Color.DARKGRAY.darker().darker().darker().darker());
//Add the scene to the stage and show the stage
PointLight light2 = new PointLight(Color.LIGHTGRAY);
ultraRoot.getChildren().add(light2);
light2.getTransforms().add(new Translate(-50, 10, -520));
AmbientLight light3 = new AmbientLight(new Color(0.35,0.35,0.35,1.0));
ultraRoot.getChildren().add(light3);
primaryStage.setScene(scene);
primaryStage.show();
handleKeyboard(scene, camera);
//handleMouse(scene, camera);
listener = new LeapMotionListener();
controller = new Controller();
controller.addListener(listener);
addGlobalLeapMotionPropertyListener();
for (int i = 0; i < cArray.length; i++) { //initialize the cylinder array for the hand bones
cArray[i] = new Cylinder(1, 1, 20); //using a fixed size array for the hand bones avoids memory issues
cArray[i].setMouseTransparent(true); //but limits the max. amount of hands that can be registered at the same time
//set it mouse transparent, so that it wont block the mouse click events by the robot
cArray[i].setMaterial(handSphereMat);
}
} catch (Exception e) {
e.printStackTrace(System.out);
System.exit(1);
}
}