Woolz Image Processing  Version 1.8.3
WlzGeoModel.c File Reference

Basic operators for manipulating Woolz geometric models. These can be either planar graphs or 3D surfaces, with the surfaces being either manifold or non-manifold. More...

Functions

WlzErrorNum WlzGMModelAddResCb (WlzGMModel *model, WlzGMCbFn fn, void *data)
 Add a resource allocation callback to the models resources. More...
 
void WlzGMModelRemResCb (WlzGMModel *model, WlzGMCbFn fn, void *data)
 Removes a resource allocation callback from the models resources. Both the callback function and callback data must have the same values as when the callback was added since they are used to find the corresponding callback entry. More...
 
WlzGMModelWlzGMModelNew (WlzGMModelType modType, int blkSz, int vHTSz, WlzErrorNum *dstErr)
 Creates an empty non-manifold geometry model. More...
 
WlzGMShellWlzGMModelNewS (WlzGMModel *model, WlzErrorNum *dstErr)
 Creates an empty shell with a shell geometry element for the model. More...
 
WlzGMFaceWlzGMModelNewF (WlzGMModel *model, WlzErrorNum *dstErr)
 Creates an empty face. More...
 
WlzGMLoopTWlzGMModelNewLT (WlzGMModel *model, WlzErrorNum *dstErr)
 Creates a loop topology element. More...
 
WlzGMEdgeWlzGMModelNewE (WlzGMModel *model, WlzErrorNum *dstErr)
 Creates a new edge. The edge geometry element only has it's index set to a meaningful value. More...
 
WlzGMEdgeTWlzGMModelNewET (WlzGMModel *model, WlzErrorNum *dstErr)
 Creates a new edge topology element. More...
 
WlzGMVertexWlzGMModelNewV (WlzGMModel *model, WlzErrorNum *dstErr)
 Creates a new vertex and a vertex geometry element. The vertex geometry element only has it's index set to a meaningful value. More...
 
WlzGMVertexTWlzGMModelNewVT (WlzGMModel *model, WlzErrorNum *dstErr)
 Creates a new vertex topology element. More...
 
WlzGMModelWlzGMModelNewFromS (WlzGMShell *gS, WlzErrorNum *dstErr)
 Creates a new model from the given shell. The new model contains a copy of the given shell. More...
 
WlzGMModelWlzGMModelCopy (WlzGMModel *gM, WlzErrorNum *dstErr)
 Copies the given model. Because all unused elements are squeezed out, the indicies of the elements may not be equal in the two models. More...
 
WlzErrorNum WlzGMModelFree (WlzGMModel *model)
 Free's a geometric model and it's elements. More...
 
WlzErrorNum WlzGMModelFreeS (WlzGMModel *model, WlzGMShell *shell)
 Marks a shell and it's geometry as invalid and suitable for reclaiming. More...
 
WlzErrorNum WlzGMModelFreeF (WlzGMModel *model, WlzGMFace *face)
 Marks a face as invalid and suitable for reclaiming. More...
 
WlzErrorNum WlzGMModelFreeLT (WlzGMModel *model, WlzGMLoopT *loopT)
 Marks a loop topology as invalid and suitable for reclaiming. More...
 
WlzErrorNum WlzGMModelFreeDT (WlzGMModel *model, WlzGMDiskT *diskT)
 Marks an disk topology as invalid and suitable for reclaiming. More...
 
WlzErrorNum WlzGMModelFreeE (WlzGMModel *model, WlzGMEdge *edge)
 Marks an edge as invalid and suitable for reclaiming. More...
 
WlzErrorNum WlzGMModelFreeET (WlzGMModel *model, WlzGMEdgeT *edgeT)
 Marks an edge topology as invalid and suitable for reclaiming. More...
 
WlzErrorNum WlzGMModelFreeV (WlzGMModel *model, WlzGMVertex *vertex)
 Marks a vertex and it's geometry as invalid and suitable for reclaiming. Watch out that vertices remain in the hash table after being free'd. More...
 
WlzErrorNum WlzGMModelFreeVT (WlzGMModel *model, WlzGMVertexT *vertexT)
 Marks a vertex topology as invalid and suitable for reclaiming. More...
 
WlzErrorNum WlzGMModelDeleteS (WlzGMModel *model, WlzGMShell *dS)
 Deletes a shell by unlinking it and then freeing it and all it's children. More...
 
