]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.g3d.csg / src / org / simantics / g3d / csg / scenegraph2 / RectangularSolidNode.java
diff --git a/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java b/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java
new file mode 100644 (file)
index 0000000..6fb7f10
--- /dev/null
@@ -0,0 +1,171 @@
+package org.simantics.g3d.csg.scenegraph2;\r
+\r
+import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge;\r
+import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire;\r
+import org.jcae.opencascade.jni.BRepOffsetAPI_ThruSections;\r
+import org.jcae.opencascade.jni.TopoDS_Edge;\r
+import org.jcae.opencascade.jni.TopoDS_Shape;\r
+import org.jcae.opencascade.jni.TopoDS_Wire;\r
+import org.simantics.g3d.csg.ontology.CSG;\r
+import org.simantics.g3d.property.annotations.GetPropertyValue;\r
+import org.simantics.g3d.property.annotations.SetPropertyValue;\r
+import org.simantics.objmap.graph.annotations.GraphType;\r
+import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
+import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
+\r
+\r
+@GraphType(CSG.URIs.RectangularSolid)\r
+public class RectangularSolidNode extends CSGnode {\r
+\r
+       double x1 = 0.5;\r
+       double x2 = 1.0;\r
+       double y = 1.0;\r
+       double z1 = 0.5;\r
+       double z2 = 1.0;\r
+       \r
+       \r
+       @RelatedSetValue(CSG.URIs.HasXAxisMinimumSize)\r
+       @SetPropertyValue(CSG.URIs.HasXAxisMinimumSize)\r
+       public void setX1(double d) {\r
+               this.x1 = d;\r
+               firePropertyChanged(CSG.URIs.HasXAxisMinimumSize);\r
+       }\r
+       \r
+       @RelatedSetValue(CSG.URIs.HasXAxisMaximumSize)\r
+       @SetPropertyValue(CSG.URIs.HasXAxisMaximumSize)\r
+       public void setX2(double d) {\r
+               this.x2 = d;\r
+               firePropertyChanged(CSG.URIs.HasXAxisMaximumSize);\r
+       }\r
+       \r
+       @RelatedSetValue(CSG.URIs.HasYAxisSize)\r
+       @SetPropertyValue(CSG.URIs.HasYAxisSize)\r
+       public void setSY(double d) {\r
+               this.y = d;\r
+               firePropertyChanged(CSG.URIs.HasYAxisSize);\r
+       }\r
+       \r
+       @RelatedSetValue(CSG.URIs.HasZAxisMinimumSize)\r
+       @SetPropertyValue(CSG.URIs.HasZAxisMinimumSize)\r
+       public void setZ1(double d) {\r
+               this.z1 = d;\r
+               firePropertyChanged(CSG.URIs.HasZAxisMinimumSize);\r
+       }\r
+       \r
+       @RelatedSetValue(CSG.URIs.HasZAxisMaximumSize)\r
+       @SetPropertyValue(CSG.URIs.HasZAxisMaximumSize)\r
+       public void setZ2(double d) {\r
+               this.z2 = d;\r
+               firePropertyChanged(CSG.URIs.HasZAxisMaximumSize);\r
+       }\r
+       \r
+       @RelatedGetValue(CSG.URIs.HasXAxisMinimumSize)\r
+       @GetPropertyValue(value=CSG.URIs.HasXAxisMinimumSize, name = "X Min Size")\r
+       public double getX1() {\r
+               return x1;\r
+       }\r
+       \r
+       @RelatedGetValue(CSG.URIs.HasXAxisMaximumSize)\r
+       @GetPropertyValue(value=CSG.URIs.HasXAxisMaximumSize, name = "X Max Size")\r
+       public double getX2() {\r
+               return x2;\r
+       }\r
+       \r
+       @RelatedGetValue(CSG.URIs.HasYAxisSize)\r
+       @GetPropertyValue(value=CSG.URIs.HasYAxisSize, name = "Y Size")\r
+       public double getY() {\r
+               return y;\r
+       }\r
+       \r
+       @RelatedGetValue(CSG.URIs.HasZAxisMinimumSize)\r
+       @GetPropertyValue(value=CSG.URIs.HasZAxisMinimumSize, name = "Z Min Size")\r
+       public double getZ1() {\r
+               return z1;\r
+       }\r
+       \r
+       @RelatedGetValue(CSG.URIs.HasZAxisMaximumSize)\r
+       @GetPropertyValue(value=CSG.URIs.HasZAxisMaximumSize, name = "Z Max Size")\r
+       public double getZ2() {\r
+               return z2;\r
+       }\r
+       \r
+       @Override\r
+       public TopoDS_Shape getBaseGeometry() {\r
+               double x1 = this.x1 *0.5;\r
+               double x2 = this.x2 *0.5;\r
+               double z1 = this.z1 *0.5;\r
+               double z2 = this.z2 *0.5;\r
+               double y = this.y * 0.5;\r
+               \r
+               BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire();\r
+               BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,z1},new double[]{x1,-y,-z1});\r
+               TopoDS_Edge top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,-z1},new double[]{-x1,-y,-z1});\r
+               top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,-z1},new double[]{-x1,-y,z1});\r
+               top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,z1},new double[]{x1,-y,z1});\r
+               top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               TopoDS_Wire w1 = (TopoDS_Wire)wire.shape();\r
+               wire.delete();\r
+               wire = new BRepBuilderAPI_MakeWire();\r
+               \r
+               \r
+               edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,z2},new double[]{x2, y,-z2});\r
+               top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,-z2},new double[]{-x2, y,-z2});\r
+               top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,-z2},new double[]{-x2, y,z2});\r
+               top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,z2},new double[]{x2, y,z2});\r
+               top_edge = (TopoDS_Edge)edge.shape();\r
+               wire.add(top_edge);\r
+               edge.delete();\r
+               top_edge.delete();\r
+               \r
+               TopoDS_Wire w2 = (TopoDS_Wire)wire.shape();\r
+               wire.delete();\r
+               \r
+               BRepOffsetAPI_ThruSections generatorb = new BRepOffsetAPI_ThruSections(true, true);\r
+               generatorb.addWire(w1);\r
+               generatorb.addWire(w2);\r
+               generatorb.build();\r
+               w1.delete();\r
+               w2.delete();\r
+               \r
+               TopoDS_Shape shape = generatorb.shape();\r
+               generatorb.delete();\r
+               \r
+               return shape;\r
+       }\r
+\r
+\r
+}\r