Euler Operations   

<<< Local Ops: Generic Face Editing Chapters B-Curves and B-Surfaces >>>

Contents

[back to top]


24.1 Introduction

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.

[back to top]


24.2 PK functions

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.

[back to top]

24.2.1 Edges

Edges are classified as follows:

 

Edge Type Edge has...

Wireframe

no fins

Laminar

one fin

Manifold

two fins with opposite senses (also called normal)

General

two fins with the same sense or more than two fins

Open

two vertices

Split Ring

one vertex

Ring

no vertices

[back to top]

24.2.2 Vertices

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:

[back to top]

24.2.3 Functions available

PK_EDGE_euler_slit

 

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.

PK_FACE_euler_unslit

 

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.

PK_EDGE_euler_split

 

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.

PK_VERTEX_euler_merge_edges

 

This function deletes a vertex from an edge.

PK_LOOP_euler_make_edge

 

This function adds a trailing edge and vertex to the forward vertex of fin . The direction of new_edge is towards new_vertex .

PK_VERTEX_euler_delete

 

This function deletes a vertex and its single attached edge.

PK_VERTEX_euler_split

 

This function splits a vertex, replacing it with an edge.

PK_EDGE_euler_merge_vertices

 

This function deletes an edge, compressing it to a vertex.

PK_EDGE_euler_open_zip

 

This function splits an edge lengthwise, replacing it with two edges joined at one end.

PK_EDGE_euler_close_zip

 

This function 'zips' two edges together by merging the vertices at one end, deleting edge2.

PK_FACE_euler_make_loop

 

This function adds an isolated vertex and loop to a face.

PK_LOOP_euler_delete_isolated

 

This function deletes an isolated vertex and loop from a face.

PK_LOOP_euler_delete_make_edge

 

This function merges two loops in the same face into one by joining their vertices with an edge. Loop2 is deleted.

PK_EDGE_euler_delete_make_loop

 

This function deletes an edge from a loop splitting it into two loops. The logical forward determines which loop is the new one.

PK_LOOP_euler_make_edge_face

 

This function joins two vertices in the same loop, creating a new face. The new face is on the right of the new edge.

PK_EDGE_euler_delete_with_face

 

This function deletes an edge and merges two faces and loops into one. The on_left argument determines which face survives.

PK_LOOP_euler_make_edge_loop

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.

PK_EDGE_euler_delete_with_loop

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.

PK_FACE_euler_make_ring_face

 

This function splits a face by adding a new ring edge. The new face is always on the right of the edge.

PK_EDGE_euler_delete_ring_face

 

This function deletes a ring edge and a face.

PK_FACE_euler_make_ring_loop

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.

PK_EDGE_euler_delete_ring_loop

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.

PK_LOOP_euler_transfer

 

This function transfers a loop from one face to another. The two faces must have the same front and back shells.

[back to top]

<<< Local Ops: Generic Face Editing Chapters B-Curves and B-Surfaces >>>