WlzErrorNum WlzGMModelDeleteF (WlzGMModel *model, WlzGMFace *dF)
 Deletes a face along with all the elements which depend on it. This may change the geometry and/or the topology of the parent shell. More...
 
WlzErrorNum WlzGMModelDeleteE (WlzGMModel *model, WlzGMEdge *dE)
 Deletes a edge along with all the elements which depend on it. This may change the geometry and/or the topology of the parent shell. On return all shell geometries are valid. More...
 
WlzErrorNum WlzGMModelDeleteV (WlzGMModel *model, WlzGMVertex *dV)
 Deletes a vertex along with all the elements which depend on it. All elements which depend on the vertex are unlinked and then freed. If the vertex's parents were to depend only on the vertex then they would be free'd too as the Woolz geometric models can not hold an isolated vertex. The basic algorithm used is: Build a collection of edges which use the vertex and then delete all edges in the collection. If there are no edges (in the collection) then just unlink and free the vertex. The geometries of the existing and new shells will be valid on return. More...
 
int WlzGMModelGetDimension (WlzGMModel *model, WlzErrorNum *dstErr)
 Gets the models dimension from the model's type. More...
 
WlzErrorNum WlzGMModelTypeValid (WlzGMModelType type)
 Checks the model type is valid. More...
 
WlzGMResourceWlzGMModelGetRes (WlzGMModel *model, WlzGMElemType elemType, WlzErrorNum *dstErr)
 Gets the resources for the given element type in the given model. More...
 
WlzGMElemType WlzGMModelGetSGeomType (WlzGMModel *model)
 Gets the shell's geometry type from the model's type. More...
 
WlzGMElemType WlzGMModelGetVGeomType (WlzGMModel *model)
 Gets the verticies geometry type from the model's type. More...
 
WlzErrorNum WlzGMShellGetGBB3D (WlzGMShell *shell, WlzDBox3 *bBox)
 Gets a shell's geometry using the given destination pointer to a double precision bounding box. More...
 
WlzErrorNum WlzGMShellGetGBBV3D (WlzGMShell *shell, double *vol)
 Gets the volume of the shell's geometry's bounding box. More...
 
WlzErrorNum WlzGMShellGetGBB2D (WlzGMShell *shell, WlzDBox2 *bBox)
 Gets a shell's geometry using the given destination pointer to a double precision bounding box. More...
 
WlzErrorNum WlzGMShellSetGBB3D (WlzGMShell *shell, WlzDBox3 bBox)
 Sets a shell's geometry using the given double precision bounding box. More...
 
WlzErrorNum WlzGMShellSetGBB2D (WlzGMShell *shell, WlzDBox2 bBox)
 Sets a shell's geometry using the given double precision bounding box. More...
 
WlzErrorNum WlzGMShellSetG3D (WlzGMShell *shell, int nPnt, WlzDVertex3 *pos)
 Sets a shell's geometry using the pair of double precision points. More...
 
WlzErrorNum WlzGMShellSetG2D (WlzGMShell *shell, int nPnt, WlzDVertex2 *pos)
 Sets a shell's geometry using the pair of double precision points. More...
 
WlzErrorNum WlzGMModelSetSG (WlzGMModel *model)
 Sets the geometry of each of the shells in the given model. More...
 
WlzErrorNum WlzGMShellUpdateG3D (WlzGMShell *shell, WlzDVertex3 pos)
 Updates a shell's geometry using the given double precision position. More...
 
WlzErrorNum WlzGMShellUpdateG2D (WlzGMShell *shell, WlzDVertex2 pos)
 Updates a shell's geometry using the new given double precision position. More...
 
WlzErrorNum WlzGMShellUpdateGBB3D (WlzGMShell *shell, WlzDBox3 bBox)
 Updates a shell's geometry using the given double precision position bounding box. The updated geometry is the union of the existing geometry and the given bounding box. More...
 
WlzErrorNum WlzGMShellUpdateGBB2D (WlzGMShell *shell, WlzDBox2 bBox)
 Updates a shell's geometry using the given double precision position bounding box. The updated geometry is the union of the existing geometry and the given bounding box. More...
 
WlzErrorNum WlzGMShellDndateG2D (WlzGMShell *shell, WlzDVertex2 pos)
 Updates the shell's geometry for the removed vertex with the given position. More...
 
