[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool AbstractTool.java,1.31,1.32 PencilTool
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2005-11-30 23:05:03
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26883/src/net/sourceforge/bprocessor/gl/tool Modified Files: AbstractTool.java PencilTool.java CatmullClark.java Log Message: Penciltool finds intersection when hitting two edges Catmull-Clark has a corner-rule Index: CatmullClark.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/CatmullClark.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CatmullClark.java 30 Nov 2005 08:51:50 -0000 1.2 --- CatmullClark.java 30 Nov 2005 23:04:54 -0000 1.3 *************** *** 307,318 **** /** * Check if this is a crease vertex - this ! * is wrong, there should be a tag. Some * vertices with 2 or 3 edges are not crease. * @param v The vertex ! * @return Crease or not */ boolean crease(Vertex v) { int k = elGet(v).size(); ! return (k < 4); } --- 307,338 ---- /** * Check if this is a crease vertex - this ! * is a temporary solution, there should be a tag. Some * vertices with 2 or 3 edges are not crease. * @param v The vertex ! * @return True if crease */ boolean crease(Vertex v) { int k = elGet(v).size(); ! return (k == 3); ! } ! ! /** ! * Is it a corner? ! * @param v The vertex ! * @return True if corner ! */ ! boolean corner(Vertex v) { ! int k = elGet(v).size(); ! return (k == 2); ! } ! ! /** ! * Is it smooth? ! * @param v The vertex ! * @return True if smooth ! */ ! boolean smooth(Vertex v) { ! int k = elGet(v).size(); ! return (k == 4); } *************** *** 416,420 **** double n = es.size(); double[] values = new double[3]; ! if (n > 3) { List adjacent = facelistGet(v); List pts = new LinkedList(); --- 436,440 ---- double n = es.size(); double[] values = new double[3]; ! if (n == 4) { List adjacent = facelistGet(v); List pts = new LinkedList(); *************** *** 442,456 **** values[1] = q[1] / n + r[1] / n + (n - 2) * p[1] / n; values[2] = q[2] / n + r[2] / n + (n - 2) * p[2] / n; ! } else { ! values[0] = v.getX() * 6; values[1] = v.getY() * 6; values[2] = v.getZ() * 6; Iterator esit = es.iterator(); while (esit.hasNext()) { Edge e = (Edge) esit.next(); Vertex to = e.otherVertex(v); ! if (crease(to)) { values[0] += to.getX(); values[1] += to.getY(); --- 462,476 ---- values[1] = q[1] / n + r[1] / n + (n - 2) * p[1] / n; values[2] = q[2] / n + r[2] / n + (n - 2) * p[2] / n; ! } else if (n == 3) { values[0] = v.getX() * 6; values[1] = v.getY() * 6; values[2] = v.getZ() * 6; + Iterator esit = es.iterator(); while (esit.hasNext()) { Edge e = (Edge) esit.next(); Vertex to = e.otherVertex(v); ! if (!smooth(to)) { values[0] += to.getX(); values[1] += to.getY(); *************** *** 458,465 **** } } - values[0] /= 8.0; values[1] /= 8.0; values[2] /= 8.0; } positions.add(values); --- 478,488 ---- } } values[0] /= 8.0; values[1] /= 8.0; values[2] /= 8.0; + } else { + values[0] = v.getX(); + values[1] = v.getY(); + values[2] = v.getZ(); } positions.add(values); Index: PencilTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/PencilTool.java,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** PencilTool.java 24 Nov 2005 13:50:54 -0000 1.39 --- PencilTool.java 30 Nov 2005 23:04:54 -0000 1.40 *************** *** 71,74 **** --- 71,81 ---- /** The wanted length of the previous edge */ private String number = ""; + + /** Edge one */ + private Edge splitE1; + + /** Edge two */ + private Edge splitE2; + /** *************** *** 80,83 **** --- 87,121 ---- super(glv, cursor); } + + /** + * Find the object under the mouse and set target + * @param event The MouseEvent + */ + protected void findPencilTarget(MouseEvent event) { + splitE1 = null; + splitE2 = null; + int x = event.getX(); + int y = event.getY(); + View view = glv.getView(); + List selection = view.getObjectAtPoint(x, y); + if (selection.isEmpty()) { + target = null; + } else { + if (selection.size() > 1) { + Edge e1 = (Edge) selection.get(0); + Edge e2 = (Edge) selection.get(1); + Edge intersect = e1.intersection(e2); + if (intersect == null) { + target = e1; + } else { + target = intersect.getFrom(); + splitE1 = e1; + splitE2 = e2; + } + } else { + target = selection.get(0); + } + } + } /** *************** *** 149,156 **** edges = new ArrayList(); intern(vertex); ! if (target != null) { ! if (target instanceof Edge) { ! Edge edge = (Edge) target; ! edge.split(vertex); } } --- 187,198 ---- edges = new ArrayList(); intern(vertex); ! if (splitE1 != null) { ! if (!splitE1.getConstructor()) { ! splitE1.split(vertex); ! } ! } ! if (splitE2 != null) { ! if (!splitE2.getConstructor()) { ! splitE2.split(vertex); } } *************** *** 162,172 **** // The following lines of code are there to make sure // that a Surface is finished when clicking an edge.. ! if (target != null) { ! if (target instanceof Edge) { intern(vertex); ! Edge edge = (Edge) target; ! edge.split(vertex); } ! } if (vertex.getId() == null) { //log.info("ID was null on " + vertex); --- 204,219 ---- // The following lines of code are there to make sure // that a Surface is finished when clicking an edge.. ! if (splitE1 != null) { ! if (!splitE1.getConstructor()) { intern(vertex); ! splitE1.split(vertex); } ! } ! if (splitE2 != null) { ! if (!splitE2.getConstructor()) { ! intern(vertex); ! splitE2.split(vertex); ! } ! } if (vertex.getId() == null) { //log.info("ID was null on " + vertex); *************** *** 381,384 **** --- 428,432 ---- vertex.setName("current"); current = vertex; + splitE1 = edge; } } else { *************** *** 423,427 **** */ protected void pressed(MouseEvent e) { ! findTarget(e); glv.getView().makeTarget(target); boolean legal = findVertex(e); --- 471,475 ---- */ protected void pressed(MouseEvent e) { ! findPencilTarget(e); glv.getView().makeTarget(target); boolean legal = findVertex(e); *************** *** 435,439 **** */ protected void moved(MouseEvent e) { ! findTarget(e); glv.getView().makeTarget(target); if (target != null) { --- 483,487 ---- */ protected void moved(MouseEvent e) { ! findPencilTarget(e); glv.getView().makeTarget(target); if (target != null) { *************** *** 485,489 **** */ protected void released(MouseEvent e) { ! findTarget(e); glv.getView().makeTarget(target); } --- 533,537 ---- */ protected void released(MouseEvent e) { ! findPencilTarget(e); glv.getView().makeTarget(target); } Index: AbstractTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractTool.java,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** AbstractTool.java 24 Nov 2005 10:31:22 -0000 1.31 --- AbstractTool.java 30 Nov 2005 23:04:54 -0000 1.32 *************** *** 538,542 **** int y = event.getY(); View view = glv.getView(); ! target = view.getObjectAtPoint(x, y); } } --- 538,547 ---- int y = event.getY(); View view = glv.getView(); ! List selection = view.getObjectAtPoint(x, y); ! if (selection.isEmpty()) { ! target = null; ! } else { ! target = selection.get(0); ! } } } |