/** * 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; }
lLine); MultiPolygonList2d bottomMP = leftSplit.getLeftMultiPolygon(); MultiPolygonList2d topMP = leftSplit.getRightMultiPolygon();
new MultiPolygonList2d(borderPolygon), mLine); MultiPolygonList2d topMP = middleSplit.getLeftMultiPolygon(); MultiPolygonList2d bottomMP = middleSplit.getRightMultiPolygon();
new PolygonList2d(borderList)), bLine); MultiPolygonList2d centerMP = middleSplit.getLeftMultiPolygon(); centerMP = topSplit.getLeftMultiPolygon(); centerMP = topSplit.getLeftMultiPolygon(); centerMP = topSplit.getLeftMultiPolygon();
new MultiPolygonList2d(borderPolygon), middleLine); MultiPolygonList2d topMP = middleSplit.getLeftMultiPolygon(); MultiPolygonList2d bottomMP = middleSplit.getRightMultiPolygon(); topMP = topSplit.getLeftMultiPolygon(); MultiPolygonList2d topMiddleMP = topSplit.getRightMultiPolygon(); MultiPolygonList2d bottomMiddleMP = bottomSplit.getLeftMultiPolygon();
lLine); MultiPolygonList2d leftMP = leftSplit.getLeftMultiPolygon(); MultiPolygonList2d middleMP = leftSplit.getRightMultiPolygon(); MultiPolygonList2d rightMP = rightSplit.getLeftMultiPolygon(); middleMP = rightSplit.getRightMultiPolygon();
new MultiPolygonList2d(borderPolygon), middleRoofLine); MultiPolygonList2d topMP = middleSplit.getLeftMultiPolygon(); MultiPolygonList2d bottomMP = middleSplit.getRightMultiPolygon();
new MultiPolygonList2d(borderPolygon), middleRoofLine); MultiPolygonList2d topMP = middleSplit.getLeftMultiPolygon(); MultiPolygonList2d bottomMP = middleSplit.getRightMultiPolygon();
/** * 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[] 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; }