X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d.csg%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fcsg%2Fscenegraph2%2FBarrelNode.java;fp=org.simantics.g3d.csg%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fcsg%2Fscenegraph2%2FBarrelNode.java;h=a6c3334bc926f87addab14513388ff3f3303d080;hb=87b3241ec277ba3d8e414b26186a032c9cdcaeed;hp=0000000000000000000000000000000000000000;hpb=1f0bcd66274375f2278d2e6c486cb28257a5f7b2;p=simantics%2F3d.git diff --git a/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/BarrelNode.java b/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/BarrelNode.java new file mode 100644 index 00000000..a6c3334b --- /dev/null +++ b/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/BarrelNode.java @@ -0,0 +1,116 @@ +package org.simantics.g3d.csg.scenegraph2; + +import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge; +import org.jcae.opencascade.jni.BRepBuilderAPI_MakeFace; +import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire; +import org.jcae.opencascade.jni.BRepPrimAPI_MakeRevol; +import org.jcae.opencascade.jni.GC_MakeArcOfCircle; +import org.jcae.opencascade.jni.GC_MakeSegment; +import org.jcae.opencascade.jni.TopoDS_Edge; +import org.jcae.opencascade.jni.TopoDS_Face; +import org.jcae.opencascade.jni.TopoDS_Shape; +import org.jcae.opencascade.jni.TopoDS_Wire; +import org.simantics.g3d.csg.ontology.CSG; +import org.simantics.g3d.property.annotations.GetPropertyValue; +import org.simantics.g3d.property.annotations.SetPropertyValue; +import org.simantics.objmap.graph.annotations.GraphType; +import org.simantics.objmap.graph.annotations.RelatedGetValue; +import org.simantics.objmap.graph.annotations.RelatedSetValue; + +@GraphType(CSG.URIs.Barrel) +public class BarrelNode extends CSGnode { + + private double r1 = 1.0; + private double r2 = 1.1; + private double h = 1.0; + + + + @RelatedSetValue(CSG.URIs.HasMinorRadius) + @SetPropertyValue(CSG.URIs.HasMinorRadius) + public void setR1(double r1) { + this.r1 = r1; + firePropertyChanged(CSG.URIs.HasMinorRadius); + } + + @RelatedSetValue(CSG.URIs.HasMajorRadius) + @SetPropertyValue(CSG.URIs.HasMajorRadius) + public void setR2(double r2) { + this.r2 = r2; + firePropertyChanged(CSG.URIs.HasMajorRadius); + } + + @RelatedSetValue(CSG.URIs.HasHeight) + @SetPropertyValue(CSG.URIs.HasHeight) + public void setH(double h) { + this.h = h; + firePropertyChanged(CSG.URIs.HasHeight); + } + + @RelatedGetValue(CSG.URIs.HasHeight) + @GetPropertyValue(value=CSG.URIs.HasHeight, name = "Height") + public double getH() { + return h; + } + + @RelatedGetValue(CSG.URIs.HasMinorRadius) + @GetPropertyValue(value=CSG.URIs.HasMinorRadius, name = "Minor Radius") + public double getR1() { + return r1; + } + + @RelatedGetValue(CSG.URIs.HasMajorRadius) + @GetPropertyValue(value=CSG.URIs.HasMajorRadius, name = "Major Radius") + public double getR2() { + return r2; + } + + @Override + public TopoDS_Shape getBaseGeometry() { + if (Math.abs(r1 -r2)< MIN_VALUE) + r2 = r1 + MIN_VALUE; + double p0[] = new double[]{0.0,-h*0.5,0.0}; + double p1[] = new double[]{0.0,-h*0.5,r1}; + double p2[] = new double[]{0.0, 0.0 ,r2}; + double p3[] = new double[]{0.0, h*0.5,r1}; + double p4[] = new double[]{0.0, h*0.5,0.0}; + GC_MakeArcOfCircle m = new GC_MakeArcOfCircle(p1,p2,p3); + GC_MakeSegment s1 = new GC_MakeSegment(p0,p1); + GC_MakeSegment s2 = new GC_MakeSegment(p3,p4); + + BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(s1.value()); + TopoDS_Edge e1 = (TopoDS_Edge)edge.shape(); + edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(m.value()); + TopoDS_Edge e2 = (TopoDS_Edge)edge.shape(); + edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(s2.value()); + TopoDS_Edge e3 = (TopoDS_Edge)edge.shape(); + edge.delete(); + + BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire(e1,e2,e3); + TopoDS_Wire w = (TopoDS_Wire)wire.shape(); + wire.delete(); + + BRepBuilderAPI_MakeFace face = new BRepBuilderAPI_MakeFace(w); + TopoDS_Face F = (TopoDS_Face) face.shape(); + face.delete(); + + BRepPrimAPI_MakeRevol revol = new BRepPrimAPI_MakeRevol(F,new double[]{0.0,0.0,0.0,0.0,1.0,0.0}); + TopoDS_Shape shape = revol.shape(); + revol.delete(); + + m.delete(); + s1.delete(); + s2.delete(); + e1.delete(); + e2.delete(); + e3.delete(); + w.delete(); + F.delete(); + return shape; + } + +}