<<< Local Ops: Generic Face Editing | Chapters | B-Curves and B-Surfaces >>> |
Euler Operations are low-level functions that modify a small area of topology. Together with functions to attach and detach geometry, these functions enable applications to implement their own modeling operations, such as local operations and feature creation.
Euler Operation functions always return a body with valid topological data-structures. However, the functions do not alter geometry - new topology has no geometry attached, and any topology which is to be deleted has its geometry deleted first. This means that the resulting body is normally invalid. It is up to the application to attach suitable geometry to make the model valid.
The fact that the Euler Operations are likely to produce invalid bodies makes these functions significantly different to any of the existing PK functions. With the exception of functions to attach and detach geometry, existing PK functions always return a valid body provided that it is valid when it is passed to the function. It is entirely up to the application to ensure that a body edited with an Euler Operation is returned to a valid state before being passed to other PK functions. Parasolid does not accept faults reported for failures in PK functions that have been passed invalid bodies.
The Euler Operation functions are differentiated from other PK functions by including the word 'euler' in the function name, e.g. PK_EDGE_euler_split.
This section contains diagrams of the Euler Operation functions. For more details, refer to the function headers. The following terms are used in the headers.
Edges are classified as follows:
Edge Type | Edge has... |
---|---|
The number of oriented edges at a vertex is as described in PK_VERTEX_ask_oriented_edges. A vertex with no oriented edges is called isolated.
A vertex is manifold if either:
This function slits an edge lengthwise, creating a new slit face. The
on_left
argument specifies whether the new face lies on the left or right side of the given edge.
This function deletes a slit face. The given face must have either one loop and two edges or two loops each with one ring edge.
This function splits an edge by adding a vertex. The
forward
argument determines whether the new vertex is the forward or backward vertex of the edge.
This function deletes a vertex from an edge.
This function adds a trailing edge and vertex to the forward vertex of
fin
. The direction of
new_edge
is towards
new_vertex
.
This function deletes a vertex and its single attached edge.
This function splits a vertex, replacing it with an edge.
This function deletes an edge, compressing it to a vertex.
This function splits an edge lengthwise, replacing it with two edges joined at one end.
This function 'zips' two edges together by merging the vertices at one end, deleting edge2.
This function adds an isolated vertex and loop to a face.
This function deletes an isolated vertex and loop from a face.
This function merges two loops in the same face into one by joining their vertices with an edge. Loop2 is deleted.
This function deletes an edge from a loop splitting it into two loops. The logical
forward
determines which loop is the new one.
This function joins two vertices in the same loop, creating a new face. The new face is on the right of the new edge.
This function deletes an edge and merges two faces and loops into one. The
on_left
argument determines which face survives.
This function is similar to PK_LOOP_euler_make_edge_face, but instead of splitting the face in two, it creates a new loop in the face, increasing its genus.
This function is similar to PK_EDGE_euler_delete_with_face, except that it deletes an edge which has different loops in the same face on each side of it. It merges the loops into one, decreasing the genus of the face.
This function splits a face by adding a new ring edge. The new face is always on the right of the edge.
This function deletes a ring edge and a face.
This function is similar to PK_FACE_euler_make_ring_face, except that instead of splitting the face in two, it creates a new loop in the face, thus increasing its genus.
This function is similar to PK_EDGE_euler_delete_with_face, except that it deletes a ring edge which has different loops from the same face on each side, thus decreasing the genus of the face.
This function transfers a loop from one face to another. The two faces must have the same front and back shells.
<<< Local Ops: Generic Face Editing | Chapters | B-Curves and B-Surfaces >>> |