Input and Output Data Organization for Bool_MT
Prior to calling the Bool_MT function, the caller must first "populate" the input data set(s) per Bool_MT's requirements. The illustration below shows graphically how this is accomplished. In this example, one of our input data sets consists of 6 polygons with number of vertices as shown below:
The first argument for the input is an array of pointers. Each element points to the memory location where the array of coordinates for a polygon begins. Notice that the way the polygon coordinate data is stored, it need not use memory contiguously.
The next argument is an array that contains the vertex count for each polygon. This is necessary since otherwise the boolean would not know from the first argument where the coordinate data for each polygon ended.
Note - if the input data set has been flagged as Leonov then the vertex counts of any child polygons will be negative. This is the way one detects a child polygon.
Note - the Union operation requires and uses only one data set as input. The second data set is ignored.
Finally, the third argument for the input, N1 or N2 , is the number of polygons in this set. In our case it is 6 polygons.
The polygons returned by the function call to Bool_MT are organized in the same fashion -- there is only one output set.