-/*******************************************************************************\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 Cone {\r
-\r
- public static Mesh create(double radius, int s) {\r
- if (s < 3 || radius < MathTools.NEAR_ZERO)\r
- throw new IllegalArgumentException();\r
- List<Vector3d> vertices = new ArrayList<Vector3d>(s+2);\r
- List<Vector3d> normals = new ArrayList<Vector3d>(vertices.size());\r
- List<Integer> indices = new ArrayList<Integer>();\r
- \r
- vertices.add(new Vector3d(0.0,0.0,0.0));\r
- normals.add(new Vector3d(0.0,-1.0,0.0));\r
- vertices.add(new Vector3d(0.0,radius*2.0,0.0));\r
- normals.add(new Vector3d(0.0,1.0,0.0));\r
- \r
- Vector3d v = new Vector3d(radius,0,0);\r
- for (int i = 0; i < s; i++) {\r
- AxisAngle4d aa = new AxisAngle4d(0,1,0,((double)i/(double)s)*Math.PI * 2);\r
- Vector3d t = new Vector3d();\r
- MathTools.rotate(MathTools.getQuat(aa), v, t);\r
- vertices.add(t);\r
- Vector3d n = new Vector3d(t);\r
- n.normalize();\r
- normals.add(n);\r
- }\r
- \r
- for (int i = 0; i < s; i++) {\r
- indices.add(0);\r
- \r
- if (i < s - 1)\r
- indices.add(i + 3);\r
- else\r
- indices.add(2);\r
- indices.add(i + 2);\r
- }\r
- \r
- for (int i = 0; i < s; i++) {\r
- indices.add(1);\r
- indices.add(i + 2);\r
- if (i < s - 1)\r
- indices.add(i + 3);\r
- else\r
- indices.add(2);\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);\r
- Mesh s2 = create(1.0, 4);\r
- System.out.println("debug " + s1 + "\n" + 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 Cone {
+
+ public static Mesh create(double radius, int s) {
+ if (s < 3 || radius < MathTools.NEAR_ZERO)
+ throw new IllegalArgumentException();
+ List<Vector3d> vertices = new ArrayList<Vector3d>(s+2);
+ List<Vector3d> normals = new ArrayList<Vector3d>(vertices.size());
+ List<Integer> indices = new ArrayList<Integer>();
+
+ vertices.add(new Vector3d(0.0,0.0,0.0));
+ normals.add(new Vector3d(0.0,-1.0,0.0));
+ vertices.add(new Vector3d(0.0,radius*2.0,0.0));
+ normals.add(new Vector3d(0.0,1.0,0.0));
+
+ Vector3d v = new Vector3d(radius,0,0);
+ for (int i = 0; i < s; i++) {
+ AxisAngle4d aa = new AxisAngle4d(0,1,0,((double)i/(double)s)*Math.PI * 2);
+ Vector3d t = new Vector3d();
+ MathTools.rotate(MathTools.getQuat(aa), v, t);
+ vertices.add(t);
+ Vector3d n = new Vector3d(t);
+ n.normalize();
+ normals.add(n);
+ }
+
+ for (int i = 0; i < s; i++) {
+ indices.add(0);
+
+ if (i < s - 1)
+ indices.add(i + 3);
+ else
+ indices.add(2);
+ indices.add(i + 2);
+ }
+
+ for (int i = 0; i < s; i++) {
+ indices.add(1);
+ indices.add(i + 2);
+ if (i < s - 1)
+ indices.add(i + 3);
+ else
+ indices.add(2);
+
+ }
+ return Mesh.create(vertices,normals,indices);
+
+ }
+
+ public static void main(String arg[]) {
+ Mesh s1 = create(1.0, 3);
+ Mesh s2 = create(1.0, 4);
+ System.out.println("debug " + s1 + "\n" + s2);
+ }
+}