use of org.concord.energy3d.util.PolygonWithHoles in project energy3d by concord-consortium.
the class Roof method drawRoof.
private void drawRoof() {
applyOverhang(wallUpperPoints, wallNormals);
processRoofEditPoints(wallUpperPoints);
computeGableEditPoints();
ensureEditPointsInside();
final PolygonWithHoles polygon = makePolygon(wallUpperPoints);
applySteinerPoint(polygon);
MeshLib.fillMeshWithPolygon(mesh, polygon, null, true, null, null, null, false);
MeshLib.groupByPlanar(mesh, roofPartsRoot);
hideGableRoofParts();
int roofPartIndex = 0;
for (final Spatial child : roofPartsRoot.getChildren()) {
((Mesh) ((Node) child).getChild(0)).setUserData(new UserData(this, roofPartIndex, false));
((Mesh) ((Node) child).getChild(REAL_MESH_INDEX)).setUserData(new UserData(this, roofPartIndex, false));
roofPartIndex++;
}
final List<Window> windows = new ArrayList<Window>();
for (final HousePart part : children) {
if (part instanceof Window && part.isDrawable()) {
windows.add((Window) part);
}
}
MeshLib.applyHoles(roofPartsRoot, windows);
setAnnotationsVisible(Scene.getInstance().areAnnotationsVisible());
}
use of org.concord.energy3d.util.PolygonWithHoles in project energy3d by concord-consortium.
the class Wall method drawPolygon.
private void drawPolygon(final List<List<Vector3>> wallAndWindowsPoints, final Mesh mesh, final boolean drawHoles, final boolean normal, final boolean texture) {
final List<PolygonPoint> polygonPoints = new ArrayList<PolygonPoint>(wallAndWindowsPoints.get(0).size());
for (final Vector3 p : wallAndWindowsPoints.get(0)) {
final PolygonPoint tp = new PolygonPoint(p.getX(), p.getY(), p.getZ());
toXY.transform(tp);
polygonPoints.add(tp);
}
final PolygonWithHoles polygon = new PolygonWithHoles(polygonPoints);
if (drawHoles) {
for (int i = 1; i < wallAndWindowsPoints.size(); i++) {
final List<PolygonPoint> holePoints = new ArrayList<PolygonPoint>(wallAndWindowsPoints.get(i).size());
for (final Vector3 p : wallAndWindowsPoints.get(i)) {
final PolygonPoint tp = new PolygonPoint(p.getX(), p.getY(), p.getZ());
toXY.transform(tp);
holePoints.add(tp);
}
polygon.addHole(new Polygon(holePoints));
}
}
if (texture) {
final double scale = Scene.getInstance().getTextureMode() == TextureMode.Simple ? 1.0 : 8.0;
final boolean fullTexture = Scene.getInstance().getTextureMode() == TextureMode.Full;
final ReadOnlyVector3 p0 = getAbsPoint(0);
final ReadOnlyVector3 p01 = getAbsPoint(1).subtractLocal(p0).normalizeLocal().multiplyLocal(scale * (fullTexture ? 1.5 : 1.0));
final ReadOnlyVector3 p02 = getAbsPoint(2).subtractLocal(p0).normalizeLocal().multiplyLocal(scale * (fullTexture ? 2.0 : 1.0));
final TPoint o = new TPoint(p0.getX(), p0.getY(), p0.getZ());
final TPoint u = new TPoint(p01.getX(), p01.getY(), p01.getZ());
final TPoint v = new TPoint(p02.getX(), p02.getY(), p02.getZ());
toXY.transform(o);
toXY.transform(u);
MeshLib.fillMeshWithPolygon(mesh, polygon, fromXY, normal, o, u, v, true);
} else {
MeshLib.fillMeshWithPolygon(mesh, polygon, fromXY, normal, null, null, null, true);
}
}
Aggregations