]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/geometry/StraightGeometryProvider.java
Showing error messages when components overlap each other
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / geometry / StraightGeometryProvider.java
index ac63f91587d2239aedb5b66251ee148fd3f072a3..cdbd3431da0c046f15235b490220291f8a5ecfe8 100644 (file)
@@ -1,15 +1,20 @@
 package org.simantics.plant3d.geometry;
 
-import java.util.Collection;
-import java.util.Collections;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
-import org.jcae.opencascade.jni.TopoDS_Shape;
+import javax.vecmath.Point3d;
+import javax.vecmath.Tuple3d;
+import javax.vecmath.Vector3d;
+
 import org.simantics.db.Resource;
 import org.simantics.g3d.math.MathTools;
-import org.simantics.opencascade.OccTriangulator;
+import org.simantics.g3d.shape.Mesh;
+import org.simantics.g3d.shape.Tube;
 
-public class StraightGeometryProvider extends BuiltinGeometryProvider {
+//public class StraightGeometryProvider extends BuiltinGeometryProvider {
+public class StraightGeometryProvider extends BuiltinMeshProvider {
        
        public StraightGeometryProvider(Resource resource) {
                super(resource);
@@ -18,11 +23,33 @@ public class StraightGeometryProvider extends BuiltinGeometryProvider {
        private double length = 1.0;
        private double radius = 0.01;
        
-       @Override
-       public Collection<TopoDS_Shape> getModel() throws Exception {
-               TopoDS_Shape shape = OccTriangulator.makeCylinder(new double[] {-length*0.5, 0.0, 0.0}, new double[] { 1.0, 0.0, 0.0 }, radius, length);
+//     @Override
+//     public Collection<TopoDS_Shape> getModel() throws Exception {
+//             TopoDS_Shape shape = OccTriangulator.makeCylinder(new double[] {-length*0.5, 0.0, 0.0}, new double[] { 1.0, 0.0, 0.0 }, radius, length);
 //             System.out.println("Create straight l:" + length + " r:" + radius);
-               return Collections.singletonList(shape);
+//             return Collections.singletonList(shape);
+//     }
+       
+       @Override
+       public Mesh getMesh() {
+               if (length < .0001 || radius < MathTools.NEAR_ZERO )
+                       return null;
+               Tube tube = new Tube();
+               tube.setResolution(16);
+               List<Tuple3d> vertices = new ArrayList<Tuple3d>();
+               List<Double> radius = new ArrayList<Double>();
+               List<Vector3d> tangents = new ArrayList<Vector3d>();
+               vertices.add(new Point3d(-length*0.5, 0.0, 0.0));
+               vertices.add(new Point3d( length*0.5, 0.0, 0.0));
+               radius.add(this.radius);
+               radius.add(this.radius);
+               tangents.add(new Vector3d(1.0,0.0,0.0));
+               tangents.add(new Vector3d(1.0,0.0,0.0));
+               tube.setVertices(vertices);
+               tube.setRadiis(radius);
+               tube.setTangents(tangents);
+               tube.setCap(false);
+               return tube.create();
        }
        
        @Override