Search in sources :

Example 81 with Point2d

use of javax.vecmath.Point2d in project chordatlas by twak.

the class SkelFootprint method meanModeHeightColor.

public static void meanModeHeightColor(Loop<Point2d> pts, SuperFace sf, BlockGen blockgen) {
    double[] minMax = Loopz.minMax2d(pts);
    double sample = 2;
    double missCost = 30;
    if (sf.colors != null)
        sf.colors.clear();
    sf.heights.clear();
    int insideGIS = 0, outsideGIS = 0;
    LoopL<Point2d> gis = blockgen.profileGen.gis;
    gis = Loopz.removeInnerEdges(gis);
    gis = Loopz.removeNegativeArea(gis, -1);
    gis = Loopz.mergeAdjacentEdges(gis, 1, 0.05);
    for (double x = minMax[0]; x < minMax[1]; x += sample) for (double y = minMax[2]; y < minMax[3]; y += sample) {
        x += Math.random() * sample - sample / 2;
        y += Math.random() * sample - sample / 2;
        Point2d p2d = new Point2d(x, y);
        if (Loopz.inside(p2d, pts)) {
            CollisionResults results = new CollisionResults();
            blockgen.gNode.collideWith(new Ray(Jme3z.toJmeV(x, 0, y), UP), results);
            CollisionResult cr = results.getFarthestCollision();
            double height;
            if (cr != null) {
                height = cr.getDistance();
                sf.heights.add(height);
                if (sf != null && sf.colors != null) {
                    ColorRGBA col = getColor(cr.getGeometry(), cr.getContactPoint(), cr.getTriangleIndex(), blockgen.tweed);
                    sf.colors.add(new float[] { col.r, col.g, col.b });
                }
            }
            if (Loopz.inside(p2d, gis)) {
                insideGIS++;
            // PaintThing.debug( Color.yellow, 1, p2d);
            } else {
                outsideGIS++;
            // PaintThing.debug( Color.green, 1, p2d);
            }
        }
    }
    if (sf.heights.size() < 2)
        sf.height = -Double.MAX_VALUE;
    else if (TweedSettings.settings.useGis && insideGIS < gisInterior * outsideGIS)
        sf.height = -missCost;
    else {
        sf.updateHeight();
    }
    sf.maxProfHeights = new ArrayList();
    for (HalfEdge e : sf) {
        SuperEdge se = ((SuperEdge) e);
        if (se.profLine != null)
            for (Prof p : ((SuperLine) se.profLine).getMega().getTween(e.start, e.end, 0.3)) sf.maxProfHeights.add(p.get(p.size() - 1).y);
    }
}
Also used : CollisionResult(com.jme3.collision.CollisionResult) ArrayList(java.util.ArrayList) HalfEdge(org.twak.utils.geom.HalfMesh2.HalfEdge) Ray(com.jme3.math.Ray) MFPoint(org.twak.tweed.gen.FeatureCache.MFPoint) ColorRGBA(com.jme3.math.ColorRGBA) Point2d(javax.vecmath.Point2d) CollisionResults(com.jme3.collision.CollisionResults) SuperLine(org.twak.viewTrace.SuperLine)

Example 82 with Point2d

use of javax.vecmath.Point2d in project chordatlas by twak.

the class SkelFootprint method fractureOnFeatures.

