/** * Calculate intersection of left site of polygon cut multiple times by * different splitting lines. The result is on left site of each of * splitting lines. * * @param multiPolygon * the polygon to cut * @param lines * splitting lines * @return the polygon which is on left site of each of splitting lines */ public static MultiPolygonList2d intersectionOfLeftSideOfMultipleCuts(MultiPolygonList2d multiPolygon, LinePoints2d... lines) { MultiPolygonList2d leftMultiPolygon = multiPolygon; for (LinePoints2d line : lines) { MultiPolygonSplitResult splitResult = splitMultiPolygon(leftMultiPolygon, line); leftMultiPolygon = splitResult.getLeftMultiPolygon(); } return leftMultiPolygon; }
public static MultiPolygonList2d intersectionOfLeftSideOfMultipleCuts(MultiPolygonList2d polygons, Point2d... lines) { return PolygonSplitHelper.intersectionOfLeftSideOfMultipleCuts(polygons, PolygonSplitHelper.polygonalChaniToLineArray(lines)); }
public static MultiPolygonSplitResult splitMultiPolygon(MultiPolygonList2d multiPolygon, LinePoints2d splittingLine) { SplitResult splitResult = split(multiPolygon, splittingLine); MultiPolygonList2d leftMultiPolygons = toMultiPolygon(splitResult.getLeftPolygons()); MultiPolygonList2d rightMultiPolygons = toMultiPolygon(splitResult.getRightPolygons()); return new MultiPolygonSplitResult(leftMultiPolygons, rightMultiPolygons); }
private static MultiPolygonList2d applyWindowsBegin(MultiPolygonList2d mPoly, BuildingNodeElement be, Point2d segmentStart, Vector2d segmentDirection, double nodeDisplacement, CatchFaceFactory pCatchFaceFactory, BuildingElementsTextureManager pTextureMenager, boolean counterClockwise) { if (be instanceof SquareHoleElement) { SquareHoleElement she = (SquareHoleElement) be; Point2d mbp = new Point2d(0, she.getMinHeight()); Point2d rbp = new Point2d(she.getWidth() / 2.0, she.getMinHeight()); Point2d rtp = new Point2d(she.getWidth() / 2.0, she.getMaxHeight()); Point2d mtp = new Point2d(0, she.getMaxHeight()); mPoly = PolygonSplitHelper.unionOfLeftSideOfMultipleCuts(mPoly, new LinePoints2d(rtp, rbp), new LinePoints2d(mtp, rtp), new LinePoints2d(rbp, mbp)); TextureData td = findWindowTextureData(be, pTextureMenager); MeshFactory mesh = pCatchFaceFactory.createOrGetMeshFactory(td.getTex0()); FaceFactory face = mesh.addFace(FaceType.QUADS); Vector3d n = new Vector3d(-segmentDirection.y, 0, -segmentDirection.x); // if (counterClockwise) { n.negate(); // } int iN = mesh.addNormal(n); int imbTc = mesh.addTextCoord(new TextCoord(0.5, 0)); int imtTc = mesh.addTextCoord(new TextCoord(0.5, 1)); int irbTc = mesh.addTextCoord(new TextCoord(1, 0)); int irtTc = mesh.addTextCoord(new TextCoord(1, 1)); face.addVert(segmentPointToVertex3dIndex(mbp, segmentStart, segmentDirection, mesh), imbTc, iN); face.addVert(segmentPointToVertex3dIndex(rbp, segmentStart, segmentDirection, mesh), irbTc, iN); face.addVert(segmentPointToVertex3dIndex(rtp, segmentStart, segmentDirection, mesh), irtTc, iN); face.addVert(segmentPointToVertex3dIndex(mtp, segmentStart, segmentDirection, mesh), imtTc, iN); } return mPoly; }
public static PlygonSplitUtil.SplitResult split(PolygonList2d polygon, LinePoints2d splitingLine) { return split(new MultiPolygonList2d(polygon), splitingLine); }
private static MultiPolygonList2d applyWindowsEnd(MultiPolygonList2d mPoly, BuildingNodeElement be, Point2d segmentStart, Vector2d segmentDirection, double nodeDisplacement, CatchFaceFactory catchFaceFactory, BuildingElementsTextureManager textureMenager, boolean counterClockwise) { if (be instanceof SquareHoleElement) { SquareHoleElement she = (SquareHoleElement) be; Point2d lbp = new Point2d(nodeDisplacement - she.getWidth() / 2.0, she.getMinHeight()); Point2d mbp = new Point2d(nodeDisplacement, she.getMinHeight()); Point2d mtp = new Point2d(nodeDisplacement, she.getMaxHeight()); Point2d ltp = new Point2d(nodeDisplacement - she.getWidth() / 2.0, she.getMaxHeight()); mPoly = PolygonSplitHelper.unionOfLeftSideOfMultipleCuts(mPoly, new LinePoints2d(lbp, ltp), new LinePoints2d(ltp, mtp), new LinePoints2d(mbp, lbp)); TextureData td = findWindowTextureData(be, textureMenager); MeshFactory mesh = catchFaceFactory.createOrGetMeshFactory(td.getTex0()); FaceFactory face = mesh.addFace(FaceType.QUADS); Vector3d n = new Vector3d(-segmentDirection.y, 0, -segmentDirection.x); n.negate(); int iN = mesh.addNormal(n); int imbTc = mesh.addTextCoord(new TextCoord(0.5, 0)); int imtTc = mesh.addTextCoord(new TextCoord(0.5, 1)); int ilbTc = mesh.addTextCoord(new TextCoord(0, 0)); int iltTc = mesh.addTextCoord(new TextCoord(0, 1)); face.addVert(segmentPointToVertex3dIndex(lbp, segmentStart, segmentDirection, mesh), ilbTc, iN); face.addVert(segmentPointToVertex3dIndex(mbp, segmentStart, segmentDirection, mesh), imbTc, iN); face.addVert(segmentPointToVertex3dIndex(mtp, segmentStart, segmentDirection, mesh), imtTc, iN); face.addVert(segmentPointToVertex3dIndex(ltp, segmentStart, segmentDirection, mesh), iltTc, iN); } return mPoly; }
public static MultiPolygonList2d[] createMP(PolygonList2d borderPolygon, LinePoints2d[] lines) { MultiPolygonList2d topMP = new MultiPolygonList2d(borderPolygon); MultiPolygonList2d[] mps = new MultiPolygonList2d[lines.length - 1]; for (int i = 1; i < lines.length; i++) { MultiPolygonSplitResult middleSplit = PolygonSplitHelper.splitMultiPolygon(topMP, lines[i]); topMP = middleSplit.getLeftMultiPolygon(); mps[i - 1] = middleSplit.getRightMultiPolygon(); } return mps; }
public static MultiPolygonList2d intersectionOfLeftSideOfMultipleCuts(MultiPolygonList2d polygons, Point2d... lines) { return PolygonSplitHelper.intersectionOfLeftSideOfMultipleCuts(polygons, PolygonSplitHelper.polygonalChaniToLineArray(lines)); }
/** * Calculate union of left site of polygon cut multiple times by different * splitting lines. The result is on left site of at least of one splitting * lines. * * @param multiPolygon * the polygon to cut * @param lines * splitting lines * @return the polygon which is on left site of each of splitting lines */ public static MultiPolygonList2d unionOfLeftSideOfMultipleCuts(MultiPolygonList2d multiPolygon, LinePoints2d... lines) { MultiPolygonList2d leftMultiPolygon = new MultiPolygonList2d(); MultiPolygonList2d rightMultiPolygon = multiPolygon; for (LinePoints2d line : lines) { MultiPolygonSplitResult splitResult = splitMultiPolygon(rightMultiPolygon, line); leftMultiPolygon.getPolygons().addAll(splitResult.getLeftMultiPolygon().getPolygons()); rightMultiPolygon = splitResult.getRightMultiPolygon(); } return leftMultiPolygon; }
private static MultiPolygonList2d intersectionOfLeftSideOfMultipleCuts(MultiPolygonList2d polygons, Point2d... lines) { return PolygonSplitHelper.intersectionOfLeftSideOfMultipleCuts(polygons, PolygonSplitHelper.polygonalChaniToLineArray(lines)); } }
MultiPolygonSplitResult middleSplit = PolygonSplitHelper.splitMultiPolygon(new MultiPolygonList2d( new PolygonList2d(borderList)), bLine); pRecHeight)); MultiPolygonSplitResult topSplit = PolygonSplitHelper.splitMultiPolygon(centerMP, rLine); pRecHeight - l3)); MultiPolygonSplitResult topSplit = PolygonSplitHelper.splitMultiPolygon(centerMP, tLine); MultiPolygonSplitResult topSplit = PolygonSplitHelper.splitMultiPolygon(centerMP, tLine);
public static MultiPolygonList2d intersectionOfLeftSideOfMultipleCuts(MultiPolygonList2d polygons, Point2d... lines) { return PolygonSplitHelper.intersectionOfLeftSideOfMultipleCuts(polygons, PolygonSplitHelper.polygonalChaniToLineArray(lines)); }
MultiPolygonSplitResult middleSplit = PolygonSplitHelper.splitMultiPolygon( new MultiPolygonList2d(borderPolygon), mLine);
MultiPolygonSplitResult middleSplit = PolygonSplitHelper.splitMultiPolygon( new MultiPolygonList2d(borderPolygon), middleLine); MultiPolygonList2d bottomMP = middleSplit.getRightMultiPolygon(); MultiPolygonSplitResult topSplit = PolygonSplitHelper.splitMultiPolygon(topMP, topLine); MultiPolygonSplitResult bottomSplit = PolygonSplitHelper.splitMultiPolygon(bottomMP, bottomLine);
MultiPolygonSplitResult leftSplit = PolygonSplitHelper.splitMultiPolygon(new MultiPolygonList2d(borderPolygon), lLine);
PolygonList2d borderPolygon = new PolygonList2d(outline); MultiPolygonSplitResult middleSplit = PolygonSplitHelper.splitMultiPolygon( new MultiPolygonList2d(borderPolygon), middleRoofLine);
MultiPolygonSplitResult leftSplit = PolygonSplitHelper.splitMultiPolygon(new MultiPolygonList2d(borderPolygon), lLine); MultiPolygonList2d middleMP = leftSplit.getRightMultiPolygon(); MultiPolygonSplitResult rightSplit = PolygonSplitHelper.splitMultiPolygon(middleMP, rLine);
PolygonList2d borderPolygon = new PolygonList2d(outline); MultiPolygonSplitResult middleSplit = PolygonSplitHelper.splitMultiPolygon( new MultiPolygonList2d(borderPolygon), middleRoofLine);