Examples of RegionOps

RegionOps.splitPathsByRegionInOnOutXY

This splits any curve into parts in, on, and outside an xy region.

25 points >
split the black path into parts inside and outside the grey area const splitParts = RegionOps.splitPathsByRegionInOnOutXY(path, loop);
(red) Path parts "inside" the region
splitParts.insideParts
>
(green) Path parts "outside" the region
splitParts.outsideParts
>

Remarks

Using a closed region as the cutter is a specialized high level operation, just one of the many ways that splitting may be needed. It is a combination of

a split step uses the region boundary curves but not the interior/exterior properties. const splitPaths = RegionOps.splitToPathsBetweenFlagBreaks ((pathWithIntersectionMarkup, true);
a classification step tests one point from each fragment of the splitPaths:
(a) obtain one point on a fragment being tested const pointOnChild = CurveCollection.createCurveLocationDetailOnAnyCurvePrimiitive(splitPaths);
(b) determine if that single point is inside or outside.
since the fragments have no interior crossings, that point classifies the whole fragment
const inOnOut = RegionOps.testPointInOnOutRegionXY(region, pointOnChild.point.x, pointOnChild.point.y);

Unit Test

  • source: imodeljs\core\geometry\src\test\topology\RegionOps.test.ts
  • test name: "InOutSplits"
  • output: imodeljs\core\geometry\src\test\output\RegionOps\InOutSplits.imjs

RegionOps.splitPathsByRegionInOnOutXY

This tests whether single points are in, out, or on an xy region.

Parity region with various test points
circle is "on"
diamond is "in"
plus is "out"
>

Unit Test

  • source: imodeljs\core\geometry\src\test\topology\RegionOps.test.ts
  • test name: "MixedInOut"
  • output: imodeljs\core\geometry\src\test\output\RegionOps\MixedInOut.imjs

Last Updated: 23 April, 2020