WlzErrorNum WlzGMShellDndateG3D (WlzGMShell *shell, WlzDVertex3 pos)
 Updates the shell's geometry for the removed vertex with the given position. More...
 
WlzErrorNum WlzGMShellComputeGBB (WlzGMShell *shell)
 Recomputes the shell's geometry by walking through it's children. More...
 
int WlzGMShellGInBB3D (WlzGMShell *shell, WlzDVertex3 pos)
 Checks to see if the given double precision position is within the shell's bounding box. More...
 
int WlzGMShellGInBB2D (WlzGMShell *shell, WlzDVertex2 pos)
 Checks to see if the given double precision position is within the shell's bounding box. More...
 
WlzErrorNum WlzGMVertexSetG2D (WlzGMVertex *vertex, WlzDVertex2 pos)
 Sets a vertex geometry using the given double precision position. More...
 
WlzErrorNum WlzGMVertexSetG2N (WlzGMVertex *vertex, WlzDVertex2 pos, WlzDVertex2 nrm)
 Sets a vertex geometry using the given double precision position and normal. More...
 
WlzErrorNum WlzGMVertexSetG3D (WlzGMVertex *vertex, WlzDVertex3 pos)
 Sets a vertex geometry using the given double precision position. More...
 
WlzErrorNum WlzGMVertexSetG3N (WlzGMVertex *vertex, WlzDVertex3 pos, WlzDVertex3 nrm)
 Sets a vertex geometry using the given double precision position and normal. More...
 
WlzErrorNum WlzGMVertexGetG3D (WlzGMVertex *vertex, WlzDVertex3 *dstPos)
 Gets a veticies geometry into the given double precision position destination pointer. More...
 
WlzErrorNum WlzGMVertexGetG3N (WlzGMVertex *vertex, WlzDVertex3 *dstPos, WlzDVertex3 *dstNrm)
 Gets a vertex geometry into the given double precision position and normaldestination pointers. If the model vertex geometry does not have normals then the normal will be {0,0,0}, the zero vector. More...
 
WlzErrorNum WlzGMVertexGetG2D (WlzGMVertex *vertex, WlzDVertex2 *dstPos)
 Gets a veticies geometry into the given double precision position destination pointer. More...
 
WlzErrorNum WlzGMVertexGetG2N (WlzGMVertex *vertex, WlzDVertex2 *dstPos, WlzDVertex2 *dstNrm)
 Gets a vertex geometry into the given double precision position and normal destination pointers. If the model vertex geometry does not have normals then the normal will be {0,0}, the zero vector. More...
 
WlzDVertex3 WlzGMVertexCmp3D (WlzGMVertex *vertex, WlzDVertex3 pos)
 Compares the position of the given vertex with the given 3D double precision position. More...
 
WlzDVertex2 WlzGMVertexCmp2D (WlzGMVertex *vertex, WlzDVertex2 pos)
 Compares the position of the given vertex with the given 2D double precision position. More...
 
int WlzGMVertexCmpSign2D (WlzGMVertex *vertex, WlzDVertex2 pos)
 Compares the coordinates of the given vertex and 2D double precision position to find a signed value for sorting. More...
 
int WlzGMVertexCmpSign3D (WlzGMVertex *vertex, WlzDVertex3 pos)
 Compares the coordinates of the given vertex and 3D double precision position to find a signed value for sorting. More...
 
double WlzGMVertexDistSq3D (WlzGMVertex *vertex, WlzDVertex3 pos)
 Calculates the square of the Euclidean distance between the given vertex and the given 3D double precision position. More...
 
WlzDVertex3 WlzGMVertexNormal3D (WlzGMModel *dummy, WlzGMVertex *gV, int *sVBufSz, WlzGMVertex ***sVBuf, WlzErrorNum *dstErr)
 Computes the value of the normal at the given vertex which lies within the given model. This function requires a buffer in which to store the vertices found on the loops surrounding the given vertex. For efficiency this can/should be reused between calls of this function. More...
 
double WlzGMVertexDistSq2D (WlzGMVertex *vertex, WlzDVertex2 pos)
 Calculates the square of the Euclidean distance between the given vertex and the given 2D double precision position. More...
 
WlzErrorNum WlzGMFaceGetG3D (WlzGMFace *face, WlzDVertex3 *dstPos0, WlzDVertex3 *dstPos1, WlzDVertex3 *dstPos2)
 Gets the geometry of a face. More...
 
