X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fgeometry%2FElbowGeometryProvider.java;h=d4428e495ae91fc615f6c113ce89892d2154e5b8;hb=a745e75910247c95f7a9a5f4cc0598e2ca0cf95e;hp=46aea58cded408d0cc172090f5299387bae5cdb0;hpb=a460e609147d064dd3da464bcf1626845e0f93b4;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/geometry/ElbowGeometryProvider.java b/org.simantics.plant3d/src/org/simantics/plant3d/geometry/ElbowGeometryProvider.java index 46aea58c..d4428e49 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/geometry/ElbowGeometryProvider.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/geometry/ElbowGeometryProvider.java @@ -4,12 +4,18 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + import org.jcae.opencascade.jni.TopoDS_Shape; import org.simantics.db.Resource; import org.simantics.g3d.math.MathTools; +import org.simantics.g3d.shape.ArcCylinder; +import org.simantics.g3d.shape.Mesh; import org.simantics.opencascade.OccTriangulator; -public class ElbowGeometryProvider extends BuiltinGeometryProvider { +//public class ElbowGeometryProvider extends BuiltinGeometryProvider { +public class ElbowGeometryProvider extends BuiltinMeshProvider { public ElbowGeometryProvider(Resource resource) { super(resource); @@ -19,8 +25,10 @@ public class ElbowGeometryProvider extends BuiltinGeometryProvider { private double turnRadius = 0.05; private double turnAngle = Math.PI * 0.5; - @Override +// @Override public Collection getModel() throws Exception { + if (radius < MathTools.NEAR_ZERO || turnRadius < MathTools.NEAR_ZERO) + return Collections.emptyList(); double t = Math.tan((Math.PI - turnAngle) * 0.5); double R = 0.0; if (t > MathTools.NEAR_ZERO) @@ -30,6 +38,20 @@ public class ElbowGeometryProvider extends BuiltinGeometryProvider { return Collections.singletonList(shape); } +// @Override + public Mesh getMesh() { + if (radius < MathTools.NEAR_ZERO || turnRadius < MathTools.NEAR_ZERO) + return null; + double t = Math.tan((Math.PI - turnAngle) * 0.5); + double R = 0.0; + if (t > MathTools.NEAR_ZERO) + R = turnRadius / t; + ArcCylinder cyl = new ArcCylinder(); + + //return cyl.create(new Point3d(-R, 0.0, -turnRadius), new Point3d(0.0,turnRadius,0.0), new Point3d(-R, 0.0, turnRadius), radius, 16, 0.2); + return cyl.create(new Point3d(-R, 0.0, -turnRadius), new Vector3d(0.0,1.0,0.0), new Vector3d(0.0,0.0, 1.0),turnRadius, radius, turnAngle,16, 0.2); + } + @Override public void setProperties(Map props) { if (props.containsKey("turnRadius")) @@ -42,6 +64,15 @@ public class ElbowGeometryProvider extends BuiltinGeometryProvider { if (radius < MathTools.NEAR_ZERO) radius = MathTools.NEAR_ZERO; } + + @Override + public void updateCalculatedProperties(Map returnProps) { + double t = Math.tan((Math.PI - turnAngle) * 0.5); + double R = 0.0; + if (t > MathTools.NEAR_ZERO) + R = turnRadius / t; + returnProps.put("length", R); + } }