Search in sources :

Example 1 with Profile

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;
}
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 Profile

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;
}
Also used : Plan(org.twak.siteplan.campskeleton.Plan) PlanSkeleton(org.twak.siteplan.campskeleton.PlanSkeleton) HalfFace(org.twak.utils.geom.HalfMesh2.HalfFace) Pix2Pix(org.twak.viewTrace.facades.Pix2Pix) Tag(org.twak.camp.Tag) Bar(org.twak.camp.ui.Bar) Loop(org.twak.utils.collections.Loop) Node(com.jme3.scene.Node) Profile(org.twak.siteplan.campskeleton.Profile) IDumpObjs(org.twak.tweed.IDumpObjs) Map(java.util.Map) Cache(org.twak.utils.Cache) Siteplan(org.twak.siteplan.campskeleton.Siteplan) Prof(org.twak.tweed.gen.Prof) LoopL(org.twak.utils.collections.LoopL) IdentityHashMap(java.util.IdentityHashMap) BlockGen(org.twak.tweed.gen.BlockGen) Output(org.twak.camp.Output) ListDownLayout(org.twak.utils.ui.ListDownLayout) Line(org.twak.utils.Line) HalfEdge(org.twak.utils.geom.HalfMesh2.HalfEdge) Instance(org.twak.siteplan.anchors.Ship.Instance) HalfMesh2(org.twak.utils.geom.HalfMesh2) Regularizer(org.twak.viewTrace.facades.Regularizer) Collectors(java.util.stream.Collectors) List(java.util.List) Loopable(org.twak.utils.collections.Loopable) WallTag(org.twak.viewTrace.facades.WallTag) Optional(java.util.Optional) JPanel(javax.swing.JPanel) WindowConstants(javax.swing.WindowConstants) Gen(org.twak.tweed.gen.Gen) Ship(org.twak.siteplan.anchors.Ship) ActionListener(java.awt.event.ActionListener) ProfileAssignmentViewer(org.twak.tweed.gen.ProfileAssignmentViewer) HashMap(java.util.HashMap) MiniFacade(org.twak.viewTrace.facades.MiniFacade) Plot(org.twak.utils.ui.Plot) Tweed(org.twak.tweed.Tweed) SkelFootprint(org.twak.tweed.gen.SkelFootprint) ArrayList(java.util.ArrayList) TweedSettings(org.twak.tweed.TweedSettings) MiniViewer(org.twak.tweed.gen.MiniViewer) Spatial(com.jme3.scene.Spatial) Mathz(org.twak.utils.Mathz) PaintThing(org.twak.utils.PaintThing) ProgressMonitor(javax.swing.ProgressMonitor) SuperEdge(org.twak.tweed.gen.SuperEdge) JComponent(javax.swing.JComponent) JButton(javax.swing.JButton) Iterator(java.util.Iterator) GreebleSkel(org.twak.viewTrace.facades.GreebleSkel) Marker(org.twak.camp.ui.Marker) ActionEvent(java.awt.event.ActionEvent) JmeGen(org.twak.tweed.gen.JmeGen) OnClick(org.twak.viewTrace.facades.GreebleSkel.OnClick) Loopz(org.twak.utils.collections.Loopz) Point2d(javax.vecmath.Point2d) Changed(org.twak.utils.WeakListener.Changed) Jme3z(org.twak.siteplan.jme.Jme3z) JLabel(javax.swing.JLabel) RoofTag(org.twak.viewTrace.facades.RoofTag) Skeleton(org.twak.camp.Skeleton) ObjDump(org.twak.utils.geom.ObjDump) SuperFace(org.twak.tweed.gen.SuperFace) Collections(java.util.Collections) CGAMini(org.twak.viewTrace.facades.CGAMini) CompareGens(org.twak.tweed.CompareGens) Point2d(javax.vecmath.Point2d) Prof(org.twak.tweed.gen.Prof)

Aggregations

ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 IdentityHashMap (java.util.IdentityHashMap)2 Point2d (javax.vecmath.Point2d)2 Bar (org.twak.camp.ui.Bar)2 Marker (org.twak.camp.ui.Marker)2 Ship (org.twak.siteplan.anchors.Ship)2 Instance (org.twak.siteplan.anchors.Ship.Instance)2 Plan (org.twak.siteplan.campskeleton.Plan)2 PlanSkeleton (org.twak.siteplan.campskeleton.PlanSkeleton)2 Profile (org.twak.siteplan.campskeleton.Profile)2 SuperEdge (org.twak.tweed.gen.SuperEdge)2 Cache (org.twak.utils.Cache)2 Loop (org.twak.utils.collections.Loop)2 LoopL (org.twak.utils.collections.LoopL)2 HalfEdge (org.twak.utils.geom.HalfMesh2.HalfEdge)2 Node (com.jme3.scene.Node)1 Spatial (com.jme3.scene.Spatial)1 ActionEvent (java.awt.event.ActionEvent)1 ActionListener (java.awt.event.ActionListener)1