[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Command.java, 1.29, 1.30
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2007-11-16 14:26:32
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv10679/src/net/sourceforge/bprocessor/model Modified Files: Command.java Log Message: offset command improved Index: Command.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Command.java,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** Command.java 16 Nov 2007 13:15:08 -0000 1.29 --- Command.java 16 Nov 2007 14:26:29 -0000 1.30 *************** *** 882,894 **** } } } return vertices; } private List<Edge> offset(List<Edge> edges, double distance) { List<Edge> contour = new LinkedList(); { List<Vertex> vertices = vertices(edges); ! Vertex normal = Surface.normalOf(edges); if (vertices.size() > 2) { List<Vertex> result = offset(vertices, normal, distance); --- 882,962 ---- } } + } else { + Edge e0 = edges.get(0); + vertices.add(e0.from); + vertices.add(e0.to); } return vertices; } + /** + * Order a list of edges + * @param edges list of edges + * @return orderd list of edges + */ + public static List<Edge> order(List<Edge> edges) { + LinkedList<Edge> ordered = new LinkedList(); + { + Set<Edge> mark = new HashSet(); + Edge first = edges.get(0); + ordered.add(first); + mark.add(first); + + { + Vertex to = first.getTo(); + boolean working = true; + while (working) { + search: + for (Edge current : edges) { + working = false; + if (!mark.contains(current)) { + if (current.contains(to)) { + ordered.addLast(current); + mark.add(current); + to = current.otherVertex(to); + working = true; + break search; + } + } + } + } + } + { + Vertex from = first.getFrom(); + boolean working = true; + while (working) { + search: + for (Edge current : edges) { + working = false; + if (!mark.contains(current)) { + if (current.contains(from)) { + ordered.addFirst(current); + mark.add(current); + from = current.otherVertex(from); + working = true; + break search; + } + } + } + } + } + if (mark.size() < edges.size()) { + return null; + } + } + return ordered; + } + private List<Edge> offset(List<Edge> edges, double distance) { List<Edge> contour = new LinkedList(); { List<Vertex> vertices = vertices(edges); ! Vertex normal; ! if (edges.size() > 1) { ! normal = Surface.normalOf(edges); ! } else { ! normal = Project.getInstance().getActiveCoordinateSystem().getN(); ! } ! if (vertices.size() > 2) { List<Vertex> result = offset(vertices, normal, distance); *************** *** 913,918 **** public void evaluate() { double distance = parameters.getDouble("distance"); ! List<Edge> contour = offset(edges, distance); ! Geometry.insertEdges(contour); } } --- 981,989 ---- public void evaluate() { double distance = parameters.getDouble("distance"); ! List<Edge> ordered = order(edges); ! if (ordered != null) { ! List<Edge> contour = offset(ordered, distance); ! Geometry.insertEdges(contour); ! } } } |