1 package org.simantics.g3d.csg.scenegraph2;
\r
3 import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge;
\r
4 import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire;
\r
5 import org.jcae.opencascade.jni.BRepOffsetAPI_ThruSections;
\r
6 import org.jcae.opencascade.jni.TopoDS_Edge;
\r
7 import org.jcae.opencascade.jni.TopoDS_Shape;
\r
8 import org.jcae.opencascade.jni.TopoDS_Wire;
\r
9 import org.simantics.g3d.csg.ontology.CSG;
\r
10 import org.simantics.g3d.property.annotations.GetPropertyValue;
\r
11 import org.simantics.g3d.property.annotations.SetPropertyValue;
\r
12 import org.simantics.objmap.graph.annotations.GraphType;
\r
13 import org.simantics.objmap.graph.annotations.RelatedGetValue;
\r
14 import org.simantics.objmap.graph.annotations.RelatedSetValue;
\r
17 @GraphType(CSG.URIs.RectangularSolid)
\r
18 public class RectangularSolidNode extends CSGnode {
\r
27 @RelatedSetValue(CSG.URIs.HasXAxisMinimumSize)
\r
28 @SetPropertyValue(CSG.URIs.HasXAxisMinimumSize)
\r
29 public void setX1(double d) {
\r
31 firePropertyChanged(CSG.URIs.HasXAxisMinimumSize);
\r
34 @RelatedSetValue(CSG.URIs.HasXAxisMaximumSize)
\r
35 @SetPropertyValue(CSG.URIs.HasXAxisMaximumSize)
\r
36 public void setX2(double d) {
\r
38 firePropertyChanged(CSG.URIs.HasXAxisMaximumSize);
\r
41 @RelatedSetValue(CSG.URIs.HasYAxisSize)
\r
42 @SetPropertyValue(CSG.URIs.HasYAxisSize)
\r
43 public void setSY(double d) {
\r
45 firePropertyChanged(CSG.URIs.HasYAxisSize);
\r
48 @RelatedSetValue(CSG.URIs.HasZAxisMinimumSize)
\r
49 @SetPropertyValue(CSG.URIs.HasZAxisMinimumSize)
\r
50 public void setZ1(double d) {
\r
52 firePropertyChanged(CSG.URIs.HasZAxisMinimumSize);
\r
55 @RelatedSetValue(CSG.URIs.HasZAxisMaximumSize)
\r
56 @SetPropertyValue(CSG.URIs.HasZAxisMaximumSize)
\r
57 public void setZ2(double d) {
\r
59 firePropertyChanged(CSG.URIs.HasZAxisMaximumSize);
\r
62 @RelatedGetValue(CSG.URIs.HasXAxisMinimumSize)
\r
63 @GetPropertyValue(value=CSG.URIs.HasXAxisMinimumSize, name = "X Min Size")
\r
64 public double getX1() {
\r
68 @RelatedGetValue(CSG.URIs.HasXAxisMaximumSize)
\r
69 @GetPropertyValue(value=CSG.URIs.HasXAxisMaximumSize, name = "X Max Size")
\r
70 public double getX2() {
\r
74 @RelatedGetValue(CSG.URIs.HasYAxisSize)
\r
75 @GetPropertyValue(value=CSG.URIs.HasYAxisSize, name = "Y Size")
\r
76 public double getY() {
\r
80 @RelatedGetValue(CSG.URIs.HasZAxisMinimumSize)
\r
81 @GetPropertyValue(value=CSG.URIs.HasZAxisMinimumSize, name = "Z Min Size")
\r
82 public double getZ1() {
\r
86 @RelatedGetValue(CSG.URIs.HasZAxisMaximumSize)
\r
87 @GetPropertyValue(value=CSG.URIs.HasZAxisMaximumSize, name = "Z Max Size")
\r
88 public double getZ2() {
\r
93 public TopoDS_Shape getBaseGeometry() {
\r
94 double x1 = this.x1 *0.5;
\r
95 double x2 = this.x2 *0.5;
\r
96 double z1 = this.z1 *0.5;
\r
97 double z2 = this.z2 *0.5;
\r
98 double y = this.y * 0.5;
\r
100 BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire();
\r
101 BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,z1},new double[]{x1,-y,-z1});
\r
102 TopoDS_Edge top_edge = (TopoDS_Edge)edge.shape();
\r
103 wire.add(top_edge);
\r
107 edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,-z1},new double[]{-x1,-y,-z1});
\r
108 top_edge = (TopoDS_Edge)edge.shape();
\r
109 wire.add(top_edge);
\r
113 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,-z1},new double[]{-x1,-y,z1});
\r
114 top_edge = (TopoDS_Edge)edge.shape();
\r
115 wire.add(top_edge);
\r
119 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,z1},new double[]{x1,-y,z1});
\r
120 top_edge = (TopoDS_Edge)edge.shape();
\r
121 wire.add(top_edge);
\r
125 TopoDS_Wire w1 = (TopoDS_Wire)wire.shape();
\r
127 wire = new BRepBuilderAPI_MakeWire();
\r
130 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,z2},new double[]{x2, y,-z2});
\r
131 top_edge = (TopoDS_Edge)edge.shape();
\r
132 wire.add(top_edge);
\r
136 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,-z2},new double[]{-x2, y,-z2});
\r
137 top_edge = (TopoDS_Edge)edge.shape();
\r
138 wire.add(top_edge);
\r
142 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,-z2},new double[]{-x2, y,z2});
\r
143 top_edge = (TopoDS_Edge)edge.shape();
\r
144 wire.add(top_edge);
\r
148 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,z2},new double[]{x2, y,z2});
\r
149 top_edge = (TopoDS_Edge)edge.shape();
\r
150 wire.add(top_edge);
\r
154 TopoDS_Wire w2 = (TopoDS_Wire)wire.shape();
\r
157 BRepOffsetAPI_ThruSections generatorb = new BRepOffsetAPI_ThruSections(true, true);
\r
158 generatorb.addWire(w1);
\r
159 generatorb.addWire(w2);
\r
160 generatorb.build();
\r
164 TopoDS_Shape shape = generatorb.shape();
\r
165 generatorb.delete();
\r