a fast incremental randomized algorithm for computing trapezoidal decompositions and for triangulating polygons by Raimund Seidel. This algorithm oriented only on "non-crossing" segments1). Therefore, polygon shown on Figure 1, that can be created with PolyBoolean library, is invalid for Seidel's triangulation algorithm, because there're two segments that touch vertical segment (case 1). However, case 2 is valid segments configuration for triangulation algorithm.
|All versions of PolyBoolean.NET Class Libraries implement polygon triangulation routine based on extended Seidel's triangulation algorithm and do not have this restriction.|
If PolyBoolean used for polygons with coordinates of vertices represented in floating point numbers, after converting floating point coordinates to integer its easy to get the 'integer' polygon with overlapped segments as shown on Figure 2. If such polygon will used as one of the operands for Boolean operation in many cases PolyBoolean will produce incorrect result polygon. Because polygon with overlapped segments is invalid for Boolean operation algorithm that implemented in PolyBoolean Software Library v0.0 and PolyBoolean.NET v1.0.
|PolyBoolean.NET vesion 1.1 and later implements improved algorithm for Boolean operations on 2D polygonal regions that correct handles an overlapped (not a crossing!) segment chains in one of input regions or both of them.|
All evaluation version of PolyBoolean.NET Class Libraries has the following restriction: an InvalidArgumentException exception thrown when total number of vertices in result polygon is not equal zero and divisible by 7.