gen_parallels_xldgen_parallels_xldGenParallelsXldGenParallelsXldGenParallelsXld examines the XLD polygons passed in
PolygonsPolygonsPolygonsPolygonspolygons for parallelism. The resulting parallel
polygons are returned in ParallelsParallelsParallelsParallelsparallels. If the parameter
MergeMergeMergeMergemerge is set to 'true'"true""true""true""true", adjacent parallel polygons
are returned in a single parallel relation. Otherwise, one parallel
relation is returned for each pair of parallel line segments.
Only polygon segments longer than LenLenLenLenlen are taken into account.
Whether two polygon segments are parallel depends on a maximum allowed
angle difference AlphaAlphaAlphaAlphaalpha (in radians).
Furthermore, the projections of the two segments onto their angle bisector
have to overlap.
Finally, the overlap on the angle bisector is reprojected onto the two
segments. If the maximal distance of the reprojections is smaller than
DistDistDistDistdist, the segments are stored in ParallelsParallelsParallelsParallelsparallels.
As a side effect, a quality factor is calculated for each pair of
parallels, compare mod_parallels_xldmod_parallels_xldModParallelsXldModParallelsXldModParallelsXld. It is based on the
normalized angular difference and the
normalized length of the overlap:
Here, is the angle difference of the
polygon segments, is the length of the overlap,
and the lengths of the polygon
segments, and the resulting quality factor.
The quality factor is a measure of parallelism (the larger its
value, the “more parallel” the polygons). Finally, the quality
factors of all parallel polygon segments contained in a single
polygon are added, weighted with their length of the overlapping
area. Note that you can query the range for the quality
factor with info_parallels_xldinfo_parallels_xldInfoParallelsXldInfoParallelsXldInfoParallelsXld.
Execution Information
Multithreading type: reentrant (runs in parallel with non-exclusive operators).
Multithreading scope: global (may be called from any thread).