Search in sources :

Example 1 with Bar

use of org.twak.camp.ui.Bar 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;
}
Also used : PlanSkeleton(org.twak.siteplan.campskeleton.PlanSkeleton) IdentityHashMap(java.util.IdentityHashMap) HashMap(java.util.HashMap) Instance(org.twak.siteplan.anchors.Ship.Instance) ArrayList(java.util.ArrayList) Profile(org.twak.siteplan.campskeleton.Profile) Loop(org.twak.utils.collections.Loop) HalfEdge(org.twak.utils.geom.HalfMesh2.HalfEdge) LoopL(org.twak.utils.collections.LoopL) Marker(org.twak.camp.ui.Marker) Plan(org.twak.siteplan.campskeleton.Plan) SuperEdge(org.twak.tweed.gen.SuperEdge) Bar(org.twak.camp.ui.Bar) Point2d(javax.vecmath.Point2d) Ship(org.twak.siteplan.anchors.Ship) Cache(org.twak.utils.Cache)

Example 2 with Bar

use of org.twak.camp.ui.Bar in project chordatlas by twak.

the class SkelGen method tagWalls.

public static Profile tagWalls(Profile profile, float[] roofColor, SuperEdge se, Point2d s, Point2d e) {
    MiniFacade mini;
    if (se.toEdit == null) {
        if (se.mini == null || (se.mini.isEmpty() && se.proceduralFacade == null))
            mini = null;
        else {
            double[] range = findRange(se, s, e, se.proceduralFacade == null ? null : se.proceduralFacade.megafacade);
            if (range == null)
                mini = null;
            else
                mini = new Regularizer().go(se.mini, range[0], range[1], se.proceduralFacade);
        }
    } else
        // second time through, use the edited results
        mini = se.toEdit;
    Tag wall = new WallTag(se.profLine, se.occlusions, mini), roof = new RoofTag(roofColor);
    boolean first = true;
    for (Loop<Bar> lb : profile.points) {
        for (Loopable<Bar> ll : lb.loopableIterator()) {
            Bar b = ll.get();
            if (// || ll != lb.start && isRoof ( ll.getPrev().get() ) && b.start.distanceSquared( b.end ) < 16 )
            isRoof(b))
                b.tags.add(roof);
            else {
                if (first)
                    b.tags.add(new WallTag(se.profLine, se.occlusions, mini, true));
                else
                    b.tags.add(wall);
            }
        }
        first = false;
    }
    return profile;
}
Also used : MiniFacade(org.twak.viewTrace.facades.MiniFacade) RoofTag(org.twak.viewTrace.facades.RoofTag) Bar(org.twak.camp.ui.Bar) Regularizer(org.twak.viewTrace.facades.Regularizer) WallTag(org.twak.viewTrace.facades.WallTag) Tag(org.twak.camp.Tag) WallTag(org.twak.viewTrace.facades.WallTag) RoofTag(org.twak.viewTrace.facades.RoofTag)

Example 3 with Bar

use of org.twak.camp.ui.Bar in project chordatlas by twak.

the class GreebleSkel method findSuperEdge.

private SuperEdge findSuperEdge(Output output, List<Face> chain) {
    ColumnProperties col = ((PlanSkeleton) output.skeleton).getDefiningColumn(chain.get(0).edge);
    if (col == null)
        return null;
    Bar bar = col.defBar;
    SETag set = ((SETag) GreebleSkel.getTag(bar.tags, SETag.class));
    return set == null ? null : set.se;
}
Also used : Bar(org.twak.camp.ui.Bar) ColumnProperties(org.twak.siteplan.campskeleton.PlanSkeleton.ColumnProperties) PlanSkeleton(org.twak.siteplan.campskeleton.PlanSkeleton) SETag(org.twak.tweed.gen.skel.SETag)

Aggregations

Bar (org.twak.camp.ui.Bar)3 PlanSkeleton (org.twak.siteplan.campskeleton.PlanSkeleton)2 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 IdentityHashMap (java.util.IdentityHashMap)1 Point2d (javax.vecmath.Point2d)1 Tag (org.twak.camp.Tag)1 Marker (org.twak.camp.ui.Marker)1 Ship (org.twak.siteplan.anchors.Ship)1 Instance (org.twak.siteplan.anchors.Ship.Instance)1 Plan (org.twak.siteplan.campskeleton.Plan)1 ColumnProperties (org.twak.siteplan.campskeleton.PlanSkeleton.ColumnProperties)1 Profile (org.twak.siteplan.campskeleton.Profile)1 SuperEdge (org.twak.tweed.gen.SuperEdge)1 SETag (org.twak.tweed.gen.skel.SETag)1 Cache (org.twak.utils.Cache)1 Loop (org.twak.utils.collections.Loop)1 LoopL (org.twak.utils.collections.LoopL)1 HalfEdge (org.twak.utils.geom.HalfMesh2.HalfEdge)1 MiniFacade (org.twak.viewTrace.facades.MiniFacade)1