# symm_difference_closed_polygons_xld (Operator)

## Name

`symm_difference_closed_polygons_xld` — Compute the symmetric difference of closed polygons.

## Signature

`symm_difference_closed_polygons_xld(Polygons1, Polygons2 : PolygonsDifference : : )`

## Description

The operator `symm_difference_closed_polygons_xld` calculates the symmetric difference of the regions enclosed by the polygons `Polygons1` and `Polygons2`. The boundaries of this symmetric difference are returned in `PolygonsDifference`.

If the individual input polygons are not closed, they are closed automatically by connecting their start and end points.

Internally, first, the regions enclosed by each set of polygons (`Polygons1` and `Polygons2`, respectively) are determined as described below. Then, the symmetric difference of these two regions is calculated.

In the following, the two sets of input polygons are referred to as boundary sets. A boundary set consists of an arbitrary number of boundaries (the individual polygons of `Polygons1` and `Polygons2`, respectively). Each boundary may be convex or concave and self-intersecting. Internal holes may be formed by the nesting of boundaries.

The region enclosed by such a boundary set is defined by the so-called Even-Odd-Rule. Thus, it consists of all points with the following property: The line constructed by connecting the point with another reference point that lies outside of the region has an odd number of intersections with boundaries.

More descriptive, this means that a boundary defines a hole in the region enclosed by another boundary if it lies completely inside that region. Similarly, the overlapping area of two separate boundaries of one boundary set is taken as a "hole", i.e., it does not belong to the region enclosed by the two boundaries. Note that the region enclosed by a boundary does not depend on the orientation of the boundary.

A self-intersecting boundary may be split at the intersection point or it is reordered such that it touches itself at the intersection point. The resulting boundaries are treated as separate boundaries.

## Attention

The resulting polygons `PolygonsDifference` contain no references to the XLD contours that are possibly referenced by `Polygons1` and `Polygons2`. Hence, operators that access the contours associated with a polygon, e.g., `split_contours_xld` will not work correctly.

## Execution Information

• Multithreading type: reentrant (runs in parallel with non-exclusive operators).
• Processed without parallelization.

## Parameters

`Polygons1` (input_object)  xld_poly(-array) `→` object

Polygons enclosing the first region.

`Polygons2` (input_object)  xld_poly(-array) `→` object

Polygons enclosing the second region.

`PolygonsDifference` (output_object)  xld_poly(-array) `→` object

Polygons enclosing the symmetric difference.

## Result

`symm_difference_closed_polygons_xld` returns TRUE if all parameters are correct. If necessary, an exception is raised.

## Possible Predecessors

`gen_polygons_xld`

## Alternatives

`symm_difference`

`intersection_closed_polygons_xld`, `difference_closed_polygons_xld`, `union2_closed_polygons_xld`, `symm_difference_closed_contours_xld`