]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java
Remove listener calls when property values not updated.
[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                 if (this.x1 == d)\r
42                         return;\r
43                 this.x1 = d;\r
44                 firePropertyChanged(CSG.URIs.HasXAxisMinimumSize);\r
45         }\r
46         \r
47         @RelatedSetValue(CSG.URIs.HasXAxisMaximumSize)\r
48         @SetPropertyValue(CSG.URIs.HasXAxisMaximumSize)\r
49         public void setX2(double d) {\r
50                 if (this.x2 == d)\r
51                         return;\r
52                 this.x2 = d;\r
53                 firePropertyChanged(CSG.URIs.HasXAxisMaximumSize);\r
54         }\r
55         \r
56         @RelatedSetValue(CSG.URIs.HasYAxisSize)\r
57         @SetPropertyValue(CSG.URIs.HasYAxisSize)\r
58         public void setSY(double d) {\r
59                 if (this.y == d)\r
60                         return;\r
61                 this.y = d;\r
62                 firePropertyChanged(CSG.URIs.HasYAxisSize);\r
63         }\r
64         \r
65         @RelatedSetValue(CSG.URIs.HasZAxisMinimumSize)\r
66         @SetPropertyValue(CSG.URIs.HasZAxisMinimumSize)\r
67         public void setZ1(double d) {\r
68                 if (this.z1 == d)\r
69                         return;\r
70                 this.z1 = d;\r
71                 firePropertyChanged(CSG.URIs.HasZAxisMinimumSize);\r
72         }\r
73         \r
74         @RelatedSetValue(CSG.URIs.HasZAxisMaximumSize)\r
75         @SetPropertyValue(CSG.URIs.HasZAxisMaximumSize)\r
76         public void setZ2(double d) {\r
77                 if (this.z2 == d)\r
78                         return;\r
79                 this.z2 = d;\r
80                 firePropertyChanged(CSG.URIs.HasZAxisMaximumSize);\r
81         }\r
82         \r
83         @RelatedGetValue(CSG.URIs.HasXAxisMinimumSize)\r
84         @GetPropertyValue(value=CSG.URIs.HasXAxisMinimumSize, name = "X Min Size")\r
85         public double getX1() {\r
86                 return x1;\r
87         }\r
88         \r
89         @RelatedGetValue(CSG.URIs.HasXAxisMaximumSize)\r
90         @GetPropertyValue(value=CSG.URIs.HasXAxisMaximumSize, name = "X Max Size")\r
91         public double getX2() {\r
92                 return x2;\r
93         }\r
94         \r
95         @RelatedGetValue(CSG.URIs.HasYAxisSize)\r
96         @GetPropertyValue(value=CSG.URIs.HasYAxisSize, name = "Y Size")\r
97         public double getY() {\r
98                 return y;\r
99         }\r
100         \r
101         @RelatedGetValue(CSG.URIs.HasZAxisMinimumSize)\r
102         @GetPropertyValue(value=CSG.URIs.HasZAxisMinimumSize, name = "Z Min Size")\r
103         public double getZ1() {\r
104                 return z1;\r
105         }\r
106         \r
107         @RelatedGetValue(CSG.URIs.HasZAxisMaximumSize)\r
108         @GetPropertyValue(value=CSG.URIs.HasZAxisMaximumSize, name = "Z Max Size")\r
109         public double getZ2() {\r
110                 return z2;\r
111         }\r
112         \r
113         @Override\r
114         public TopoDS_Shape getBaseGeometry() {\r
115                 double x1 = this.x1 *0.5;\r
116                 double x2 = this.x2 *0.5;\r
117                 double z1 = this.z1 *0.5;\r
118                 double z2 = this.z2 *0.5;\r
119                 double y = this.y * 0.5;\r
120                 \r
121                 BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire();\r
122                 BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,z1},new double[]{x1,-y,-z1});\r
123                 TopoDS_Edge top_edge = (TopoDS_Edge)edge.shape();\r
124                 wire.add(top_edge);\r
125                 edge.delete();\r
126                 top_edge.delete();\r
127                 \r
128                 edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,-z1},new double[]{-x1,-y,-z1});\r
129                 top_edge = (TopoDS_Edge)edge.shape();\r
130                 wire.add(top_edge);\r
131                 edge.delete();\r
132                 top_edge.delete();\r
133                 \r
134                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,-z1},new double[]{-x1,-y,z1});\r
135                 top_edge = (TopoDS_Edge)edge.shape();\r
136                 wire.add(top_edge);\r
137                 edge.delete();\r
138                 top_edge.delete();\r
139                 \r
140                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,z1},new double[]{x1,-y,z1});\r
141                 top_edge = (TopoDS_Edge)edge.shape();\r
142                 wire.add(top_edge);\r
143                 edge.delete();\r
144                 top_edge.delete();\r
145                 \r
146                 TopoDS_Wire w1 = (TopoDS_Wire)wire.shape();\r
147                 wire.delete();\r
148                 wire = new BRepBuilderAPI_MakeWire();\r
149                 \r
150                 \r
151                 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,z2},new double[]{x2, y,-z2});\r
152                 top_edge = (TopoDS_Edge)edge.shape();\r
153                 wire.add(top_edge);\r
154                 edge.delete();\r
155                 top_edge.delete();\r
156                 \r
157                 edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,-z2},new double[]{-x2, y,-z2});\r
158                 top_edge = (TopoDS_Edge)edge.shape();\r
159                 wire.add(top_edge);\r
160                 edge.delete();\r
161                 top_edge.delete();\r
162                 \r
163                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,-z2},new double[]{-x2, y,z2});\r
164                 top_edge = (TopoDS_Edge)edge.shape();\r
165                 wire.add(top_edge);\r
166                 edge.delete();\r
167                 top_edge.delete();\r
168                 \r
169                 edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,z2},new double[]{x2, y,z2});\r
170                 top_edge = (TopoDS_Edge)edge.shape();\r
171                 wire.add(top_edge);\r
172                 edge.delete();\r
173                 top_edge.delete();\r
174                 \r
175                 TopoDS_Wire w2 = (TopoDS_Wire)wire.shape();\r
176                 wire.delete();\r
177                 \r
178                 BRepOffsetAPI_ThruSections generatorb = new BRepOffsetAPI_ThruSections(true, true);\r
179                 generatorb.addWire(w1);\r
180                 generatorb.addWire(w2);\r
181                 generatorb.build();\r
182                 w1.delete();\r
183                 w2.delete();\r
184                 \r
185                 TopoDS_Shape shape = generatorb.shape();\r
186                 generatorb.delete();\r
187                 \r
188                 return shape;\r
189         }\r
190 \r
191 \r
192 }\r