- private void draw(GL gl, boolean triangles, Mesh mesh) {
- float red = 0.0f;
- float green = 0.0f;
- float blue = 0.0f;
- for(Mesh.T t : mesh) {
- if (red < 0.15) red = 1.0f;
- if (green < 0.15) green = 1.0f;
- if (blue < 0.15) blue = 1.0f;
- red -= .09f;
- green -= .12f;
- blue -= .15f;
-
- if (triangles) switch(t.colorclass) {
- case 0: gl.glColor4f((float)0.25, (float)0.25, (float)0.75, (float)0.3); break;
- case 1: gl.glColor4f((float)0.25, (float)0.75, (float)0.25, (float)0.3); break;
- case 2: gl.glColor4f((float)0.75, (float)0.25, (float)0.25, (float)0.3); break;
- case 3: gl.glColor4f((float)0.50, (float)0.50, (float)0.50, (float)0.3); break;
- case 4: gl.glColor4f((float)0.25, (float)0.75, (float)0.75, (float)0.3); break;
- case 5: gl.glColor4f((float)0.25, (float)0.75, (float)0.75, (float)0.3); break;
- case 6: gl.glColor4f((float)0.75, (float)0.25, (float)0.75, (float)0.3); break;
- }
- gl.glColor4f((float)0.75, (float)0.25, (float)0.25, (float)0.3);
- //gl.glBegin(GL.GL_LINES);
-
- if (triangles) {
- gl.glBegin(GL.GL_TRIANGLES);
- t.glVertices(gl);
- gl.glEnd();
- } else {
-
- gl.glDisable(GL.GL_LIGHTING);
- gl.glBegin(GL.GL_LINES);
- gl.glColor3f(1, 1, 1);
- t.e1().p1.p.glVertex(gl);
- t.e1().p2.p.glVertex(gl);
- t.e2().p1.p.glVertex(gl);
- t.e2().p2.p.glVertex(gl);
- t.e3().p1.p.glVertex(gl);
- t.e3().p2.p.glVertex(gl);
- gl.glEnd();
- gl.glEnable(GL.GL_LIGHTING);
+ // update vertex visibilities
+ // FIXME: only do this when we switch into vertex-finding mode
+ updateVisibility(gl);
+
+ Matrix projection = Matrix.getProjectionMatrix(gl);
+ double dist = Double.MAX_VALUE;
+ if (getMouseClick() != null) return;
+ closest = null;
+ for(Mesh mesh : meshes)
+ if (mesh.option_selectable)
+ for(Mesh.Vertex v : mesh.vertices()) {
+ if (!v.visible) continue;
+ Point p = projection.times(v.getPoint());
+ int x = (int)p.x;
+ int y = (int)p.y;
+ int mousex = (int)getMouse().x;
+ int mousey = (int)getMouse().y;
+ if (closest==null || (x-mousex)*(x-mousex)+(y-mousey)*(y-mousey) < dist) {
+ dist = (x-mousex)*(x-mousex)+(y-mousey)*(y-mousey);
+ closest = v;
+ }
+ }