private void fractureOnFeatures(MultiMap<MegaFeatures, MFPoint> minis, List<Line> footprint, HalfMesh2 mesh) {
    for (MegaFeatures mf : minis.keySet()) pt: for (MFPoint pt : minis.get(mf)) {
        if (!Mathz.inRange(mf.megafacade.findPPram(pt), 0, 1))
            continue;
        Vector2d dir = pt.mega.megafacade.dir();
        dir.set(dir.y, -dir.x);
        Point2d probe = new Point2d(dir);
        probe.scale(2 / dir.length());
        probe.add(pt);
        for (// don't fracture near minifacade boundaries...we can't distinguish nice block bondaries
        Point2d avoid : // don't fracture near minifacade boundaries...we can't distinguish nice block bondaries
        pt.mega.megafacade.points()) if (avoid.distanceSquared(pt) < 4)
            continue pt;
        double bestDist = Double.MAX_VALUE;
        for (HalfFace f : mesh.faces) for (HalfEdge e : f) if (e.line().dir().angle(dir) < 0.4) {
            double dist = e.line().distance(probe);
            if (dist < bestDist)
                bestDist = dist;
        }
        if (bestDist > 0.3) {
            Vector2d end = new Vector2d(dir);
            end.scale(3 / end.length());
            end.add(probe);
            Vector2d start = new Vector2d(dir);
            start.scale(0.5 / start.length());
            start.add(pt);
            Line extra = new Line(new Point2d(start), new Point2d(end));
            SkelFootprint.insert(mesh, extra, 2, false, false);
        }
    }
}
Also used : Line(org.twak.utils.Line) SuperLine(org.twak.viewTrace.SuperLine) MegaFeatures(org.twak.tweed.gen.FeatureCache.MegaFeatures) Vector2d(javax.vecmath.Vector2d) Point2d(javax.vecmath.Point2d) MFPoint(org.twak.tweed.gen.FeatureCache.MFPoint) HalfEdge(org.twak.utils.geom.HalfMesh2.HalfEdge) HalfFace(org.twak.utils.geom.HalfMesh2.HalfFace)

Example 83 with Point2d

use of javax.vecmath.Point2d in project chordatlas by twak.

the class SkelFootprint method fracture.

private static void fracture(HalfMesh2 mesh, HalfEdge previous, Vector2d dir, double remainingHard, double remainingSoft, Line line, boolean setLine) {
    if (previous == null)
        // at edge of shape: done
        return;
    HalfEdge p2 = previous.face.fracture(previous.end, dir, previous, previous.next);
    if (p2 == null) {
        System.err.println("failed to find intersection from " + previous.end + " dir " + dir);
        return;
    }
    HalfEdge next = p2.next.over;
    HalfEdge dividing = previous.face.split(mesh, previous, p2);
    ((SuperEdge) dividing).profLine = setLine ? (SuperLine) line : null;
    double l = dividing.length();
    if (remainingHard != 0)
        if (remainingHard < l) {
            Point2d softStart = new Point2d(dir);
            softStart.scale(remainingHard / dir.length());
            softStart.add(previous.end);
            dividing.split(softStart);
            ((SuperEdge) dividing.next).profLine = null;
            ((SuperEdge) dividing.next.over).profLine = null;
            fracture(mesh, next, dir, 0, remainingSoft - l + remainingHard, null, setLine);
        } else
            fracture(mesh, next, dir, remainingHard - l, remainingSoft, line, setLine);
    else if (remainingSoft > l)
        fracture(mesh, next, dir, 0, remainingSoft - l, line, setLine);
}
Also used : Point2d(javax.vecmath.Point2d) SuperLine(org.twak.viewTrace.SuperLine) HalfEdge(org.twak.utils.geom.HalfMesh2.HalfEdge)

Example 84 with Point2d

use of javax.vecmath.Point2d in project Smiles2Monomers by yoann-dufresne.

the class MonomersSerialization method serializeObject.

private void serializeObject(Monomer mono, ObjectOutputStream oos) {
    try {
        oos.writeInt(mono.getMolecule().getAtomCount());
        for (IAtom a : mono.getMolecule().atoms()) {
            Point2d p = a.getPoint2d();
            oos.writeDouble(p.x);
            oos.writeDouble(p.y);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Also used : Point2d(javax.vecmath.Point2d) IOException(java.io.IOException) IAtom(org.openscience.cdk.interfaces.IAtom)

Aggregations

Point2d (javax.vecmath.Point2d)84 Line (org.twak.utils.Line)37 ArrayList (java.util.ArrayList)29 Point3d (javax.vecmath.Point3d)27 List (java.util.List)18 Vector2d (javax.vecmath.Vector2d)17 SuperLine (org.twak.viewTrace.SuperLine)17 File (java.io.File)15 Vector3d (javax.vecmath.Vector3d)15 Map (java.util.Map)14 HalfEdge (org.twak.utils.geom.HalfMesh2.HalfEdge)14 HashMap (java.util.HashMap)13 Loop (org.twak.utils.collections.Loop)13 Collectors (java.util.stream.Collectors)12 IOException (java.io.IOException)11 HashSet (java.util.HashSet)11 Set (java.util.Set)11 Tweed (org.twak.tweed.Tweed)11 Matrix4d (javax.vecmath.Matrix4d)10 LinearForm (org.twak.utils.geom.LinearForm)10