WlzGMVertexWlzGMModelMatchVertexG3D (WlzGMModel *model, WlzDVertex3 gPos)
 Attempts to find a vertex which matches the given double precision 3D position. More...
 
WlzGMVertexWlzGMModelMatchVertexG2D (WlzGMModel *model, WlzDVertex2 gPos)
 Attempts to find a vertex which matches the given double precision 2D position. More...
 
double WlzGMVertexShellDist (WlzGMVertex *v0, WlzGMVertex *v1, double maxDist, WlzErrorNum *dstErr)
 Computes the minimum distance between the two vertices where the path between them is constrained to the common shell, this will be negative if the two vertices are in different shells. More...
 
WlzErrorNum WlzGMVerifyModel (WlzGMModel *model, WlzGMElemP *dstElmP)
 Verifies the given model. If the invalid element destination pointer is given then it MAY be set to point to an invalid element of the model. This function was written as an aid to debugging. More...
 
WlzErrorNum WlzGMVerifyShell (WlzGMShell *shell, WlzGMElemP *dstElmP)
 Verifies the given shell. If the invalid element destination pointer is given then it MAY be set to point to an invalid element of the model. This function was written as an aid to debugging. More...
 
WlzErrorNum WlzGMVerifyLoopT (WlzGMLoopT *loopT, WlzGMElemP *dstElmP)
 Verifies the given loop topology element. If the invalid element destination pointer is given then it MAY be set to point to an invalid element of the model. This function was written as an aid to debugging. More...
 
WlzGMEdge ** WlzGMModelFindNMEdges (WlzGMModel *model, int *dstNMCnt, WlzErrorNum *dstErr)
 Finds a loop topology element in common for the two edge topology elements. More...
 
WlzGMLoopTWlzGMEdgeTCommonLoopT (WlzGMEdgeT *eT0, WlzGMEdgeT *eT1)
 Finds a loop topology element in common for the two edge topology elements. More...
 
WlzGMEdgeWlzGMVertexCommonEdge (WlzGMVertex *eV0, WlzGMVertex *eV1)
 Finds the edge common to the two given verticies. More...
 
WlzGMShellWlzGMVertexCommonShell (WlzGMVertex *eV0, WlzGMVertex *eV1)
 Finds the shell common to the two given verticies. More...
 
WlzGMShellWlzGMVertexGetShell (WlzGMVertex *eV)
 Finds the parent shell of the given vertex. More...
 
WlzGMShellWlzGMEdgeGetShell (WlzGMEdge *eE)
 Finds the parent shell of the given edge. More...
 
WlzGMVertexWlzGMEdgeCommonVertex (WlzGMEdge *eE0, WlzGMEdge *eE1)
 Finds the common vertex of the two given edges. More...
 
WlzGMVertexWlzGMEdgeCommonVertexGetDiskTs (WlzGMEdge *eE0, WlzGMEdge *eE1, WlzGMDiskT **dstDT0, WlzGMDiskT **dstDT1)
 Finds the common vertex of the two given edges and sets the disk topology element destination pointers if there is a common vertex. NULL*. More...
 
WlzGMDiskTWlzGMEdgeCommonDiskT (WlzGMEdge *eE0, WlzGMEdge *eE1)
 Finds the common disk topology element of the two given edges. More...
 
WlzGMFaceWlzGMEdgeCommonFace (WlzGMEdge *eE0, WlzGMEdge *eE1)
 Finds the common face which is shared by the two given edges. More...
 
void WlzGMVertexTAppend (WlzGMVertexT *eVT, WlzGMVertexT *nVT)
 Append new vertex topology element onto a doubly linked list of vertex topology element's, knowing that neither is NULL. Vertex topology elements are maintained in an unordered doubly linked list. More...
 
void WlzGMDiskTAppend (WlzGMDiskT *eDT, WlzGMDiskT *nDT)
 Append new edge topology onto a doubly linked list of disk topology element's, knowing that neither is NULL. Disk topology elements are maintained in an unordered doubly linked list. More...
 
void WlzGMEdgeTAppend (WlzGMEdgeT *eET, WlzGMEdgeT *nET)
 Append new edge topology onto a doubly linked list of edge topology element's, knowing that neither is NULL. Edge topology elements are maintained in an ordered doubly linked list, CCW around the inside of loops and CW around the outside of 2D loops. More...
 
