[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool MoveTool.java,1.38,1.39
Status: Pre-Alpha
Brought to you by:
henryml
From: Nordholt <nor...@us...> - 2006-02-17 09:57:29
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5755/tool Modified Files: MoveTool.java Log Message: made changes in implementation of controlled move Index: MoveTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/MoveTool.java,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** MoveTool.java 16 Feb 2006 20:58:14 -0000 1.38 --- MoveTool.java 17 Feb 2006 09:57:24 -0000 1.39 *************** *** 26,29 **** --- 26,30 ---- import java.util.Collection; + import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; *************** *** 98,101 **** --- 99,109 ---- private Edge fromSlideEdge; + /** + * Mapping from each vertex being moved, + * to a vertex defining the direction of the + * edge the moving vertex slides on + */ + private HashMap slideMap; + /** The edge being moved in a controlled way */ private Edge controlled; *************** *** 113,116 **** --- 121,125 ---- toSlideEdge = null; fromSlideEdge = null; + slideMap = null; numberOfClicks = 1; moveMode = AXIS_RESTRICTED; *************** *** 297,346 **** //Restricting movement to fit movement mode. delta = restrict(delta, e); ! ! if (moveMode == CONTROLLED) { ! Vertex toDelta; ! Vertex fromDelta; ! ! Vertex deltaUnit = delta.copy(); ! deltaUnit.scale(1 / deltaUnit.length()); ! ! Vertex toDir = toSlideEdge.getTo().minus(toSlideEdge.getFrom()); ! double toScale; ! if (delta.getX() != 0) { ! toScale = delta.getX() / (toDir.dot(deltaUnit) * deltaUnit.getX()); ! } else if (delta.getY() != 0) { ! toScale = delta.getY() / (toDir.dot(deltaUnit) * deltaUnit.getY()); ! } else { ! toScale = delta.getZ() / (toDir.dot(deltaUnit) * deltaUnit.getZ()); ! } ! ! Vertex fromDir = fromSlideEdge.getTo().minus(fromSlideEdge.getFrom()); ! double fromScale; ! if (delta.getX() != 0) { ! fromScale = delta.getX() / (fromDir.dot(deltaUnit) * deltaUnit.getX()); ! } else if (delta.getY() != 0) { ! fromScale = delta.getY() / (fromDir.dot(deltaUnit) * deltaUnit.getY()); ! } else { ! fromScale = delta.getZ() / (fromDir.dot(deltaUnit) * deltaUnit.getZ()); ! } ! ! toDir.scale(toScale); ! toDelta = toDir; ! fromDir.scale(fromScale); ! fromDelta = fromDir; ! ! ! controlled.getTo().move(toDelta.getX(), toDelta.getY(), toDelta.getZ()); ! controlled.getFrom().move(fromDelta.getX(), fromDelta.getY(), fromDelta.getZ()); ! } ! if (log.isDebugEnabled()) { log.debug("from " + from.getX() + ", " + from.getY() + ", " + from.getZ()); log.debug("delta " + delta.getX() + ", " + delta.getY() + ", " + delta.getZ()); } ! //delta = snapToInitial(delta); if (moveMode != CONTROLLED) { move(vertices, delta); } from.move(delta.getX(), delta.getY(), delta.getZ()); --- 306,321 ---- //Restricting movement to fit movement mode. delta = restrict(delta, e); ! if (log.isDebugEnabled()) { log.debug("from " + from.getX() + ", " + from.getY() + ", " + from.getZ()); log.debug("delta " + delta.getX() + ", " + delta.getY() + ", " + delta.getZ()); } ! //delta = snapToInitial(delta); + if (moveMode != CONTROLLED) { move(vertices, delta); + } else { + slideMove(vertices, delta); } from.move(delta.getX(), delta.getY(), delta.getZ()); *************** *** 495,498 **** --- 470,476 ---- toSlideEdge = rightEdge; } + slideMap = new HashMap(); + slideMap.put(controlled.getTo(), toSlideEdge.getDirection()); + slideMap.put(controlled.getFrom(), fromSlideEdge.getDirection()); } else { dragPlane = null; *************** *** 634,637 **** --- 612,641 ---- } } + + /** + * Moves a set of vertices in a controlled way, so that they slide along + * vectors specified in the slideMap. + * @param vertices The vertices that should be moved. + * @param delta the movement. + */ + private void slideMove(Collection vertices, Vertex delta) { + Vertex deltaUnit = delta.copy(); + deltaUnit.scale(1 / delta.length()); + Iterator it = vertices.iterator(); + while (it.hasNext()) { + Vertex vertex = (Vertex)it.next(); + Vertex slideDir = (Vertex)slideMap.get(vertex); + double slideScale; + if (delta.getX() != 0) { + slideScale = delta.getX() / (slideDir.dot(deltaUnit) * deltaUnit.getX()); + } else if (delta.getY() != 0) { + slideScale = delta.getY() / (slideDir.dot(deltaUnit) * deltaUnit.getY()); + } else { + slideScale = delta.getZ() / (slideDir.dot(deltaUnit) * deltaUnit.getZ()); + } + slideDir.scale(slideScale); + vertex.move(slideDir.getX(), slideDir.getY(), slideDir.getZ()); + } + } /** |