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);
private double turnRadius = 0.05;
private double turnAngle = Math.PI * 0.5;
- @Override
+// @Override
public Collection<TopoDS_Shape> 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)
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<String, Object> props) {
if (props.containsKey("turnRadius"))
if (radius < MathTools.NEAR_ZERO)
radius = MathTools.NEAR_ZERO;
}
+
+ @Override
+ public void updateCalculatedProperties(Map<String, Object> 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);
+ }
}