void WlzGMEdgeTInsert (WlzGMEdgeT *eET, WlzGMEdgeT *nET)
 Insert new edge topology into a doubly linked list of edge topology element's, knowing that neither is NULL. Edge topology elements are maintained in an ordered doubly linked list, CCW around the inside of loops and CW around the outside of 2D loops. More...
 
void WlzGMEdgeTInsertRadial (WlzGMEdgeT *nET)
 Inserts the given new edge topology element into a radially sorted cyclic list of edge topology element's. More...
 
void WlzGMLoopTAppend (WlzGMLoopT *eLT, WlzGMLoopT *nLT)
 Append new loop topology onto a doubly linked list of loop topology element's, knowing that neither is NULL. Loop topology elements are maintained in an unordered doubly linked list. More...
 
void WlzGMLoopTUnlink (WlzGMLoopT *dLT)
 Unlinks the given loop topology element from a doubly linked list of loop topology element's, knowing that it is not NULL. If this is the only loop topology element in parent the parent's list of loop topology elements is set to NULL. Other elements which point to this loop topology element are not modified. More...
 
void WlzGMEdgeTUnlink (WlzGMEdgeT *dET)
 Unlinks the given edge topology element from it's loop topology element and it's opposite edge topology element. The opposite edge topology element MUST be unlinked before the model is valid again. More...
 
void WlzGMVertexTUnlink (WlzGMVertexT *dVT)
 Unlinks the given vertex topology element from a doubly linked list of vertex topology element's, knowing that it is not NULL. Since the parent of a vertex topology element is always an edge topology element and an edge topology element only ever uses a single vertex topology element, set the parent's vertex topology element pointer to NULL. More...
 
void WlzGMDiskTUnlink (WlzGMDiskT *dDT)
 Unlinks the given disk topology element from a doubly linked list of disk topology element's, knowing that it is not NULL. If this is the only disk topology element of the vertex the vertex's list of disk topology elements is set to NULL. Other elements which point to this disk topology element are not modified. More...
 
void WlzGMDiskTJoin (WlzGMDiskT *gDT0, WlzGMDiskT *gDT1)
 Joins the given pair of disk topology elements on return the first of the diskTs has all the vertexTs of both and the second of the diskTs should be free'd without being unlinked. More...
 
void WlzGMShellAppend (WlzGMShell *eS, WlzGMShell *nS)
 Append new shell onto a doubly linked list of shells, knowing that neither is NULL. A model's shells are maintained in an unordered doubly linked list. More...
 
void WlzGMShellUnlink (WlzGMShell *dS)
 Unlinks the given shell from a doubly linked list of shells kept by the model, knowing that the given shell ptr is not NULL. More...
 
void WlzGMShellJoinAndUnlink (WlzGMShell *eShell, WlzGMShell *dShell)
 Joins the shell to be unlinked onto the shell that's to be extended and then unlinks (but does not free) it. Both shells must be valid. More...
 
WlzGMResIdxTbWlzGMModelResIdx (WlzGMModel *model, unsigned int eMsk, WlzErrorNum *dstErr)
 Makes an index look up table data structure for the given model. More...
 
void WlzGMModelResIdxFree (WlzGMResIdxTb *resIdxTb)
 Frees a GM index look up table data structure. More...
 
WlzErrorNum WlzGMModelRehashVHT (WlzGMModel *model, int vHTSz)
 Rehash the vertex matching hash table. More...
 
WlzErrorNum WlzGMModelConstructS (WlzGMModel *cM, WlzGMShell *gS)
 Constructs a copy of the given shell in the current model. The curent model must be of the same type as the parent of the given shell and all the usual construction restrictions apply, see WlzGMModelConstructSimplex2D(). More...
 
WlzErrorNum WlzGMModelConstructSimplex2D (WlzGMModel *model, WlzDVertex2 *pos)
 Constructs a 2D simplex (edge) defined by two double precision end points. Either of the two points may already exist within the model and the simplex must not intersect any existing simplex in the model. See WlzGMShellMatchVtxG2D() for the meaning of the backwards, forwards and distance search parameters. More...
 
WlzErrorNum WlzGMModelConstructSimplex2N (WlzGMModel *model, WlzDVertex2 *pos, WlzDVertex2 *nrm)
 Constructs a 2D simplex (edge) defined by two double precision end points with normal components. Either of the two points may already exist within the model and the simplex must not intersect any existing simplex in the model. See WlzGMShellMatchVtxG2D() for the meaning of the backwards, forwards and distance search parameters. More...
 
