Class EdgeProcessor (version 0.18)

Description: The edge processor (boolean, sizing, merge)

The edge processor implements the boolean and edge set operations (size, merge). Because the edge processor might allocate resources which can be reused in later operations, it is implemented as an object that can be used several times.

Class overview

Index

Method Overview

Edge[ ] simple_merge( Polygon in[ ] )Merge the given polygons in a simple "non-zero wrapcount" fashion
Polygon[ ] simple_merge_to_polygon( Polygon in[ ], bool resolve_holes, bool min_coherence )Merge the given polygons in a simple "non-zero wrapcount" fashion into polygons
Edge[ ] simple_merge( Edge in[ ] )Merge the given edges in a simple "non-zero wrapcount" fashion
Polygon[ ] simple_merge_to_polygon( Edge in[ ], bool resolve_holes, bool min_coherence )Merge the given edges in a simple "non-zero wrapcount" fashion into polygons
Edge[ ] merge( Polygon in[ ], unsigned int min_wc )Merge the given polygons
Polygon[ ] merge_to_polygon( Polygon in[ ], unsigned int min_wc, bool resolve_holes, bool min_coherence )Merge the given polygons
Edge[ ] size( Polygon in[ ], int dx, int dy, unsigned int mode )Size the given polygons
Polygon[ ] size_to_polygon( Polygon in[ ], int dx, int dy, unsigned int mode, bool resolve_holes, bool min_coherence )Size the given polygons into polygons
Edge[ ] size( Polygon in[ ], int d, unsigned int mode )Size the given polygons (isotropic)
Polygon[ ] size_to_polygon( Polygon in[ ], int d, unsigned int mode, bool resolve_holes, bool min_coherence )Size the given polygons into polygons (isotropic)
Edge[ ] boolean( Polygon a[ ], Polygon b[ ], int mode )Boolean operation for a set of given polygons, creating edges
Polygon[ ] boolean_to_polygon( Polygon a[ ], Polygon b[ ], int mode, bool resolve_holes, bool min_coherence )Boolean operation for a set of given polygons, creating polygons
Edge[ ] boolean( Edge a[ ], Edge b[ ], int mode )Boolean operation for a set of given edges, creating edges
Polygon[ ] boolean_to_polygon( Edge a[ ], Edge b[ ], int mode, bool resolve_holes, bool min_coherence )Boolean operation for a set of given edges, creating polygons
[static] int mode_andboolean method's mode value for AND operation
[static] int mode_orboolean method's mode value for OR operation
[static] int mode_xorboolean method's mode value for XOR operation
[static] int mode_anotbboolean method's mode value for A NOT B operation
[static] int mode_bnotaboolean method's mode value for B NOT A operation
assign( EdgeProcessor other )Assign the contents of another object to self
[const] EdgeProcessor dupCreates a copy of self.
destroyExplicitly destroy the object
[const] bool destroyedTell, if the object was destroyed

assign( EdgeProcessor other )

Description: Assign the contents of another object to self

This method assigns the contents of another object to self. This is a deep copy that does not only copy the reference but the actual content.

Edge[ ] boolean( Edge a[ ], Edge b[ ], int mode )

Description: Boolean operation for a set of given edges, creating edges

This method computes the result for the given boolean operation on two sets of edges. The input edges must form closed contours where holes and hulls must be oriented differently. The input edges are processed with a simple non-zero wrap count rule as a whole.

The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while holes are oriented counter-clockwise.

This is a convenience method that bundles filling of the edges, processing with a Boolean operator and puts the result into an output vector.

a:The input edges (first operand)
b:The input edges (second operand)
mode:The boolean mode (one of the mode_.. values)
returns:The output edges

Edge[ ] boolean( Polygon a[ ], Polygon b[ ], int mode )

Description: Boolean operation for a set of given polygons, creating edges

This method computes the result for the given boolean operation on two sets of polygons. The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while holes are oriented counter-clockwise.

This is a convenience method that bundles filling of the edges, processing with a Boolean operator and puts the result into an output vector.

a:The input polygons (first operand)
b:The input polygons (second operand)
mode:The boolean mode
returns:The output edges

Polygon[ ] boolean_to_polygon( Edge a[ ], Edge b[ ], int mode, bool resolve_holes, bool min_coherence )

Description: Boolean operation for a set of given edges, creating polygons

This method computes the result for the given boolean operation on two sets of edges. The input edges must form closed contours where holes and hulls must be oriented differently. The input edges are processed with a simple non-zero wrap count rule as a whole.

This method produces polygons on output and allows to fine-tune the parameters for that purpose.

