[Bprocessor-commit] facade/src/net/sourceforge/bprocessor/facade/modellor WindowModellor.java, 1.3
Status: Pre-Alpha
Brought to you by:
henryml
From: rimestad <rim...@us...> - 2006-08-29 10:04:07
|
Update of /cvsroot/bprocessor/facade/src/net/sourceforge/bprocessor/facade/modellor In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv18077/src/net/sourceforge/bprocessor/facade/modellor Modified Files: WindowModellor.java Log Message: Fixed some problems and matbe the windowmodellor is working now Index: WindowModellor.java =================================================================== RCS file: /cvsroot/bprocessor/facade/src/net/sourceforge/bprocessor/facade/modellor/WindowModellor.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** WindowModellor.java 28 Aug 2006 16:44:44 -0000 1.3 --- WindowModellor.java 29 Aug 2006 10:04:03 -0000 1.4 *************** *** 13,19 **** --- 13,22 ---- import java.util.List; import java.util.Iterator; + import java.util.Set; import net.sourceforge.bprocessor.model.Attribute; import net.sourceforge.bprocessor.model.Edge; + import net.sourceforge.bprocessor.model.Entity; + import net.sourceforge.bprocessor.model.Geometry; import net.sourceforge.bprocessor.model.Plane; import net.sourceforge.bprocessor.model.Project; *************** *** 25,28 **** --- 28,34 ---- /** A modellor to make windows */ public class WindowModellor extends Modellor { + /** Id */ + private static final long serialVersionUID = 1L; + /** The width of the frame */ private double framewidth = 0.054; *************** *** 49,52 **** --- 55,67 ---- private Surface opposite; + /** the constructed spaces */ + private List elements; + + /** The constructed geometry */ + private Set extension; + + /** The direction of action */ + private int sign; + /** * the constructor *************** *** 63,66 **** --- 78,133 ---- space = s; surface = sur; + elements = new LinkedList(); + extension = new HashSet(); + + if (s.getEnvelope().size() == 1) { + System.out.println("was here"); + Surface ext = sur.getExterior(); + double minDist = Double.NaN; + if (ext != null) { + Collection tryout = new ArrayList(0); + if (sur.getFrontDomain() == s) { + Space front = ext.getFrontDomain(); + if (front != null) { + tryout = front.getEnvelope(); + } + System.out.println("frontdomain " + ext.getFrontDomain()); + } else { + Space back = ext.getBackDomain(); + if (back != null) { + tryout = back.getEnvelope(); + } + System.out.println("backdomain " + ext.getBackDomain()); + } + Iterator iter = tryout.iterator(); + Vertex normal = sur.normal(); + Vertex center = sur.center(); + while (iter.hasNext()) { + Surface cur = (Surface)iter.next(); + Plane p = cur.plane(); + Vertex inter = p.intersection(center, normal, true); + if (inter != null) { + double dist = center.distance(inter); + System.out.println("Were here and internersection " + inter + + " with dist " + dist); + if (Double.isNaN(minDist) || (dist < minDist && dist > 0.00001)) { + minDist = dist; + System.out.println("Found a surface with dist " + dist); + } + } + } + } + if (Double.isNaN(minDist)) { + minDist = framedepth + offset; + } + sign = 1; + if (surface.getBackDomain() == space) { + sign = -1; + } + opposite = sur.extrude(sign * minDist, extension); + Geometry.holeAnalysis(opposite); + extension.add(opposite); + } + drawWindow(); } *************** *** 80,93 **** /** Draw the window */ public void drawWindow() { - if (surface.getBackDomain() == space) { - surface.extrude(-(offset + framewidth), new HashSet()); - } else { - surface.extrude(offset + framewidth, new HashSet()); - } - Space frame = new Space("Frame", Space.CONSTRUCTION, true); Space glass = new Space("Glass", Space.CONSTRUCTION, true); glass.setTransparent(true); Surface inner = surface.copy(space); inner.setFrontDomain(frame); //make hole in frame --- 147,155 ---- /** Draw the window */ public void drawWindow() { Space frame = new Space("Frame", Space.CONSTRUCTION, true); Space glass = new Space("Glass", Space.CONSTRUCTION, true); glass.setTransparent(true); Surface inner = surface.copy(space); + elements.add(inner); inner.setFrontDomain(frame); //make hole in frame *************** *** 104,112 **** } Surface glasssurface = new Surface(holeedges); inner.addHole(glasssurface); space.add(glasssurface); glasssurface.setFrontDomain(glass); ! Surface frametop = inner.extrude(framedepth, new HashSet()); ! frametop.addHole(glasssurface.extrude(framedepth, new HashSet())); space.add(frame); space.add(glass); --- 166,182 ---- } Surface glasssurface = new Surface(holeedges); + elements.add(glasssurface); inner.addHole(glasssurface); space.add(glasssurface); glasssurface.setFrontDomain(glass); ! HashSet tmp = new HashSet(); ! Surface frametop = inner.extrude(sign * framedepth, tmp); ! elements.addAll(tmp); ! elements.add(frametop); ! tmp.clear(); ! Surface hole = glasssurface.extrude(sign * framedepth, tmp); ! elements.add(hole); ! frametop.addHole(hole); ! elements.addAll(tmp); space.add(frame); space.add(glass); *************** *** 117,158 **** */ public Modellor newInstance(Space s) { - if (s.getSurfaces().size() == 1) { - Surface sur = (Surface)s.getSurfaces().iterator().next(); - Surface ext = sur.getExterior(); - double minDist = Double.NaN; - if (sur != null) { - Collection tryout = new ArrayList(0); - if (sur.getFrontDomain() == s) { - Space front = ext.getFrontDomain(); - if (front != null) { - tryout = front.getEnvelope(); - } - System.out.println("frontdomain " + ext.getFrontDomain()); - } else { - Space back = ext.getBackDomain(); - if (back != null) { - tryout = back.getEnvelope(); - } - System.out.println("backdomain " + ext.getBackDomain()); - } - Iterator iter = tryout.iterator(); - while (iter.hasNext()) { - Surface cur = (Surface)iter.next(); - Vertex center = cur.center(); - Plane p = cur.plane(); - Vertex inter = p.intersection(cur.center(), cur.normal(), true); - System.out.println("Were here and internersection " + inter); - double dist = center.distance(inter); - if (inter != null && dist < minDist) { - minDist = dist; - System.out.println("Found a surface with dist " + dist); - } - } - } - if (Double.isNaN(minDist)) { - minDist = framedepth + offset; - } - opposite = sur.extrude(minDist, new HashSet()); - } return new WindowModellor(s, (Surface)(s.getEnvelope().iterator().next())); } --- 187,190 ---- *************** *** 163,166 **** --- 195,205 ---- public void delete() { cleanUp(); + + Iterator iter = extension.iterator(); + while (iter.hasNext()) { + Surface s = (Surface)iter.next(); + s.delete(); + } + space.setModellor(null); } *************** *** 170,188 **** */ private void cleanUp() { ! Collection added = space.getElements(); ! Iterator iter = added.iterator(); while (iter.hasNext()) { ! Space s = (Space)iter.next(); ! s.delete(); } ! if (opposite != null) { ! Collection surs = space.getSurfaces(); ! iter = surs.iterator(); ! while (iter.hasNext()) { ! Surface cur = (Surface)iter.next(); ! if (cur != surface) { ! cur.delete(); ! } ! } } } --- 209,223 ---- */ private void cleanUp() { ! Iterator iter = elements.iterator(); while (iter.hasNext()) { ! Entity e = (Entity)iter.next(); ! e.delete(); } ! elements.clear(); ! ! iter = space.getElements().iterator(); ! while (iter.hasNext()) { ! Space s = (Space)iter.next(); ! space.remove(s); } } |