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);
}
}
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);
}
}
}
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);
}
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();
}
}
Aggregations