This is a convenience method that bundles filling of the edges, processing with a Boolean operator and puts the result into an output vector.

a:The input polygons (first operand)
b:The input polygons (second operand)
mode:The boolean mode (one of the mode_.. values)
resolve_holes:true, if holes should be resolved into the hull
min_coherence:true, if touching corners should be resolved into less connected contours
returns:The output polygons

Polygon[ ] boolean_to_polygon( Polygon a[ ], Polygon b[ ], int mode, bool resolve_holes, bool min_coherence )

Description: Boolean operation for a set of given polygons, creating polygons

This method computes the result for the given boolean operation on two sets of polygons. This method produces polygons on output and allows to fine-tune the parameters for that purpose.

This is a convenience method that bundles filling of the edges, processing with a Boolean operator and puts the result into an output vector.

a:The input polygons (first operand)
b:The input polygons (second operand)
mode:The boolean mode (one of the mode_.. values)
resolve_holes:true, if holes should be resolved into the hull
min_coherence:true, if touching corners should be resolved into less connected contours
returns:The output polygons

destroy

Description: Explicitly destroy the object

Explicitly destroy the object on C++ side if it was owned by the Ruby interpreter. Subsequent access to this object will throw an exception. If the object is not owned by Ruby, this method will do nothing.

[const] bool destroyed

Description: Tell, if the object was destroyed

This method returns true, if the object was destroyed, either explicitly or by the C++ side. The latter may happen, if the object is owned by a C++ object which got destroyed itself.

[const] EdgeProcessor dup

Description: Creates a copy of self.

Edge[ ] merge( Polygon in[ ], unsigned int min_wc )

Description: Merge the given polygons

In contrast to "simple_merge", this merge implementation considers each polygon individually before merging them. Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping polygons do not contribute to higher wrap count areas.

The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while holes are oriented counter-clockwise.

This is a convenience method that bundles filling of the edges, processing with a Merge operator and puts the result into an output vector.

in:The input polygons
min_wc:The minimum wrap count for output (0: all polygons, 1: at least two overlapping)
returns:The output edges

Polygon[ ] merge_to_polygon( Polygon in[ ], unsigned int min_wc, bool resolve_holes, bool min_coherence )

Description: Merge the given polygons

In contrast to "simple_merge", this merge implementation considers each polygon individually before merging them. Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping polygons do not contribute to higher wrap count areas.

This method produces polygons and allows to fine-tune the parameters for that purpose.

This is a convenience method that bundles filling of the edges, processing with a Merge operator and puts the result into an output vector.

in:The input polygons
min_wc:The minimum wrap count for output (0: all polygons, 1: at least two overlapping)
resolve_holes:true, if holes should be resolved into the hull
min_coherence:true, if touching corners should be resolved into less connected contours
returns:The output polygons

[static] int mode_and

Description: boolean method's mode value for AND operation

[static] int mode_anotb

Description: boolean method's mode value for A NOT B operation

[static] int mode_bnota

Description: boolean method's mode value for B NOT A operation

[static] int mode_or

Description: boolean method's mode value for OR operation

[static] int mode_xor

Description: boolean method's mode value for XOR operation

Edge[ ] simple_merge( Edge in[ ] )

Description: Merge the given edges in a simple "non-zero wrapcount" fashion

The egdes provided must form valid closed contours. Contours oriented differently "cancel" each other. Overlapping contours are merged when the orientation is the same.

The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while holes are oriented counter-clockwise.

This is a convenience method that bundles filling of the edges, processing with a SimpleMerge operator and puts the result into an output vector.

in:The input edges
returns:The output edges

Edge[ ] simple_merge( Polygon in[ ] )

Description: Merge the given polygons in a simple "non-zero wrapcount" fashion

The wrapcount is computed over all polygons, i.e. overlapping polygons may "cancel" if they have different orientation (since a polygon is oriented by construction that is not easy to achieve). The other merge operation provided for this purpose is "merge" which normalizes each polygon individually before merging them. "simple_merge" is somewhat faster and consumes less memory.

The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while holes are oriented counter-clockwise.

This is a convenience method that bundles filling of the edges, processing with a SimpleMerge operator and puts the result into an output vector.

in:The input polygons
returns:The output edges

Polygon[ ] simple_merge_to_polygon( Edge in[ ], bool resolve_holes, bool min_coherence )

Description: Merge the given edges in a simple "non-zero wrapcount" fashion into polygons

The egdes provided must form valid closed contours. Contours oriented differently "cancel" each other. Overlapping contours are merged when the orientation is the same.

