Woolz Image Processing
Version 1.8.3
|
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... | |
WlzGMModel * | WlzGMModelNew (WlzGMModelType modType, int blkSz, int vHTSz, WlzErrorNum *dstErr) |
Creates an empty non-manifold geometry model. More... | |
WlzGMShell * | WlzGMModelNewS (WlzGMModel *model, WlzErrorNum *dstErr) |
Creates an empty shell with a shell geometry element for the model. More... | |
WlzGMFace * | WlzGMModelNewF (WlzGMModel *model, WlzErrorNum *dstErr) |
Creates an empty face. More... | |
WlzGMLoopT * | WlzGMModelNewLT (WlzGMModel *model, WlzErrorNum *dstErr) |
Creates a loop topology element. More... | |
WlzGMEdge * | WlzGMModelNewE (WlzGMModel *model, WlzErrorNum *dstErr) |
Creates a new edge. The edge geometry element only has it's index set to a meaningful value. More... | |
WlzGMEdgeT * | WlzGMModelNewET (WlzGMModel *model, WlzErrorNum *dstErr) |
Creates a new edge topology element. More... | |
WlzGMVertex * | WlzGMModelNewV (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... | |
WlzGMVertexT * | WlzGMModelNewVT (WlzGMModel *model, WlzErrorNum *dstErr) |
Creates a new vertex topology element. More... | |
WlzGMModel * | WlzGMModelNewFromS (WlzGMShell *gS, WlzErrorNum *dstErr) |
Creates a new model from the given shell. The new model contains a copy of the given shell. More... | |
WlzGMModel * | WlzGMModelCopy (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... | |
WlzGMResource * | WlzGMModelGetRes (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... | |
WlzGMVertex * | WlzGMModelMatchVertexG3D (WlzGMModel *model, WlzDVertex3 gPos) |
Attempts to find a vertex which matches the given double precision 3D position. More... | |
WlzGMVertex * | WlzGMModelMatchVertexG2D (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... | |
WlzGMLoopT * | WlzGMEdgeTCommonLoopT (WlzGMEdgeT *eT0, WlzGMEdgeT *eT1) |
Finds a loop topology element in common for the two edge topology elements. More... | |
WlzGMEdge * | WlzGMVertexCommonEdge (WlzGMVertex *eV0, WlzGMVertex *eV1) |
Finds the edge common to the two given verticies. More... | |
WlzGMShell * | WlzGMVertexCommonShell (WlzGMVertex *eV0, WlzGMVertex *eV1) |
Finds the shell common to the two given verticies. More... | |
WlzGMShell * | WlzGMVertexGetShell (WlzGMVertex *eV) |
Finds the parent shell of the given vertex. More... | |
WlzGMShell * | WlzGMEdgeGetShell (WlzGMEdge *eE) |
Finds the parent shell of the given edge. More... | |
WlzGMVertex * | WlzGMEdgeCommonVertex (WlzGMEdge *eE0, WlzGMEdge *eE1) |
Finds the common vertex of the two given edges. More... | |
WlzGMVertex * | WlzGMEdgeCommonVertexGetDiskTs (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... | |
WlzGMDiskT * | WlzGMEdgeCommonDiskT (WlzGMEdge *eE0, WlzGMEdge *eE1) |
Finds the common disk topology element of the two given edges. More... | |
WlzGMFace * | WlzGMEdgeCommonFace (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... | |
WlzGMResIdxTb * | WlzGMModelResIdx (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... | |
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.
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.
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.
model | Model with resources. |
dF | Face to delete. |
References WLZ_ERR_UNIMPLEMENTED.
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.
model | Model with resources. |
dE | Edge to delete. |
References _WlzGMEdge::idx, _WlzGMModel::type, WLZ_ERR_NONE, WLZ_GMMOD_2D, WLZ_GMMOD_2I, and WLZ_GMMOD_2N.
Referenced by WlzGMModelDeleteV().
Finds the common face which is shared by the two given edges.
eE0 | First edge element. |
eE1 | Second edge element. |
References _WlzGMEdge::edgeT, _WlzGMLoopT::face, _WlzGMEdgeT::parent, and _WlzGMEdgeT::rad.