WlzErrorNum WlzGMModelConstructSimplex3D (WlzGMModel *model, WlzDVertex3 *pos)
 Constructs a 3D simplex (triangle) defined by three double precision verticies, any of which may already exist within the model. If a new face is created then the child loopT of that face will have edgeT's that use the given vertices in their given order. More...
 
WlzErrorNum WlzGMModelConstructSimplex3N (WlzGMModel *model, WlzDVertex3 *pos, WlzDVertex3 *nrm)
 Constructs a 3D simplex (triangle) defined by three double precision verticies with normals, any of which may already exist within the model. If a new face is created then the child loopT of that face will have edgeT's that use the given vertices in their given order. More...
 
void WlzGMModelRemVertex (WlzGMModel *model, WlzGMVertex *dV)
 Removes a vertex from the models vertex hash table. The vertex's geometry must have been set. More...
 
void WlzGMModelAddVertexToHT (WlzGMModel *model, WlzGMVertex *nV)
 Adds a new vertex into the models vertex hash table. The vertex's geometry must have been set. More...
 
int WlzGMShellSimplexCnt (WlzGMShell *shell)
 Counts the number of simplicies in the given shell. For 2D models the simplicies are edges and for 3D models they are loops. More...
 

Detailed Description

Basic operators for manipulating Woolz geometric models. These can be either planar graphs or 3D surfaces, with the surfaces being either manifold or non-manifold.

Author
Bill Hill
Date
February 2000
Version
Id
e9580aa9d38c56da5f543d31951c761e01b6100b
Address: MRC Human Genetics Unit, MRC Institute of Genetics and Molecular Medicine, University of Edinburgh, Western General Hospital, Edinburgh, EH4 2XU, UK.
Copyright (C), [2012], The University Court of the University of Edinburgh, Old College, Edinburgh, UK.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Todo:
  • Functions for finding the minimum distance between two verticies are only partialy implemented.
  • The element deletion functions are only partly written and only partly work for 2D models.
  • Radial edges are not checked for in WlzGMModelDeleteS().
  • Unlinking edge topology elements using WlzGMEdgeTUnlink() may not be valid if edge topology elements aren't unlinked in pairs for terminal edge elements.
  • 3D simplex construction is not complete. If all three verticies and all three edges are within the model, need to check if the three verticies are in a common loop and then if ther're not add a new loop, 2 loopT's, 6 edgeT's and 6 vertexT's.
  • WlzGMLoopTFindShell() code for loopTs connected by a vertex not implemented yet.

Function Documentation

◆ WlzGMModelDeleteF()

WlzErrorNum WlzGMModelDeleteF ( WlzGMModel model,
WlzGMFace dF 
)

Deletes a face along with all the elements which depend on it. This may change the geometry and/or the topology of the parent shell.

Returns
Woolz error code.
Todo:
This function is yet to be written.
Parameters
modelModel with resources.
dFFace to delete.

References WLZ_ERR_UNIMPLEMENTED.

◆ WlzGMModelDeleteE()

WlzErrorNum WlzGMModelDeleteE ( WlzGMModel model,
WlzGMEdge dE 
)

Deletes a edge along with all the elements which depend on it. This may change the geometry and/or the topology of the parent shell. On return all shell geometries are valid.

Returns
Woolz error code.
Todo:
Deletion of edges has only been implemented for 2D models.
Parameters
modelModel with resources.
dEEdge to delete.

References _WlzGMEdge::idx, _WlzGMModel::type, WLZ_ERR_NONE, WLZ_GMMOD_2D, WLZ_GMMOD_2I, and WLZ_GMMOD_2N.

Referenced by WlzGMModelDeleteV().

◆ WlzGMEdgeCommonFace()

WlzGMFace* WlzGMEdgeCommonFace ( WlzGMEdge eE0,
WlzGMEdge eE1 
)

Finds the common face which is shared by the two given edges.

Returns
The common face or NULL if it doesn't exist.
Parameters
eE0First edge element.
eE1Second edge element.

References _WlzGMEdge::edgeT, _WlzGMLoopT::face, _WlzGMEdgeT::parent, and _WlzGMEdgeT::rad.