PK_EDGE_euler_open_zip   

PK_ERROR_code_t    PK_EDGE_euler_open_zip
(
--- received arguments ---
PK_EDGE_t          edge,        --- Edge to split
PK_FIN_t           fin,         --- Fin at vertex to split

--- returned arguments ---
PK_VERTEX_t *const new_vertex,  --- New vertex created
PK_EDGE_t   *const new_edge     --- New edge created
)


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


Specific Errors:
    PK_ERROR_edge_not_manifold      'edge' not manifold (MILD)
    PK_ERROR_edge_not_open          'edge' not open (MILD)
    PK_ERROR_vertex_not_manifold    a vertex of 'edge' is not manifold (MILD)
    PK_ERROR_no_common_vertex       'fin' doesn't point to a vertex of 'edge'
                                    (MILD)
    PK_ERROR_fins_not_distinct      'fin' and its forward fin do not define two
                                     distinct edge groups either side of split
                                    (MILD)


'edge' must be open, manifold and both its vertices must be manifold.  The
forward vertex of 'fin' must be one of the vertices of 'edge' but 'fin' must
not be one of the fins of 'edge'. Neither must the forward fin of 'fin' as
after the operation 'fin' and its ( pre-operation ) forward fin will lie on
different sides of the opened zip.

After the operation the forward fin of 'fin' is a fin of 'edge' and the forward
vertex of 'fin' is an original vertex.  The new edge will have the same
direction as the original.

'new_edge' and 'new_vertex' will not have any geometry attached and the
resulting body will be invalid.  The fin of 'edge' whose forward vertex is the
forward vertex of 'fin' will remain a fin of 'edge'. The other fin of 'edge'
will become a fin of 'new_edge'. If 'edge' is tolerant both fins will retain
their curves.

The inverse of this function is PK_EDGE_euler_close_zip.

See here for an illustration.