[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool TapeMeasureTool.java,1.1,1.2
Status: Pre-Alpha
Brought to you by:
henryml
From: Nordholt <nor...@us...> - 2005-11-30 15:40:09
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17844 Modified Files: TapeMeasureTool.java Log Message: added new temporary construction line, display of length and control from length field Index: TapeMeasureTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/TapeMeasureTool.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** TapeMeasureTool.java 29 Nov 2005 18:59:40 -0000 1.1 --- TapeMeasureTool.java 30 Nov 2005 15:39:59 -0000 1.2 *************** *** 9,12 **** --- 9,13 ---- import java.awt.Cursor; import java.awt.event.MouseEvent; + import java.awt.event.KeyEvent; import net.sourceforge.bprocessor.model.Edge; *************** *** 50,53 **** --- 51,57 ---- private Vertex edgeNormal; + /** The current number in the length field */ + private String number; + /** * Constructor *************** *** 69,110 **** if (target instanceof Surface) { Surface targetSurface = (Surface)target; ! glv.getView().makeTarget(target); ! movePlane = targetSurface.plane(); ! Vertex edgeDirection = currentEdge.getTo().minus(currentEdge.getFrom()); ! Vertex surfaceNormal = targetSurface.normal(); ! edgeNormal = edgeDirection.cross(surfaceNormal); ! edgeNormal.scale(1 / edgeNormal.length()); ! double x = e.getX(); ! double y = AbstractView.getHeight() - e.getY(); ! View v = glv.getView(); ! Transformation transformation = v.transformation(); ! Vertex near = new Vertex("near", x, y, 0.0); ! Vertex far = new Vertex("far", x, y, 1.0); ! Edge ray = new Edge("ray", near, far); ! ray = transformation.unProject(ray); ! Vertex intersect = movePlane.intersection(ray); ! Vertex delta = intersect.minus(constructionPoint); ! edgeNormal.scale(edgeNormal.dot(delta) / (edgeNormal.length() * edgeNormal.length())); ! currentConstruction.move(edgeNormal.getX(), edgeNormal.getY(), edgeNormal.getZ()); ! constructionPoint.move(edgeNormal.getX(), edgeNormal.getY(), edgeNormal.getZ()); } } else { ! edgeNormal.scale(1 / edgeNormal.length()); ! double x = e.getX(); ! double y = AbstractView.getHeight() - e.getY(); ! View v = glv.getView(); ! Transformation transformation = v.transformation(); ! Vertex near = new Vertex("near", x, y, 0.0); ! Vertex far = new Vertex("far", x, y, 1.0); ! Edge ray = new Edge("ray", near, far); ! ray = transformation.unProject(ray); ! Vertex intersect = movePlane.intersection(ray); ! Vertex delta = intersect.minus(constructionPoint); ! edgeNormal.scale(edgeNormal.dot(delta) / (edgeNormal.length() * edgeNormal.length())); ! currentConstruction.move(edgeNormal.getX(), edgeNormal.getY(), edgeNormal.getZ()); ! constructionPoint.move(edgeNormal.getX(), edgeNormal.getY(), edgeNormal.getZ()); } } } /** --- 73,117 ---- if (target instanceof Surface) { Surface targetSurface = (Surface)target; ! if (currentEdge.getSurfaces().contains(targetSurface)) { ! number = ""; ! glv.getView().makeTarget(target); ! movePlane = targetSurface.plane(); ! Vertex edgeDirection = currentEdge.getTo().minus(currentEdge.getFrom()); ! Vertex surfaceNormal = targetSurface.normal(); ! edgeNormal = edgeDirection.cross(surfaceNormal); ! move(e); ! } } } else { ! move(e); } + } else { + findTarget(e); + glv.getView().makeTarget(target); } } + + /** + * moves the construction line. + * @param e the mouseevent. + */ + private void move(MouseEvent e) { + edgeNormal.scale(1 / edgeNormal.length()); + double x = e.getX(); + double y = AbstractView.getHeight() - e.getY(); + View v = glv.getView(); + Transformation transformation = v.transformation(); + Vertex near = new Vertex("near", x, y, 0.0); + Vertex far = new Vertex("far", x, y, 1.0); + Edge ray = new Edge("ray", near, far); + ray = transformation.unProject(ray); + Vertex intersect = movePlane.intersection(ray); + Vertex delta = intersect.minus(constructionPoint); + edgeNormal.scale(edgeNormal.dot(delta) / (edgeNormal.length() * edgeNormal.length())); + currentConstruction.move(edgeNormal.getX(), edgeNormal.getY(), edgeNormal.getZ()); + constructionPoint.move(edgeNormal.getX(), edgeNormal.getY(), edgeNormal.getZ()); + number = ""; + glv.setLength(edgeToConstruction.getLength()); + } /** *************** *** 124,129 **** if (target instanceof Edge) { currentEdge = (Edge)target; ! Vertex constructionFrom = createVertex(currentEdge.getFrom().copy()); ! Vertex constructionTo = createVertex(currentEdge.getTo().copy()); currentConstruction = createEdge(constructionFrom, constructionTo); currentConstruction.setConstructor(true); --- 131,149 ---- if (target instanceof Edge) { currentEdge = (Edge)target; ! ! Vertex minus = currentEdge.getTo().minus(currentEdge.getFrom()); ! minus.scale(1 / minus.length()); ! Vertex constructionFrom = createVertex(new double[] {(currentEdge.getFrom().getX() + ! minus.getX() * -50), ! (currentEdge.getFrom().getY() + ! minus.getY() * -50), ! (currentEdge.getFrom().getZ() + ! minus.getZ() * -50)}); ! Vertex constructionTo = createVertex(new double[] {(currentEdge.getTo().getX() + ! minus.getX() * 50), ! (currentEdge.getTo().getY() + ! minus.getY() * 50), ! (currentEdge.getTo().getZ() + ! minus.getZ() * 50)}); currentConstruction = createEdge(constructionFrom, constructionTo); currentConstruction.setConstructor(true); *************** *** 138,146 **** ray = transformation.unProject(ray); Edge intersection = currentEdge.intersection(ray); ! edgePoint = createVertex(intersection.getFrom()); ! constructionPoint = createVertex(edgePoint.copy()); edgeToConstruction = new Edge("lengthEdge", edgePoint, constructionPoint); } } else { currentEdge = null; currentConstruction = null; --- 158,174 ---- ray = transformation.unProject(ray); Edge intersection = currentEdge.intersection(ray); ! edgePoint = intersection.getFrom(); ! constructionPoint = edgePoint.copy(); edgeToConstruction = new Edge("lengthEdge", edgePoint, constructionPoint); + edgeToConstruction.setConstructor(true); + v.addTempEdge(edgeToConstruction); + v.addTempVertex(edgePoint); + v.addTempVertex(constructionPoint); } } else { + View v = glv.getView(); + v.removeTempEdge(edgeToConstruction); + v.removeTempVertex(edgePoint); + v.removeTempVertex(constructionPoint); currentEdge = null; currentConstruction = null; *************** *** 148,152 **** edgeToConstruction = null; removeVertex(edgePoint); ! removeVertex(constructionPoint); } } --- 176,180 ---- edgeToConstruction = null; removeVertex(edgePoint); ! removeVertex(constructionPoint); } } *************** *** 158,161 **** --- 186,260 ---- protected void released(MouseEvent e) { } + + /** + * Invoked when a key has been pressed. + * @param e The KeyEvent + */ + public void keyPressed(KeyEvent e) { + /*a length can only be typed in if some surface is selected + for extrusion, and if the "number"-variable has been initialised + */ + super.keyPressed(e); + if (currentEdge != null && number != null) { + if (e.getKeyCode() == KeyEvent.VK_1) { + number += "1"; + } else if (e.getKeyCode() == KeyEvent.VK_2) { + number += "2"; + } else if (e.getKeyCode() == KeyEvent.VK_3) { + number += "3"; + } else if (e.getKeyCode() == KeyEvent.VK_4) { + number += "4"; + } else if (e.getKeyCode() == KeyEvent.VK_5) { + number += "5"; + } else if (e.getKeyCode() == KeyEvent.VK_6) { + number += "6"; + } else if (e.getKeyCode() == KeyEvent.VK_7) { + number += "7"; + } else if (e.getKeyCode() == KeyEvent.VK_8) { + number += "8"; + } else if (e.getKeyCode() == KeyEvent.VK_9) { + number += "9"; + } else if (e.getKeyCode() == KeyEvent.VK_0) { + number += "0"; + } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { + if (!number.equals("")) { + double length = glv.getLength(); + double currentLength = edgeToConstruction.getLength(); + Vertex minus = edgeToConstruction.getTo().minus(edgeToConstruction.getFrom()); + edgeNormal.scale(1 / edgeNormal.length()); + minus.scale(1 / minus.length()); + double delta; + if (minus.dot(edgeNormal) > 0) { + delta = length - currentLength; + } else { + delta = -(length - currentLength); + } + constructionPoint.move(edgeNormal.getX() * delta, + edgeNormal.getY() * delta, + edgeNormal.getZ() * delta); + currentConstruction.move(edgeNormal.getX() * delta, + edgeNormal.getY() * delta, + edgeNormal.getZ() * delta); + glv.repaint(); + } + } else if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) { + int length = number.length(); + if (length > 0) { + number = number.substring(0, length - 1); + } + } + if (number.equals("")) { + glv.setLength(0); + } else { + try { + double d = Double.parseDouble(number); + glv.setLength(d / 1000); + } catch (NumberFormatException exp) { + log.warn(exp); + } + } + } + super.keyPressed(e); + } } |