[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model Tesselator.java, NONE, 1.1 Vertex.ja
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2009-04-21 10:21:39
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv18998/src/net/sourceforge/bprocessor/model Modified Files: Vertex.java Surface.java Project.java Container.java Added Files: Tesselator.java Log Message: Export tesselated objects Index: Surface.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Surface.java,v retrieving revision 1.223 retrieving revision 1.224 diff -C2 -d -r1.223 -r1.224 *** Surface.java 31 Mar 2009 11:03:21 -0000 1.223 --- Surface.java 21 Apr 2009 10:21:21 -0000 1.224 *************** *** 1525,1528 **** --- 1525,1539 ---- /** + * + * @return true if valid + */ + public boolean valid() { + if (Double.isNaN(getArea())) { + return false; + } + return true; + } + + /** * Returns the outward pointing normal to this Surface * @return A vector normal for this surface, null if the surface consists of only one edge *************** *** 1533,1536 **** --- 1544,1557 ---- } + + private static boolean check(double[] values) { + for (int i = 0; i < values.length; i++) { + if (String.valueOf(values[i]).equals("NaN")) { + return false; + } + } + return true; + } + /** * @param edges edges *************** *** 1557,1560 **** --- 1578,1582 ---- ys[i] = current.y; zs[i] = current.z; + if (current == e[i].from) { current = e[i].to; *************** *** 1594,1597 **** --- 1616,1620 ---- } } + double min = Double.MAX_VALUE; int inx1 = -1; Index: Vertex.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Vertex.java,v retrieving revision 1.79 retrieving revision 1.80 diff -C2 -d -r1.79 -r1.80 *** Vertex.java 31 Mar 2009 11:03:21 -0000 1.79 --- Vertex.java 21 Apr 2009 10:21:21 -0000 1.80 *************** *** 675,677 **** --- 675,702 ---- log.info(object); } + + + private static boolean invalid(double value) { + if (Double.isNaN(value)) { + return true; + } + return false; + } + + /** + * + * @return false if problem + */ + public boolean check() { + if (invalid(x)) { + return false; + } + if (invalid(y)) { + return false; + } + if (invalid(z)) { + return false; + } + return true; + } } Index: Container.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Container.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Container.java 16 Apr 2009 11:12:10 -0000 1.19 --- Container.java 21 Apr 2009 10:21:21 -0000 1.20 *************** *** 8,11 **** --- 8,12 ---- package net.sourceforge.bprocessor.model; + import java.io.PrintStream; import java.util.ArrayList; import java.util.Collection; *************** *** 264,274 **** } } ! { ! Iterator iter = getVertices().iterator(); ! while (iter.hasNext()) { ! Geometric current = (Geometric) iter.next(); ! if (current.getOwner() != this) { ! throw new Error(current + " not owned by " + this); ! } } } --- 265,274 ---- } } ! for (Vertex current : getVertices()) { ! if (current.getOwner() != this) { ! throw new Error(current + " not owned by " + this); ! } ! if (!current.check()) { ! throw new Error(current + " is wrong "); } } *************** *** 1523,1526 **** --- 1523,1530 ---- */ public void orient(Surface leader) { + if (leader.getFrontDomain() == this) { + leader.flip(); + } + List<Surface> envelope = new LinkedList(getEnvelope()); Command.Inverse inv = new Command.Inverse(envelope); *************** *** 1553,1568 **** } } ! if (unreachable.isEmpty()) { ! System.out.println("-- everything reachable --"); ! } else { ! System.out.println("-- unreachable --"); ! for (Surface current : unreachable) { ! System.out.println(" " + current); } } } ! ! } --- 1557,1627 ---- } } + } + + /** + * + * @param out PrintStream + */ + public void exportTesselated(PrintStream out) { + Tesselator tesselator = Project.getInstance().getTesselator(); + Container holder = + new Container("tesselation of " + this.getName(), Container.FUNCTIONAL, true); + Container interior = new Container("interior", Container.CONSTRUCTION, true); + holder.add(interior); + List<Surface> surfaces = new LinkedList(getEnvelope()); ! for (Surface current : surfaces) { ! Vertex normal = current.normal(); ! ! List<Surface> triangles = tesselator.tesselate(current); ! for (Surface triangle : triangles) { ! Surface inserted = holder.insert(triangle); ! Vertex n = inserted.normal(); ! if (n.dot(normal) > 0) { ! if (current.getFrontDomain() == this) { ! inserted.setFrontDomain(interior); ! } else { ! inserted.setBackDomain(interior); ! } ! } else { ! if (current.getFrontDomain() == this) { ! inserted.setBackDomain(interior); ! } else { ! inserted.setFrontDomain(interior); ! } ! } } } + interior.orient(interior.getEnvelope().iterator().next()); + interior.export(out); + getOwner().add(holder); + Project.getInstance().changed(Project.getInstance()); } ! /** ! * ! * @param out PrintStream ! */ ! public void export(PrintStream out) { ! List<Surface> surfaces = new LinkedList(getEnvelope()); ! List<Edge> edges = new LinkedList(Surface.edges(surfaces)); ! List<Vertex> vertices = new LinkedList(Edge.vertices(edges)); ! ! HashMap<Vertex, Integer> vmap = new HashMap(); ! int count = 1; ! for (Vertex current : vertices) { ! vmap.put(current, count++); ! out.println("v " + current.getX() + ! " " + current.getY() + " " + current.getZ()); ! } ! for (Surface current : surfaces) { ! List<Vertex> verts = current.getVertices(); ! out.print("f"); ! for (Vertex v : verts) { ! int i = vmap.get(v); ! out.print(" " + i); ! } ! out.println(); ! } ! } } --- NEW FILE: Tesselator.java --- //--------------------------------------------------------------------------------- // $Id: Tesselator.java,v 1.1 2009/04/21 10:21:21 henryml Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.model; import java.util.List; /** * */ public interface Tesselator { /** * * @param surface Surface * @return list of triangular surfaces */ public List<Surface> tesselate(Surface surface); } Index: Project.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Project.java,v retrieving revision 1.162 retrieving revision 1.163 diff -C2 -d -r1.162 -r1.163 *** Project.java 30 Mar 2009 09:16:49 -0000 1.162 --- Project.java 21 Apr 2009 10:21:21 -0000 1.163 *************** *** 72,75 **** --- 72,77 ---- private static final int PORT = 8800; + private Tesselator tesselator; + /** The observers */ private List observers; *************** *** 357,360 **** --- 359,378 ---- /** * + * @param tesselator Tesselator + */ + public void setTesselator(Tesselator tesselator) { + this.tesselator = tesselator; + } + /** + * + * @return Tesselator + */ + public Tesselator getTesselator() { + return tesselator; + } + + + /** + * */ public void resetCam() { *************** *** 1499,1503 **** */ public void exportOBJ() { ! } --- 1517,1533 ---- */ public void exportOBJ() { ! List<Container> constructs = new LinkedList(); ! for (Space current : world.getElements()) { ! if (current instanceof Container) { ! if (!current.isVoid() && current.isConstructionSpace()) { ! Container container = (Container) current; ! constructs.add(container); ! } ! } ! } ! for (Container current : constructs) { ! System.out.println("-- " + current.getName() + " --"); ! current.exportTesselated(System.out); ! } } |