]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java
Copyrights
[simantics/3d.git] / org.simantics.g3d.csg / src / org / simantics / g3d / csg / scenegraph2 / RectangularSolidNode.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g3d.csg.scenegraph2;\r
13 \r
14 import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge;\r
15 import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire;\r
16 import org.jcae.opencascade.jni.BRepOffsetAPI_ThruSections;\r
17 import org.jcae.opencascade.jni.TopoDS_Edge;\r
18 import org.jcae.opencascade.jni.TopoDS_Shape;\r
19 import org.jcae.opencascade.jni.TopoDS_Wire;\r
20 import org.simantics.g3d.csg.ontology.CSG;\r
21 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
22 import org.simantics.g3d.property.annotations.SetPropertyValue;\r
23 import org.simantics.objmap.graph.annotations.GraphType;\r
24 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
25 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
26 \r
27 \r
28 @GraphType(CSG.URIs.RectangularSolid)\r
29 public class RectangularSolidNode extends CSGnode {\r
30 \r
31         double x1 = 0.5;\r
32         double x2 = 1.0;\r
33         double y = 1.0;\r
34         double z1 = 0.5;\r
35         double z2 = 1.0;\r
36         \r
37         \r
38         @RelatedSetValue(CSG.URIs.HasXAxisMinimumSize)\r
39         @SetPropertyValue(CSG.URIs.HasXAxisMinimumSize)\r
40         public void setX1(double d) {\r
41                 this.x1 = d;\r
42                 firePropertyChanged(CSG.URIs.HasXAxisMinimumSize);\r
43         }\r
44         \r
45         @RelatedSetValue(CSG.URIs.HasXAxisMaximumSize)\r
46         @SetPropertyValue(CSG.URIs.HasXAxisMaximumSize)\r
47         public void setX2(double d) {\r
48                 this.x2 = d;\r
49                 firePropertyChanged(CSG.URIs.HasXAxisMaximumSize);\r
50         }\r
51         \r
52         @RelatedSetValue(CSG.URIs.HasYAxisSize)\r
53         @SetPropertyValue(CSG.URIs.HasYAxisSize)\r
54         public void setSY(double d) {\r
55                 this.y = d;\r
56                 firePropertyChanged(CSG.URIs.HasYAxisSize);\r
57         }\r
58         \r
59         @RelatedSetValue(CSG.URIs.HasZAxisMinimumSize)\r
60         @SetPropertyValue(CSG.URIs.HasZAxisMinimumSize)\r
61         public void setZ1(double d) {\r
62                 this.z1 = d;\r
63                 firePropertyChanged(CSG.URIs.HasZAxisMinimumSize);\r
64         }\r
65         \r
66         @RelatedSetValue(CSG.URIs.HasZAxisMaximumSize)\r
67         @SetPropertyValue(CSG.URIs.HasZAxisMaximumSize)\r
68         public void setZ2(double d) {\r
69                 this.z2 = d;\r
70                 firePropertyChanged(CSG.URIs.HasZAxisMaximumSize);\r
71         }\r
72         \r
73         @RelatedGetValue(CSG.URIs.HasXAxisMinimumSize)\r
74         @GetPropertyValue(value=CSG.URIs.HasXAxisMinimumSize, name = "X Min Size")\r
75         public double getX1() {\r
76                 return x1;\r
77         }\r
78         \r
79         @RelatedGetValue(CSG.URIs.HasXAxisMaximumSize)\r
80         @GetPropertyValue(value=CSG.URIs.HasXAxisMaximumSize, name = "X Max Size")\r
81         public double getX2() {\r
82                 return x2;\r
83         }\r
84         \r
85         @RelatedGetValue(CSG.URIs.HasYAxisSize)\r
86         @GetPropertyValue(value=CSG.URIs.HasYAxisSize, name = "Y Size")\r
87         public double getY() {\r
88                 return y;\r
89         }\r
90         \r
91         @RelatedGetValue(CSG.URIs.HasZAxisMinimumSize)\r
92         @GetPropertyValue(value=CSG.URIs.HasZAxisMinimumSize, name = "Z Min Size")\r
93         public double getZ1() {\r
94                 return z1;\r
95         }\r
96         \r
97         @RelatedGetValue(CSG.URIs.HasZAxisMaximumSize)\r
98         @GetPropertyValue(value=CSG.URIs.HasZAxisMaximumSize, name = "Z Max Size")\r
99         public double getZ2() {\r
100                 return z2;\r
101         }\r
102         \r
103         @Override\r
104         public TopoDS_Shape getBaseGeometry() {\r
105                 double x1 = this.x1 *0.5;\r
106                 double x2 = this.x2 *0.5;\r
107                 double z1 = this.z1 *0.5;\r
108                 double z2 = this.z2 *0.5;\r
109                 double y = this.y * 0.5;\r
110                 \r
111                 BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire();\r
112                 BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,z1},new double[]{x1,-y,-z1});\r
113                 TopoDS_Edge top_edge = (TopoDS_Edge)edge.shape();\r
114                 wire.add(top_edge);\r
115                 edge.delete();\r
116                 top_edge.delete();\r
117                 \r
118                 edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,-z1},new double[]{-x1,-y,-z1});\r
119                 top_edge = (TopoDS_Edge)edge.shape();\r
120                 wire.add(top_edge);\r
121                 edge.delete();\r
122                 top_edge.delete();\r
123                 \r
124                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,-z1},new double[]{-x1,-y,z1});\r
125                 top_edge = (TopoDS_Edge)edge.shape();\r
126                 wire.add(top_edge);\r
127                 edge.delete();\r
128                 top_edge.delete();\r
129                 \r
130                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,z1},new double[]{x1,-y,z1});\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                 TopoDS_Wire w1 = (TopoDS_Wire)wire.shape();\r
137                 wire.delete();\r
138                 wire = new BRepBuilderAPI_MakeWire();\r
139                 \r
140                 \r
141                 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,z2},new double[]{x2, y,-z2});\r
142                 top_edge = (TopoDS_Edge)edge.shape();\r
143                 wire.add(top_edge);\r
144                 edge.delete();\r
145                 top_edge.delete();\r
146                 \r
147                 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,-z2},new double[]{-x2, y,-z2});\r
148                 top_edge = (TopoDS_Edge)edge.shape();\r
149                 wire.add(top_edge);\r
150                 edge.delete();\r
151                 top_edge.delete();\r
152                 \r
153                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,-z2},new double[]{-x2, y,z2});\r
154                 top_edge = (TopoDS_Edge)edge.shape();\r
155                 wire.add(top_edge);\r
156                 edge.delete();\r
157                 top_edge.delete();\r
158                 \r
159                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,z2},new double[]{x2, y,z2});\r
160                 top_edge = (TopoDS_Edge)edge.shape();\r
161                 wire.add(top_edge);\r
162                 edge.delete();\r
163                 top_edge.delete();\r
164                 \r
165                 TopoDS_Wire w2 = (TopoDS_Wire)wire.shape();\r
166                 wire.delete();\r
167                 \r
168                 BRepOffsetAPI_ThruSections generatorb = new BRepOffsetAPI_ThruSections(true, true);\r
169                 generatorb.addWire(w1);\r
170                 generatorb.addWire(w2);\r
171                 generatorb.build();\r
172                 w1.delete();\r
173                 w2.delete();\r
174                 \r
175                 TopoDS_Shape shape = generatorb.shape();\r
176                 generatorb.delete();\r
177                 \r
178                 return shape;\r
179         }\r
180 \r
181 \r
182 }\r