]> gerrit.simantics Code Review - simantics/3d.git/blob - 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
1 package org.simantics.g3d.csg.scenegraph2;\r
2 \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
15 \r
16 \r
17 @GraphType(CSG.URIs.RectangularSolid)\r
18 public class RectangularSolidNode extends CSGnode {\r
19 \r
20         double x1 = 0.5;\r
21         double x2 = 1.0;\r
22         double y = 1.0;\r
23         double z1 = 0.5;\r
24         double z2 = 1.0;\r
25         \r
26         \r
27         @RelatedSetValue(CSG.URIs.HasXAxisMinimumSize)\r
28         @SetPropertyValue(CSG.URIs.HasXAxisMinimumSize)\r
29         public void setX1(double d) {\r
30                 this.x1 = d;\r
31                 firePropertyChanged(CSG.URIs.HasXAxisMinimumSize);\r
32         }\r
33         \r
34         @RelatedSetValue(CSG.URIs.HasXAxisMaximumSize)\r
35         @SetPropertyValue(CSG.URIs.HasXAxisMaximumSize)\r
36         public void setX2(double d) {\r
37                 this.x2 = d;\r
38                 firePropertyChanged(CSG.URIs.HasXAxisMaximumSize);\r
39         }\r
40         \r
41         @RelatedSetValue(CSG.URIs.HasYAxisSize)\r
42         @SetPropertyValue(CSG.URIs.HasYAxisSize)\r
43         public void setSY(double d) {\r
44                 this.y = d;\r
45                 firePropertyChanged(CSG.URIs.HasYAxisSize);\r
46         }\r
47         \r
48         @RelatedSetValue(CSG.URIs.HasZAxisMinimumSize)\r
49         @SetPropertyValue(CSG.URIs.HasZAxisMinimumSize)\r
50         public void setZ1(double d) {\r
51                 this.z1 = d;\r
52                 firePropertyChanged(CSG.URIs.HasZAxisMinimumSize);\r
53         }\r
54         \r
55         @RelatedSetValue(CSG.URIs.HasZAxisMaximumSize)\r
56         @SetPropertyValue(CSG.URIs.HasZAxisMaximumSize)\r
57         public void setZ2(double d) {\r
58                 this.z2 = d;\r
59                 firePropertyChanged(CSG.URIs.HasZAxisMaximumSize);\r
60         }\r
61         \r
62         @RelatedGetValue(CSG.URIs.HasXAxisMinimumSize)\r
63         @GetPropertyValue(value=CSG.URIs.HasXAxisMinimumSize, name = "X Min Size")\r
64         public double getX1() {\r
65                 return x1;\r
66         }\r
67         \r
68         @RelatedGetValue(CSG.URIs.HasXAxisMaximumSize)\r
69         @GetPropertyValue(value=CSG.URIs.HasXAxisMaximumSize, name = "X Max Size")\r
70         public double getX2() {\r
71                 return x2;\r
72         }\r
73         \r
74         @RelatedGetValue(CSG.URIs.HasYAxisSize)\r
75         @GetPropertyValue(value=CSG.URIs.HasYAxisSize, name = "Y Size")\r
76         public double getY() {\r
77                 return y;\r
78         }\r
79         \r
80         @RelatedGetValue(CSG.URIs.HasZAxisMinimumSize)\r
81         @GetPropertyValue(value=CSG.URIs.HasZAxisMinimumSize, name = "Z Min Size")\r
82         public double getZ1() {\r
83                 return z1;\r
84         }\r
85         \r
86         @RelatedGetValue(CSG.URIs.HasZAxisMaximumSize)\r
87         @GetPropertyValue(value=CSG.URIs.HasZAxisMaximumSize, name = "Z Max Size")\r
88         public double getZ2() {\r
89                 return z2;\r
90         }\r
91         \r
92         @Override\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
99                 \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
104                 edge.delete();\r
105                 top_edge.delete();\r
106                 \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
110                 edge.delete();\r
111                 top_edge.delete();\r
112                 \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
116                 edge.delete();\r
117                 top_edge.delete();\r
118                 \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
122                 edge.delete();\r
123                 top_edge.delete();\r
124                 \r
125                 TopoDS_Wire w1 = (TopoDS_Wire)wire.shape();\r
126                 wire.delete();\r
127                 wire = new BRepBuilderAPI_MakeWire();\r
128                 \r
129                 \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
133                 edge.delete();\r
134                 top_edge.delete();\r
135                 \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
139                 edge.delete();\r
140                 top_edge.delete();\r
141                 \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
145                 edge.delete();\r
146                 top_edge.delete();\r
147                 \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
151                 edge.delete();\r
152                 top_edge.delete();\r
153                 \r
154                 TopoDS_Wire w2 = (TopoDS_Wire)wire.shape();\r
155                 wire.delete();\r
156                 \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
161                 w1.delete();\r
162                 w2.delete();\r
163                 \r
164                 TopoDS_Shape shape = generatorb.shape();\r
165                 generatorb.delete();\r
166                 \r
167                 return shape;\r
168         }\r
169 \r
170 \r
171 }\r