[Bprocessor-commit] /model/src/net/sourceforge/bprocessor/model/modellor TileModellor.java, 1.17,
Status: Pre-Alpha
Brought to you by:
henryml
From: rimestad <rim...@us...> - 2007-08-31 09:09:17
|
Update of /cvsroot/bprocessor//model/src/net/sourceforge/bprocessor/model/modellor In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv32269/src/net/sourceforge/bprocessor/model/modellor Modified Files: TileModellor.java Log Message: Made the tile modellor use a outline net instead Index: TileModellor.java =================================================================== RCS file: /cvsroot/bprocessor//model/src/net/sourceforge/bprocessor/model/modellor/TileModellor.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** TileModellor.java 18 Jul 2007 12:24:09 -0000 1.17 --- TileModellor.java 31 Aug 2007 09:09:08 -0000 1.18 *************** *** 26,29 **** --- 26,30 ---- import net.sourceforge.bprocessor.model.Net; import net.sourceforge.bprocessor.model.Project; + import net.sourceforge.bprocessor.model.Selector; import net.sourceforge.bprocessor.model.Space; import net.sourceforge.bprocessor.model.Surface; *************** *** 63,66 **** --- 64,69 ---- private Net net; + + private Net outline; private Set<Surface> ignoredSurfaces = new HashSet<Surface>(); *************** *** 90,93 **** --- 93,97 ---- space.getOwner().add(startPoint); space.add(tileColor); + updateOutline(); updateNet(startPoint); Project.getInstance().addObserver(this); *************** *** 137,140 **** --- 141,145 ---- @Override public void update(Object entity) { + boolean updateNet = false; if (!isActive()) { return; *************** *** 144,149 **** --- 149,164 ---- return; } + if (entity == outline) { + parameterizeOutline(); + updateNet = true; + } else if (entity == startPoint || outline.getSurfaces().contains(entity)) { + updateNet = true; + } + if (updateNet) { + updateNet(startPoint); + } log.info("Modellor update on " + entity); space.clear(); + space.add(outline); space.add(net); int sign = 1; *************** *** 191,194 **** --- 206,238 ---- /** + * Construct the outline net + */ + private void updateOutline() { + if (outline == null) { + outline = new Net("Tile-outline"); + } + outline.clear(); + surface.copyall(outline); + + parameterizeOutline(); + } + + private void parameterizeOutline() { + for (Surface s : outline.getSurfaces()) { + boolean contained = false; + for (Attribute a : s.getParameters().getAttributes()) { + if (a.getName().equalsIgnoreCase("Fill")) { + contained = true; + break; + } + } + if (!contained) { + Selector sel = new Selector<String>("Tile", "Wall", "Glasv¾v"); + s.getParameters().add(new Attribute("Fill", sel)); + } + } + } + + /** * @param cs the coordinatesystem to use as origin */ *************** *** 198,204 **** } net.clear(); double maxX = Double.MIN_VALUE, maxY = Double.MIN_VALUE, ! minX = Double.MAX_VALUE, minY = Double.MAX_VALUE; ! for (Vertex v : surface.collect()) { Vertex translated = cs.translate(v); if (translated.getX() > maxX) { --- 242,267 ---- } net.clear(); + Collection<Edge> edges = new ArrayList<Edge>(); + for (Surface s : outline.getSurfaces()) { + for (Attribute a : s.getParameters().getAttributes()) { + if (a.getName().equalsIgnoreCase("Fill")) { + String current = ((Selector<String>)a.getValue()).getCurrentValue(); + if (!current.equalsIgnoreCase("Tile")) { + ignoredSurfaces.add(s); + } else { + edges.addAll(Edge.copy(s.getEdges())); + for (Surface hole : s.getHoles()) { + ignoredSurfaces.add(hole); + } + } + } + } + } + net.insert(edges); + + //Find min and max in given CS double maxX = Double.MIN_VALUE, maxY = Double.MIN_VALUE, ! minX = Double.MAX_VALUE, minY = Double.MAX_VALUE; ! for (Vertex v : Edge.vertices(edges)) { Vertex translated = cs.translate(v); if (translated.getX() > maxX) { *************** *** 215,224 **** } } ! surface.copyall(net); ! Collection<Edge> edges = new ArrayList<Edge>(surface.getEdges()); ! for (Surface s : surface.getHoles()) { ! ignoredSurfaces.add(s); ! edges.addAll(s.getEdges()); ! } Collection<Edge> horEdges = new LinkedList<Edge>(); Collection<Edge> vertEdges = new LinkedList<Edge>(); --- 278,282 ---- } } ! Collection<Edge> horEdges = new LinkedList<Edge>(); Collection<Edge> vertEdges = new LinkedList<Edge>(); *************** *** 234,239 **** Vertex localHori = new Vertex(0, tileSize.getHeight() / 1000.0 + jointSize / 1000.0, 0); Vertex horizontalAdd = cs.unTranslate(localHori).minus(cs.center()); ! Edge slider = new Edge(cs.unTranslate(new Vertex(minX, 0, 0)).minus(horizontalAdd), ! cs.unTranslate(new Vertex(maxX, 0, 0)).minus(horizontalAdd)); findIntersectingEdges(cs, slider, maxX, maxY, minX, minY, edges, horEdges, horVerts, horizontalAdd); --- 292,297 ---- Vertex localHori = new Vertex(0, tileSize.getHeight() / 1000.0 + jointSize / 1000.0, 0); Vertex horizontalAdd = cs.unTranslate(localHori).minus(cs.center()); ! Edge slider = new Edge(cs.unTranslate(new Vertex(minX, 0, 0)), ! cs.unTranslate(new Vertex(maxX, 0, 0))); findIntersectingEdges(cs, slider, maxX, maxY, minX, minY, edges, horEdges, horVerts, horizontalAdd); *************** *** 241,246 **** Vertex localVertical = new Vertex(tileSize.getWidth() / 1000.0 + jointSize / 1000.0, 0, 0); Vertex verticalAdd = cs.unTranslate(localVertical).minus(cs.center()); ! slider = new Edge(cs.unTranslate(new Vertex(0, minY, 0)).minus(verticalAdd), ! cs.unTranslate(new Vertex(0, maxY, 0)).minus(verticalAdd)); findIntersectingEdges(cs, slider, maxX, maxY, minX, minY, edges, vertEdges, vertVerts, verticalAdd); --- 299,304 ---- Vertex localVertical = new Vertex(tileSize.getWidth() / 1000.0 + jointSize / 1000.0, 0, 0); Vertex verticalAdd = cs.unTranslate(localVertical).minus(cs.center()); ! slider = new Edge(cs.unTranslate(new Vertex(0, minY, 0)), ! cs.unTranslate(new Vertex(0, maxY, 0))); findIntersectingEdges(cs, slider, maxX, maxY, minX, minY, edges, vertEdges, vertVerts, verticalAdd); *************** *** 407,410 **** --- 465,469 ---- space.getOwner().insert(startPoint); startPoint.relate(surface); + updateOutline(); updateNet = true; } |