X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fgeometry%2FHorizontalTankGeometryProvider.java;fp=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fgeometry%2FHorizontalTankGeometryProvider.java;h=7a3dc41b3a088ef2f46d393304d918cd34e777bb;hb=a460e609147d064dd3da464bcf1626845e0f93b4;hp=0000000000000000000000000000000000000000;hpb=3e2205a22ddee674f7936da114f5d520bd83e0ff;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/geometry/HorizontalTankGeometryProvider.java b/org.simantics.plant3d/src/org/simantics/plant3d/geometry/HorizontalTankGeometryProvider.java new file mode 100644 index 00000000..7a3dc41b --- /dev/null +++ b/org.simantics.plant3d/src/org/simantics/plant3d/geometry/HorizontalTankGeometryProvider.java @@ -0,0 +1,101 @@ +package org.simantics.plant3d.geometry; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; + +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.db.Resource; +import org.simantics.opencascade.OccTriangulator; + +public class HorizontalTankGeometryProvider extends BuiltinGeometryProvider { + + public HorizontalTankGeometryProvider(Resource resource) { + super(resource); + } + + private double length = 1.0; + private double radius = 0.2; + + @Override + public Collection getModel() throws Exception { + + double p0[] = new double[]{-length*0.50, 0.0,0.0}; + double p1[] = new double[]{-length*0.488, radius*0.6,0.0}; + double p2[] = new double[]{-length*0.46, radius,0.0}; + double p3[] = new double[]{ length*0.46, radius,0.0}; + double p4[] = new double[]{ length*0.488, radius*0.6,0.0}; + double p5[] = new double[]{ length*0.50, 0.0,0.0}; + + GC_MakeArcOfCircle m1 = new GC_MakeArcOfCircle(p0,p1,p2); + GC_MakeSegment s1 = new GC_MakeSegment(p2,p3); + GC_MakeArcOfCircle m2 = new GC_MakeArcOfCircle(p3,p4,p5); + + BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(m1.value()); + TopoDS_Edge e1 = (TopoDS_Edge)edge.shape(); + edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(s1.value()); + TopoDS_Edge e2 = (TopoDS_Edge)edge.shape(); + edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(m2.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,1.0,0.0,0.0}); + TopoDS_Shape shape = revol.shape(); + revol.delete(); + + m1.delete(); + s1.delete(); + m2.delete(); + e1.delete(); + e2.delete(); + e3.delete(); + w.delete(); + F.delete(); + + TopoDS_Shape shape2 = OccTriangulator.makeTranslation(shape, 0.0, radius, 0.0); + shape.delete(); + shape = shape2; + TopoDS_Shape box = OccTriangulator.makeBox(-length*0.4, 0.0, -radius*0.5, -length*0.3, radius, radius*0.5); + shape2 = OccTriangulator.makeFuse(shape, box); + shape.delete(); + box.delete(); + box = OccTriangulator.makeBox(length*0.3, 0.0, -radius*0.5, length*0.4, radius, radius*0.5); + shape = OccTriangulator.makeFuse(shape2, box); + shape2.delete(); + box.delete(); + + return Collections.singletonList(shape); + } + + @Override + public void setProperties(Map props) { + if (props.containsKey("length")) + length = (Double)props.get("length"); + if (props.containsKey("radius")) { + radius = (Double)props.get("radius"); + } + + } + +}