]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/BarrelNode.java
a6c3334bc926f87addab14513388ff3f3303d080
[simantics/3d.git] / org.simantics.g3d.csg / src / org / simantics / g3d / csg / scenegraph2 / BarrelNode.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_MakeFace;\r
5 import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire;\r
6 import org.jcae.opencascade.jni.BRepPrimAPI_MakeRevol;\r
7 import org.jcae.opencascade.jni.GC_MakeArcOfCircle;\r
8 import org.jcae.opencascade.jni.GC_MakeSegment;\r
9 import org.jcae.opencascade.jni.TopoDS_Edge;\r
10 import org.jcae.opencascade.jni.TopoDS_Face;\r
11 import org.jcae.opencascade.jni.TopoDS_Shape;\r
12 import org.jcae.opencascade.jni.TopoDS_Wire;\r
13 import org.simantics.g3d.csg.ontology.CSG;\r
14 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
15 import org.simantics.g3d.property.annotations.SetPropertyValue;\r
16 import org.simantics.objmap.graph.annotations.GraphType;\r
17 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
18 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
19 \r
20 @GraphType(CSG.URIs.Barrel)\r
21 public class BarrelNode extends CSGnode {\r
22 \r
23         private double r1 = 1.0;\r
24         private double r2 = 1.1;\r
25         private double h = 1.0;\r
26         \r
27         \r
28 \r
29         @RelatedSetValue(CSG.URIs.HasMinorRadius)\r
30         @SetPropertyValue(CSG.URIs.HasMinorRadius)\r
31         public void setR1(double r1) {\r
32                 this.r1 = r1;\r
33                 firePropertyChanged(CSG.URIs.HasMinorRadius);\r
34         }\r
35         \r
36         @RelatedSetValue(CSG.URIs.HasMajorRadius)\r
37         @SetPropertyValue(CSG.URIs.HasMajorRadius)\r
38         public void setR2(double r2) {\r
39                 this.r2 = r2;\r
40                 firePropertyChanged(CSG.URIs.HasMajorRadius);\r
41         }\r
42         \r
43         @RelatedSetValue(CSG.URIs.HasHeight)\r
44         @SetPropertyValue(CSG.URIs.HasHeight)\r
45         public void setH(double h) {\r
46                 this.h = h;\r
47                 firePropertyChanged(CSG.URIs.HasHeight);\r
48         }\r
49         \r
50         @RelatedGetValue(CSG.URIs.HasHeight)\r
51         @GetPropertyValue(value=CSG.URIs.HasHeight, name = "Height")\r
52         public double getH() {\r
53                 return h;\r
54         }\r
55         \r
56         @RelatedGetValue(CSG.URIs.HasMinorRadius)\r
57         @GetPropertyValue(value=CSG.URIs.HasMinorRadius, name = "Minor Radius")\r
58         public double getR1() {\r
59                 return r1;\r
60         }\r
61         \r
62         @RelatedGetValue(CSG.URIs.HasMajorRadius)\r
63         @GetPropertyValue(value=CSG.URIs.HasMajorRadius, name = "Major Radius")\r
64         public double getR2() {\r
65                 return r2;\r
66         }\r
67         \r
68         @Override\r
69         public TopoDS_Shape getBaseGeometry() {\r
70                 if (Math.abs(r1 -r2)< MIN_VALUE)\r
71                 r2 = r1 + MIN_VALUE;\r
72                 double p0[] = new double[]{0.0,-h*0.5,0.0};\r
73                 double p1[] = new double[]{0.0,-h*0.5,r1};\r
74                 double p2[] = new double[]{0.0, 0.0  ,r2};\r
75                 double p3[] = new double[]{0.0, h*0.5,r1};\r
76                 double p4[] = new double[]{0.0, h*0.5,0.0};\r
77                 GC_MakeArcOfCircle m = new GC_MakeArcOfCircle(p1,p2,p3);\r
78                 GC_MakeSegment s1 = new GC_MakeSegment(p0,p1);\r
79                 GC_MakeSegment s2 = new GC_MakeSegment(p3,p4);\r
80                 \r
81                 BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(s1.value());\r
82                 TopoDS_Edge e1 = (TopoDS_Edge)edge.shape();\r
83                 edge.delete();\r
84                 \r
85                 edge = new BRepBuilderAPI_MakeEdge(m.value());\r
86                 TopoDS_Edge e2 = (TopoDS_Edge)edge.shape();\r
87                 edge.delete();\r
88                 \r
89                 edge = new BRepBuilderAPI_MakeEdge(s2.value());\r
90                 TopoDS_Edge e3 = (TopoDS_Edge)edge.shape();\r
91                 edge.delete();\r
92                 \r
93                 BRepBuilderAPI_MakeWire wire =  new BRepBuilderAPI_MakeWire(e1,e2,e3);\r
94                 TopoDS_Wire w = (TopoDS_Wire)wire.shape();\r
95                 wire.delete();\r
96                 \r
97                 BRepBuilderAPI_MakeFace face = new BRepBuilderAPI_MakeFace(w);\r
98                 TopoDS_Face F = (TopoDS_Face) face.shape();\r
99                 face.delete();\r
100                 \r
101                 BRepPrimAPI_MakeRevol revol = new BRepPrimAPI_MakeRevol(F,new double[]{0.0,0.0,0.0,0.0,1.0,0.0}); \r
102                 TopoDS_Shape shape = revol.shape();\r
103                 revol.delete();\r
104                 \r
105                 m.delete();\r
106                 s1.delete();\r
107                 s2.delete();\r
108                 e1.delete();\r
109                 e2.delete();\r
110                 e3.delete();\r
111                 w.delete();\r
112                 F.delete();\r
113                 return shape;\r
114         }\r
115 \r
116 }\r