X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fproconf%2Fg3d%2Fgizmo%2FRotateGizmo.java;fp=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fproconf%2Fg3d%2Fgizmo%2FRotateGizmo.java;h=0000000000000000000000000000000000000000;hb=6b6fcff5d6c326feef07ccf8401f97911778fffe;hp=adc44a15ea8ecc9999c262e854b49e60cff84c39;hpb=504c111db40d78f4913badddd126b283b5504dbb;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/proconf/g3d/gizmo/RotateGizmo.java b/org.simantics.g3d/src/org/simantics/proconf/g3d/gizmo/RotateGizmo.java deleted file mode 100644 index adc44a15..00000000 --- a/org.simantics.g3d/src/org/simantics/proconf/g3d/gizmo/RotateGizmo.java +++ /dev/null @@ -1,308 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007- VTT Technical Research Centre of Finland. - * 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.proconf.g3d.gizmo; - -import javax.vecmath.Color4f; -import javax.vecmath.Point3f; - -import com.jme.bounding.BoundingBox; -import com.jme.renderer.Renderer; -import com.jme.scene.TriMesh; -import com.jme.scene.state.AlphaState; -import com.jme.scene.state.MaterialState; -import com.jme.scene.state.ZBufferState; -import com.jme.util.geom.BufferUtils; - - - -public class RotateGizmo extends MultiSelectionGizmo { - - - public static String PICK_NAME = "rotate"; - public static String X_NAME = "rx"; - public static String Y_NAME = "ry"; - public static String Z_NAME = "rz"; - public static String XYZ_NAME = "ra"; - - public static final int X = 0; - public static final int Y = 1; - public static final int Z = 2; - public static final int XYZ = 3; - - - - - /* (non-Javadoc) - * @see fi.vtt.proconf.shapeeditor.common.Gizmo#getPickPrefix() - */ - public String getPickPrefix() { - return PICK_NAME; - } - - public int getIndexForName(String name) { - if (!name.startsWith(PICK_NAME)) { - return -1; - } - name = name.substring(PICK_NAME.length()); - if (name.startsWith(X_NAME)) - return X; - if (name.startsWith(Y_NAME)) - return Y; - if (name.startsWith(Z_NAME)) - return Z; - if (name.startsWith(XYZ_NAME)) - return XYZ; - return -1; - } - - - @Override - public int getCount() { - return 4; - } - - public RotateGizmo(Renderer renderer) { - super(); - float radius = 2.f; - float radius2 = 1.8f; - int div = 9; - - float x[] = new float[div+1]; - float y[] = new float[div+1]; - float x2[] = new float[div+1]; - float y2[] = new float[div+1]; - x[0] = radius; - y[0] = 0.f; - x[div] = 0.f; - y[div] = radius; - x2[0] = radius2; - y2[0] = 0.f; - x2[div] = 0.f; - y2[div] = radius2; - - for (int i = 1; i < div; i++) { - float angle = (float)i/(float)div; - angle *= Math.PI * 0.5f; - float c = (float)Math.cos(angle); - float s = (float)Math.sin(angle); - x[i] = radius * c; - y[i] = radius * s; - x2[i] = radius2 * c; - y2[i] = radius2 * s; - - } - - Color4f colorx = new Color4f(0.5f,0.f,0.f,0.5f); - Color4f colory = new Color4f(0.f,0.5f,0.f,0.5f); - Color4f colorz = new Color4f(0.f,0.f,0.5f,0.5f); - Color4f scolorx = new Color4f(1.f,0.f,0.f,0.7f); - Color4f scolory = new Color4f(0.f,1.f,0.f,0.7f); - Color4f scolorz = new Color4f(0.f,0.f,1.f,0.7f); - - - Color4f colorxyz = new Color4f(); - colorxyz.x = colorx.x + colory.x + colorz.x; - colorxyz.y = colorx.y + colory.y + colorz.y; - colorxyz.z = colorx.z +colory.z + colorz.z; - colorxyz.w = 0.5f; - - Color4f scolorxyz = new Color4f(); - scolorxyz.x = scolorx.x + scolory.x + scolorz.x; - scolorxyz.y = scolorx.y + scolory.y + scolorz.y; - scolorxyz.z = scolorx.z + scolory.z + scolorz.z; - scolorxyz.w = 0.5f; - - int numVertices = div*2; - float coordinates[] = new float[numVertices*3 + numVertices*3]; - float cols[] = new float[numVertices*4*2]; - int[] indices = new int[numVertices*3-6+numVertices*3 - 12]; - for (int i = 0; i < div; i++) { - if (i == 0) { - indices[0] = 0; - indices[1] = 1; - indices[2] = 2; - continue; - } - int vIndex = i * 2 - 1; - int index = i * 6 - 3; - if (i == div - 1) { - indices[index] = vIndex; - indices[index+1] = vIndex+1; - indices[index+2] = vIndex+2; - - } else { - indices[index] = vIndex; - indices[index+1] = vIndex+1; - indices[index+2] = vIndex+2; - indices[index+3] = vIndex+1; - indices[index+4] = vIndex+3; - indices[index+5] = vIndex+2; - } - } - - for (int i = div+1; i < div * 2 - 1; i++) { - int vIndex = i * 2 - 1; - int index = i * 6 - 12; - - indices[index] = vIndex; - indices[index+1] = vIndex+1; - indices[index+2] = vIndex+2; - indices[index+3] = vIndex+1; - indices[index+4] = vIndex+3; - indices[index+5] = vIndex+2; - } - - for (int i = 0; i < numVertices*2; i++) - setColor(cols,i, colorx); - - setCoordinate(coordinates,0, new Point3f(0.f, x[0], 0.f)); - for (int i = 1; i < div; i++) { - int index = i * 2 - 1; - setCoordinate(coordinates,index,new Point3f(0.f,x[i],y[i])); - setCoordinate(coordinates,index+1,new Point3f(y[1],x[i],y[i])); - } - setCoordinate(coordinates,numVertices - 1, new Point3f(0.f, 0.f, y[div])); - - setCoordinate(coordinates,numVertices, new Point3f(0.f, x2[0], 0.f)); - for (int i = 1; i < div; i++) { - int index = (div+i) * 2 - 1; - setCoordinate(coordinates,index,new Point3f(y[1],x[i],y[i])); - setCoordinate(coordinates,index+1,new Point3f(y2[1],x2[i],y2[i])); - } - setCoordinate(coordinates,numVertices*2 - 1, new Point3f(0.f, 0.f, y2[div])); - - TriMesh linex = new TriMesh(PICK_NAME+X_NAME,BufferUtils.createFloatBuffer(coordinates),null,BufferUtils.createFloatBuffer(cols),null,BufferUtils.createIntBuffer(indices)); - - - for (int i = 0; i < numVertices*2; i++) - setColor(cols,i, colory); - - setCoordinate(coordinates,0, new Point3f(x[0], 0.f, 0.f)); - for (int i = 1; i < div; i++) { - int index = i * 2 - 1; - setCoordinate(coordinates,index,new Point3f(x[i],0.f,y[i])); - setCoordinate(coordinates,index+1,new Point3f(x[i],y[1],y[i])); - } - setCoordinate(coordinates,numVertices - 1, new Point3f(0.f, 0.f, y[div])); - - setCoordinate(coordinates,numVertices, new Point3f(x2[0], 0.f, 0.f)); - for (int i = 1; i < div; i++) { - int index = (div+i) * 2 - 1; - setCoordinate(coordinates,index,new Point3f(x[i],y[1],y[i])); - setCoordinate(coordinates,index+1,new Point3f(x2[i],y2[1],y2[i])); - } - setCoordinate(coordinates,numVertices*2 - 1, new Point3f(0.f, 0.f, y2[div])); - - TriMesh liney = new TriMesh(PICK_NAME+Y_NAME,BufferUtils.createFloatBuffer(coordinates),null,BufferUtils.createFloatBuffer(cols),null,BufferUtils.createIntBuffer(indices)); - - - for (int i = 0; i < numVertices*2; i++) - setColor(cols,i, colorz); - - setCoordinate(coordinates,0, new Point3f(0.f, x[0], 0.f)); - for (int i = 1; i < div; i++) { - int index = i * 2 - 1; - setCoordinate(coordinates,index,new Point3f(y[i],x[i],0.f)); - setCoordinate(coordinates,index+1,new Point3f(y[i],x[i],y[1])); - } - setCoordinate(coordinates,numVertices - 1, new Point3f(y[div],0.f, 0.f)); - - setCoordinate(coordinates,numVertices, new Point3f(0.f, x2[0], 0.f)); - for (int i = 1; i < div; i++) { - int index = (div+i) * 2 - 1; - setCoordinate(coordinates,index,new Point3f(y[i],x[i],y[1])); - setCoordinate(coordinates,index+1,new Point3f(y2[i],x2[i],y2[1])); - } - setCoordinate(coordinates,numVertices*2 - 1, new Point3f(y2[div],0.f, 0.f)); - - TriMesh linez = new TriMesh(PICK_NAME+Z_NAME,BufferUtils.createFloatBuffer(coordinates),null,BufferUtils.createFloatBuffer(cols),null,BufferUtils.createIntBuffer(indices)); - - - numVertices = (div-2)*3+1; - coordinates = new float[numVertices*3]; - cols = new float[numVertices*4]; - indices = new int[(div-2)*3*3]; - - for (int i = 0; i < numVertices; i++) - setColor(cols,i, colorxyz); - float center = radius * 0.5f;//(float)Math.cos(Math.PI*0.25); - setCoordinate(coordinates,0,new Point3f(center,center,center)); - for (int i = 1; i < div; i++) { - int index = i; - setCoordinate(coordinates,index,new Point3f(y2[1],x2[i],y2[i])); - } - for (int i = 1; i < div; i++) { - int index = i + div-1 - 1; - setCoordinate(coordinates,index,new Point3f(y2[i],y2[1],x2[i])); - } - for (int i = 1; i < div-1; i++) { - int index = i + 2*(div-1) -2; - setCoordinate(coordinates,index,new Point3f(x2[i],y2[i],y2[1])); - } - for (int i = 0; i < (div-2)*3; i++) { - int index = i*3; - int iindex = i+1; - indices[index] = 0; - indices[index+1] = iindex; - indices[index+2] = iindex+1; - if (iindex == (numVertices -1)) - indices[index+2] = 1; - - } - - TriMesh trianglexyz = new TriMesh(PICK_NAME+XYZ_NAME,BufferUtils.createFloatBuffer(coordinates),null,BufferUtils.createFloatBuffer(cols),null,BufferUtils.createIntBuffer(indices)); - - - getGizmoNode().attachChild(linex); - getGizmoNode().attachChild(liney); - getGizmoNode().attachChild(linez); - getGizmoNode().attachChild(trianglexyz); - getGizmoNode().setModelBound(new BoundingBox()); - getGizmoNode().updateModelBound(); - - linex.getBatch(0).setCastsShadows(false); - liney.getBatch(0).setCastsShadows(false); - linez.getBatch(0).setCastsShadows(false); - trianglexyz.getBatch(0).setCastsShadows(false); - - setGeometry(0,linex); - setGeometry(1,liney); - setGeometry(2,linez); - setGeometry(3,trianglexyz); - - setColor(0,0,colorx); - setColor(0,1,scolorx); - setColor(1,0,colory); - setColor(1,1,scolory); - setColor(2,0,colorz); - setColor(2,1,scolorz); - setColor(3,0,colorxyz); - setColor(3,1,scolorxyz); - - AlphaState as = renderer.createAlphaState(); - as.setBlendEnabled(true); - as.setSrcFunction(AlphaState.DB_SRC_ALPHA); - as.setDstFunction(AlphaState.DB_ONE_MINUS_SRC_ALPHA); - as.setEnabled(true); - getGizmoNode().setRenderState(as); - MaterialState ms = renderer.createMaterialState(); - ms.setColorMaterial(MaterialState.CM_AMBIENT_AND_DIFFUSE); - ms.setMaterialFace(MaterialState.MF_FRONT_AND_BACK); - getGizmoNode().setRenderState(ms); - ZBufferState zs = renderer.createZBufferState(); - zs.setFunction(ZBufferState.CF_ALWAYS); - zs.setEnabled(true); - getGizmoNode().setRenderState(zs); - - - } - -} \ No newline at end of file