1 package org.simantics.g3d.csg.scenegraph2;
\r
3 import java.util.Collection;
\r
4 import java.util.Collections;
\r
6 import javax.vecmath.AxisAngle4d;
\r
7 import javax.vecmath.Quat4d;
\r
8 import javax.vecmath.Vector3d;
\r
10 import org.jcae.opencascade.jni.TopoDS_Shape;
\r
11 import org.simantics.g3d.property.annotations.GetPropertyValue;
\r
12 import org.simantics.g3d.property.annotations.SetPropertyValue;
\r
13 import org.simantics.g3d.scenegraph.G3DNode;
\r
14 import org.simantics.layer0.Layer0;
\r
15 import org.simantics.objmap.graph.annotations.RelatedGetValue;
\r
16 import org.simantics.objmap.graph.annotations.RelatedSetValue;
\r
17 import org.simantics.opencascade.OccTriangulator;
\r
18 import org.simantics.opencascade.vtk.vtkSolidObject;
\r
19 import org.simantics.utils.threads.AWTThread;
\r
21 import vtk.vtkPanel;
\r
22 import vtk.vtkProp3D;
\r
23 import vtk.vtkRenderer;
\r
25 public abstract class CSGnode extends G3DNode implements ICSGnode {
\r
27 public static final double MIN_VALUE = 0.001;
\r
29 private String name;
\r
32 @RelatedGetValue(Layer0.URIs.HasName)
\r
33 @GetPropertyValue(value = Layer0.URIs.HasName, tabId = "Default", name = "Name")
\r
34 public String getName() {
\r
38 @RelatedSetValue(Layer0.URIs.HasName)
\r
39 @SetPropertyValue(Layer0.URIs.HasName)
\r
40 public void setName(String name) {
\r
44 firePropertyChanged(Layer0.URIs.HasName);
\r
48 public String toString() {
\r
53 private vtkSolidObject solidObject;
\r
56 public TopoDS_Shape getGeometry() {
\r
57 TopoDS_Shape shape = getBaseGeometry();
\r
60 Quat4d q = getOrientation();
\r
61 AxisAngle4d r = new AxisAngle4d();
\r
63 TopoDS_Shape tshape = OccTriangulator.makeRotation(shape, new double[] { 0.0, 0.0, 0.0, r.x, r.y, r.z }, r.angle);
\r
66 Vector3d p = getPosition();
\r
67 tshape = OccTriangulator.makeTranslation(shape, p.x, p.y, p.z);
\r
72 public void visualize(vtkPanel panel) {
\r
73 if (solidObject != null) {
\r
74 solidObject.delete();
\r
77 TopoDS_Shape shape = getGeometry();
\r
80 solidObject = new vtkSolidObject(panel, shape);
\r
81 solidObject.visualizeSolid(true, false);
\r
84 @SuppressWarnings("unchecked")
\r
85 public Collection<vtkProp3D> getActors() {
\r
86 if (solidObject == null)
\r
87 return Collections.EMPTY_LIST;
\r
88 return solidObject.getActors();
\r
91 public void stopVisualize() {
\r
92 if (solidObject != null) {
\r
93 if (Thread.currentThread() == AWTThread.getThreadAccess().getThread())
\r
94 solidObject.delete();
\r
96 solidObject.dispose();
\r
102 public void cleanup() {
\r