]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/g3d/shape/Sphere.java
Mesh API to use Tuple3d instead of Vector3d
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / shape / Sphere.java
index 6eb26dfafd367ea4b76bafd11658b56307e2e55e..d007175a6915b30bfc66dad23fb3c3836478777f 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.g3d.shape;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import javax.vecmath.AxisAngle4d;\r
-import javax.vecmath.Vector3d;\r
-\r
-import org.simantics.g3d.math.MathTools;\r
-\r
-public class Sphere {\r
-\r
-       public static Mesh create(double radius, int s, int p) {\r
-               if (s < 3 || p < 3 || radius < MathTools.NEAR_ZERO)\r
-                       throw new IllegalArgumentException();\r
-               List<Vector3d> vertices = new ArrayList<Vector3d>((s-2)*p + 2);\r
-               List<Vector3d> normals = new ArrayList<Vector3d>(vertices.size());\r
-               List<Integer> indices = new ArrayList<Integer>(((s-3)*p*2 + p * 2)*3);\r
-               Vector3d v = new Vector3d(0.0,-radius,0.0);\r
-               Vector3d vp = new Vector3d();\r
-               for (int ip = 0; ip < p; ip++) {\r
-                       if (ip == 0) {\r
-                               vertices.add(new Vector3d(0.0,-radius,0.0));\r
-                       } else if (ip == p - 1) {\r
-                               vertices.add(new Vector3d(0.0, radius,0.0));\r
-                               int off = 1 + (ip-2)*s;\r
-                               for (int is = 0; is < s; is++) {\r
-                                       indices.add(vertices.size() - 1);\r
-                                       indices.add(is+off);\r
-                                       if (is < s -1)\r
-                                               indices.add(is+off+1);\r
-                                       else\r
-                                               indices.add(off);\r
-                                       \r
-                                       \r
-                               }\r
-                       } else {\r
-                               AxisAngle4d aa = new AxisAngle4d(1, 0, 0, ((double)ip/(double)(p-1))*Math.PI);\r
-                               MathTools.rotate(MathTools.getQuat(aa), v, vp);\r
-                               for (int is = 0; is < s; is++) {\r
-                                       aa = new AxisAngle4d(0, 1, 0, ((double)is/(double)s)*Math.PI*2);\r
-                                       Vector3d vs = new Vector3d();\r
-                                       MathTools.rotate(MathTools.getQuat(aa), vp, vs);\r
-                                       vertices.add(vs);\r
-                               }\r
-                               if (ip == 1) {\r
-                                       for (int is = 0; is < s; is++) {\r
-                                               indices.add(0);\r
-                                               if (is < s -1)\r
-                                                       indices.add(is+2);\r
-                                               else\r
-                                                       indices.add(1);\r
-                                               indices.add(is+1);\r
-                                       }\r
-                               } else {\r
-                                       int off = 1 + (ip-1)*s;\r
-                                       for (int is = 0; is < s-1; is++) {\r
-                                               indices.add(off + is - s);\r
-                                               indices.add(off + is+1);\r
-                                               indices.add(off + is);\r
-                                               \r
-                                               \r
-                                               indices.add(off + is - s);\r
-                                               indices.add(off + is + 1 - s);\r
-                                               indices.add(off + is + 1);\r
-                                               \r
-                                       }\r
-                                       indices.add(off - 1);\r
-                                       indices.add(off);\r
-                                       indices.add(off + s - 1);\r
-                                       \r
-                                       indices.add(off -1);\r
-                                       indices.add(off - s);\r
-                                       indices.add(off);\r
-                                       \r
-                               }\r
-                       }\r
-               }\r
-               for (int i = 0; i < vertices.size(); i++) {\r
-                       Vector3d n = new Vector3d(vertices.get(i));\r
-                       n.normalize();\r
-                       normals.add(n);\r
-               }\r
-               \r
-               return new Mesh(vertices,normals,indices);\r
-               \r
-       }\r
-       \r
-       public static void main(String arg[]) {\r
-               Mesh s1 = create(1.0, 3, 3);\r
-               Mesh s2 = create(1.0, 4, 4);\r
-               System.out.println("debug " + s1 + " " + s2);\r
-       }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.g3d.shape;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.vecmath.AxisAngle4d;
+import javax.vecmath.Vector3d;
+
+import org.simantics.g3d.math.MathTools;
+
+public class Sphere {
+
+       public static Mesh create(double radius, int s, int p) {
+               if (s < 3 || p < 3 || radius < MathTools.NEAR_ZERO)
+                       throw new IllegalArgumentException();
+               List<Vector3d> vertices = new ArrayList<Vector3d>((s-2)*p + 2);
+               List<Vector3d> normals = new ArrayList<Vector3d>(vertices.size());
+               List<Integer> indices = new ArrayList<Integer>(((s-3)*p*2 + p * 2)*3);
+               Vector3d v = new Vector3d(0.0,-radius,0.0);
+               Vector3d vp = new Vector3d();
+               for (int ip = 0; ip < p; ip++) {
+                       if (ip == 0) {
+                               vertices.add(new Vector3d(0.0,-radius,0.0));
+                       } else if (ip == p - 1) {
+                               vertices.add(new Vector3d(0.0, radius,0.0));
+                               int off = 1 + (ip-2)*s;
+                               for (int is = 0; is < s; is++) {
+                                       indices.add(vertices.size() - 1);
+                                       indices.add(is+off);
+                                       if (is < s -1)
+                                               indices.add(is+off+1);
+                                       else
+                                               indices.add(off);
+                                       
+                                       
+                               }
+                       } else {
+                               AxisAngle4d aa = new AxisAngle4d(1, 0, 0, ((double)ip/(double)(p-1))*Math.PI);
+                               MathTools.rotate(MathTools.getQuat(aa), v, vp);
+                               for (int is = 0; is < s; is++) {
+                                       aa = new AxisAngle4d(0, 1, 0, ((double)is/(double)s)*Math.PI*2);
+                                       Vector3d vs = new Vector3d();
+                                       MathTools.rotate(MathTools.getQuat(aa), vp, vs);
+                                       vertices.add(vs);
+                               }
+                               if (ip == 1) {
+                                       for (int is = 0; is < s; is++) {
+                                               indices.add(0);
+                                               if (is < s -1)
+                                                       indices.add(is+2);
+                                               else
+                                                       indices.add(1);
+                                               indices.add(is+1);
+                                       }
+                               } else {
+                                       int off = 1 + (ip-1)*s;
+                                       for (int is = 0; is < s-1; is++) {
+                                               indices.add(off + is - s);
+                                               indices.add(off + is+1);
+                                               indices.add(off + is);
+                                               
+                                               
+                                               indices.add(off + is - s);
+                                               indices.add(off + is + 1 - s);
+                                               indices.add(off + is + 1);
+                                               
+                                       }
+                                       indices.add(off - 1);
+                                       indices.add(off);
+                                       indices.add(off + s - 1);
+                                       
+                                       indices.add(off -1);
+                                       indices.add(off - s);
+                                       indices.add(off);
+                                       
+                               }
+                       }
+               }
+               for (int i = 0; i < vertices.size(); i++) {
+                       Vector3d n = new Vector3d(vertices.get(i));
+                       n.normalize();
+                       normals.add(n);
+               }
+               
+               return Mesh.create(vertices,normals,indices);
+               
+       }
+       
+       public static void main(String arg[]) {
+               Mesh s1 = create(1.0, 3, 3);
+               Mesh s2 = create(1.0, 4, 4);
+               System.out.println("debug " + s1 + " " + s2);
+       }
+}