use of org.twak.siteplan.campskeleton.Profile in project chordatlas by twak.
the class SkelGen method buildCamp.
private static PlanSkeleton buildCamp(SuperFace sf, Double cap) {
Plan plan = new Plan();
LoopL<Bar> loopl = new LoopL();
Loop<Bar> loop = new Loop();
loopl.add(loop);
Cache<Point2d, Point2d> cache = new Cache<Point2d, Point2d>() {
@Override
public Point2d create(Point2d i) {
return new Point2d(i.x, i.y);
}
};
LoopL<HalfEdge> edges = sf.findHoles();
LoopL<Point2d> lpd = new LoopL();
for (Loop<HalfEdge> loopHE : edges) {
Map<Point2d, SuperEdge> ses = new HashMap();
Loop<Point2d> lp = new Loop();
lpd.add(lp);
for (HalfEdge he : loopHE) {
SuperEdge se = (SuperEdge) he;
lp.append(se.start);
ses.put(se.start, se);
}
lp = Loopz.mergeAdjacentEdges2(lp, 0.001);
for (Loopable<Point2d> lpb : lp.loopableIterator()) {
Bar b = new Bar(cache.get(lpb.getNext().get()), cache.get(lpb.get()));
SuperEdge se = ses.get(lpb.get());
Profile profile = null;
if (se.prof == null || se.prof.size() < 2) {
List<Point2d> defpts = new ArrayList<>();
defpts.add(new Point2d(0, 0));
defpts.add(new Point2d(0, -sf.height * 1.2));
profile = new Profile(defpts);
} else {
profile = toProfile(se.prof);
}
tagWalls(profile, ((SuperFace) se.face).roofColor, se, lpb.get(), lpb.getNext().get());
plan.addLoop(profile.points.get(0), plan.root, profile);
b.tags.add(new SETag(se));
loop.prepend(b);
plan.profiles.put(b, profile);
}
}
plan.points = loopl;
if (cap != null) {
// skel.capAt( cap, a -> skel.capArea = a ); simple...but doesn't show in the siteplan ui
Ship s = new FlatRoofShip(cap, plan);
for (Profile prof : plan.profiles.values()) {
for (Loop<Bar> lb : prof.points) {
boolean addedMarker = false;
for (Bar b : lb) {
if (-b.start.y < cap && -b.end.y > cap || (!addedMarker && b == lb.start.getPrev().get())) {
Marker m = new Marker();
m.set(b.toLine().xAtY(-cap), -cap);
m.bar = b;
m.bar.mould.create(m, null);
Instance i = s.newInstance();
i.anchors[0].setProfileGen(m.generator);
addedMarker = true;
}
}
}
}
plan.ships.add(s);
}
PlanSkeleton skel = new PlanSkeleton(plan);
skel.skeleton();
return skel;
}
use of org.twak.siteplan.campskeleton.Profile in project chordatlas by twak.
the class SkelGen method toProf.
private Prof toProf(Profile profile) {
List<Point2d> pts = profile.points.get(0).stream().map(b -> new Point2d(-b.end.x, -b.end.y)).collect(Collectors.toList());
pts.add(0, new Point2d());
Prof prof = new Prof();
for (Point2d p : pts) prof.add(p);
return prof;
}
Aggregations