X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d.csg%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fcsg%2Fscenegraph2%2FRectangularSolidNode.java;fp=org.simantics.g3d.csg%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fcsg%2Fscenegraph2%2FRectangularSolidNode.java;h=6fb7f105c9abf9618ee655fe9258012be36f3f5a;hb=87b3241ec277ba3d8e414b26186a032c9cdcaeed;hp=0000000000000000000000000000000000000000;hpb=1f0bcd66274375f2278d2e6c486cb28257a5f7b2;p=simantics%2F3d.git diff --git a/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java b/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java new file mode 100644 index 00000000..6fb7f105 --- /dev/null +++ b/org.simantics.g3d.csg/src/org/simantics/g3d/csg/scenegraph2/RectangularSolidNode.java @@ -0,0 +1,171 @@ +package org.simantics.g3d.csg.scenegraph2; + +import org.jcae.opencascade.jni.BRepBuilderAPI_MakeEdge; +import org.jcae.opencascade.jni.BRepBuilderAPI_MakeWire; +import org.jcae.opencascade.jni.BRepOffsetAPI_ThruSections; +import org.jcae.opencascade.jni.TopoDS_Edge; +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.RectangularSolid) +public class RectangularSolidNode extends CSGnode { + + double x1 = 0.5; + double x2 = 1.0; + double y = 1.0; + double z1 = 0.5; + double z2 = 1.0; + + + @RelatedSetValue(CSG.URIs.HasXAxisMinimumSize) + @SetPropertyValue(CSG.URIs.HasXAxisMinimumSize) + public void setX1(double d) { + this.x1 = d; + firePropertyChanged(CSG.URIs.HasXAxisMinimumSize); + } + + @RelatedSetValue(CSG.URIs.HasXAxisMaximumSize) + @SetPropertyValue(CSG.URIs.HasXAxisMaximumSize) + public void setX2(double d) { + this.x2 = d; + firePropertyChanged(CSG.URIs.HasXAxisMaximumSize); + } + + @RelatedSetValue(CSG.URIs.HasYAxisSize) + @SetPropertyValue(CSG.URIs.HasYAxisSize) + public void setSY(double d) { + this.y = d; + firePropertyChanged(CSG.URIs.HasYAxisSize); + } + + @RelatedSetValue(CSG.URIs.HasZAxisMinimumSize) + @SetPropertyValue(CSG.URIs.HasZAxisMinimumSize) + public void setZ1(double d) { + this.z1 = d; + firePropertyChanged(CSG.URIs.HasZAxisMinimumSize); + } + + @RelatedSetValue(CSG.URIs.HasZAxisMaximumSize) + @SetPropertyValue(CSG.URIs.HasZAxisMaximumSize) + public void setZ2(double d) { + this.z2 = d; + firePropertyChanged(CSG.URIs.HasZAxisMaximumSize); + } + + @RelatedGetValue(CSG.URIs.HasXAxisMinimumSize) + @GetPropertyValue(value=CSG.URIs.HasXAxisMinimumSize, name = "X Min Size") + public double getX1() { + return x1; + } + + @RelatedGetValue(CSG.URIs.HasXAxisMaximumSize) + @GetPropertyValue(value=CSG.URIs.HasXAxisMaximumSize, name = "X Max Size") + public double getX2() { + return x2; + } + + @RelatedGetValue(CSG.URIs.HasYAxisSize) + @GetPropertyValue(value=CSG.URIs.HasYAxisSize, name = "Y Size") + public double getY() { + return y; + } + + @RelatedGetValue(CSG.URIs.HasZAxisMinimumSize) + @GetPropertyValue(value=CSG.URIs.HasZAxisMinimumSize, name = "Z Min Size") + public double getZ1() { + return z1; + } + + @RelatedGetValue(CSG.URIs.HasZAxisMaximumSize) + @GetPropertyValue(value=CSG.URIs.HasZAxisMaximumSize, name = "Z Max Size") + public double getZ2() { + return z2; + } + + @Override + public TopoDS_Shape getBaseGeometry() { + double x1 = this.x1 *0.5; + double x2 = this.x2 *0.5; + double z1 = this.z1 *0.5; + double z2 = this.z2 *0.5; + double y = this.y * 0.5; + + BRepBuilderAPI_MakeWire wire = new BRepBuilderAPI_MakeWire(); + BRepBuilderAPI_MakeEdge edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,z1},new double[]{x1,-y,-z1}); + TopoDS_Edge top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(new double[]{x1,-y,-z1},new double[]{-x1,-y,-z1}); + top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,-z1},new double[]{-x1,-y,z1}); + top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(new double[]{-x1,-y,z1},new double[]{x1,-y,z1}); + top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + TopoDS_Wire w1 = (TopoDS_Wire)wire.shape(); + wire.delete(); + wire = new BRepBuilderAPI_MakeWire(); + + + edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,z2},new double[]{x2, y,-z2}); + top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(new double[]{x2, y,-z2},new double[]{-x2, y,-z2}); + top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,-z2},new double[]{-x2, y,z2}); + top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + edge = new BRepBuilderAPI_MakeEdge(new double[]{-x2, y,z2},new double[]{x2, y,z2}); + top_edge = (TopoDS_Edge)edge.shape(); + wire.add(top_edge); + edge.delete(); + top_edge.delete(); + + TopoDS_Wire w2 = (TopoDS_Wire)wire.shape(); + wire.delete(); + + BRepOffsetAPI_ThruSections generatorb = new BRepOffsetAPI_ThruSections(true, true); + generatorb.addWire(w1); + generatorb.addWire(w2); + generatorb.build(); + w1.delete(); + w2.delete(); + + TopoDS_Shape shape = generatorb.shape(); + generatorb.delete(); + + return shape; + } + + +}