+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