This method produces polygons and allows to fine-tune the parameters for that purpose.

This is a convenience method that bundles filling of the edges, processing with a SimpleMerge operator and puts the result into an output vector.

in:The input edges
resolve_holes:true, if holes should be resolved into the hull
min_coherence:true, if touching corners should be resolved into less connected contours
returns:The output polygons

Polygon[ ] simple_merge_to_polygon( Polygon in[ ], bool resolve_holes, bool min_coherence )

Description: Merge the given polygons in a simple "non-zero wrapcount" fashion into polygons

The wrapcount is computed over all polygons, i.e. overlapping polygons may "cancel" if they have different orientation (since a polygon is oriented by construction that is not easy to achieve). The other merge operation provided for this purpose is "merge" which normalizes each polygon individually before merging them. "simple_merge" is somewhat faster and consumes less memory.

This method produces polygons and allows to fine-tune the parameters for that purpose.

This is a convenience method that bundles filling of the edges, processing with a SimpleMerge operator and puts the result into an output vector.

in:The input polygons
resolve_holes:true, if holes should be resolved into the hull
min_coherence:true, if touching corners should be resolved into less connected contours
returns:The output polygons

Edge[ ] size( Polygon in[ ], int dx, int dy, unsigned int mode )

Description: Size the given polygons

This method sizes a set of polygons. Before the sizing is applied, the polygons are merged. After that, sizing is applied on the individual result polygons of the merge step. The result may contain overlapping contours, but no self-overlaps.

dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards). The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both dx and dy.

The 'mode' parameter describes the corner fill strategy. Mode 0 connects all corner segments directly. Mode 1 is the 'octagon' strategy in which square corners are interpolated with a partial octagon. Mode 2 is the standard mode in which corners are filled by expanding edges unless these edges form a sharp bend with an angle of more than 90 degree. In that case, the corners are cut off. In Mode 3, no cutoff occures up to a bending angle of 135 degree. Mode 4 and 5 are even more aggressive and allow very sharp bends without cutoff. This strategy may produce long spikes on sharply bending corners. The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while holes are oriented counter-clockwise.

This is a convenience method that bundles filling of the edges and processing them and which puts the result into an output vector.

in:The input polygons
dx:The sizing value in x direction
dy:The sizing value in y direction
mode:The sizing mode (standard is 2)
returns:The output edges

Edge[ ] size( Polygon in[ ], int d, unsigned int mode )

Description: Size the given polygons (isotropic)

This method is equivalent to calling the anisotropic version with identical dx and dy.

in:The input polygons
d:The sizing value in x direction
mode:The sizing mode
returns:The output edges

Polygon[ ] size_to_polygon( Polygon in[ ], int d, unsigned int mode, bool resolve_holes, bool min_coherence )

Description: Size the given polygons into polygons (isotropic)

This method is equivalent to calling the anisotropic version with identical dx and dy.

in:The input polygons
d:The sizing value in x direction
mode:The sizing mode
resolve_holes:true, if holes should be resolved into the hull
min_coherence:true, if touching corners should be resolved into less connected contours
returns:The output polygons

Polygon[ ] size_to_polygon( Polygon in[ ], int dx, int dy, unsigned int mode, bool resolve_holes, bool min_coherence )

Description: Size the given polygons into polygons

This method sizes a set of polygons. Before the sizing is applied, the polygons are merged. After that, sizing is applied on the individual result polygons of the merge step. The result may contain overlapping polygons, but no self-overlapping ones. Polygon overlap occures if the polygons are close enough, so a positive sizing makes polygons overlap.

dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards). The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both dx and dy.

The 'mode' parameter describes the corner fill strategy. Mode 0 connects all corner segments directly. Mode 1 is the 'octagon' strategy in which square corners are interpolated with a partial octagon. Mode 2 is the standard mode in which corners are filled by expanding edges unless these edges form a sharp bend with an angle of more than 90 degree. In that case, the corners are cut off. In Mode 3, no cutoff occures up to a bending angle of 135 degree. Mode 4 and 5 are even more aggressive and allow very sharp bends without cutoff. This strategy may produce long spikes on sharply bending corners. This method produces polygons and allows to fine-tune the parameters for that purpose.

This is a convenience method that bundles filling of the edges, processing with a SimpleMerge operator and puts the result into an output vector.

in:The input polygons
dx:The sizing value in x direction
dy:The sizing value in y direction
mode:The sizing mode (standard is 2)
resolve_holes:true, if holes should be resolved into the hull
min_coherence:true, if touching corners should be resolved into less connected contours
returns:The output polygons