Woolz Image Processing  Version 1.7.5
WlzType.h
Go to the documentation of this file.
1 #ifndef WLZ_TYPE_H
2 #define WLZ_TYPE_H
3 #if defined(__GNUC__)
4 #ident "University of Edinburgh $Id: d2ce85001ef94903d08138912ec512af932e9777 $"
5 #else
6 static char _WlzType_h[] = "University of Edinburgh $Id: d2ce85001ef94903d08138912ec512af932e9777 $";
7 #endif
8 /*!
9 * \file libWlz/WlzType.h
10 * \author Bill Hill
11 * \date April 2001
12 * \version $Id: d2ce85001ef94903d08138912ec512af932e9777 $
13 * \par
14 * Address:
15 * MRC Human Genetics Unit,
16 * MRC Institute of Genetics and Molecular Medicine,
17 * University of Edinburgh,
18 * Western General Hospital,
19 * Edinburgh, EH4 2XU, UK.
20 * \par
21 * Copyright (C), [2012],
22 * The University Court of the University of Edinburgh,
23 * Old College, Edinburgh, UK.
24 *
25 * This program is free software; you can redistribute it and/or
26 * modify it under the terms of the GNU General Public License
27 * as published by the Free Software Foundation; either version 2
28 * of the License, or (at your option) any later version.
29 *
30 * This program is distributed in the hope that it will be
31 * useful but WITHOUT ANY WARRANTY; without even the implied
32 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
33 * PURPOSE. See the GNU General Public License for more
34 * details.
35 *
36 * You should have received a copy of the GNU General Public
37 * License along with this program; if not, write to the Free
38 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
39 * Boston, MA 02110-1301, USA.
40 * \brief Defines the Woolz types. These are enumerations and
41 * structures which have been typedef'd.
42 * \ingroup Wlz
43 */
44 
45 #ifndef WLZ_EXT_BIND
46 #ifdef __cplusplus
47 extern "C" {
48 #endif /* __cplusplus */
49 #endif /* WLZ_EXT_BIND */
50 
51 /*!
52 * \typedef WlzUByte
53 * \ingroup WlzType
54 * \brief An eight bit unsigned integer.
55 */
56 typedef unsigned char WlzUByte;
57 
58 /*!
59 * \typedef WlzUInt
60 * \ingroup WlzType
61 * \brief A 32 bit unsigned integer.
62 */
63 typedef unsigned int WlzUInt;
64 
65 /*!
66 * \typedef WlzLong
67 * \ingroup WlzType
68 * \brief A 64 bit integer.
69 */
70 #ifdef WLZ_EXT_BIND
71 typedef long WlzLong;
72 #else /* WLZ_EXT_BIND */
73 typedef long long WlzLong;
74 #endif /* WLZ_EXT_BIND */
75 
76 /*!
77 * \enum _WlzGreyType
78 * \ingroup WlzType
79 * \brief The valid grey value types.
80 * Typedef: ::WlzGreyType.
81 */
82 typedef enum _WlzGreyType
83 {
84  WLZ_GREY_LONG = 0, /*!< Signed WlzLong integer. */
85  WLZ_GREY_INT = 1, /*!< Signed integer. */
86  WLZ_GREY_SHORT = 2, /*!< Signed short. */
87  WLZ_GREY_UBYTE = 3, /*!< Unsigned WlzUByte integer. */
88  WLZ_GREY_FLOAT = 4, /*!< Single precision floating
89  point. */
90  WLZ_GREY_DOUBLE = 5, /*!< Double precision floating
91  point. */
92  WLZ_GREY_BIT = 6, /*!< Single bit. */
93  WLZ_GREY_RGBA = 7, /*!< Eight bit red, green, blue and
94  alpha components packed into an
95  unsigned 32 bit integer, with:
96  v = r|(g<<8)|(b<<16)|(a<<24),
97  where r, g, b and a are the
98  unsigned byte red, green, blue
99  and alpha components of the
100  value. */
101  WLZ_GREY_ERROR /*!< An invalid grey type used to
102  return error conditions.
103  Always the last enumerator! */
104 } WlzGreyType;
105 
106 /*!
107 * \def WLZ_GREY_TABLE_TYPE
108 * \ingroup WlzType
109 * \brief For historical reasons a pixel/voxel value table
110 * encodes both the grey type and the table type in
111 * a single type. This macro achieves this with the
112 * addition of array type.
113 * \par
114 * AR: Array type, 0 for scalar values, 1 for any array
115 * type.
116 * TT: Table type.
117 * GT: Grey type.
118 */
119 #define WLZ_GREY_TABLE_TYPE(AR,TT,GT) ((100*(!!(AR)))+(10*(TT))+(GT))
120 
121 /*!
122 * \def WLZ_GREY_TABLE_TO_GREY_TYPE
123 * \ingroup WlzType
124 * \brief Grey type encoded in grey table type. See
125 * WLZ_GREY_TABLE_TYPE.
126 * \par
127 * GTT: Grey table type.
128 */
129 #define WLZ_GREY_TABLE_TO_GREY_TYPE(GTT) ((GTT)%10)
130 
131 /*!
132 * \def WLZ_GREY_TABLE_TO_TABLE_TYPE
133 * \ingroup WlzType
134 * \brief Table type encoded in grey table type. See
135 * WLZ_GREY_TABLE_TYPE.
136 * \par
137 * GTT: Grey table type.
138 */
139 #define WLZ_GREY_TABLE_TO_TABLE_TYPE(GTT) (((GTT)%100)/10)
140 
141 /*!
142 * \def WLZ_GREY_TABLE_TO_RANK
143 * \ingroup WlzType
144 * \brief Rank encoded in grey table type. See
145 * WLZ_GREY_TABLE_TYPE.
146 * \par
147 * GTT: Grey table type.
148 */
149 #define WLZ_GREY_TABLE_TO_RANK(GTT) ((GTT)/100)
150 
151 /*!
152 * \enum _WlzGreyTableType
153 * \ingroup WlzType
154 * \brief Woolz pixel/voxel value table types.
155 */
156 typedef enum _WlzGreyTableType
157 {
158  WLZ_GREY_TAB_RAGR = 0, /*!< Base ragged rectangle grey value
159  table. */
160  WLZ_GREY_TAB_RECT = 1, /*!< Base rectangular grey value
161  table. */
162  WLZ_GREY_TAB_INTL = 2, /*!< Base interval grey value table. */
163  WLZ_POINT_VALUES = 3, /*!< Values defined at points. */
164  WLZ_INDEXED_VALUES = 4, /*!< Indexed value table. */
165  WLZ_FEAT_TAB_RAGR = 5, /*!< Base ragged rectangle feature
166  table. */
167  WLZ_FEAT_TAB_RECT = 6, /*!< Base rectangular feature table. */
168  WLZ_GREY_TAB_TILED = 7 /*!< Tiled grey value table. */
170 
171 /*!
172 * \enum _WlzObjectType
173 * \ingroup WlzType
174 * \brief The Woolz object types.
175 * Many of the integer enumeration values are required for
176 * historical reasons but, with the execption of WLZ_NULL,
177 * the numerical value should never be used explicitly.
178 *
179 * For historical reasons the base grey table types are used
180 * to form explicit grey table types which include the grey type.
181 * The functions or macros for extracting and synthesising these
182 * types should be used. These are:
183 * WLZ_GREY_TABLE_TYPE,
184 * WLZ_GREY_TABLE_TO_GREY_TYPE,
185 * WLZ_GREY_TABLE_TO_TABLE_TYPE,
186 * WLZ_GREY_TABLE_TO_RANK,
187 * WlzGreyTableType(),
188 * WlzGreyTableTypeToGreyType(),
189 * WlzGreyTableTypeToRank(),
190 * WlzGreyTableTypeToTableType().
191 * Typedef: ::WlzObjectType.
192 */
193 typedef enum _WlzObjectType
194 {
195  /**********************************************************************
196  * Top level Woolz object types.
197  **********************************************************************/
198  WLZ_NULL = 0, /*!< The NULL object is an invalid
199  object used to return an error
200  condition. */
201  WLZ_2D_DOMAINOBJ = 1, /*!< 2D spatial domain object. */
202  WLZ_3D_DOMAINOBJ = 2, /*!< 3D spatial domain object. */
203  WLZ_TRANS_OBJ = 3, /*!< Object in which the domain is
204  a transformation and the values
205  are an object. */
206  WLZ_3D_WARP_TRANS = 4, /*!< 3D finite element warp
207  transformation. */
208  WLZ_2D_POLYGON = 10, /*!< 2D polygon. */
209  WLZ_BOUNDLIST = 11, /*!< Boundary tree. */
210  WLZ_CONV_HULL = 12, /*!< Convex hull. */
211  WLZ_HISTOGRAM = 13, /*!< Histogram. */
212  WLZ_3D_POLYGON = 14, /*!< 3D polygon. */
213  WLZ_CONTOUR = 15, /*!< Contour in either 2D or 3D. */
214  WLZ_CMESH_2D = 16, /*!< Constrained mesh with triangular
215  elements in 2D. */
216  WLZ_CMESH_3D = 17, /*!< Constrained mesh with tetrahedral
217  elements in 3D. */
218  WLZ_CMESH_2D5 = 18, /*!< Constrained mesh with triangular
219  elements in 3D. */
220  WLZ_RECTANGLE = 20, /*!< Rectangle. */
221  WLZ_POINTS = 21, /*!< Points. */
222  WLZ_CONVOLVE_INT = 50, /*!< Integer convolution. */
223  WLZ_CONVOLVE_FLOAT = 51, /*!< Floating point convolution. */
224  WLZ_AFFINE_TRANS = 63, /*!< Affine transform, either 2D or
225  3D. */
226  WLZ_WARP_TRANS = 64, /*!< A finite element warp
227  transformation. */
228  WLZ_FMATCHOBJ = 65, /*!< Matched features for finite
229  element warps. */
230  WLZ_TEXT = 70, /*!< Simple ascii text. */
231  WLZ_COMPOUND_ARR_1 = 80, /*!< Compound array of objects
232  with same type. */
233  WLZ_COMPOUND_ARR_2 = 81, /*!< Compound array of objects
234  with differnt type. */
235  WLZ_COMPOUND_LIST_1 = 82, /*!< Linked list of objects
236  with same type. */
237  WLZ_COMPOUND_LIST_2 = 83, /*!< Linked list of objects
238  with different type. */
239  WLZ_LUT = 90, /*!< Simple look up table. */
240  WLZ_PROPERTY_OBJ = 110, /*!< An object which only has a
241  property list. */
242  WLZ_EMPTY_OBJ = 127, /*!< Empty object: An object which
243  occupies no space and has no
244  values. */
245  WLZ_MESH_TRANS = 128, /*!< Mesh transform. */
246  WLZ_CMESH_TRANS = 129, /*!< Constrained mesh transform,
247  either 2D or 3D. */
248 
249  WLZ_EMPTY_DOMAIN, /*!< Empty domain: A domain which
250  occupies no space. */
251  WLZ_EMPTY_VALUES, /*!< Empty values: A values which
252  has no values! */
253  /**********************************************************************
254  * Plane domain types.
255  **********************************************************************/
256  WLZ_INTERVALDOMAIN_INTVL = 1, /*!< Spatial domain defined by
257  a collection of intervals. */
258  WLZ_INTERVALDOMAIN_RECT = 2, /*!< Spatial domain defined by an
259  axis aligned rectangle. */
260  WLZ_LBTDOMAIN_2D = 3, /*!< 2D linear binary tree domain. */
261  WLZ_LBTDOMAIN_3D = 4, /*!< 3D linear binary tree domain. */
262  WLZ_PLANEDOMAIN_DOMAIN = WLZ_2D_DOMAINOBJ, /*!< 3D spatial domain
263  composed of 2D spatial domains. */
264  WLZ_PLANEDOMAIN_POLYGON = WLZ_2D_POLYGON, /*!< 3D polygon domain
265  composed of 2D polygon domains. */
266  WLZ_PLANEDOMAIN_BOUNDLIST = WLZ_BOUNDLIST, /*!< 3D boundary domain
267  composed of 2D boundary
268  domains. */
270  composed of 2D convex hulls. */
271  WLZ_PLANEDOMAIN_HISTOGRAM = WLZ_HISTOGRAM, /*!< 3D histogram domain
272  composed of 2D histogram
273  domains. */
274  WLZ_PLANEDOMAIN_AFFINE = WLZ_AFFINE_TRANS, /*!< 3D affine domain
275  composed of 2D affine transform
276  domains. */
277  WLZ_PLANEDOMAIN_WARP = WLZ_WARP_TRANS, /*!< 3D warp domain
278  composed of 2D warp domains. */
279  /**********************************************************************
280  * Value table types.
281  **********************************************************************/
284  /*!< Ragged rectangle int value
285  table. */
288  /*!< Ragged rectangle short value
289  table. */
292  /*!< Ragged rectangle unsigned byte
293  value table. */
296  /*!< Ragged rectangle single precision
297  floating point value table. */
300  /*!< Ragged rectangle double precision
301  floating point value table. */
304  /*!< Ragged rectangle single bit (packed
305  in unsigned bytes) value table. */
308  /*!< Ragged rectangle red, green, blue,
309  alpha value table. */
312  /*!< Rectangular int value table. */
315  /*!< Rectangular short value table. */
318  /*!< Rectangular unsigned byte value
319  table. */
322  /*!< Rectangular single precision
323  floating point value table. */
326  /*!< Rectangular double precision
327  floating point value table. */
330  /*!< Rectangular single bit (packed in
331  unsigned bytes) value table. */
334  /*!< Rectangular red, green, blue,
335  alpha value table. */
338  /*!< Interval coded int value table. */
341  /*!< Interval coded short value
342  table. */
345  /*!< Interval coded unsigned byte value
346  table. */
349  /*!< Interval coded single precision
350  floating point value table. */
353  /*!< Interval coded double precision
354  floating point value table. */
357  /*!< Interval coded single bit (packed
358  unsigned bytes) value table. */
361  /*!< Interval coded red, green, blue,
362  alpha value table. */
365  /*!< Tiled int value table. */
368  /*!< Tiled short value table. */
371  /*!< Tiled unsigned byte value
372  table. */
375  /*!< Tiled single precision
376  floating point value table. */
379  /*!< Tiled double precision
380  floating point value table. */
383  /*!< Tiled single bit (packed
384  unsigned bytes) value table. */
387  /*!< Tiled red, green, blue, table. */
390  /*!< Tiled int value table. */
393  /*!< Tiled short value table. */
396  /*!< Tiled unsigned byte value
397  table. */
400  /*!< Tiled single precision
401  floating point value table. */
404  /*!< Tiled double precision
405  floating point value table. */
408  /*!< Tiled single bit (packed
409  unsigned bytes) value table. */
412  /*!< Tiled red, green, blue, table. */
413  WLZ_FEATVALUETABLE_RAGR = 50, /*!< Ragged rectangle features
414  value table. */
415  WLZ_FEATVALUETABLE_RECT = 60, /*!< Rectangular features
416  value table. */
417  WLZ_VOXELVALUETABLE_GREY = 1, /*!< Grey value voxel value table. */
418  WLZ_VOXELVALUETABLE_CONV_HULL, /*!< Convex hull voxel value table. */
419  /**********************************************************************
420  * Polygon domain types.
421  **********************************************************************/
422  WLZ_POLYGON_INT = 1, /*!< Integer polygon domain. */
423  WLZ_POLYGON_FLOAT = 2, /*!< Single precision floating point
424  polygon domain. */
425  WLZ_POLYGON_DOUBLE = 3, /*!< Double precision floating point
426  polygon domain. */
427  /**********************************************************************
428  * Boundary list types.
429  **********************************************************************/
430  WLZ_BOUNDLIST_PIECE = 0, /*!< Piece contains foreground. */
431  WLZ_BOUNDLIST_HOLE = 1, /*!< Piece contains background. */
432  /**********************************************************************
433  * Convex hull types.
434  **********************************************************************/
435  WLZ_CONVHULL_VALUES = 1, /*!< Convex hull values. */
436  WLZ_CONVHULL_DOMAIN_2D = 2, /*!< 2D convex hull domain. */
437  WLZ_CONVHULL_DOMAIN_3D = 3, /*!< 3D convex hull domain. */
438  /**********************************************************************
439  * Histogram domain types. WLZ_HISTOGRAMDOMAIN_OLD_INT and
440  * WLZ_HISTOGRAMDOMAIN_OLD_FLOAT exist only to allow old files to be
441  * read, they should not be used anywhere else.
442  **********************************************************************/
443  WLZ_HISTOGRAMDOMAIN_OLD_INT = 1, /*!< Historical compatability. */
444  WLZ_HISTOGRAMDOMAIN_OLD_FLOAT = 2, /*!< Historical compatability. */
445  WLZ_HISTOGRAMDOMAIN_INT = 3, /*!< Integer histogram domain. */
446  WLZ_HISTOGRAMDOMAIN_FLOAT = 4, /*!< Floating point histogram
447  domain. */
448  /**********************************************************************
449  * Rectangle object domain types.
450  **********************************************************************/
451  WLZ_RECTANGLE_DOMAIN_INT = 1, /*!< Integer rectangle domain. */
452  WLZ_RECTANGLE_DOMAIN_FLOAT = 2, /*!< Floating point rectangle
453  domain. */
454  /**********************************************************************
455  * 3D view structure types (also used for object and domain type).
456  **********************************************************************/
457  WLZ_3D_VIEW_STRUCT = 160, /*!< 3D view structure. */
458  /**********************************************************************
459  * Property list types.
460  **********************************************************************/
461  WLZ_PROPERTYLIST = 170, /*! A property list which contains
462  a linked list of properties. */
463  /**********************************************************************
464  * Property types.
465  **********************************************************************/
466  WLZ_PROPERTY_SIMPLE = 180, /*!< Simple property. */
467  WLZ_PROPERTY_EMAP = 181, /*!< EMAP property. */
468  WLZ_PROPERTY_NAME = 182, /*!< Ascii name property. */
469  WLZ_PROPERTY_GREY = 183, /*!< Grey value property. */
470  WLZ_PROPERTY_TEXT = 184, /*!< Text property. */
471  /**********************************************************************
472  * Points domain types.
473  **********************************************************************/
474  WLZ_POINTS_2I = 21, /*!< Integer 2D points domain. */
475  WLZ_POINTS_2D = 22, /*!< Integer 2D points domain. */
476  WLZ_POINTS_3I = 23, /*!< Double precision floating point
477  3D points domain. */
478  WLZ_POINTS_3D = 24, /*!< Double precision floating point
479  3D points domain. */
480  /**********************************************************************
481  * WLZ_DUMMY_ENTRY is not an object type.
482  * Keep it the last enumerator!
483  **********************************************************************/
484  WLZ_DUMMY_ENTRY /*!< Not a Woolz object type.
485  Keep it the last enumerator! */
486 } WlzObjectType;
487 
488 
489 /*!
490 * \enum _WlzEMAPPropertyType
491 * \ingroup WlzProperty
492 * \brief Sub types of EMAP properties
493 * Typedef: ::WlzEMAPPropertyType.
494 */
496 {
497  WLZ_EMAP_PROPERTY_GREY_MODEL = 1, /*!< Reference Model */
498  WLZ_EMAP_PROPERTY_GREY_OTHER, /*!< Grey object e.g. derived from model */
499  WLZ_EMAP_PROPERTY_DOMAIN_ANATOMY, /*!< Anatomy Domain */
500  WLZ_EMAP_PROPERTY_DOMAIN_OTHER, /*!< Other Domain */
501  WLZ_EMAP_PROPERTY_TRANSFORM, /*!< woolz transform for EMAP models */
502  WLZ_EMAP_PROPERTY_DUMMY /*!< Dummy property */
504 
505 /*!
506 * \enum _WlzRasterDir
507 * \ingroup WlzAccess
508 * \brief Raster scan directions as used by WlzIntervalWSpace
509 * and WlzIterateWSpace. These are built using bit masks
510 * with bits set for decreasing in each of the directions.
511 * Typedef: ::WlzRasterDir.
512 */
513 typedef enum _WlzRasterDir
514 {
515  WLZ_RASTERDIR_DC = (1), /*!< Used to build directions . */
516  WLZ_RASTERDIR_DL = (1 << 1), /*!< Used to build directions. */
517  WLZ_RASTERDIR_DP = (1 << 2), /*!< Used to build directions. */
518  WLZ_RASTERDIR_ILIC = (0), /*!< Increasing lines, increasing
519  columns. */
521  /*!< Increasing lines, decreasing
522  columns. */
524  /*!< Decreasing lines, increasing
525  columns. */
527  /*!< Decreasing lines, decreasing
528  columns. */
530  /*!< Increasing planes,
531  increasing lines, increasing
532  columns. */
534  /*!< Increasing planes,
535  increasing lines, decreasing
536  columns. */
538  /*!< Increasing planes,
539  decreasing lines, increasing
540  columns. */
542  /*!< Increasing planes,
543  decreasing lines, decreasing
544  columns. */
546  /*!< Decreasing planes,
547  increasing lines, increasing
548  columns. */
550  /*!< Decreasing planes,
551  increasing lines, decreasing
552  columns. */
554  /*!< Decreasing planes,
555  decreasing lines, increasing
556  columns. */
558  /*!< Decreasing planes,
559  decreasing lines, decreasing
560  columns. */
561 } WlzRasterDir;
562 
563 /*!
564 * \enum _WlzDirection
565 * \ingroup WlzType
566 * \brief Basic directions.
567 */
568 typedef enum _WlzDirection
569 {
570  WLZ_DIRECTION_IC, /*!< Increasing columns, ++x, east. */
571  WLZ_DIRECTION_IL, /*!< Increasing lines, ++y, south. */
572  WLZ_DIRECTION_IP, /*!< Increasing planes, ++z, up. */
573  WLZ_DIRECTION_DC, /*!< Decreasing columns, --x, west. */
574  WLZ_DIRECTION_DL, /*!< Decreasing lines, --y, north. */
575  WLZ_DIRECTION_DP /*!< Decreasing planes, --z, down. */
576 } WlzDirection;
577 
578 /*!
579 * \enum _WlzTransformType
580 * \ingroup WlzTransform
581 * \brief Types of spatial transformation.
582 * Typedef: ::WlzTransformType.
583 */
584 typedef enum _WlzTransformType
585 {
586  WLZ_TRANSFORM_EMPTY = 0, /*!< Undefined transform. */
587  WLZ_TRANSFORM_2D_AFFINE = 1, /*!< General 2D affine transform. */
588  WLZ_TRANSFORM_2D_REG, /*!< 2D affine but only rotation
589  and translation. */
590  WLZ_TRANSFORM_2D_TRANS, /*!< 2D affine but only translation. */
591  WLZ_TRANSFORM_2D_NOSHEAR, /*!< 2D affine but no shear. */
592  WLZ_TRANSFORM_3D_AFFINE, /*!< General 3D affine transform. */
593  WLZ_TRANSFORM_3D_REG, /*!< 3D affine but only rotation
594  and translation. */
595  WLZ_TRANSFORM_3D_TRANS, /*!< 3D affine but only translation. */
596  WLZ_TRANSFORM_3D_NOSHEAR, /*!< 3D affine but no shear. */
597  WLZ_TRANSFORM_2D_BASISFN, /*!< 2D basis function transform. */
598  WLZ_TRANSFORM_2D5_BASISFN, /*!< 2.5D (plane wise) basis function
599  transform. */
600  WLZ_TRANSFORM_3D_BASISFN, /*!< 3D basis function transform. */
601  WLZ_TRANSFORM_2D_MESH, /*!< 2D triangular mesh transform. */
602  WLZ_TRANSFORM_2D5_MESH, /*!< 2.5D (plane wise) triangular
603  mesh transform. */
604  WLZ_TRANSFORM_3D_MESH, /*!< 3D tetrahedral mesh transform. */
605  WLZ_TRANSFORM_2D_CMESH = WLZ_CMESH_2D, /*!< 2D conforming triangular mesh
606  transform. */
607  WLZ_TRANSFORM_2D5_CMESH = WLZ_CMESH_2D5, /*!< 3D conforming triangular mesh
608  transform. */
609  WLZ_TRANSFORM_3D_CMESH = WLZ_CMESH_3D /*!< 3D conforming tetrahedral mesh
610  transform. */
612 
613 /*!
614 * \enum _WlzMeshElemType
615 * \ingroup WlzTransform
616 * \brief Mesh transform element types.
617 * Typedef: ::WlzMeshElemType.
618 */
619 typedef enum _WlzMeshElemType
620 {
625 
626 /*!
627 * \enum _WlzMeshElemFlags
628 * \ingroup WlzTransform
629 * \brief Mesh transform element flag bit masks.
630 * Typedef: ::WlzMeshElemFlags.
631 */
632 typedef enum _WlzMeshElemFlags
633 {
635  WLZ_MESH_ELEM_FLAGS_NBR_0 = (1), /*!< Neighbour on side 0 exists */
636  WLZ_MESH_ELEM_FLAGS_NBR_1 = (1<<1), /*!< Neighbour on side 1 exists */
637  WLZ_MESH_ELEM_FLAGS_NBR_2 = (1<<2), /*!< Neighbour on side 2 exists */
638  WLZ_MESH_ELEM_FLAGS_ZOMBIE = (1<<3), /*!< Dead, awaiting replacement */
639  WLZ_MESH_ELEM_FLAGS_REFINE = (1<<4), /*!< Available for refinement */
640  WLZ_MESH_ELEM_FLAGS_OUTSIDE = (1<<5) /*!< Outside object's domain */
642 
643 /*!
644 * \enum _WlzMeshNodeFlags
645 * \ingroup WlzTransform
646 * \brief Mesh transform node flag masks.
647 * Typedef: ::WlzMeshNodeFlags.
648 */
649 typedef enum _WlzMeshNodeFlags
650 {
652  WLZ_MESH_NODE_FLAGS_BBOX = (1), /*!< Created from bounding box. */
653  WLZ_MESH_NODE_FLAGS_BLOCK = (1<<1), /*!< Created by block fill. */
654  WLZ_MESH_NODE_FLAGS_IDOM = (1<<2), /*!< Created to fill interval
655  domain */
656  WLZ_MESH_NODE_FLAGS_POLY = (1<<3), /*!< Created along polygon domain */
657  WLZ_MESH_NODE_FLAGS_ZOMBIE = (1<<4) /*!< Dead, awaiting replacement */
659 
660 /*!
661 * \enum _WlzMeshGenMethod
662 * \ingroup WlzTransform
663 * \brief Mesh generation methods.
664 * Typedef: ::WlzMeshGenMethod.
665 */
666 typedef enum _WlzMeshGenMethod
667 {
668  WLZ_MESH_GENMETHOD_BLOCK, /*!< Uniform (triangulated) block
669  grid. */
670  WLZ_MESH_GENMETHOD_GRADIENT, /*!< Triangulated grid based on image
671  gradient. */
672  WLZ_MESH_GENMETHOD_CONFORM /*!< Mesh conforming to domain. */
674 
675 /*!
676 * \enum _WlzMeshError
677 * \ingroup WlzTransform
678 * \brief Mesh error bit masks.
679 * Typedef: ::WlzMeshError.
680 */
681 typedef enum _WlzMeshError
682 {
683  WLZ_MESH_ERR_NONE = (0), /*!< No error, mesh valid */
684  WLZ_MESH_ERR_ELEM_CW = (1), /*!< Element not CCW */
685  WLZ_MESH_ERR_ELEM_INDEX = (1<<1), /*!< Element index invalid */
686  WLZ_MESH_ERR_ELEM_NODE = (1<<2), /*!< Element node invalid */
687  WLZ_MESH_ERR_ELEM_ZOMBIE = (1<<3), /*!< Element is a zombie */
688  WLZ_MESH_ERR_DELEM_CW = (1<<4), /*!< Displaced element not CCW */
689  WLZ_MESH_ERR_NELEM_INDEX = (1<<5), /*!< Neighbour index invalid */
690  WLZ_MESH_ERR_NELEM_NODE = (1<<6), /*!< Neighbour node invalid */
691  WLZ_MESH_ERR_NELEM_NOTNBR = (1<<7), /*!< Neighbour not a neighbour */
692  WLZ_MESH_ERR_NELEM_ZOMBIE = (1<<8) /*!< Neighbour is a zombie */
693 } WlzMeshError;
694 
695 /*!
696 * \enum _WlzConnectType
697 * \ingroup WlzType
698 * \brief Connectivity in a 2D or 3D digital space.
699 * Typedef: ::WlzConnectType.
700 */
701 typedef enum _WlzConnectType
702 {
710 
711 /*!
712 * \enum _WlzDistanceType
713 * \ingroup WlzType
714 * \brief Distance metrics in a 2D or 3D digital space.
715 * Typedef: ::WlzDistanceType.
716 */
717 typedef enum _WlzDistanceType
718 {
726  WLZ_APX_EUCLIDEAN_DISTANCE /*! Approximate Euclidean. */
728 
729 /*!
730 * \enum _WlzRCCClassIdx
731 * \ingroup WlzType
732 * \brief Discrete Region Connected Calculus (RCC) clasification
733 * indices. The classifications indices are for bits set
734 * in a classification bitmask.
735 * See also WlzRCCClass() and WlzRegConCalcRCC().
736 * Typedef: ::WlzRCCClassIdx.
737 */
738 typedef enum _WlzRCCClassIdx
739 {
740  WLZ_RCCIDX_DC = (0), /*!< Edge Connected. */
741  WLZ_RCCIDX_EC = (1), /*!< Edge Connected. */
742  WLZ_RCCIDX_EQ = (2), /*!< Equal. */
743  WLZ_RCCIDX_PO = (3), /*!< Partial Overlap. */
744  WLZ_RCCIDX_TPP = (4), /*!< Tangential Proper Part. */
745  WLZ_RCCIDX_NTPP = (5), /*!< Non-Tangential Proper Part. */
746  WLZ_RCCIDX_TPPI = (6), /*!< Tangential Proper Part Inverse. */
747  WLZ_RCCIDX_NTPPI = (7), /*!< Non-Tangential Proper Part
748  Inverse. */
749  WLZ_RCCIDX_TSUR = (8), /*!< Tangential SURrounds. */
750  WLZ_RCCIDX_TSURI = (9), /*!< Tangential SURrounds Inverse. */
751  WLZ_RCCIDX_NTSUR = (10), /*!< Non-Tangential SURrounds. */
752  WLZ_RCCIDX_NTSURI = (11), /*!< Non-Tangential SURrounds
753  Inverse. */
754  WLZ_RCCIDX_ENC = (12), /*!< ENCloses. */
755  WLZ_RCCIDX_ENCI = (13), /*!< ENCloses Inverse. */
756  WLZ_RCCIDX_OST = (14), /*!< OffSeT. */
757  WLZ_RCCIDX_CNT = (15) /*!< Not a classification index, but
758  the number of classification
759  indices, keep last. */
761 
762 /*!
763 * \enum _WlzRCCClass
764 * \ingroup WlzType
765 * \brief A Discrete Region Connected Calculus (RCC) clasification
766 * of an ordered pair of spatial regions. The classifications
767 * are bit masks to allow for multiple classifications.
768 * See also WlzRegConCalcRCC().
769 * Typedef: ::WlzRCCClass.
770 */
771 typedef enum _WlzRCCClass
772 {
773  WLZ_RCC_EMPTY = 0, /*!< Empty:
774  One or both of the domains is
775  empty. */
776  WLZ_RCC_DC = (1<<WLZ_RCCIDX_DC), /*!< Disconnected. */
777  WLZ_RCC_EC = (1<<WLZ_RCCIDX_EC), /*!< Edge Connected. */
778  WLZ_RCC_EQ = (1<<WLZ_RCCIDX_EQ), /*!< Equal. */
779  WLZ_RCC_PO = (1<<WLZ_RCCIDX_PO), /*!< Partial Overlap. */
780  WLZ_RCC_TPP = (1<<WLZ_RCCIDX_TPP), /*!< Tangential Proper Part. */
781  WLZ_RCC_NTPP = (1<<WLZ_RCCIDX_NTPP), /*!< Non-Tangential Proper Part. */
782  WLZ_RCC_TPPI = (1<<WLZ_RCCIDX_TPPI), /*!< Tangential Proper Part inverse. */
783  WLZ_RCC_NTPPI = (1<<WLZ_RCCIDX_NTPPI), /*!< Non-Tangential Proper Part
784  inverse. */
785  WLZ_RCC_TSUR = (1<<WLZ_RCCIDX_TSUR), /*!< Tangential Surrounds:
786  The first domain is surrounded by
787  and edge connected to the
788  second domain. */
789  WLZ_RCC_TSURI = (1<<WLZ_RCCIDX_TSURI), /*!< Tangential Surrounds inverse:
790  The second domain is surrounded by
791  and edge connected to the first
792  domain. */
793  WLZ_RCC_NTSUR = (1<<WLZ_RCCIDX_NTSUR), /*!< Non-Tangential Surrounds:
794  The first domain is surrounded by
795  but not edge connected to the
796  second domain. */
797  WLZ_RCC_NTSURI = (1<<WLZ_RCCIDX_NTSURI), /*!< Non-Tangential Surrounds
798  inverse:
799  The second domain is surrounded by
800  but not edge connected to the
801  first domain. */
802  WLZ_RCC_ENC = (1<<WLZ_RCCIDX_ENC), /*!< Encloses:
803  The majority of the first domain
804  is within the convex hull of the
805  second domain. */
806  WLZ_RCC_ENCI = (1<<WLZ_RCCIDX_ENCI), /*!< Encloses inverse:
807  The majority of the second domain
808  is within the convex hull of the
809  first domain. */
810  WLZ_RCC_OST = (1<<WLZ_RCCIDX_OST), /*!< Offset:
811  There is a narrow distribution of
812  equi-distant distances between
813  the first and second domain. */
814  WLZ_RCC_MSK = ((1<<WLZ_RCCIDX_CNT)-1) /*!< Not a clasification but a bit
815  mask for all the possible
816  classifications. */
817 } WlzRCCClass;
818 
819 /*!
820 * \enum _WlzSpecialStructElmType
821 * \ingroup WlzMorphologyOps
822 * \brief Special structuring elements for morphological operations.
823 * Typedef: ::WlzSpecialStructElmType.
824 */
826 {
838 
839 /*!
840 * \enum _WlzBinaryOperatorType
841 * \ingroup WlzArithmetic
842 * \brief Binary operators.
843 * Typedef: ::WlzBinaryOperatorType.
844 */
846 {
865 
866 /*!
867 * \enum _WlzCompThreshType
868 * \ingroup WlzThreshold
869 * \brief Automatic threshold computation methods.
870 * The histogram may need to be smoothed for these algorithms
871 * to work.
872  Typedef: ::WlzCompThreshType.
873 */
874 typedef enum _WlzCompThreshType
875 {
876  WLZ_COMPTHRESH_FOOT, /*!< Can not determine threshold type.
877  The threshold value is intercept of a line fitted
878  to the upper slope of the histogram main peak with
879  the abscissa. */
880  WLZ_COMPTHRESH_DEPTH, /*!< Can not determine threshold type.
881  The threshold value is that point to the right of
882  the histogram peak that is maximally distant from
883  the chord joining the peak and the histogram right
884  hand end point.
885  The histogram may need to be smoothed for this
886  algorithm to work. */
887  WLZ_COMPTHRESH_GRADIENT, /*!< Can not determine threshold type.
888  The threshold value is the first point to the
889  right of the histogram main peak at which the
890  gradient falls to zero (cf finding a minimum).
891  To find the slope of the histogram at some
892  point a straight line is fitted through the
893  point \f$\pm\f$ a fixed number of points to
894  either side. */
895  WLZ_COMPTHRESH_FRACMIN, /*!< The threshold type is determined from the
896  position of the histogram's maximum and the
897  threshold value is the minimum following
898  the specified fraction of the values. */
899  WLZ_COMPTHRESH_SMOOTHSPLIT, /*!< The threshold value is found by
900  heavily smoothing the histogram and looking
901  for the minimum. Successively lesser smoothing
902  values are then applied and at each iteration
903  the minimum closest to the previous is found. */
904  WLZ_COMPTHRESH_OTSU /*!< The threshold value is found by using
905  Otsu's method. This is a clustering-based algorithm
906  which computes an optimum threshold value that
907  separates the two classes of an (assumed)
908  bi-modal histogram. */
910 
911 /*!
912 * \enum _WlzInterpolationType
913 * \ingroup WlzType
914 * \brief Interpolation methods.
915 * Typedef: ::WlzInterpolationType.
916 */
918 {
919  WLZ_INTERPOLATION_NEAREST = 0, /*!< Nearest neighbour. */
920  WLZ_INTERPOLATION_LINEAR, /*!< Linear or tri-linear. */
921  WLZ_INTERPOLATION_CLASSIFY_1, /*!< Classification by probability. */
922  WLZ_INTERPOLATION_CALLBACK, /*!< Callback function computes
923  each interpolated value. */
924  WLZ_INTERPOLATION_ORDER_2, /*!< Second order interpolation. */
925  WLZ_INTERPOLATION_BARYCENTRIC, /*!< Barycentric mesh interpolation. */
926  WLZ_INTERPOLATION_KRIG /*!< Kriging mesh interpolation. */
928 
929 /*!
930 * \enum _WlzThresholdType
931 * \ingroup WlzThreshold
932 * \brief Threshold value selection.
933 * Typedef: ::WlzThresholdType.
934 */
935 typedef enum _WlzThresholdType
936 {
937  WLZ_THRESH_LOW = 0, /*!< Threshold < given value */
938  WLZ_THRESH_HIGH, /*!< Threshold >= given value */
939  WLZ_THRESH_EQUAL /*!< Threshold == given value */
941 
942 
943 /*!
944 * \enum _WlzRGBAThresholdType
945 * \ingroup WlzThreshold
946 * \brief Colour threshold type selection.
947 * Typedef: ::WlzRGBAThresholdType.
948 */
950 {
959 
960 /*!
961 * \enum _WlzRGBAColorSpace
962 * \ingroup WlzValueUtils
963 * \brief Colour space (i.e. rgb, hsb, grey etc.) selection.
964 * Typedef: ::WlzRGBAColorSpace.
965 */
966 typedef enum _WlzRGBAColorSpace
967 {
973 
974 /*!
975 * \enum _WlzRGBAColorChannel
976 * \ingroup WlzValueUtils
977 * \brief Colour channel selection.
978 * Typedef: ::WlzRGBAColorChannel.
979 */
981 {
994 
995 /*!
996 * \enum _WlzPolyFillMode
997 * \ingroup WlzPolyline
998 * \brief Polygon fill modes.
999 * Typedef: ::WlzPolyFillMode.
1000 */
1001 typedef enum _WlzPolyFillMode
1002 {
1003  WLZ_SIMPLE_FILL, /*!< Fill all pixels with winding number > 0 */
1004  WLZ_EVEN_ODD_FILL, /*!< Fill all pixels with odd winding number */
1005  WLZ_VERTEX_FILL /*!< Fill all pixels lying under the polyline */
1006 } WlzPolyFillMode;
1007 
1008 /*!
1009 * \enum _WlzGreyTransformType
1010 * \ingroup WlzTransform
1011 * \brief Grey-level transform types.
1012 * Typedef: ::WlzGreyTransformType.
1013 */
1015  WLZ_GREYTRANSFORMTYPE_IDENTITY, /*!< No value change. */
1016  WLZ_GREYTRANSFORMTYPE_LINEAR, /*!< Linear interpolation. */
1017  WLZ_GREYTRANSFORMTYPE_GAMMA, /*!< Gamma function. */
1018  WLZ_GREYTRANSFORMTYPE_SIGMOID /*!< Sigmoid function. */
1020 
1021 /*!
1022 * \enum _WlzThreeDStdViews
1023 * \ingroup WlzSectionTransform
1024 * \brief Standard 3D views.
1025  Typedef: ::WlzThreeDStdViews.
1026 */
1028 {
1034 
1035 /*!
1036 * \enum _WlzThreeDViewMode
1037 * \ingroup WlzSectionTransform
1038 * \brief 3D viewing modes which determine the angle at which the plane
1039 * is cut through a 3D volume.
1040 * Typedef: ::WlzThreeDViewMode.
1041 */
1043 {
1044  WLZ_STATUE_MODE, /*!< Corresponds to "walking around a
1045  statue" so that if the view is say
1046  from the left-hand side then the
1047  section will have the top of the
1048  statue to the left. */
1049  WLZ_UP_IS_UP_MODE, /*!< The projection of the vector up
1050  onto the section image will be
1051  "up". This is ill-defined if the
1052  viewing direction is very close to
1053  "up". */
1058 
1059 /*!
1060 * \enum _WlzWindowFnType
1061 * \ingroup WlzValuesFilters
1062 * \brief Types of window functions.
1063 * Window functions are used to weight the grey values of Woolz
1064 * domain objects according to the spatial distribution.
1065 * Typedef: WlzWindowFnType.
1066 *
1067 * The window functions are defined as:
1068 * \f[
1069  blackman(r,R) = 0.42 +
1070  0.50 \cos{(\frac{2.00 \pi r}{R - 1.00})} +
1071  0.08 \cos{(\frac{4.00 \pi r}{R - 1.00})}
1072  \f]
1073  \f[
1074  hamming(r,R) = 0.54 +
1075  0.46 \cos{(\frac{2.00 \pi r}{R - 1.00})}
1076  \f]
1077  \f[
1078  hanning(r,R) = 0.50 +
1079  0.50 \cos{(\frac{2.00 \pi r}{R - 1.00})}
1080  \f]
1081  \f[
1082  parzen(r,R) = 1.00 -
1083  |frac{2.00 r - (R - 1.00)}{R + 1.00}|
1084  \f]
1085  \f[
1086  welch(r,R) = 1.00 -
1087  {(\frac{2.00 r - (R - 1.00)}{R + 1.00})}^2
1088  \f]
1089  \f[
1090  rectangle(r,R) = \left\{
1091  \begin{array}{ll}
1092  1.00 & |r_x| \leq R, |r_y| \leq R \\
1093  0.00 & |r_x| > R, |r_y| > R
1094  \end{array}
1095  \right.
1096  \f]
1097 * Where \f$R\f$ is the window radius and \f$r\f$ the radial
1098 * distance from the centre of the window.
1099 */
1100 typedef enum _WlzWindowFnType
1101 {
1102  WLZ_WINDOWFN_NONE, /*!< No window function. */
1103  WLZ_WINDOWFN_BLACKMAN, /*!< Blackman window. */
1104  WLZ_WINDOWFN_HAMMING, /*!< Hanning window. */
1106  WLZ_WINDOWFN_PARZEN, /*!< Parzen window. */
1107  WLZ_WINDOWFN_RECTANGLE, /*!< Rectangular window. */
1108  WLZ_WINDOWFN_WELCH, /*!< Welch window. */
1109  WLZ_WINDOWFN_UNSPECIFIED /*!< Not a window function also has
1110  a value equal to the number of
1111  window functions defined because
1112  it is the last in the enum. */
1113 } WlzWindowFnType;
1114 
1115 /*!
1116 * \enum _WlzSampleFn
1117 * \ingroup WlzTransform
1118 * \brief Sampling functions.
1119 * Typedef: ::WlzSampleFn.
1120 */
1121 typedef enum _WlzSampleFn
1122 {
1123  WLZ_SAMPLEFN_NONE, /*!< No sampling function */
1124  WLZ_SAMPLEFN_POINT, /*!< Point sampling */
1125  WLZ_SAMPLEFN_MEAN, /*!< Mean value sample of data */
1126  WLZ_SAMPLEFN_GAUSS, /*!< Gaussian weighted sample of data */
1127  WLZ_SAMPLEFN_MIN, /*!< Minimum value sampling */
1128  WLZ_SAMPLEFN_MAX, /*!< Maximum value sampling */
1129  WLZ_SAMPLEFN_MEDIAN /*!< Median value sampling */
1130 } WlzSampleFn;
1131 
1132 /*!
1133 * \enum _WlzScalarFeatureType
1134 * \ingroup WlzFeatures
1135 * \brief Scalar features of objects.
1136 */
1138 {
1139  WLZ_SCALARFEATURE_VALUE, /*!< Grey value. */
1140  WLZ_SCALARFEATURE_GRADIENT /*!< Gradient of grey values. */
1142 
1143 /*!
1144 * \enum _WlzDGTensorFeatureType
1145 * \ingroup WlzFeatures
1146 * \brief Features of Jacobian deformation gradient tensors.
1147 */
1149 {
1150  WLZ_DGTENSOR_FEATURE_NONE = 0, /*!< No feature, null case. */
1151  WLZ_DGTENSOR_FEATURE_DETJAC = 1, /*!< Determinant of Jacobian tensor. */
1152  WLZ_DGTENSOR_FEATURE_EIGENVEC = 2, /*!< Eigen vectors. */
1153  WLZ_DGTENSOR_FEATURE_EIGENVAL = 3, /*!< Eigen values. */
1154  WLZ_DGTENSOR_FEATURE_LIMIT = 4 /*!< Not a feature but used to
1155  itterate through the features,
1156  keep it the largest value. */
1158 
1159 /*!
1160 * \def WLZ_DGTENSOR_FEATURE_MASK
1161 * \ingroup WlzFeatures
1162 * \brief Bit mask generator for features of Jacobian deformation
1163 * gradient tensors.
1164 */
1165 #define WLZ_DGTENSOR_FEATURE_MASK(F) (((F)>0)?(1<<((F)-1)):(0))
1166 
1167 /*!
1168 * \enum _WlzVertexType
1169 * \ingroup WlzType
1170 * \brief 2D and 3D vertex types.
1171 * Typedef: ::WlzVertexType.
1172 */
1173 typedef enum _WlzVertexType
1174 {
1175  WLZ_VERTEX_ERROR = 0, /*!< Used to indicate not a vertex
1176  type. */
1177  WLZ_VERTEX_I2 = 1, /*!< 2D integer vertex. */
1178  WLZ_VERTEX_F2, /*!< 2D single precision floating
1179  point vertex. */
1180  WLZ_VERTEX_D2, /*!< 2D double precision floating
1181  point vertex. */
1182  WLZ_VERTEX_I3, /*!< 3D integer vertex. */
1183  WLZ_VERTEX_F3, /*!< 3D single precision floating
1184  point vertex. */
1185  WLZ_VERTEX_D3, /*!< 3D double precision floating
1186  point vertex. */
1187  WLZ_VERTEX_L2, /*!< 2D long integer vertex. */
1188  WLZ_VERTEX_L3 /*!< 3D long integer vertex. */
1189 } WlzVertexType;
1190 
1191 /*!
1192 * \struct _WlzLVertex2
1193 * \ingroup WlzType
1194 * \brief 2D long integer vertex.
1195 * Typedef: ::WlzIVertex2.
1196 */
1197 typedef struct _WlzLVertex2
1198 {
1199  WlzLong vtY;
1200  WlzLong vtX;
1201 } WlzLVertex2;
1202 
1203 /*!
1204 * \struct _WlzIVertex2
1205 * \ingroup WlzType
1206 * \brief 2D integer vertex.
1207 * Typedef: ::WlzIVertex2.
1208 */
1209 typedef struct _WlzIVertex2
1210 {
1211  int vtY;
1212  int vtX;
1213 } WlzIVertex2;
1214 
1215 /*!
1216 * \struct _WlzFVertex2
1217 * \ingroup WlzType
1218 * \brief 2D single precision float point vertex.
1219 * Typedef: ::WlzFVertex2.
1220 */
1221 typedef struct _WlzFVertex2
1222 {
1223  float vtY;
1224  float vtX;
1225 } WlzFVertex2;
1226 
1227 /*!
1228 * \struct _WlzDVertex2
1229 * \ingroup WlzType
1230 * \brief 2D double precision float point vertex.
1231 * Typedef: ::WlzDVertex2.
1232 */
1233 typedef struct _WlzDVertex2
1234 {
1235  double vtY;
1236  double vtX;
1237 } WlzDVertex2;
1238 
1239 
1240 /*!
1241 * \struct _WlzLVertex3
1242 * \ingroup WlzType
1243 * \brief 3D long integer vertex.
1244 * Typedef: ::WlzLVertex3.
1245 */
1246 typedef struct _WlzLVertex3
1247 {
1248  WlzLong vtX;
1249  WlzLong vtY;
1250  WlzLong vtZ;
1251 } WlzLVertex3;
1252 
1253 /*!
1254 * \struct _WlzIVertex3
1255 * \ingroup WlzType
1256 * \brief 3D integer vertex.
1257 * Typedef: ::WlzIVertex3.
1258 */
1259 typedef struct _WlzIVertex3
1260 {
1261  int vtX;
1262  int vtY;
1263  int vtZ;
1264 } WlzIVertex3;
1265 
1266 /*!
1267 * \struct _WlzFVertex3
1268 * \ingroup WlzType
1269 * \brief 3D single precision float point vertex.
1270 * Typedef: ::WlzFVertex3.
1271 */
1272 typedef struct _WlzFVertex3
1273 {
1274  float vtX;
1275  float vtY;
1276  float vtZ;
1277 } WlzFVertex3;
1278 
1279 /*!
1280 * \struct _WlzDVertex3
1281 * \ingroup WlzType
1282 * \brief 3D double precision float point vertex.
1283 * Typedef: ::WlzDVertex3.
1284 */
1285 typedef struct _WlzDVertex3
1286 {
1287  double vtX;
1288  double vtY;
1289  double vtZ;
1290 } WlzDVertex3;
1291 
1292 /*!
1293 * \union _WlzVertexP
1294 * \ingroup WlzType
1295 * \brief Union of vertex pointers.
1296 * Typedef: ::WlzVertexP.
1297 */
1298 typedef union _WlzVertexP
1299 {
1300  void *v;
1309 } WlzVertexP;
1310 
1311 /*!
1312 * \union _WlzVertex
1313 * \ingroup WlzType
1314 * \brief Union of vertex values.
1315 * Typedef: ::WlzVertex.
1316 */
1317 typedef union _WlzVertex
1318 {
1327 } WlzVertex;
1328 
1329 /*!
1330 * \struct _WlzIBox2
1331 * \ingroup WlzType
1332 * \brief 2D integer axis aligned rectangle (box).
1333 * Typedef: ::WlzIBox2.
1334 */
1335 typedef struct _WlzIBox2
1336 {
1337  int xMin;
1338  int yMin;
1339  int xMax;
1340  int yMax;
1341 } WlzIBox2;
1342 
1343 /*!
1344 * \struct _WlzDBox2
1345 * \ingroup WlzType
1346 * \brief 2D double precision floating point axis aligned rectangle
1347 * (box).
1348 * Typedef: ::WlzDBox2.
1349 */
1350 typedef struct _WlzDBox2
1351 {
1352  double xMin;
1353  double yMin;
1354  double xMax;
1355  double yMax;
1356 } WlzDBox2;
1357 
1358 /*!
1359 * \struct _WlzFBox2
1360 * \ingroup WlzType
1361 * \brief 2D single precision floating point axis aligned rectangle
1362 * (box).
1363 * Typedef: ::WlzFBox2.
1364 */
1365 typedef struct _WlzFBox2
1366 {
1367  float xMin;
1368  float yMin;
1369  float xMax;
1370  float yMax;
1371 } WlzFBox2;
1372 
1373 /*!
1374 * \struct _WlzIBox3
1375 * \ingroup WlzType
1376 * \brief 3D integer axis aligned cubiod (box).
1377 * Typedef: ::WlzIBox3.
1378 */
1379 typedef struct _WlzIBox3
1380 {
1381  int xMin;
1382  int yMin;
1383  int zMin;
1384  int xMax;
1385  int yMax;
1386  int zMax;
1387 } WlzIBox3;
1388 
1389 /*!
1390 * \struct _WlzDBox3
1391 * \ingroup WlzType
1392 * \brief 3D double precision floating point axis aligned cubiod (box).
1393 * Typedef: ::WlzDBox3.
1394 */
1395 typedef struct _WlzDBox3
1396 {
1397  double xMin;
1398  double yMin;
1399  double zMin;
1400  double xMax;
1401  double yMax;
1402  double zMax;
1403 } WlzDBox3;
1404 
1405 /*!
1406 * \struct _WlzFBox3
1407 * \ingroup WlzType
1408 * \brief 3D single precision floating point axis aligned cubiod (box).
1409 * Typedef: ::WlzFBox3.
1410 */
1411 typedef struct _WlzFBox3
1412 {
1413  float xMin;
1414  float yMin;
1415  float zMin;
1416  float xMax;
1417  float yMax;
1418  float zMax;
1419 } WlzFBox3;
1420 
1421 /*!
1422 * \union _WlzBoxP
1423 * \ingroup WlzType
1424 * \brief Union of axis aligned box pointers.
1425 * Typedef: ::WlzBoxP.
1426 */
1427 typedef union _WlzBoxP
1428 {
1429  void *v;
1436 } WlzBoxP;
1437 
1438 /*!
1439 * \union _WlzBox
1440 * \ingroup WlzType
1441 * \brief Union of axis aligned boxes.
1442 * Typedef: ::WlzBox.
1443 */
1444 typedef union _WlzBox
1445 {
1452 } WlzBox;
1453 
1454 /************************************************************************
1455 * Grey values.
1456 ************************************************************************/
1457 
1458 /*!
1459 * \union _WlzGreyP
1460 * \ingroup WlzType
1461 * \brief A union of pointers to grey values.
1462 * Typedef: ::WlzGreyP.
1463 */
1464 typedef union _WlzGreyP
1465 {
1466  void *v; /*!< Can save a cast when assigning. */
1467  WlzLong *lnp;
1468  int *inp;
1469  short *shp;
1470  WlzUByte *ubp;
1471  float *flp;
1472  double *dbp;
1473  WlzUInt *rgbp;
1474  char **bytes;
1475  unsigned char **ubytes;
1476 } WlzGreyP;
1477 
1478 /*!
1479 * \union _WlzGreyV
1480 * \ingroup WlzType
1481 * \brief A union of grey values.
1482 * Typedef: ::WlzGreyV.
1483 */
1484 typedef union _WlzGreyV
1485 {
1486  void *v; /*!< Can save a cast when assigning. */
1487  WlzLong lnv;
1488  int inv;
1489  short shv;
1490  WlzUByte ubv;
1491  float flv;
1492  double dbv;
1493  WlzUInt rgbv;
1494  char bytes[8];
1495  unsigned char ubytes[8];
1496 } WlzGreyV;
1497 
1498 /*!
1499 * \struct _WlzPixelV
1500 * \ingroup WlzType
1501 * \brief A typed grey value.
1502 * Typedef: ::WlzPixelV.
1503 */
1504 typedef struct _WlzPixelV
1505 {
1506  WlzGreyType type; /*!< Type of grey value. */
1507  WlzGreyV v; /*!< The grey value. */
1508 } WlzPixelV;
1509 
1510 /*!
1511 * \struct _WlzPixelP
1512 * \ingroup WlzType
1513 * \brief A typed grey value pointer.
1514 * Typedef: ::WlzPixelP.
1515 */
1516 typedef struct _WlzPixelP
1517 {
1518  WlzGreyType type; /*!< Type of grey value. */
1519  WlzGreyP p; /*!< Pointer to the grey value(s). */
1520 } WlzPixelP;
1521 
1522 /*!
1523 * \struct _WlzGreyTransformParam
1524 * \ingroup WlzTransform
1525 * \brief Grey-level transform parameters.
1526 * Typedef: ::WlzGreyTransformParam.
1527 */
1529 {
1530  WlzGreyTransformType type; /*!< Grey transform type. */
1531  WlzPixelV il; /*!< Input minimum grey value. */
1532  WlzPixelV iu; /*!< Input maximum grey value. */
1533  WlzPixelV ol; /*!< Output minimum grey value. */
1534  WlzPixelV ou; /*!< Output maximum grey value. */
1535  double p0; /*!< First parameter, used for
1536  gamma (\f$\gamma\f$) or
1537  sigmoid (\f$\mu\f$). */
1538  double p1; /*!< Second parameter, used for
1539  sigmoid (\f$\sigma\f$). */
1541 
1542 /************************************************************************
1543 * Markers.
1544 ************************************************************************/
1545 /*!
1546 * \enum _WlzMarkerType
1547 * \ingroup WlzType
1548 * \brief Basic markers.
1549 * Typedef: ::WlzMarkerType.
1550 */
1551 typedef enum _WlzMarkerType
1552 {
1553  WLZ_MARKER_NONE = 0, /*!< No marker. */
1554  WLZ_MARKER_POINT, /*!< Single point, pixel or voxel. */
1555  WLZ_MARKER_SPHERE /*!< Circle or sphere. */
1556 } WlzMarkerType;
1557 
1558 
1559 /************************************************************************
1560 * Data structures for geometric models.
1561 ************************************************************************/
1562 
1563 /*!
1564 * \def WLZ_GM_TOLERANCE
1565 * \ingroup WlzGeoModel
1566 * \brief Tolerance for geometric queries in geometric models.
1567 */
1568 #define WLZ_GM_TOLERANCE (1.0e-06)
1569 
1570 /*!
1571 * \def WLZ_GM_TOLERANCE_SQ
1572 * \ingroup WlzGeoModel
1573 * \brief Square of tolerance for geometric queries in geometric models.
1574 */
1575 #define WLZ_GM_TOLERANCE_SQ (WLZ_GM_TOLERANCE * WLZ_GM_TOLERANCE)
1576 
1577 /*!
1578 * \enum _WlzGMModelType
1579 * \ingroup WlzGeoModel
1580 * \brief Types of geometric models.
1581 * Typedef: WlzGMModelType.
1582 */
1583 typedef enum _WlzGMModelType
1584 {
1591 } WlzGMModelType;
1592 
1593 /*!
1594 * \enum _WlzGMElemType
1595 * \ingroup WlzGeoModel
1596 * \brief Types of geometric model elements.
1597 * Typedef: ::WlzGMElemType.
1598 */
1599 typedef enum _WlzGMElemType
1600 {
1620 } WlzGMElemType;
1621 
1622 /*!
1623 * \enum _WlzGMElemTypeFlags
1624 * \ingroup WlzGeoModel
1625 * \brief Bit masks for the types of geometric model elements.
1626 * Typedef: ::WlzGMElemTypeFlags.
1627 */
1629 {
1634  WLZ_GMELMFLG_EDGE = (1 << 4),
1636  WLZ_GMELMFLG_FACE = (1 << 6),
1641 
1642 /*!
1643 * \union _WlzGMElemP
1644 * \ingroup WlzGeoModel
1645 * \brief A union of pointers to all the valid geometric model
1646 * elements.
1647 * Typedef: ::WlzGMElemP.
1648 */
1649 typedef union _WlzGMElemP
1650 {
1651  struct _WlzGMCore *core;
1661  struct _WlzGMEdge *edge;
1663  struct _WlzGMFace *face;
1670 } WlzGMElemP;
1671 
1672 /*!
1673 * \struct _WlzGMCore
1674 * \ingroup WlzGeoModel
1675 * \brief The core geometric model element from which all
1676 * geometric modeling elements inherit the type and
1677 * index fields.
1678 * Typedef: ::WlzGMCore.
1679 */
1680 typedef struct _WlzGMCore
1681 {
1682  WlzGMElemType type; /*!< Any WlzGMElemType */
1683  int idx; /*!< Unique identifier for the
1684  instance of this type in it's
1685  model. */
1686 } WlzGMCore;
1687 
1688 /*!
1689 * \struct _WlzGMVertexG2I
1690 * \ingroup WlzGeoModel
1691 * \brief The position of a point in 2D integer space.
1692 * Typedef: ::WlzGMVertexG2I.
1693 */
1694 typedef struct _WlzGMVertexG2I
1695 {
1696  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX_G2I */
1697  int idx; /*!< Unique identifier for the
1698  vertex geometry. */
1699  WlzIVertex2 vtx; /*!< Where the point lies in space. */
1700 } WlzGMVertexG2I;
1701 
1702 /*!
1703 * \struct _WlzGMVertexG2D
1704 * \ingroup WlzGeoModel
1705 * \brief The position of a point in 2D double precision space.
1706 * Typedef: ::WlzGMVertexG2D.
1707 */
1708 typedef struct _WlzGMVertexG2D
1709 {
1710  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX_G2D */
1711  int idx; /*!< Unique identifier for vertex
1712  geometry. */
1713  WlzDVertex2 vtx; /*!< Where the point lies in space. */
1714 } WlzGMVertexG2D;
1715 
1716 /*!
1717 * \struct _WlzGMVertexG2N
1718 * \ingroup WlzGeoModel
1719 * \brief The position of a point in 2D double precision space
1720 * and the normal vector at that point.
1721 * Note that the data structure is the same as ::WlzGMVertexG2D
1722 * until the normal, this is important as it allows the type,
1723 * index and position to be established without knowing whether
1724 * the vertex geometry is ::WlzGMVertexG2D or ::WlzGMVertexG2N.
1725 * Typedef: ::WlzGMVertexG2N.
1726 */
1727 typedef struct _WlzGMVertexG2N
1728 {
1729  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX_G2N */
1730  int idx; /*!< Unique identifier for vertex
1731  geometry */
1732  WlzDVertex2 vtx; /*!< Where the point lies in space */
1733  WlzDVertex2 nrm; /*!< Normal at the point. */
1734 } WlzGMVertexG2N;
1735 
1736 /*!
1737 * \struct _WlzGMVertexG3I
1738 * \ingroup WlzGeoModel
1739 * \brief The position of a point in 3D integer space.
1740 * Typedef: ::WlzGMVertexG3I.
1741 */
1742 typedef struct _WlzGMVertexG3I
1743 {
1744  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX_G3I */
1745  int idx; /*!< Unique identifier for vertex
1746  geometry. */
1747  WlzIVertex3 vtx; /*!< Where the point lies in space. */
1748 } WlzGMVertexG3I;
1749 
1750 /*!
1751 * \struct _WlzGMVertexG3D
1752 * \ingroup WlzGeoModel
1753 * \brief The position of a point in 3D double precision space.
1754 * Typedef: ::WlzGMVertexG3D.
1755 */
1756 typedef struct _WlzGMVertexG3D
1757 {
1758  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX_G3D */
1759  int idx; /*!< Unique identifier for vertex
1760  geometry */
1761  WlzDVertex3 vtx; /*!< Where the point lies in space */
1762 } WlzGMVertexG3D;
1763 
1764 /*!
1765 * \struct _WlzGMVertexG3N
1766 * \ingroup WlzGeoModel
1767 * \brief The position of a point in 3D double precision space
1768 * and the normal vector at that point.
1769 * Note that the data structure is the same as ::WlzGMVertexG3D
1770 * until the normal, this is important as it allows the type,
1771 * index and position to be established without knowing whether
1772 * the vertex geometry is ::WlzGMVertexG3D or ::WlzGMVertexG3N.
1773 * Typedef: ::WlzGMVertexG3N.
1774 */
1775 typedef struct _WlzGMVertexG3N
1776 {
1777  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX_G3N */
1778  int idx; /*!< Unique identifier for vertex
1779  geometry */
1780  WlzDVertex3 vtx; /*!< Where the point lies in space */
1781  WlzDVertex3 nrm; /*!< Normal at the point. */
1782 } WlzGMVertexG3N;
1783 
1784 /*!
1785 * \union _WlzGMVertexGU
1786 * \ingroup WlzGeoModel
1787 * \brief A union of pointers to the geometric properties of a point.
1788 * Typedef: ::WlzGMVertexGU.
1789 */
1790 typedef union _WlzGMVertexGU
1791 {
1799 } WlzGMVertexGU;
1800 
1801 /*!
1802 * \struct _WlzGMVertexT
1803 * \ingroup WlzGeoModel
1804 * \brief The topological properties of a point in space.
1805 * The ordering of the linked list of vertex topology elements
1806 * formed by the 'next' and 'prev' pointers is not significant.
1807 * Typedef: ::WlzGMVertexT.
1808 */
1809 typedef struct _WlzGMVertexT
1810 {
1811  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX_T */
1812  int idx; /*!< Unique identifier for vertex
1813  topology element. */
1814  struct _WlzGMVertexT *next; /*!< Next vertexT in disk. */
1815  struct _WlzGMVertexT *prev; /*!< Previous vertexT in disk. */
1816  struct _WlzGMDiskT *diskT; /*!< The disk topology element that
1817  this vertex topology element
1818  is in. */
1819  struct _WlzGMEdgeT *parent; /*!< Parent of this vertex topology
1820  element. */
1821 } WlzGMVertexT;
1822 
1823 /*!
1824 * \struct _WlzGMVertex
1825 * \ingroup WlzGeoModel
1826 * \brief A single point in space defined in terms of both it's
1827 * geometry and it's topology.
1828 * Typedef: ::WlzGMVertex.
1829 */
1830 typedef struct _WlzGMVertex
1831 {
1832  WlzGMElemType type; /*!< WLZ_GMELM_VERTEX */
1833  int idx; /*!< Unique identifier for vertex. */
1834  struct _WlzGMDiskT *diskT; /*!< A disk topology element of this
1835  vertex, others can be found by
1836  following the diskT's next/prev
1837  fields. */
1838  WlzGMVertexGU geo; /*!< Geometry of this vertex. */
1839  struct _WlzGMVertex *next; /*!< Next in sorted list. */
1840 } WlzGMVertex;
1841 
1842 /*!
1843 * \struct _WlzGMDiskT
1844 * \ingroup WlzGeoModel
1845 * \brief A topological disk around a vertex. In 2D or 3D manifold
1846 * there is one disk per vertex. But in a 3D non-manifold shell
1847 * many sheets (manifold surfaces components) may be connected
1848 * at a single vertex, in which case there is one disk per sheet.
1849 * The disk encodes the radial order of the vertex topology
1850 * elements around the vertex.
1851 * Typedef: ::WlzGMDiskT.
1852 */
1853 typedef struct _WlzGMDiskT
1854 {
1855  WlzGMElemType type; /*!< WLZ_GMELM_DISK_T */
1856  int idx; /*!< Unique identifier for vertex. */
1857  struct _WlzGMDiskT *next; /*!< Next diskT of vertex. */
1858  struct _WlzGMDiskT *prev; /*!< Previous diskT of vertex. */
1859  WlzGMVertex *vertex; /*!< The vertex that this disk cycles
1860  around. */
1861  WlzGMVertexT *vertexT; /*!< A vertex topology element in this
1862  disk topology element. */
1863 } WlzGMDiskT;
1864 
1865 /*!
1866 * \struct _WlzGMEdgeT
1867 * \ingroup WlzGeoModel
1868 * \brief The topological properties of a directed edge.
1869 * Typedef: ::WlzGMEdgeT.
1870 */
1871 typedef struct _WlzGMEdgeT
1872 {
1873  WlzGMElemType type; /*!< WLZ_GMELM_EDGE_T */
1874  int idx; /*!< Unique identifier for the edge
1875  * topology element. */
1876  struct _WlzGMEdgeT *next; /*!< Next edgeT in the parent. */
1877  struct _WlzGMEdgeT *prev; /*!< Previous edgeT in the parent. */
1878  struct _WlzGMEdgeT *opp; /*!< Opposite edge topology element. */
1879  struct _WlzGMEdgeT *rad; /*!< The radial edge topology
1880  element. */
1881  struct _WlzGMEdge *edge; /*!< The edge. */
1882  struct _WlzGMVertexT *vertexT; /*!< Vertex FROM which this edge
1883  topology element is directed. */
1884  struct _WlzGMLoopT *parent; /*!< Parent of this edge topology
1885  element. */
1886 } WlzGMEdgeT;
1887 
1888 /*!
1889 * \struct _WlzGMEdge
1890 * \ingroup WlzGeoModel
1891 * \brief A line or curve between a pair of vertices.
1892 * Although this only has a topological component a geometric
1893 * component would allow curves to be represented.
1894 * Typedef: ::WlzGMEdge.
1895 */
1896 typedef struct _WlzGMEdge
1897 {
1898  WlzGMElemType type; /*!< WLZ_GMELM_EDGE */
1899  int idx; /*!< Unique identifier for edge. */
1900  WlzGMEdgeT *edgeT; /*!< One of the many edge topology
1901  elements from which the others
1902  can be found by following it's
1903  opp/rad fields. */
1904 } WlzGMEdge;
1905 
1906 /*!
1907 * \struct _WlzGMLoopT
1908 * \ingroup WlzGeoModel
1909 * \brief A directed loop or the topological properties of a loop.
1910 * Typedef: ::WlzGMLoopT.
1911 */
1912 typedef struct _WlzGMLoopT
1913 {
1914  WlzGMElemType type; /*!< WLZ_GMELM_LOOP_T */
1915  int idx; /*!< Unique identifier for loop
1916  topology element. */
1917  struct _WlzGMLoopT *next; /*!< The next loopT in the parent. */
1918  struct _WlzGMLoopT *prev; /*!< The previous loopT in the
1919  parent. */
1920  struct _WlzGMLoopT *opp; /*!< The opposite loop topology
1921  element. */
1922  struct _WlzGMFace *face; /*!< The face not used in 2D models. */
1923  WlzGMEdgeT *edgeT; /*!< An edge topology element in
1924  this loop topology element, the
1925  others can be found by walking
1926  the edgeT's next/prev fields. */
1927  struct _WlzGMShell *parent; /*!< Parent of this loopT. */
1928 } WlzGMLoopT;
1929 
1930 /*!
1931 * \struct _WlzGMFace
1932 * \ingroup WlzGeoModel
1933 * \brief A circuit of edges.
1934 * Typedef: ::WlzGMFace.
1935 */
1936 typedef struct _WlzGMFace
1937 {
1938  WlzGMElemType type; /*!< WLZ_GMELM_FACE */
1939  int idx; /*!< Unique identifier for face. */
1940  WlzGMLoopT *loopT; /*!< A directed loop topology element
1941  of the face. */
1942 } WlzGMFace;
1943 
1944 /*!
1945 * \struct _WlzGMShellG2I
1946 * \ingroup WlzGeoModel
1947 * \brief The geometric properties of a shell in 2D integer space.
1948 * Typedef: ::WlzGMShellG2I.
1949 */
1950 typedef struct _WlzGMShellG2I
1951 {
1952  WlzGMElemType type; /*!< WLZ_GMELM_SHELL_G2I */
1953  int idx; /*!< Unique identifier for shell
1954  geometry element. */
1955  WlzIBox2 bBox; /*!< The bounding box of the shell. */
1956 } WlzGMShellG2I;
1957 
1958 /*!
1959 * \struct _WlzGMShellG2D
1960 * \ingroup WlzGeoModel
1961 * \brief The geometric properties of a shell in 2D double precision
1962 * space.
1963 * Typedef: ::WlzGMShellG2D.
1964 */
1965 typedef struct _WlzGMShellG2D
1966 {
1967  WlzGMElemType type; /*!< WLZ_GMELM_SHELL_G2D */
1968  int idx; /*!< Unique identifier for shell
1969  geometry element. */
1970  WlzDBox2 bBox; /*!< Bounding box of the shell. */
1971 } WlzGMShellG2D;
1972 
1973 /*!
1974 * \struct _WlzGMShellG3I
1975 * \ingroup WlzGeoModel
1976 * \brief The geometric properties of a shell in 3D integer space.
1977 * Typedef: ::WlzGMShellG3I.
1978 */
1979 typedef struct _WlzGMShellG3I
1980 {
1981  WlzGMElemType type; /*!< WLZ_GMELM_SHELL_G3I */
1982  int idx; /*!< Unique identifier for shell
1983  geometry element. */
1984  WlzIBox3 bBox; /*!< Bounding box of the shell. */
1985 } WlzGMShellG3I;
1986 
1987 /*!
1988 * \struct _WlzGMShellG3D
1989 * \ingroup WlzGeoModel
1990 * \brief The geometric properties of a shell in 3D double precision.
1991 * space.
1992 * Typedef: ::WlzGMShellG3D.
1993 */
1994 typedef struct _WlzGMShellG3D
1995 {
1996  WlzGMElemType type; /*!< WLZ_GMELM_SHELL_G3D */
1997  int idx; /*!< Unique identifier for shell
1998  geometry element. */
1999  WlzDBox3 bBox; /*!< Bounding box of the shell. */
2000 } WlzGMShellG3D;
2001 
2002 /*!
2003 * \union _WlzGMShellGU
2004 * \ingroup WlzGeoModel
2005 * \brief A union of pointers to the geometric properties of a shell.
2006 * Typedef: ::WlzGMShellGU.
2007 */
2008 typedef union _WlzGMShellGU
2009 {
2015 } WlzGMShellGU;
2016 
2017 /*!
2018 * \struct _WlzGMShell
2019 * \ingroup WlzGeoModel
2020 * \brief A shell which is a collection of connected geometric
2021 * modeling elements.
2022 * Typedef: ::WlzGMShell.
2023 */
2024 typedef struct _WlzGMShell
2025 {
2026  WlzGMElemType type; /*!< WLZ_GMELM_SHELL */
2027  int idx; /*!< The shell's index. */
2028  struct _WlzGMShell *next; /*!< the next shell in the model. */
2029  struct _WlzGMShell *prev; /*!< The previous shell in the
2030  model. */
2031  WlzGMShellGU geo; /*!< The shell's geometry. */
2032  WlzGMLoopT *child; /*!< A child loop topology element
2033  of the shell from which all
2034  the others can be reached
2035  by walking the next/prev
2036  fields. */
2037  struct _WlzGMModel *parent; /*!< The parent model of the shell. */
2038 } WlzGMShell;
2039 
2040 /*!
2041 * \enum _WlzGMCbReason
2042 * \ingroup WlzGeoModel
2043 * \brief The reason a callback function is called.
2044 * Typedef: ::WlzGMCbReason.
2045 */
2046 typedef enum _WlzGMCbReason
2047 {
2048  WLZ_GMCB_NEW, /*!< New element has been created. */
2049  WLZ_GMCB_FREE /*!< Existing element is about to
2050  be free'd. */
2051 } WlzGMCbReason;
2052 
2053 /*!
2054 * \struct _WlzGMResource
2055 * \ingroup WlzGeoModel
2056 * \brief A resource vector (extensible array) used for allocating
2057 * geometric modeling elements.
2058 * Typedef: ::WlzGMResource.
2059 */
2060 typedef struct _WlzGMResource
2061 {
2062  unsigned int numElm; /*!< Number of element type in model. */
2063  unsigned int numIdx; /*!< Number of elements/indicies which
2064  have been pulled from the vector,
2065  with elm->idx < numIdx for all
2066  elements. */
2067  AlcVector *vec; /*!< Vector (extensible array) of
2068  elements. */
2069 } WlzGMResource;
2070 
2071 /*!
2072 * \struct _WlzGMModelR
2073 * \ingroup WlzGeoModel
2074 * \brief The resources used by a model.
2075 * Typedef: ::WlzGMModelR.
2076 */
2077 typedef struct _WlzGMModelR
2078 {
2079  struct _WlzGMCbEntry *callbacks; /*!< Linked list of functions which
2080  are called when new elements are
2081  created or existing elements are
2082  destroyed. */
2083  WlzGMResource vertex; /*!< Vertex elements. */
2084  WlzGMResource vertexT; /*!< Vertex topology elements. */
2085  WlzGMResource vertexG; /*!< Vertex geometry elements. */
2086  WlzGMResource diskT; /*!< Disk geometry elements. */
2087  WlzGMResource edge; /*!< Edge elements. */
2088  WlzGMResource edgeT; /*!< Edge topology element elements. */
2089  WlzGMResource face; /*!< Face elements. */
2090  WlzGMResource loopT; /*!< Loop topology element elements. */
2091  WlzGMResource shell; /*!< Shell elements. */
2092  WlzGMResource shellG; /*!< Shell geometry elements. */
2093 } WlzGMModelR;
2094 
2095 /*!
2096 * \struct _WlzGMModel
2097 * \ingroup WlzGeoModel
2098 * \brief A geometric model which can represent both 2D graphs
2099 * and 3D surfaces, with the surfaces being either
2100 * manifold or non-manifold.
2101 * The geometric model inherits it's core fields from
2102 * the Woolz core domain.
2103 * Typedef: ::WlzGMModel.
2104 */
2105 typedef struct _WlzGMModel
2106 {
2107  WlzGMModelType type; /*!< Type of model integer or double
2108  * precision, 2D or 3D */
2109  int linkcount; /*!< Core. */
2110  void *freeptr; /*!< Core. */
2111  WlzGMShell *child; /*!< A child shell of the model, others
2112  can be reached by walking the
2113  next/prev fields. */
2114  int vertexHTSz; /*!< Vertex hash table size. */
2115  WlzGMVertex **vertexHT; /*!< Vertex hash table. */
2116  WlzGMModelR res; /*!< Model resources. */
2117 } WlzGMModel;
2118 
2119 #ifndef WLZ_EXT_BIND
2120 /*!
2121 * \typedef WlzGMCbFn
2122 * \ingroup WlzGeoModel
2123 * \brief A pointer function to a function called when elements of a
2124 * Woolz geometric model are either created or deleted.
2125 */
2126 typedef void (*WlzGMCbFn)(WlzGMModel *, WlzGMElemP ,
2127  WlzGMCbReason, void *);
2128 
2129 /*!
2130 * \struct _WlzGMCbEntry
2131 * \ingroup WlzGeoModel
2132 * \brief
2133 */
2134 typedef struct _WlzGMCbEntry
2135 {
2137  void *data;
2139 } WlzGMCbEntry;
2140 
2141 #endif /* WLZ_EXT_BIND */
2142 
2143 /*!
2144 * \struct _WlzGMResIdx
2145 * \ingroup WlzGeoModel
2146 * \brief A resource index look up table (::WlzGMResIdxTb).
2147 * The array of indicies is a look up table from the indicies of a
2148 * GM to contigous indicies suitable for copying or outputing a
2149 * resource vector without holes.
2150 * Typedef: ::WlzGMResIdx.
2151 */
2152 typedef struct _WlzGMResIdx
2153 {
2154  int idxCnt; /*!< Number of indicies in lut. */
2155  int *idxLut; /*!< Index look up table. */
2156 } WlzGMResIdx;
2157 
2158 /*!
2159 * \struct _WlzGMResIdxTb
2160 * \ingroup WlzGeoModel
2161 * \brief Resource look up tables for all geometric elements in
2162 * a model.
2163 * Typedef: ::WlzGMResIdxTb.
2164 */
2165 typedef struct _WlzGMResIdxTb
2166 {
2177 } WlzGMResIdxTb;
2178 
2179 /*!
2180 * \struct _WlzGMGridWSpCell3D
2181 * \ingroup WlzGeoModel
2182 * \brief A single cell entry in an axis aligned grid for a 3D model.
2183 * Typedef: ::WlzGMGridWSpCell3D
2184 */
2185 typedef struct _WlzGMGridWSpCell3D
2186 {
2187  WlzGMElemP elem; /*! Geometric model element which
2188  intersects the cuboid of this
2189  cell. */
2190  struct _WlzGMGridWSpCell3D *next; /*! The next cell in the linked list of
2191  cells. */
2193 
2194 /*!
2195 * \struct _WlzGMGridWSp3D
2196 * \ingroup WlzGeoModel
2197 * \brief An axis aligned grid of cuboid cells. This has an array (the
2198 * grid) of linked lists of cells, with the entries in each
2199 * list holding the faces of the 3D model which intersect the
2200 * cuboid of the cell.
2201 * Typedef: ::WlzGMGridWSp3D
2202 */
2203 typedef struct _WlzGMGridWSp3D
2204 {
2205  WlzGMModelType elemType; /*! Element type that the grid is
2206  defined for. */
2207  WlzIVertex3 nCells; /*! Dimensions of the cell grid
2208  array in terms of the number of
2209  cells. */
2210  double cellSz; /*! Each cell is an axis aligned
2211  square with this side length. */
2212  WlzDVertex3 org; /*! Model coordinate value at the cell
2213  origin. */
2214  struct _WlzGMGridWSpCell3D ****cells; /*! Array of linked list of cells. */
2215  int cellVecMax; /*! Number of cells allocated and the
2216  index into cell vector of next
2217  cell available. */
2218  AlcVector *cellVec; /*! Extensible vector of cells for
2219  adding to the array of linked lists
2220  of cells. */
2221 } WlzGMGridWSp3D;
2222 
2223 /************************************************************************
2224 * Data structures for linear binary tree domains.
2225 ************************************************************************/
2226 
2227 /*!
2228 * \enum _WlzLBTNodeClass2D
2229 * \ingroup WlzType
2230 * \brief Classification of a 2D LBT node a face of a 3D LBT node bycl
2231 * its connectivity with it's neighbouring nodes (2D) or faces
2232 * (3D)
2233 */
2235 {
2236  WLZ_LBT_NODE_CLASS_2D_0, /*!< Node has no more than one neighbour on
2237  any edge.
2238 \verbatim
2239  0
2240 2D +---+ 3D /
2241  | | z 5----/4
2242  | | ^ y | / |
2243  | | | % | 1 |
2244  +---+ |/ | |
2245  +--->x 2-----3
2246 \endverbatim */
2247  WLZ_LBT_NODE_CLASS_2D_1, /*!< Node has no more than one neighbour on all
2248  edges except one.
2249 \verbatim
2250  0
2251 2D +-+-+ 3D /
2252  | | z 5--6-/4
2253  | | ^ y | / |
2254  | | | % | 1 |
2255  +---+ |/ | |
2256  +--->x 2-----3
2257 \endverbatim */
2258  WLZ_LBT_NODE_CLASS_2D_2, /*!< Node only has more than one neighbour on
2259  adjacent edges.
2260 \verbatim
2261  0
2262 2D +-+-+ 3D /
2263  | | z 5--6-/4
2264  | + ^ y | / |
2265  | | | % | 1 7
2266  +---+ |/ | |
2267  +--->x 2-----3
2268 \endverbatim */
2269  WLZ_LBT_NODE_CLASS_2D_3, /*!< Node only has more than one neighbour on
2270  opposite edges.
2271 \verbatim
2272  0
2273 2D +-+-+ 3D /
2274  | | z 5--6-/4
2275  | | ^ y | / |
2276  | | | % | 1 |
2277  +-+-+ |/ | |
2278  +--->x 2--7--3
2279 \endverbatim */
2280 
2281  WLZ_LBT_NODE_CLASS_2D_4, /*!< Node has more than one neighbour on all
2282  edges except one.
2283 \verbatim
2284  0
2285 2D +-+-+ 3D /
2286  | | z 5--6-/4
2287  | + ^ y | / |
2288  | | | % | 1 8
2289  +-+-+ |/ | |
2290  +--->x 2--7--3
2291 \endverbatim */
2292  WLZ_LBT_NODE_CLASS_2D_5 /*!< Node has more than one neighbour on all
2293  edges.
2294 \verbatim
2295  0
2296 2D +-+-+ 3D /
2297  | | z 5--6-/4
2298  + + ^ y | / |
2299  | | | % 9 1 8
2300  +-+-+ |/ | |
2301  +--->x 2--7--3
2302 \endverbatim */
2304 
2305 /*!
2306 * \def WLZ_LBTDOMAIN_MAXDIGITS
2307 * \ingroup WlzType
2308 * \brief The maximum number of linear binary tree key digits,
2309 * which must be less than the number of bits in an int.
2310 */
2311 #define WLZ_LBTDOMAIN_MAXDIGITS (30)
2312 
2313 /*!
2314 * \enum _WlzLBTNodeFlags
2315 * \ingroup WlzGeoModel
2316 * \brief The reason a callback function is called.
2317 * Typedef: ::WlzGMCbReason.
2318 */
2319 typedef enum _WlzLBTNodeFlags
2320 {
2322  WLZ_LBT_NODE_FLAG_BOUNDARY = 1 /*!< Node is adjacent to the objects
2323  boundary. */
2324 } WlzLBTNodeFlags;
2325 
2326 /*!
2327 * \struct _WlzLBTNode2D
2328 * \ingroup WlzType
2329 * \brief A 2D linear binary tree node for spatial domain representation.
2330 * Typedef: ::WlzLBTNode2D.
2331 */
2332 typedef struct _WlzLBTNode2D
2333 {
2334  unsigned flags; /*!< Bit flags fo the node. */
2335  unsigned keys[3]; /*!< A single location key which
2336  uses bit interleaving with
2337  the bits interleaved between
2338  the elements for column, line
2339  and term in that order.
2340  Each of the array elements must
2341  have at least
2342  WLZ_LBTDOMAIN_MAXDIGITS bits. */
2343 } WlzLBTNode2D;
2344 
2345 /*!
2346 * \struct _WlzLBTNode3D
2347 * \ingroup WlzType
2348 * \brief A 3D linear binary tree node for spatial domain representation.
2349 * Typedef: ::WlzLBTNode3D.
2350 */
2351 typedef struct _WlzLBTNode3D
2352 {
2353  unsigned flags; /*!< Bit flags fo the node. */
2354  unsigned keys[4]; /*!< A single location key which
2355  uses bit interleaving with
2356  the bits interleaved between
2357  the elements for column, line
2358  plane and term in that order.
2359  Each of the array elements must
2360  have at least
2361  WLZ_LBTDOMAIN_MAXDIGITS bits. */
2362 } WlzLBTNode3D;
2363 
2364 /*!
2365 * \struct _WlzLBTDomain2D
2366 * \ingroup WlzType
2367 * \brief A 2D linear binary tree spatial domain representation.
2368 * Typedef: ::WlzLBTDomain2D.
2369 */
2370 typedef struct _WlzLBTDomain2D
2371 {
2372  WlzObjectType type; /*!< From WlzCoreDomain. */
2373  int linkcount; /*!< From WlzCoreDomain. */
2374  void *freeptr; /*!< From WlzCoreDomain. */
2375  int line1; /*!< First line coordinate. */
2376  int lastln; /*!< Last line coordinate. */
2377  int kol1; /*!< First column line
2378  coordinate. */
2379  int lastkl; /*!< Last column line
2380  coordinate. */
2381  int depth; /*!< LBT depth. */
2382  int nNodes; /*!< Number of nodes in the
2383  tree. */
2384  int maxNodes; /*!< Number of nodes
2385  allocated. */
2386  WlzLBTNode2D *nodes; /*!< Array of nodes sorted by their
2387  location key. */
2388 } WlzLBTDomain2D;
2389 
2390 /*!
2391 * \struct _WlzLBTDomain3D
2392 * \ingroup WlzType
2393 * \brief A 3D linear binary tree spatial domain representation.
2394 * Typedef: ::WlzLBTDomain3D.
2395 */
2396 typedef struct _WlzLBTDomain3D
2397 {
2398  WlzObjectType type; /*!< From WlzCoreDomain. */
2399  int linkcount; /*!< From WlzCoreDomain. */
2400  void *freeptr; /*!< From WlzCoreDomain. */
2401  int plane1; /*!< First plane coordinate. */
2402  int lastpl; /*!< Last plane coordinate. */
2403  int line1; /*!< First line coordinate. */
2404  int lastln; /*!< Last line coordinate. */
2405  int kol1; /*!< First column line
2406  coordinate. */
2407  int lastkl; /*!< Last column line
2408  coordinate. */
2409  int depth; /*!< LBT depth. */
2410  int nNodes; /*!< Number of nodes in the
2411  tree. */
2412  int maxNodes; /*!< Number of nodes
2413  allocated. */
2414  WlzLBTNode3D *nodes; /*!< Array of nodes sorted by their
2415  location key. */
2416 } WlzLBTDomain3D;
2417 
2418 /************************************************************************
2419 * Data structures for contours (both 2D and 3D).
2420 ************************************************************************/
2421 
2422 /*!
2423 * \enum _WlzContourMethod
2424 * \ingroup WlzContour
2425 * \brief Contour generation methods.
2426  Typedef: ::WlzContourMethod.
2427 */
2428 typedef enum _WlzContourMethod
2429 {
2430  WLZ_CONTOUR_MTD_ISO, /*!< Iso-value. */
2431  WLZ_CONTOUR_MTD_GRD, /*!< Maximum gradient value. */
2432  WLZ_CONTOUR_MTD_BND, /*!< Object boundary. */
2433  WLZ_CONTOUR_MTD_RBFBND /*!< Object boundary established using
2434  a radial basis function. */
2436 
2437 /*!
2438 * \struct _WlzContour
2439 * \ingroup WlzContour
2440 * \brief A collection of 2D polylines or 3D surface elements
2441 * represented by a Woolz geometric model.
2442 * Typedef: ::WlzContour.
2443 */
2444 typedef struct _WlzContour
2445 {
2446  WlzObjectType type; /*!< WLZ_CONTOUR. */
2447  int linkcount; /*!< Core. */
2448  void *freeptr; /*!< Core. */
2449  WlzGMModel *model; /*!< The Woolz geometric model
2450  defining the contour. */
2451 } WlzContour;
2452 
2453 
2454 #ifndef WLZ_EXT_BIND
2455 /*!
2456 * \typedef Wlz3DProjectionIntFn
2457 * \ingroup WlzFunction
2458 * \brief Callback function for the WlzGetProjectionFromObject().
2459 */
2460 typedef WlzPixelV (*Wlz3DProjectionIntFn)(WlzPixelP, int, int, void *,
2461  WlzErrorNum *);
2462 #endif
2463 
2464 /*!
2465 * \struct _WlzLUTDomain
2466 * \ingroup WlzType
2467 * \brief A look up table domain.
2468 * Typedef: ::WlzLUTDomain.
2469 */
2470 typedef struct _WlzLUTDomain
2471 {
2472  WlzObjectType type; /*!< WLZ_LUT. */
2473  int linkcount; /*!< Core. */
2474  void *freeptr; /*!< Core. */
2475  int bin1; /*!< Index of the first bin in the
2476  LUT. */
2477  int lastbin; /*!< Index of the last bin in the
2478  LUT. */
2479 } WlzLUTDomain;
2480 
2481 /*!
2482 * \union _WlzValues
2483 * \ingroup WlzType
2484 * \brief The union of Woolz values.
2485 * Typedef: ::WlzValues.
2486 */
2487 typedef union _WlzValues
2488 {
2493  struct _WlzConvHullValues *c;
2495  struct _WlzObject *obj;
2502 } WlzValues;
2503 
2504 /*!
2505 * \union _WlzDomain
2506 * \ingroup WlzType
2507 * \brief The union of Woolz domains.
2508 * Typedef: ::WlzDomain.
2509 */
2510 typedef union _WlzDomain
2511 {
2516  struct _WlzBoundList *b;
2518  struct _WlzRect *r;
2519  struct _WlzFRect *fr;
2522  struct _WlzContour *ctr;
2526  struct _WlzCMesh2D *cm2;
2528  struct _WlzCMesh3D *cm3;
2529  struct _WlzPoints *pts;
2534 } WlzDomain;
2535 
2536 /*!
2537 * \struct _WlzPropertyList
2538 * \ingroup WlzProperty
2539 * \brief A property list which has a type, link count and a
2540 * linked list of properties.
2541 */
2542 typedef struct _WlzPropertyList
2543 {
2544  WlzObjectType type;
2547 } WlzPropertyList;
2548 
2549 /*!
2550 * \struct _WlzCoreProperty
2551 * \ingroup WlzProperty
2552 * \brief Core property with sufficient to data to provide the type
2553 * and enough to allow the property to be freed.
2554 * Typedef: ::WlzCoreProperty.
2555 */
2556 typedef struct _WlzCoreProperty
2557 {
2558  WlzObjectType type; /*!< Type */
2559  int linkcount; /*!< linkcount */
2560  void *freeptr; /*!< free pointer */
2561 } WlzCoreProperty;
2562 
2563 /*!
2564 * \struct _WlzSimpleProperty
2565 * \ingroup WlzProperty
2566 * \brief A simple property to hold arbitrary length string data.
2567 * Read and writing then coercing to a structure with
2568 * numerical values will not be portable.
2569 * Typedef: ::WlzSimpleProperty.
2570 */
2571 typedef struct _WlzSimpleProperty
2572 {
2573  WlzObjectType type; /*!< Type */
2574  int linkcount; /*!< linkcount */
2575  void *freeptr; /*!< free pointer */
2576  unsigned long size; /*!< Data size of the property */
2577  void *prop; /*!< Pointer to the property */
2579 
2580 /*!
2581 * \def EMAP_PROPERTY_MODELNAME_LENGTH
2582 * \ingroup WlzProperty
2583 * \brief Maximum length of the model name in an EMAP property.
2584 */
2585 #define EMAP_PROPERTY_MODELNAME_LENGTH 32
2586 
2587 /*!
2588 * \def EMAP_PROPERTY_UID_LENGTH
2589 * \ingroup WlzProperty
2590 * \brief Maximum length of the model or anatomy UID in an EMAP property.
2591 */
2592 #define EMAP_PROPERTY_UID_LENGTH 16
2593 
2594 /*!
2595 * \def EMAP_PROPERTY_VERSION_LENGTH
2596 * \ingroup WlzProperty
2597 * \brief Maximum length of the version string in an EMAP property.
2598 */
2599 #define EMAP_PROPERTY_VERSION_LENGTH 16
2600 
2601 /*!
2602 * \def EMAP_PROPERTY_AUTHORNAME_LENGTH
2603 * \ingroup WlzProperty
2604 * \brief Maximum length of the author strings in an EMAP property.
2605 */
2606 #define EMAP_PROPERTY_AUTHORNAME_LENGTH 64
2607 
2608 /*!
2609 * \def EMAP_PROPERTY_MACHINENAME_LENGTH
2610 * \ingroup WlzProperty
2611 * \brief Maximum length of the machine name strings in an EMAP property.
2612 */
2613 #define EMAP_PROPERTY_MACHINENAME_LENGTH 64
2614 
2615 /*!
2616 * \def EMAP_PROPERTY_STAGE_LENGTH
2617 * \ingroup WlzProperty
2618 * \brief Maximum length of the stage strings in an EMAP property.
2619 */
2620 #define EMAP_PROPERTY_STAGE_LENGTH 32
2621 
2622 /*!
2623 * \struct _WlzEMAPProperty
2624 * \ingroup WlzProperty
2625 * \brief A property to hold EMAP information to attach to
2626 * the reference models, anatomy and GE domains. MAPaint
2627 * and atlas tools will propogate the information as
2628 * required.
2629 * Typedef: ::WlzEMAPProperty.
2630 */
2631 typedef struct _WlzEMAPProperty
2632 {
2633  WlzObjectType type; /*!< Type */
2634  int linkcount; /*!< linkcount */
2635  void *freeptr; /*!< free pointer */
2636  WlzEMAPPropertyType emapType; /*!< EMAP property type */
2637  char modelUID[EMAP_PROPERTY_UID_LENGTH]; /*!< model UID */
2638  char anatomyUID[EMAP_PROPERTY_UID_LENGTH];/*!< anatomy UID */
2639  char targetUID[EMAP_PROPERTY_UID_LENGTH];/*!< target model UID */
2640  char targetVersion[EMAP_PROPERTY_VERSION_LENGTH]; /*!< target model version */
2641  char stage[EMAP_PROPERTY_STAGE_LENGTH];/*!< Embryo stage */
2642  char subStage[EMAP_PROPERTY_STAGE_LENGTH];/*!< Embryo sub-stage */
2643  char modelName[EMAP_PROPERTY_MODELNAME_LENGTH];/*!< Volume model name */
2644  char version[EMAP_PROPERTY_VERSION_LENGTH];/*!< Model version */
2645  char *fileName; /*!< Original filename (not very useful) */
2646  long creationTime; /*!< Original creation time */
2647  char creationAuthor[EMAP_PROPERTY_AUTHORNAME_LENGTH];/*!< Creation author */
2648  char creationMachineName[EMAP_PROPERTY_MACHINENAME_LENGTH];/*!< Original creation machine name */
2649  long modificationTime; /*!< Modification time */
2650  char modificationAuthor[EMAP_PROPERTY_AUTHORNAME_LENGTH];/*!< Modification author */
2651  char *comment; /*!< Text comment
2652  string. */
2653 } WlzEMAPProperty;
2654 
2655 /*!
2656 * \struct _WlzNameProperty
2657 * \ingroup WlzProperty
2658 * \brief A simple null terminated ASCII string for the object's
2659 * name.
2660 * Typedef: ::WlzNameProperty.
2661 */
2662 typedef struct _WlzNameProperty
2663 {
2664  WlzObjectType type; /*!< Type. */
2665  int linkcount; /*!< linkcount. */
2666  void *freeptr; /*!< Free pointer. */
2667  char *name; /*!< A simple ASCII name
2668  string. */
2669 } WlzNameProperty;
2670 
2671 /*!
2672 * \struct _WlzGreyProperty
2673 * \ingroup WlzProperty
2674 * \brief A single grey value, which for example might represent
2675 * the preferred display colour of a binary domain.
2676 * Typedef: ::WlzGreyProperty.
2677 */
2678 typedef struct _WlzGreyProperty
2679 {
2680  WlzObjectType type; /*!< Type. */
2681  int linkcount; /*!< linkcount. */
2682  void *freeptr; /*!< Free pointer. */
2683  char *name; /*!< An associated name
2684  string which conveys
2685  the meaning of the
2686  value. May be NULL */
2687  struct _WlzPixelV value; /*!< The pixel value which
2688  both encodes the grey type
2689  and it's value. */
2690 } WlzGreyProperty;
2691 
2692 /*!
2693 * \struct _WlzTextProperty
2694 * \ingroup WlzProperty
2695 * \brief A pair of simple null terminated ASCII strings one for the
2696 * property name and one for it's value.
2697 * Typedef: ::WlzTextProperty.
2698 */
2699 typedef struct _WlzTextProperty
2700 {
2701  WlzObjectType type; /*!< Type. */
2702  int linkcount; /*!< linkcount. */
2703  void *freeptr; /*!< Free pointer. */
2704  char *name; /*!< Name string. */
2705  char *text; /*!< Text string. */
2706 } WlzTextProperty;
2707 
2708 /*!
2709 * \union _WlzProperty
2710 * \ingroup WlzProperty
2711 * \brief A union of pointers for properties.
2712 * Typedef: WlzProperty.
2713 */
2714 typedef union _WlzProperty
2715 {
2722 } WlzProperty;
2723 
2724 /************************************************************************
2725 * The Woolz objects.
2726 ************************************************************************/
2727 /*!
2728 * \struct _WlzCoreObject
2729 * \ingroup WlzType
2730 * \brief The core Woolz object type which can be used to determine
2731 * the type of a Woolz object.
2732 * Typedef: ::WlzCoreObject.
2733 */
2734 typedef struct _WlzCoreObject
2735 {
2736  WlzObjectType type; /*!< The Woolz object type. */
2737  int linkcount; /*!< The link count: A counter
2738  for the number of references to
2739  the object, which should only be
2740  accessed through WlzUnlink(),
2741  WlzAssignObject() and
2742  WlzFreeObj(). */
2743 } WlzCoreObject;
2744 
2745 /*!
2746 * \struct _WlzObject
2747 * \ingroup WlzType
2748 * \brief The Woolz object.
2749 * Typedef: ::WlzObject.
2750 */
2751 typedef struct _WlzObject
2752 {
2753  WlzObjectType type; /*!< From WlzCoreObject. */
2754  int linkcount; /*!< From WlzCoreObject. */
2755  WlzDomain domain; /*!< The objects domain: It's
2756  spatial extent or
2757  geometric properties. */
2758  WlzValues values; /*! The values defined within
2759  the object's domain. */
2760  WlzPropertyList *plist; /*! A list of the object's
2761  properties. */
2762  struct _WlzObject *assoc; /*! An object which is
2763  assosciated with this object. */
2764 } WlzObject;
2765 
2766 /*!
2767 * \struct _WlzCompoundArray
2768 * \ingroup WlzType
2769 * \brief A compound object implemented as either an array or
2770 * a linked list of other objects. There is a distinction between
2771 * an compound of the same type (e.g. resulting from a labelling)
2772 * and a compound of different types (e.g. resulting from a range
2773 * of image processes from a single original object).
2774 * Typedef: ::WlzCompoundArray.
2775 */
2776 typedef struct _WlzCompoundArray
2777 {
2778  WlzObjectType type; /*!< From WlzCoreObject. */
2779  int linkcount; /*!< From WlzCoreObject. */
2780  WlzObjectType otype; /*!< The permitted type if
2781  constrained. */
2782  int n; /*!< The number of objects */
2783  WlzObject **o; /*!< The list of Woolz object
2784  pointers. */
2785  WlzPropertyList *plist; /*! A list of the object's
2786  properties. */
2789 
2790 /************************************************************************
2791 * Domains.
2792 ************************************************************************/
2793 /*!
2794 * \struct _WlzCoreDomain
2795 * \ingroup WlzType
2796 * \brief The core domain: All Woolz domains have all the fields
2797 * of the core domain in the same order and before any
2798 * others, so allowing a domain to be assigned, freed
2799 * and have it's type established.
2800  Typedef: ::WlzCoreDomain.
2801 */
2802 typedef struct _WlzCoreDomain
2803 {
2804  WlzObjectType type; /*!< The type of domain. */
2805  int linkcount; /*!< The link count: A counter
2806  for the number of
2807  references to the domain,
2808  which should only be
2809  accessed through
2810  WlzUnlink(),
2811  WlzAssignDomain() and
2812  WlzFreeDomain(). */
2813  void *freeptr; /*!< A stack with pointers
2814  that can be freed by
2815  AlcFreeStackFree(). */
2816 } WlzCoreDomain;
2817 
2818 /*!
2819 * \struct _WlzIntervalDomain
2820 * \ingroup WlzType
2821 * \brief A 2D domain defining an arbitrary region of space in 2D.
2822 * The domain may be of type WLZ_INTERVALDOMAIN_INTVL or
2823 * WLZ_INTERVALDOMAIN_RECT. If the domain is of type
2824 * WLZ_INTERVALDOMAIN_RECT then the intvlines field is
2825 * not used. For WLZ_INTERVALDOMAIN_INTVL domains the
2826 * intervals in a line must be contiguous.
2827 * Typedef: ::WlzIntervalDomain.
2828 */
2829 typedef struct _WlzIntervalDomain
2830 {
2831  WlzObjectType type; /*!< From WlzCoreDomain. */
2832  int linkcount; /*!< From WlzCoreDomain. */
2833  void *freeptr; /*!< From WlzCoreDomain. */
2834  int line1; /*!< First line coordinate. */
2835  int lastln; /*!< Last line coordinate. */
2836  int kol1; /*!< First column
2837  coordinate. */
2838  int lastkl; /*!< Last column coordinate. */
2839  struct _WlzIntervalLine *intvlines; /*!< Array of interval line
2840  structures. */
2842 
2843 /*!
2844 * \struct _WlzPlaneDomain
2845 * \ingroup WlzType
2846 * \brief A 3D domain defining an arbitrary region of space in 3D.
2847 * The 3D plane domain composed of plane-wise array of 2D domains.
2848 * Typedef: ::WlzPlaneDomain.
2849 */
2850 typedef struct _WlzPlaneDomain
2851 {
2852  WlzObjectType type; /*!< From WlzCoreDomain. */
2853  int linkcount; /*!< From WlzCoreDomain. */
2854  void *freeptr; /*!< From WlzCoreDomain. */
2855  int plane1; /*!< First plane coordinate. */
2856  int lastpl; /*!< Last plane coordinate. */
2857  int line1; /*!< First line coordinate. */
2858  int lastln; /*!< Last line coordinate. */
2859  int kol1; /*!< First column line
2860  coordinate. */
2861  int lastkl; /*!< Last column line
2862  coordinate. */
2863  WlzDomain *domains; /*!< Array of pointers to
2864  2D domains. */
2865  float voxel_size[3]; /*!< Array of nominal voxel
2866  dimensions. */
2867 } WlzPlaneDomain;
2868 
2869 /************************************************************************
2870 * Intervals.
2871 ************************************************************************/
2872 /*!
2873 * \struct _WlzIntervalLine
2874 * \ingroup WlzType
2875 * \brief A line of intervals.
2876 * Typedef: ::WlzIntervalLine.
2877 */
2878 typedef struct _WlzIntervalLine
2879 {
2880  int nintvs; /*!< Number of intervals on line. */
2881  struct _WlzInterval *intvs; /*!< Array of intervals. */
2882 } WlzIntervalLine;
2883 
2884 /*!
2885 * \struct _WlzInterval
2886 * \ingroup WlzType
2887 * \brief A single interval.
2888 * Typedef: ::WlzInterval.
2889 */
2890 typedef struct _WlzInterval
2891 {
2892  int ileft; /*!< Left most pixel of interval. */
2893  int iright; /*!< Right most pixel of interval. */
2894 } WlzInterval;
2895 
2896 /*!
2897 * \struct _WlzDynItvPool
2898 * \ingroup WlzType
2899 * \brief Dynamic interval pool, for building interval domains.
2900 * Typedef: ::WlzDynItvPool.
2901 */
2902 typedef struct _WlzDynItvPool
2903 {
2904  WlzInterval *itvBlock; /*!< Array of intervals. */
2905  int itvsInBlock; /*!< Number of intervals in array. */
2906  int offset; /*!< Offset into array for next
2907  available interval. */
2908 } WlzDynItvPool;
2909 
2910 /*!
2911 * \struct _WlzPartialItv2D
2912 * \ingroup DomainOps
2913 * \brief Data structure that can be used to hold partial intervals.
2914 * These can then be sorted and condensed to find the intervals
2915 * for an interval domain.
2916 */
2917 typedef struct _WlzPartialItv2D
2918 {
2919  int ileft;
2920  int iright;
2921  int ln;
2922 } WlzPartialItv2D;
2923 
2924 /*!
2925 * \struct _WlzPartialItv3D
2926 * \ingroup DomainOps
2927 * \brief Data structure that can be used to hold partial intervals.
2928 * These can then be sorted and condensed to find the intervals
2929 * for a plane domain.
2930 */
2931 typedef struct _WlzPartialItv3D
2932 {
2933  int ileft;
2934  int iright;
2935  int ln;
2936  int pl;
2937 } WlzPartialItv3D;
2938 
2939 /************************************************************************
2940 * Value tables.
2941 ************************************************************************/
2942 
2943 /*!
2944 * \struct _WlzCoreValues
2945 * \ingroup WlzType
2946 * \brief All Woolz value tables must have all the fields of the
2947 * core values, in the same order and before any others,
2948 * so allowing a values to be assigned, freed and have it's
2949 * type established.
2950 * Typedef: ::WlzCoreValues.
2951 */
2952 typedef struct _WlzCoreValues
2953 {
2954  WlzObjectType type;
2956 } WlzCoreValues;
2957 
2958 /*!
2959 * \struct _WlzValueLine
2960 * \ingroup WlzType
2961 * \brief Grey values along a line.
2962 * Typedef: ::WlzValueLine.
2963 */
2964 typedef struct _WlzValueLine
2965 {
2966  int vkol1; /*!< Relative left end. */
2967  int vlastkl; /*!< Relative right end. */
2968  WlzGreyP values; /*!< Array of values. */
2969 } WlzValueLine;
2970 
2971 /*!
2972 * \struct _WlzTiledValueBuffer
2973 * \ingroup WlzType
2974 * \brief Position of and data for locating and buffering any interval
2975 * of values in either 2 or 3D tiled value table.
2976 */
2977 typedef struct _WlzTiledValueBuffer
2978 {
2979  int pl; /*!< Plane of interval (relative to
2980  tiled value table. */
2981  int ln; /*!< Line of interval (relative to
2982  tiled value table. */
2983  int kl[2]; /*!< Left most then right most column
2984  of interval (relative to tiled
2985  value table. */
2986  size_t lo; /*!< Partial line offset within a
2987  tile. */
2988  size_t li; /*!< Partial line index to a tile. */
2989  int valid; /*!< Non-zero if the line buffer has
2990  valid values. */
2991  int mode; /*!< Valid access modes for the
2992  tiled values. */
2993  WlzGreyType gtype; /*!< Grey type buffer allocaed for. */
2994  WlzGreyP lnbuf; /*!< Buffer large enough to hold any
2995  single line of values padded to
2996  an integral number of tile widths.
2997  The values are all relative to the
2998  value table origin. */
3000 
3001 /*!
3002 * \struct _WlzRagRValues
3003 * \ingroup WlzType
3004 * \brief The ragged rectangle values table.
3005 * The type encodes both the type of value table and the type of
3006 * grey value.
3007 * Typedef: ::WlzRagRValues.
3008 */
3009 typedef struct _WlzRagRValues
3010 {
3011  WlzObjectType type; /*!< From WlzCoreValues. */
3012  int linkcount; /*!< From WlzCoreValues. */
3013  void *freeptr; /*!< From WlzCoreValues. */
3014  WlzValues original_table; /*!< If non-NULL, the values table
3015  which owns the raw values we
3016  are using. */
3017  int line1; /*!< First line. */
3018  int lastln; /*!< Last line. */
3019  int kol1; /*!< First column. */
3020  int width; /*!< Width. */
3021  WlzPixelV bckgrnd; /*!< Background value for pixels not
3022  in object. */
3023  WlzValueLine *vtblines; /*!< Array of value table line
3024  structures. */
3025 } WlzRagRValues;
3026 
3027 /*!
3028 * \struct _WlzRectValues
3029 * \ingroup WlzType
3030 * \brief The rectangle values table.
3031 * The type encodes both the type of value table and the type of
3032 * grey value.
3033 * Typedef: ::WlzRectValues.
3034 */
3035 typedef struct _WlzRectValues
3036 {
3037  WlzObjectType type; /*!< From WlzCoreValues. */
3038  int linkcount; /*!< From WlzCoreValues. */
3039  void *freeptr; /*!< From WlzCoreValues. */
3040  WlzValues original_table; /*!< If non-NULL, the values table
3041  which owns the raw values we
3042  are using. */
3043  int line1; /*!< First line. */
3044  int lastln; /*!< Last line. */
3045  int kol1; /*!< First column. */
3046  int width; /*!< Width. */
3047  WlzPixelV bckgrnd; /*!< Background value for points
3048  not in object. */
3049  WlzGreyP values; /*!< Contiguous array of values. */
3050 } WlzRectValues;
3051 
3052 /*!
3053 * \struct _WlzValueIntervalLine
3054 * \ingroup WlzType
3055 * \brief One line's worth of grey value intervals.
3056 * Typedef: ::WlzValueIntervalLine.
3057 */
3059 {
3060  int nintvs; /*!< Number of grey value intervals. */
3061  WlzValueLine *vtbint; /*!< Pointer to grey value
3062  intervals. */
3064 
3065 /*!
3066 * \struct _WlzIntervalValues
3067 * \ingroup WlzType
3068 * \brief An interval structured value table.
3069 * The type encodes both the type of value table and the type of
3070 * grey value.
3071 * Typedef: ::WlzIntervalValues.
3072 */
3073 typedef struct _WlzIntervalValues
3074 {
3075  WlzObjectType type; /*!< From WlzCoreValues. */
3076  int linkcount; /*!< From WlzCoreValues. */
3077  void *freeptr; /*!< From WlzCoreValues. */
3078  WlzValues original_table; /*!< If non-NULL, the values table
3079  which owns the raw values we
3080  are using. */
3081  int line1; /*!< First line. */
3082  int lastln; /*!< Last line. */
3083  int kol1; /*!< First column. */
3084  int width; /*!< Width. */
3085  WlzPixelV bckgrnd; /*!< Background value for points
3086  not in object. */
3087  WlzValueIntervalLine *vil; /*!< Pointers to structures of grey
3088  table lines. */
3090 
3091 /*!
3092 * \struct _WlzVoxelValues
3093 * \ingroup WlzType
3094 * \brief Voxel value table.
3095 * Typedef: ::WlzVoxelValues.
3096 */
3097 typedef struct _WlzVoxelValues
3098 {
3099  WlzObjectType type; /*!< From WlzCoreValues. */
3100  int linkcount; /*!< From WlzCoreValues. */
3101  void *freeptr; /*!< From WlzCoreValues. */
3102  WlzValues original_table; /*!< If non-NULL, the values table
3103  which owns the raw values we
3104  are using. */
3105  int plane1; /*!< First plane. */
3106  int lastpl; /*!< Last plane. */
3107  WlzPixelV bckgrnd; /*!< Background value for points
3108  not in object. */
3109  WlzValues *values; /*!< Array of pointers to value
3110  tables. */
3111 } WlzVoxelValues;
3112 
3113 /*!
3114 * \struct _WlzValueAttach
3115 * \ingroup WlzType
3116 * \brief Specifies what values (for example thoose in an indexed
3117  value table) are attached to.
3118 * Enum: ::WlzValueAttach
3119 */
3120 typedef enum _WlzValueAttach
3121 {
3122  WLZ_VALUE_ATTACH_NONE, /*!< No attachment. */
3123  WLZ_VALUE_ATTACH_NOD, /*!< Attached to mesh nodes. */
3124  WLZ_VALUE_ATTACH_ELM /*!< Attached to mesh elements. */
3125 } WlzValueAttach;
3126 
3127 /*!
3128 * \struct _WlzIndexedValues
3129 * \ingroup WlzType
3130 * \brief In indexed value table.
3131 * Typedef: ::WlzIndexedValues.
3132 */
3133 typedef struct _WlzIndexedValues
3134 {
3135  WlzObjectType type; /*!< From WlzCoreValues:
3136  WLZ_INDEXED_VALUES. */
3137  int linkcount; /*!< From WlzCoreValues. */
3138  void *freeptr; /*!< From WlzCoreValues, although
3139  this won't free the values
3140  themselves. */
3141  int rank; /*!< The rank of the individual values.
3142  Here the rank for a scalar is 0,
3143  for a 1D array it is 1 and for
3144  and for individual values that
3145  are nD arrays the rank is n. */
3146  int *dim; /*!< The dimensions of individual
3147  indexed values. The dimensions
3148  are a 1D array with the number
3149  of entries equal to the rank.
3150  A dimension array is only
3151  allocated if the rank > 0,
3152  for rank == 0 dim is NULL. */
3153  WlzGreyType vType; /*!< The type of the data in the
3154  individual values. */
3155  WlzValueAttach attach; /*!< Specifies what the values are
3156  attached to. */
3157  AlcVector *values; /*!< The indexed values. */
3159 
3160 /*!
3161 * \struct _WlzTiledValues
3162 * \ingroup WlzType
3163 * \brief A tiled value table for both 2 an 3D domain objects.
3164 * Typedef: ::WlzTiledValues.
3165 *
3166 * Individual pixel/voxel values may contain a single
3167 * (scalar) value of a multidimensional array of values.
3168 * When an array of values is used the values are held
3169 * contiguously.
3170 *
3171 * The grey values are stored in square or cubic tiles
3172 * with tileSz being the number of values in each tile
3173 * irrespective of the grey value type. An index to the
3174 * tiles is stored as a simple one dimensional array.
3175 *
3176 * To access a grey value at some position \f$(x,y,z)\f$
3177 * which is known to be within the tiled value table:
3178 * First the position relative to the first column (\f$x_0\f$),
3179 * line (\f$y_0\f$) and plane (\f$z_0\f$)of the value table
3180 * is computed:
3181 * \f$x_r = x - x_0, y_r = y - y_0, z_r = z - z_0\f$.
3182 * The tile index (\f$i\f$) and within tile offset (\f$o\f$)
3183 * are then computed:
3184 * \f{eqnarray*}
3185  i_x = x_r / w \\
3186  i_y = y_r / w \\
3187  i_z = z_r / w \\
3188  o_x = x_r - (w i_x) \\
3189  o_y = y_r - (w i_y) \\
3190  o_z = z_r - (w i_z) \\
3191  i = (((i_z ni_y) + i_y) ni_x) + i_x \\
3192  o = (((o_z nt_y) + o_y) nt_x) + o_x \\
3193  g = T \left[ ( I \left[ i \right] t_s) + o \right]
3194  \f}
3195 * Where \f$I\f$ is the index table and \f$T\f$ the start
3196 * of the tile data.
3197 *
3198 * The tile data may be memory mapped instead of read into
3199 * memory in which case the file descriptor will have a
3200 * non-negative value. This can be used to close the file.
3201 *
3202 * A memory mapped tiled values object can only have it's
3203 * grey values changed if the file was opened for writing
3204 * attempting to change the grey values of an object only
3205 * opened for read will lead to a memory fault. The read/write
3206 * status is respected by the interval scanning access function
3207 * WlzNextGreyInterval(), but code which uses random access
3208 * via WlzGreyValueGet() or sequential access via WlzIterate()
3209 * should check this. Attempting to write to the memory mapped
3210 * values of an object only opened for reading will give a
3211 * segmentation fault. A tiled values object can be written
3212 * to only if the file descriptor is invalid (< 0) or if
3213 * the file was opened in write or append mode. The function
3214 * WlzTiledValuesMode() may also be used to determine the
3215 * appropriate access mode(s) for the values table.
3216 */
3217 typedef struct _WlzTiledValues
3218 {
3219  WlzObjectType type; /*!< From WlzCoreValues:
3220  built from WLZ_GREY_TAB_TILED
3221  and the grey value type. */
3222  int linkcount; /*!< From WlzCoreValues. */
3223  void *freeptr; /*!< From WlzCoreValues, although
3224  this won't free the values
3225  themselves. */
3226  WlzValues original_table; /*!< If non-NULL, the values table
3227  which owns the raw values we
3228  are using. */
3229  int dim; /*!< The dimension of the value table,
3230  ie 2 or 3D. */
3231  int kol1; /*!< First column. */
3232  int lastkl; /*!< Last column. */
3233  int line1; /*!< First line. */
3234  int lastln; /*!< Last line. */
3235  int plane1; /*!< First plane. */
3236  int lastpl; /*!< Last plane. */
3237  WlzPixelV bckgrnd; /*!< Background value. */
3238  unsigned int vRank; /*!< The rank of the individual values.
3239  Here the rank for a scalar is 0,
3240  for a 1D array it is 1 and for
3241  and for individual values that
3242  are nD arrays the rank is n.
3243  The rank will only ever be > 0
3244  when the grey table type is
3245  composed using rank > 0. */
3246  unsigned int *vDim; /*!< The dimensions of individual
3247  values. The dimensions are a
3248  1D array with the number of
3249  entries equal to the rank.
3250  A dimension array is only
3251  allocated if the rank > 0,
3252  for rank == 0 dim is NULL. */
3253  unsigned int vpe; /*!< Values per element which has the
3254  value
3255  \f$ \prod_i^\textrm{vRank}{\textrm{vDim}[i]} \f$
3256  as compulted by
3257  WlzTiledValuesValPerElm()
3258  (value 1 when vRank = 0)
3259  is included since it is frequently
3260  used. */
3261  size_t tileSz; /*!< The number of elements in each
3262  tile which may be less than
3263  the number of bytes. */
3264  size_t tileWidth; /*!< Width of the tiles (\f$w\f$). */
3265  size_t numTiles; /*!< The total number of tiles. */
3266  int *nIdx; /*!< Number of index columns,
3267  lines, .... */
3268  unsigned int *indices; /*!< Table of tile indices. */
3269  int fd; /*!< File descriptor if tiles are
3270  memory mapped else -1. */
3271  long tileOffset; /*!< Offset from the start of the
3272  file to the tiles. This may be
3273  set even if not memory mapped. */
3274  WlzGreyP tiles; /*!< The tiles. */
3275 } WlzTiledValues;
3276 
3277 /*!
3278 * \def WLZ_TILEDVALUES_TILE_SIZE
3279 * \ingroup WlzType
3280 * \brief The default number of pixels/voxels in a tiled value
3281 * table tile. Chosen so that tiles will occupy an integer
3282 * number of disk block,
3283 */
3284 #define WLZ_TILEDVALUES_TILE_SIZE (4096)
3285 
3286 /*!
3287 * \struct _WlzLUTValues
3288 * \ingroup WlzType
3289 * \brief Look up table values.
3290 * Typedef: ::WlzLUTValues
3291 */
3292 typedef struct _WlzLUTValues
3293 {
3294  WlzObjectType type; /*!< WLZ_LUT. */
3295  int linkcount; /*!< From WlzCoreValues. */
3296  void *freeptr; /*!< From WlzCoreValues. */
3297  WlzGreyType vType; /*!< Type for the LUT values. */
3298  int maxVal; /*!< Number of values allocated. */
3299  WlzGreyP val; /*!< LUT values. */
3300 } WlzLUTValues;
3301 
3302 /*!
3303 * \struct _WlzPointValues
3304 * \ingroup WlzType
3305 * \brief Point values - values with arbitrary rank and dimension
3306 * defined at points.
3307 * Typedef: ::WlzPointValues
3308 */
3309 typedef struct _WlzPointValues
3310 {
3311  WlzObjectType type; /*!< WLZ_POINT_VALUES. */
3312  int linkcount; /*!< From WlzCoreValues. */
3313  void *freeptr; /*!< From WlzCoreValues. */
3314  int rank; /*!< The rank of the individual values.
3315  Here the rank for a scalar is 0,
3316  for a 1D array it is 1 and for
3317  and for individual values that
3318  are nD arrays the rank is n. */
3319  int *dim; /*!< The dimensions of individual
3320  indexed values. The dimensions
3321  are a 1D array with the number
3322  of entries equal to the rank.
3323  A dimension array is only
3324  allocated if the rank > 0,
3325  for rank == 0 dim is NULL. */
3326  int pSz; /*!< Size of each point this is
3327  the product of the dimensions
3328  times the value type size and
3329  is frequently used for accessing
3330  the values. */
3331  WlzGreyType vType; /*!< The type of the data in the
3332  individual values. */
3333  size_t maxPoints; /*!< Number of points allocated. */
3334  WlzGreyP values; /*!< The indexed values. */
3335 } WlzPointValues;
3336 
3337 /************************************************************************
3338 * Point domains.
3339 ************************************************************************/
3340 /*!
3341 * \struct _WlzPoints
3342 * \ingroup WlzFeatures
3343 * \brief An array of either 2D or 3D points which may have
3344 * either integral of floating point values. Possible
3345 * types are: WLZ_POINTS_2I, WLZ_POINTS_2D, WLZ_POINTS_3I
3346 * and WLZ_POINTS_3D.
3347 * Typedef: ::WlzPoints
3348 */
3349 typedef struct _WlzPoints
3350 {
3351  WlzObjectType type; /*!< From WlzCoreDomain. */
3352  int linkcount; /*!< From WlzCoreDomain. */
3353  void *freeptr; /*!< From WlzCoreDomain. */
3354  int nPoints; /*!< Number of points. */
3355  int maxPoints; /*!< The maximum number of points
3356  for which space has been
3357  allocated. */
3358  WlzVertexP points; /*!< Array of point vertices. */
3359 } WlzPoints;
3360 
3361 /************************************************************************
3362 * Polygon domains.
3363 ************************************************************************/
3364 /*!
3365 * \struct _WlzPolygonDomain
3366 * \ingroup WlzPolyline
3367 * \brief A 2D polyline domain with possible types: WLZ_POLYGON_INT,
3368 * WLZ_POLYGON_FLOAT or WLZ_POLYGON_DOUBLE.
3369 * Typedef: ::WlzPolygonDomain.
3370 */
3371 typedef struct _WlzPolygonDomain
3372 {
3373  WlzObjectType type; /*!< From WlzCoreDomain. */
3374  int linkcount; /*!< From WlzCoreDomain. */
3375  void *freeptr; /*!< From WlzCoreDomain. */
3376  int nvertices; /*!< Number of vertices. */
3377  int maxvertices; /*!< The maximum number of vertices
3378  for which space has been
3379  allocated. */
3380  WlzIVertex2 *vtx; /*!< Array of vertices.
3381  This may need casting according
3382  to the type field. */
3384 
3385 /*!
3386 * \struct _WlzPolygonDomain3
3387 * \ingroup WlzPolyline
3388 * \brief A 2D polyline domain with possible types:WLZ_POLYGON_INT,
3389 * WLZ_POLYGON_FLOAT or WLZ_POLYGON_DOUBLE.
3390 * Typedef: ::WlzPolygonDomain.
3391 */
3392 typedef struct _WlzPolygonDomain3
3393 {
3394  WlzObjectType type; /*!< From WlzCoreDomain. */
3395  int linkcount; /*!< From WlzCoreDomain. */
3396  void *freeptr; /*!< From WlzCoreDomain. */
3397  int nvertices; /*!< Number of vertices. */
3398  int maxvertices; /*!< The maximum number of vertices
3399  for which space has been
3400  allocated. */
3401  WlzIVertex2 *vtx; /*!< Array of vertices.
3402  This may need casting according
3403  to the type field. */
3405 
3406 /************************************************************************
3407 * Boundary list.
3408 ************************************************************************/
3409 /*!
3410 * \struct _WlzBoundList
3411 * \ingroup WlzBoundary
3412 * \brief A complete list of a set of boundaries which is encoded
3413 * in tree form.
3414 */
3415 typedef struct _WlzBoundList
3416 {
3417  WlzObjectType type; /*!< From WlzCoreDomain. */
3418  int linkcount; /*!< From WlzCoreDomain. */
3419  void *freeptr; /*!< From WlzCoreDomain. */
3420  struct _WlzBoundList *up; /*!< The containing hole or piece,
3421  NULL if the universal hole
3422  (very top). */
3423  struct _WlzBoundList *next; /*!< Next hole or piece at same level
3424  and lying within same piece or
3425  hole, NULL if no more at this
3426  level. */
3427  struct _WlzBoundList *down; /*!< First enclosed structure, NULL if
3428  none. */
3429  int wrap; /*!< Wrap number: The number of points
3430  of boundary included both at
3431  start and end of polygon
3432  representation. */
3433  WlzPolygonDomain *poly; /*!< The polygon representation of
3434  this boundary. */
3435 } WlzBoundList;
3436 
3437 /*!
3438 * \struct _WlzConvHullDomain2
3439 * \ingroup WlzConvexHull
3440 * \brief A 2D convex hull with counter clockwise ordered vertices
3441 * and segments implicitly defined by the polygon of the
3442 * ordered vertices.
3443 * Typedef: ::WlzConvHullDomain3
3444 */
3445 typedef struct _WlzConvHullDomain2
3446 {
3447  WlzObjectType type; /*!< From WlzCoreDomain
3448  (WLZ_CONVHULL_DOMAIN_2D). */
3449  int linkcount; /*!< From WlzCoreDomain. */
3450  void *freeptr; /*!< From WlzCoreDomain. */
3451  int nVertices; /*!< Number of vertices. */
3452  int maxVertices; /*!< The maximum number of vertices
3453  for which space has been
3454  allocated. */
3455  WlzVertexType vtxType; /*!< Vertex type, either WLZ_VERTEX_I2
3456  or WLZ_VERTEX_D2. */
3457  WlzVertex centroid; /*!< Centroid of the convex hull. */
3458  WlzVertexP vertices; /*!< Array of vertices. */
3460 
3461 /*!
3462 * \struct _WlzConvHullDomain3
3463 * \ingroup WlzConvexHull
3464 * \brief A 3D convex hull with coordinate vertices and faces defined
3465 * by vertex index triples.
3466 * Typedef: ::WlzConvHullDomain3
3467 */
3468 typedef struct _WlzConvHullDomain3
3469 {
3470  WlzObjectType type; /*!< From WlzCoreDomain
3471  (WLZ_CONVHULL_DOMAIN_3D). */
3472  int linkcount; /*!< From WlzCoreDomain. */
3473  void *freeptr; /*!< From WlzCoreDomain. */
3474  int nVertices; /*!< Number of vertices. */
3475  int maxVertices; /*!< The maximum number of vertices
3476  for which space has been
3477  allocated. */
3478  int nFaces; /*!< Number of faces. */
3479  int maxFaces; /*!< The maximum number of faces
3480  for which space has been
3481  allocated. */
3482  WlzVertexType vtxType; /*!< Vertex type, either WLZ_VERTEX_I3
3483  or WLZ_VERTEX_D3. */
3484  WlzVertex centroid; /*!< Centroid of the convex hull. */
3485  WlzVertexP vertices; /*!< Array of vertices. */
3486  int *faces; /*!< Array of face vertex indices,
3487  3 vertex indices per face. */
3489 
3490 /************************************************************************
3491 * Histograms.
3492 ***********************************************************************/
3493 /*!
3494 * \struct _WlzHistogramDomain
3495 * \ingroup WlzHistogram
3496 * \brief Histograms are Woolz domains and not values as might be
3497 * expected.
3498 * Typedef: ::WlzHistogramDomain.
3499 */
3500 typedef struct _WlzHistogramDomain
3501 {
3502  WlzObjectType type; /*!< From WlzCoreDomain. */
3503  int linkcount; /*!< From WlzCoreDomain. */
3504  void *freeptr; /*!< From WlzCoreDomain. */
3505  int maxBins; /*!< Number of histogram bins
3506  allocated. */
3507  int nBins; /*!< Number of histogram bins used. */
3508  double origin; /*!< Lowest grey value of first
3509  histogram bin. */
3510  double binSize; /*!< Grey value range for a histogram
3511  bin. */
3512  WlzGreyP binValues; /*!< Histogram values:
3513  Int for WLZ_HISTOGRAMDOMAIN_INT or
3514  Double for
3515  WLZ_HISTOGRAMDOMAIN_FLOAT. */
3517 
3518 /*!
3519 * \enum _WlzHistFeature
3520 * \ingroup WlzHistogram
3521 * \brief Features of histograms.
3522 * Typedef: ::WlzHistFeature.
3523 */
3524 typedef enum _WlzHistFeature
3525 {
3526  WLZ_HIST_FEATURE_NONE = (0), /*!< No feature. */
3527  WLZ_HIST_FEATURE_PEAK = (1<<0), /*!< Histogram peak. */
3528  WLZ_HIST_FEATURE_TROUGH = (1<<1) /*!< Histogram trough. */
3529 } WlzHistFeature;
3530 
3531 /************************************************************************
3532 * Rectangle domains.
3533 ************************************************************************/
3534 /*!
3535 * \struct _WlzRect
3536 * \ingroup WlzFeatures
3537 * \brief An integer rectangle domain.
3538 * Side from (l[0],k[0]) to (l[1],k[1]) is a long side.
3539 * The vertices are cyclic.
3540 * Typedef: ::WlzIRect.
3541 */
3542 typedef struct _WlzRect
3543 {
3544  WlzObjectType type; /*!< From WlzCoreDomain. */
3545  int linkcount; /*!< From WlzCoreDomain. */
3546  void *freeptr; /*!< From WlzCoreDomain. */
3547  int irk[4]; /*!< Column vertex coordinates. */
3548  int irl[4]; /*!< Line vertex coordinates. */
3549  float rangle; /*!< Angle of long side to
3550  vertical (radians). */
3551 } WlzIRect;
3552 
3553 /*!
3554 * \struct _WlzFRect
3555 * \ingroup WlzFeatures
3556 * \brief A single precision floating point rectangle domain.
3557 * Side from (l[0],k[0]) to (l[1],k[1]) is a long side.
3558 * The vertices are cyclic.
3559 * Typedef: ::WlzFRect.
3560 */
3561 typedef struct _WlzFRect
3562 {
3563  WlzObjectType type; /*!< From WlzCoreDomain. */
3564  int linkcount; /*!< From WlzCoreDomain. */
3565  void *freeptr; /*!< From WlzCoreDomain. */
3566  float frk[4]; /*!< Column vertex coordinates. */
3567  float frl[4]; /*!< Line vertex coordinates. */
3568  float rangle; /*!< Angle of long side to vertical
3569  (radians). */
3570 } WlzFRect;
3571 
3572 /************************************************************************
3573 * Convolution and other value filters.
3574 ************************************************************************/
3575 /*!
3576 * \struct _WlzConvolution
3577 * \ingroup WlzValuesFilters
3578 * \brief A 2D space domain convolution mask.
3579 * To reduce computational cost at the expense of data storage
3580 * the complete convolution is used even if highly symmetrical.
3581 * Typedef: ::WlzConvolution.
3582 */
3583 typedef struct _WlzConvolution
3584 {
3585  WlzObjectType type; /*!< Identifies a convolution mask. */
3586  int linkcount; /*!< Reference count. */
3587  int xsize, ysize; /*!< Size of mask which must be odd. */
3588  int *cv; /*!< The convolution mask with
3589  size\f$\times\f$size elements. */
3590  int divscale; /*!< Scale factor by which the
3591  convolution is divided. */
3592  int offset; /*!< Offset which is added to the
3593  scaled convolution. */
3594  int modflag; /*!< If non-zero the absolute value
3595  of the scaled, offset convolution
3596  is used. */
3597 } WlzConvolution;
3598 
3599 /*!
3600 * \enum _WlzRsvFilterActionMask
3601 * \ingroup WlzValuesFilters
3602 * \brief The action to be performed by a recursive filter.
3603 * These values are bit masks which may be combined.
3604 * Typedef: ::WlzRsvFilterActionMask.
3605 */
3607 {
3608  WLZ_RSVFILTER_ACTION_NONE = (0), /*!< No filtering. */
3609  WLZ_RSVFILTER_ACTION_X = (1<<0), /*!< Filter along lines. */
3610  WLZ_RSVFILTER_ACTION_Y = (1<<1), /*!< Filter through columns. */
3611  WLZ_RSVFILTER_ACTION_Z = (1<<2) /*!< Filter through planes. */
3613 
3614 /*!
3615 * \enum _WlzRsvFilterName
3616 * \ingroup WlzValuesFilters
3617 * \brief Recursive filter types that can be used to define a recursive
3618 * filter along with a filter parameter (eg sigma for Gaussian).
3619 * Typedef: ::WlzRsvFilterName.
3620 */
3621 typedef enum _WlzRsvFilterName
3622 {
3623  WLZ_RSVFILTER_NAME_NONE, /*!< No name, application defined
3624  filter. */
3625  WLZ_RSVFILTER_NAME_DERICHE_0, /*!< Deriche's smoothing operator. */
3626  WLZ_RSVFILTER_NAME_DERICHE_1, /*!< Deriche's edge operator. */
3627  WLZ_RSVFILTER_NAME_DERICHE_2, /*!< Deriche's 2nd edge operator. */
3628  WLZ_RSVFILTER_NAME_GAUSS_0, /*!< Gaussian. */
3629  WLZ_RSVFILTER_NAME_GAUSS_1, /*!< First derivative of Gaussian. */
3630  WLZ_RSVFILTER_NAME_GAUSS_2 /*!< Second derivative of Gaussian. */
3632 
3633 /*!
3634 * \struct _WlzRsvFilter
3635 * \ingroup WlzValuesFilters
3636 * \brief The parameters
3637 * \f$a_j\f$, \f$b_j\f$ and \f$c\f$ with \f$j\in[0\cdots2]\f$
3638 * which define a recursive filter:
3639 * \f[
3640  y^{+}[i] = a_0 x[i + 0] + a_1 x[i - 1] -
3641  b_0 y^{+}[i - 1] - b_1 y^{+}[i - 2]
3642  \f]
3643 * \f[
3644  y^{-}[i] = a_2 x[i + 1] + a_3 x[i + 2] -
3645  b_0 y^{-}[i + 1] - b_1 y^{-}[i + 2]
3646  \f]
3647 * \f[
3648  y[i] = c (y^{+}[i] + y^{-}[i])
3649  \f]
3650 * Typedef: ::WlzRsvFilter.
3651 */
3652 typedef struct _WlzRsvFilter
3653 {
3654  WlzRsvFilterName name; /*!< The filter name. */
3655  double a[4]; /*!< Feed forward coefficients. */
3656  double b[2]; /*!< Feed back coefficients. */
3657  double c; /*!< Normalization parameter. */
3658 } WlzRsvFilter;
3659 
3660 /************************************************************************
3661 * Conforming mesh data structures.
3662 ************************************************************************/
3663 
3664 /*!
3665 * \enum _WlzCMeshElmFlags
3666 * \ingroup WlzMesh
3667 * \brief Conforming mesh element flags. These are bit masks which are
3668 * used in a conforming mesh's elements flags.
3669 * Typedef: ::WlzCMeshElmFlags.
3670 */
3671 typedef enum _WlzCMeshElmFlags
3672 {
3674  WLZ_CMESH_ELM_FLAG_BOUNDARY = (1), /*!< Element intersects the boundary
3675  of the domain to which it
3676  should conform. */
3677  WLZ_CMESH_ELM_FLAG_OUTSIDE = (1<<1), /*!< Element is outside the domain to
3678  which the mesh should
3679  conform. */
3680  WLZ_CMESH_ELM_FLAG_KNOWN = (1<<2), /*!< A property of the element is
3681  known. */
3682  WLZ_CMESH_ELM_FLAG_ALL = (65535) /*!< All possible flags, 0xffff
3683  decimal representation required
3684  for JavaWoolz. */
3686 
3687 /*!
3688 * \enum _WlzCMeshNodFlags
3689 * \ingroup WlzMesh
3690 * \brief Conforming mesh node flags. These are bit masks which are
3691 * used in a conforming mesh's node flags.
3692 * Typedef: ::WlzCMeshNodFlags.
3693 */
3694 typedef enum _WlzCMeshNodFlags
3695 {
3697  WLZ_CMESH_NOD_FLAG_ADJUSTED = (1), /*!< Node position adjusted. */
3698  WLZ_CMESH_NOD_FLAG_BOUNDARY = (1<<1), /*!< Node is on a boundary of the
3699  mesh. */
3700  WLZ_CMESH_NOD_FLAG_UPWIND = (1<<2), /*!< Node is upwind of the active
3701  region having already been
3702  processed. */
3703  WLZ_CMESH_NOD_FLAG_ACTIVE = (1<<3), /*!< Node is in the active region
3704  and is being processed. */
3705  WLZ_CMESH_NOD_FLAG_KNOWN = (1<<4), /*!< Property associated with
3706  node is known. */
3707  WLZ_CMESH_NOD_FLAG_OUTSIDE = (1<<5), /*!< Node is outside the domain to
3708  which the mesh should
3709  conform. */
3710  WLZ_CMESH_NOD_FLAG_ALL = (65535) /*!< All possible flags, 0xffff
3711  decimal representation required
3712  for JavaWoolz. */
3714 
3715 /*!
3716 * \struct _WlzCMeshEntCore
3717 * \ingroup WlzMesh
3718 * \brief A core node/element structure containing the initial fields
3719 * common to all node and element structures.
3720 * Typedef: ::WlzCMeshEntCore
3721 */
3722 typedef struct _WlzCMeshEntCore
3723 {
3724  int idx; /*!< The node/element index. */
3725  unsigned int flags; /*!< Bitwise description of the
3726  node/element. */
3727 } WlzCMeshEntCore;
3728 
3729 /*!
3730 * \struct _WlzCMeshNod2D
3731 * \ingroup WlzMesh
3732 * \brief A node of a 2D mesh.
3733 * Typedef: ::WlzCMeshNod2D.
3734 */
3735 typedef struct _WlzCMeshNod2D
3736 {
3737  int idx; /*!< The node index from
3738  WlzCMeshEntCore. */
3739  unsigned int flags; /*!< Bitwise description of node
3740  from WlzCMeshEntCore. */
3741  WlzDVertex2 pos; /*!< Node position. */
3742  struct _WlzCMeshEdgU2D *edu; /*!< One of many edge uses which is
3743  directed from the node. A
3744  node is shared by many parents. */
3745  struct _WlzCMeshNod2D *next; /*!< Next node in bucket. */
3746  void *prop; /*!< Node properties. */
3747 } WlzCMeshNod2D;
3748 
3749 /*!
3750 * \struct _WlzCMeshNod2D5
3751 * \ingroup WlzMesh
3752 * \brief A node of a 2D5 mesh with a 3D position but 2D connectivity.
3753 * Typedef: ::WlzCMeshNod2D5.
3754 */
3755 typedef struct _WlzCMeshNod2D5
3756 {
3757  int idx; /*!< The node index from
3758  WlzCMeshEntCore. */
3759  unsigned int flags; /*!< Bitwise description of node
3760  from WlzCMeshEntCore. */
3761  WlzDVertex3 pos; /*!< Node position. */
3762  struct _WlzCMeshEdgU2D5 *edu; /*!< One of many edge uses which is
3763  directed from the node. A
3764  node is shared by many parents. */
3765  struct _WlzCMeshNod2D5 *next; /*!< Next node in bucket. */
3766  void *prop; /*!< Node properties. */
3767 } WlzCMeshNod2D5;
3768 
3769 /*!
3770 * \struct _WlzCMeshNod3D
3771 * \ingroup WlzMesh
3772 * \brief A node of a 3D mesh.
3773 * Typedef: ::WlzCMeshNod3D.
3774 */
3775 typedef struct _WlzCMeshNod3D
3776 {
3777  int idx; /*!< The node index from
3778  WlzCMeshEntCore. */
3779  unsigned int flags; /*!< Bitwise description of node
3780  from WlzCMeshEntCore. */
3781  WlzDVertex3 pos; /*!< Node position. */
3782  struct _WlzCMeshEdgU3D *edu; /*!< One of many edge uses which is
3783  directed from the node. A
3784  node is shared by many parents. */
3785  struct _WlzCMeshNod3D *next; /*!< Next node in bucket. */
3786  void *prop; /*!< Node properties. */
3787 } WlzCMeshNod3D;
3788 
3789 /*!
3790 * \union _WlzCMeshNodP
3791 * \ingroup WlzMesh
3792 * \brief A node pointer for a 2 or 3D mesh.
3793 * Typedef: ::WlzCMeshNodP.
3794 */
3795 typedef union _WlzCMeshNodP
3796 {
3797  void *v; /*!< Generic pointer. */
3798  struct _WlzCMeshEntCore *core; /*!< Core pointer. */
3799  struct _WlzCMeshNod2D *n2; /*!< 2D node pointer. */
3800  struct _WlzCMeshNod2D5 *n2d5; /*!< 2D5 node pointer. */
3801  struct _WlzCMeshNod3D *n3; /*!< 3D node pointer. */
3802 } WlzCMeshNodP;
3803 
3804 /*!
3805 * \struct _WlzCMeshEdgU2D
3806 * \ingroup WlzMesh
3807 * \brief A 2D CCW directed (half) edge within the parent simplex.
3808 * Typedef: ::WlzCMeshEdgU2D.
3809 */
3810 typedef struct _WlzCMeshEdgU2D
3811 {
3812  struct _WlzCMeshNod2D *nod; /*!< Node from which this edge is
3813  directed. */
3814  struct _WlzCMeshEdgU2D *next; /*!< Next directed edge, previous
3815  can be found using next->next. */
3816  struct _WlzCMeshEdgU2D *opp; /*!< Opposite directed edge. */
3817  struct _WlzCMeshEdgU2D *nnxt; /*!< Next edge directed from the
3818  same node (un-ordered). */
3819  struct _WlzCMeshElm2D *elm; /*!< Parent element. */
3820 } WlzCMeshEdgU2D;
3821 
3822 /*!
3823 * \struct _WlzCMeshEdgU2D5
3824 * \ingroup WlzMesh
3825 * \brief A 2D CCW directed (half) edge within the parent simplex.
3826 * Typedef: ::WlzCMeshEdgU2D5.
3827 */
3828 typedef struct _WlzCMeshEdgU2D5
3829 {
3830  struct _WlzCMeshNod2D5 *nod; /*!< Node from which this edge is
3831  directed. */
3832  struct _WlzCMeshEdgU2D5 *next; /*!< Next directed edge, previous
3833  can be found using next->next. */
3834  struct _WlzCMeshEdgU2D5 *opp; /*!< Opposite directed edge. */
3835  struct _WlzCMeshEdgU2D5 *nnxt; /*!< Next edge directed from the
3836  same node (un-ordered). */
3837  struct _WlzCMeshElm2D5 *elm; /*!< Parent element. */
3838 } WlzCMeshEdgU2D5;
3839 
3840 /*!
3841 * \struct _WlzCMeshEdgU3D
3842 * \ingroup WlzMesh
3843 * \brief A 3D directed (half) edge within the parent face.
3844 * Typedef: ::WlzCMeshEdgU3D.
3845 */
3846 typedef struct _WlzCMeshEdgU3D
3847 {
3848  struct _WlzCMeshNod3D *nod; /*!< Node from which this edge is
3849  directed. */
3850  struct _WlzCMeshEdgU3D *next; /*!< Next directed edge, previous
3851  can be found using next->next. */
3852  struct _WlzCMeshEdgU3D *nnxt; /*!< Next edge directed from the
3853  same node (un-ordered). */
3854  struct _WlzCMeshFace *face; /*!< Parent face. */
3855 } WlzCMeshEdgU3D;
3856 
3857 /*!
3858 * \union _WlzCMeshEdgUP
3859 * \ingroup WlzMesh
3860 * \brief An edge use pointer for a 2 or 3D mesh.
3861 * Typedef: ::WlzCMeshEdgUP.
3862 */
3863 typedef union _WlzCMeshEdgUP
3864 {
3865  void *v; /*!< Generic pointer. */
3866  struct _WlzCMeshEdgU2D *e2; /*!< 2D node pointer. */
3867  struct _WlzCMeshEdgU2D5 *e2d5; /*!< 2D5 node pointer. */
3868  struct _WlzCMeshEdgU3D *e3; /*!< 3D node pointer. */
3869 } WlzCMeshEdgUP;
3870 
3871 /*!
3872 * \struct _WlzCMeshFace
3873 * \ingroup WlzMesh
3874 * \brief A directed face within the parent simplex.
3875 * Typedef: ::WlzCMeshFace.
3876 */
3877 typedef struct _WlzCMeshFace
3878 {
3879  struct _WlzCMeshEdgU3D edu[3]; /*!< Directed edges of the face. */
3880  struct _WlzCMeshFace *opp; /*!< Opposite face on neighboring
3881  mesh element. */
3882  struct _WlzCMeshElm3D *elm; /*!< Parent mesh element. */
3883 } WlzCMeshFace;
3884 
3885 /*!
3886 * \struct _WlzCMeshElm2D
3887 * \ingroup WlzMesh
3888 * \brief A single 2D triangular mesh element.
3889 * Typedef: ::WlzCMeshElm2D.
3890 */
3891 typedef struct _WlzCMeshElm2D
3892 {
3893  int idx; /*!< The element index from
3894  WlzCMeshEntCore. */
3895  unsigned int flags; /*!< Element flags from
3896  WlzCMeshEntCore. */
3897  struct _WlzCMeshEdgU2D edu[3]; /*!< Edges of the mesh element. */
3898  struct _WlzCMeshCellElm2D *cElm; /*!< First cell element from which
3899  all other cell elements can be
3900  reached using the next pointer. */
3901  void *prop; /*!< Element properties. */
3902 } WlzCMeshElm2D;
3903 
3904 /*!
3905 * \struct _WlzCMeshElm2D5
3906 * \ingroup WlzMesh
3907 * \brief A single 3D triangular mesh element.
3908 * Typedef: ::WlzCMeshElm2D5.
3909 */
3910 typedef struct _WlzCMeshElm2D5
3911 {
3912  int idx; /*!< The element index from
3913  WlzCMeshEntCore. */
3914  unsigned int flags; /*!< Element flags from
3915  WlzCMeshEntCore. */
3916  struct _WlzCMeshEdgU2D5 edu[3]; /*!< Edges of the mesh element. */
3917  struct _WlzCMeshCellElm2D5 *cElm; /*!< First cell element from which
3918  all other cell elements can be
3919  reached using the next
3920  pointer. */
3921  void *prop; /*!< Element properties. */
3922 } WlzCMeshElm2D5;
3923 
3924 /*!
3925 * \struct _WlzCMeshElm3D
3926 * \ingroup WlzMesh
3927 * \brief A single 3D tetrahedral mesh element.
3928 * Typedef: ::WlzCMeshElm3D.
3929 *
3930 * The following diagram depicts a mesh element, viewed from
3931 * above with the apex (node n0) pointing towards the viewer.
3932 * From this view, face f3 is at the rear of the tetrahedron.
3933 * \verbatim
3934  O n1
3935  /|\
3936  / | \
3937  / | \
3938  / | \
3939  / | \ f3
3940  / | \ /
3941  / | \/
3942  / | .\
3943  / | . \
3944  / | . \
3945  / | . \
3946  / O \
3947  / f1 / \ f0 \
3948  / / n0 \ \
3949  / / \ \
3950  / / \ \
3951  / / \ \
3952  / / \ \
3953  / / \ \
3954  / / f2 \ \
3955  / / \ \
3956  / / \ \
3957  / / \ \
3958  n3 O-----------------------------------------------O n2
3959 \endverbatim
3960 * The relationship between nodes and faces depicted in
3961 * this diagrap is used in constructing new mesh elements.
3962 *
3963 * The tetrahedron can be opened a net and viewed looking
3964 * at the directed edges uses associated with the faces from
3965 * *outside* the element surface as shown below:
3966 * \verbatim
3967  n1
3968  n0 O-----------------------------O-----------------------------0 n0
3969  \ ---------------------> / \ --------------------> /
3970  \ % e0 / % \ % e1 /
3971  \ \ / / / \ \ / /
3972  \ \ / / / \ \ \ / /
3973  \ \ / / / \ \ \ / /
3974  \ \ f0 / / / \ \ \ f1 / /
3975  \ \ e2 e1 / / / \ \ \ e1 e0 / /
3976  \ \ / / / \ \ \ / /
3977  \ \ / / / f3 \ \ \ / /
3978  \ \ / / / e0 e1 \ \ \ / /
3979  \ \ / / / \ \ / /
3980  \ / / / \ \ % /
3981  \ % / e2 % \ /
3982  \ / <-------------------- \ /
3983  O-----------------------------O
3984  n2 \ % --------------------> / n3
3985  \ \ e1 /
3986  \ \ / /
3987  \ \ / /
3988  \ \ / /
3989  \ \ f2 / /
3990  \ \ / /
3991  \ \ e0 e2 / /
3992  \ \ / /
3993  \ \ / /
3994  \ \ / /
3995  \ / /
3996  \ % /
3997  \ /
3998  O
3999  n0
4000 \endverbatim
4001 * Each mesh element has four faces and each face has three
4002 * directed edges, with the edges directed counter clockwise
4003 * (when viewed from outside the mesh element) away from their
4004 * nodes.
4005 *
4006 * <table>
4007 * <caption>
4008 * Indexing of faces, edge uses and nodes in 3D elements.
4009 * </caption>
4010 * <tr><td>Face</td> <td>Edge Use</td> <td>Node</td></tr>
4011 * <tr><td>0</td> <td>0</td> <td>0</td></tr>
4012 * <tr><td>0</td> <td>1</td> <td>1</td></tr>
4013 * <tr><td>0</td> <td>2</td> <td>2</td></tr>
4014 * <tr><td>1</td> <td>0</td> <td>0</td></tr>
4015 * <tr><td>1</td> <td>1</td> <td>3</td></tr>
4016 * <tr><td>1</td> <td>2</td> <td>1</td></tr>
4017 * <tr><td>2</td> <td>0</td> <td>0</td></tr>
4018 * <tr><td>2</td> <td>1</td> <td>2</td></tr>
4019 * <tr><td>2</td> <td>2</td> <td>3</td></tr>
4020 * <tr><td>3</td> <td>0</td> <td>1</td></tr>
4021 * <tr><td>3</td> <td>1</td> <td>1</td></tr>
4022 * <tr><td>3</td> <td>2</td> <td>3</td></tr>
4023 * </table>
4024 
4025 * The face opposite a node, or node opposite a face
4026 * can easily be found using: \f$f + n = 3\f$, where
4027 * \f$f\f$ is the face and \f$n\f$ is the node.
4028 *
4029 */
4030 typedef struct _WlzCMeshElm3D
4031 {
4032  int idx; /*!< The element index from
4033  WlzCMeshEntCore. */
4034  unsigned int flags; /*!< Element flags from
4035  WlzCMeshEntCore. */
4036  struct _WlzCMeshFace face[4]; /*!< Faces of the mesh element. */
4037  struct _WlzCMeshCellElm3D *cElm; /*!< First cell element from which
4038  all other cell elements can be
4039  reached using the next pointer. */
4040  void *prop; /*!< Element properties. */
4041 } WlzCMeshElm3D;
4042 
4043 /*!
4044 * \union _WlzCMeshElmP
4045 * \ingroup WlzMesh
4046 * \brief A element pointer for a 2 or 3D mesh.
4047 * Typedef: ::WlzCMeshElmP.
4048 */
4049 typedef union _WlzCMeshElmP
4050 {
4051  void *v; /*!< Generic pointer. */
4052  struct _WlzCMeshEntCore *core; /*!< Core pointer. */
4053  struct _WlzCMeshElm2D *e2; /*!< 2D element pointer. */
4054  struct _WlzCMeshElm2D5 *e2d5; /*!< 2D5 element pointer. */
4055  struct _WlzCMeshElm3D *e3; /*!< 3D element pointer. */
4056 } WlzCMeshElmP;
4057 
4058 /*!
4059 * \struct _WlzCMeshCellElm2D
4060 * \ingroup WlzMesh
4061 * \brief Data structure which is used to link lists of 2D elements
4062 * with the grid cells that they intersect.
4063 * Typedef: ::WlzCMeshCell2D.
4064 */
4065 typedef struct _WlzCMeshCellElm2D
4066 {
4067  struct _WlzCMeshElm2D *elm; /*! The element. */
4068  struct _WlzCMeshCell2D *cell; /*! The cell. */
4069  struct _WlzCMeshCellElm2D *next; /*! Next element intersecting cell or
4070  next cell element in the free
4071  list. */
4072  struct _WlzCMeshCellElm2D *nextCell; /*! Next cell which this element
4073  intersects. */
4075 
4076 /*!
4077 * \struct _WlzCMeshCellElm2D5
4078 * \ingroup WlzMesh
4079 * \brief Data structure which is used to link lists of 2D5 elements
4080 * with the grid cells that they intersect.
4081 * Typedef: ::WlzCMeshCell2D5.
4082 */
4083 typedef struct _WlzCMeshCellElm2D5
4084 {
4085  struct _WlzCMeshElm2D5 *elm; /*! The element. */
4086  struct _WlzCMeshCell2D5 *cell; /*! The cell. */
4087  struct _WlzCMeshCellElm2D5 *next; /*! Next element intersecting cell or
4088  next cell element in the free
4089  list. */
4090  struct _WlzCMeshCellElm2D5 *nextCell; /*! Next cell which this element
4091  intersects. */
4093 
4094 /*!
4095 * \struct _WlzCMeshCellElm3D
4096 * \ingroup WlzMesh
4097 * \brief Data structure which is used to link lists of 3D elements
4098 * with the grid cells that they intersect.
4099 * Typedef: ::WlzCMeshCell3D.
4100 */
4101 typedef struct _WlzCMeshCellElm3D
4102 {
4103  struct _WlzCMeshElm3D *elm; /*! The element. */
4104  struct _WlzCMeshCell3D *cell; /*! The cell. */
4105  struct _WlzCMeshCellElm3D *next; /*! Next element intersecting cell or
4106  next cell element in the free
4107  list. */
4108  struct _WlzCMeshCellElm3D *nextCell; /*! Next cell which this element
4109  intersects. */
4111 
4112 /*!
4113 * \struct _WlzCMeshCell2D
4114 * \ingroup WlzMesh
4115 * \brief A single cell of a spatial grid or array of 2D cells.
4116 * Typedef: ::WlzCMeshCell2D.
4117 */
4118 typedef struct _WlzCMeshCell2D
4119 {
4120  struct _WlzCMeshNod2D *nod; /*! Head of a linked list of nodes
4121  which are located within the
4122  cell. */
4123  struct _WlzCMeshCellElm2D *cElm; /*! Cell element data structure for
4124  an element which intersects this
4125  cell. */
4126 } WlzCMeshCell2D;
4127 
4128 /*!
4129 * \struct _WlzCMeshCell2D5
4130 * \ingroup WlzMesh
4131 * \brief A single cell of a spatial grid or array of 2D5 cells.
4132 * Typedef: ::WlzCMeshCell2D5.
4133 */
4134 typedef struct _WlzCMeshCell2D5
4135 {
4136  struct _WlzCMeshNod2D5 *nod; /*! Head of a linked list of nodes
4137  which are located within the
4138  cell. */
4139  struct _WlzCMeshCellElm2D5 *cElm; /*! Cell element data structure for
4140  an element which intersects this
4141  cell. */
4142 } WlzCMeshCell2D5;
4143 
4144 /*!
4145 * \struct _WlzCMeshCell3D
4146 * \ingroup WlzMesh
4147 * \brief A single cell of a spatial grid or array of 3D cells.
4148 * Typedef: ::WlzCMeshCell3D.
4149 */
4150 typedef struct _WlzCMeshCell3D
4151 {
4152  struct _WlzCMeshNod3D *nod; /*! Head of a linked list of nodes
4153  which are located within the
4154  cell. */
4155  struct _WlzCMeshCellElm3D *cElm; /*! Cell element data structure for
4156  an element which intersects this
4157  cell. */
4158 } WlzCMeshCell3D;
4159 
4160 /*!
4161 * \struct _WlzCMeshCellGrid2D
4162 * \ingroup WlzMesh
4163 * \brief A spatial grid or array of square 2D cells that are used for
4164 * fast node and element location queries.
4165 * Typedef: ::WlzCMeshCellGrid2D.
4166 */
4167 typedef struct _WlzCMeshCellGrid2D
4168 {
4169  WlzIVertex2 nCells; /*! Dimensions of the cell grid
4170  array in terms of the number of
4171  cells. */
4172  double cellSz; /*! Each cell is an axis aligned
4173  square with this side length. */
4174  struct _WlzCMeshCell2D **cells; /*! Array of cells. */
4175  WlzCMeshCellElm2D *freeCE; /*! List of free cell elements for
4176  re/use. */
4177  AlcBlockStack *allCE; /*! Allocated cell elements. */
4179 
4180 /*!
4181 * \struct _WlzCMeshCellGrid2D5
4182 * \ingroup WlzMesh
4183 * \brief A spatial grid or array of cubiod 3D cells that are used for
4184 * fast 2D5 node and element location queries.
4185 * Typedef: ::WlzCMeshCellGrid2D5.
4186 */
4187 typedef struct _WlzCMeshCellGrid2D5
4188 {
4189  WlzIVertex3 nCells; /*! Dimensions of the cell grid
4190  array in terms of the number of
4191  cells. */
4192  double cellSz; /*! Each cell is an axis aligned
4193  cube with this side length. */
4194  struct _WlzCMeshCell2D5 ***cells; /*! Array of cells. */
4195  WlzCMeshCellElm2D5 *freeCE; /*! List of free cell elements for
4196  re/use. */
4197  AlcBlockStack *allCE; /*! Allocated cell elements. */
4199 
4200 /*!
4201 * \struct _WlzCMeshCellGrid3D
4202 * \ingroup WlzMesh
4203 * \brief A spatial grid or array of square 3D cells that are used for
4204 * fast node and element location queries.
4205 * Typedef: ::WlzCMeshCellGrid3D.
4206 */
4207 typedef struct _WlzCMeshCellGrid3D
4208 {
4209  WlzIVertex3 nCells; /*! Dimensions of the cell grid
4210  array in terms of the number of
4211  cells. */
4212  double cellSz; /*! Each cell is an axis aligned
4213  cube with this side length. */
4214  struct _WlzCMeshCell3D ***cells; /*! Array of cells. */
4215  WlzCMeshCellElm3D *freeCE; /*! List of free cell elements for
4216  re/use. */
4217  AlcBlockStack *allCE; /*! Allocated cell elements. */
4219 
4220 #ifndef WLZ_EXT_BIND
4221 /*!
4222 * \typedef WlzCMeshCbFn
4223 * \ingroup WlzMesh
4224 * \brief A pointer to a function called to make mesh entity
4225 * properties.
4226 * Parameters passed are: mesh, entity, data.
4227 */
4228 typedef WlzErrorNum (*WlzCMeshCbFn)(void *, void *, void *);
4229 #endif
4230 
4231 /*!
4232 * \struct _WlzCMeshCbEntry
4233 * \ingroup WlzMesh
4234 * \brief Callback entry for list of callbacks.
4235 * Typedef: ::WlzCMeshCbEntry.
4236 */
4237 typedef struct _WlzCMeshCbEntry
4238 {
4239 #ifndef WLZ_EXT_BIND
4241 #else
4242  void *fn;
4243 #endif
4244  void *data;
4246 } WlzCMeshCbEntry;
4247 
4248 /*!
4249 * \struct _WlzCMeshEntRes
4250 * \ingroup WlzMesh
4251 * \brief Resources used for efficient allocation and recycling of
4252 * mesh entities.
4253 * Typedef: ::WlzCMeshEntRes.
4254 */
4255 typedef struct _WlzCMeshEntRes
4256 {
4257  unsigned int numEnt; /*!< Number of valid entities in
4258  vector. */
4259  unsigned int maxEnt; /*!< Space allocated in vector. */
4260  unsigned int nextIdx; /*!< Index of next free mesh entity
4261  in vector. */
4262  AlcVector *vec; /*!< Vector (extensible array) of
4263  mesh entities. */
4264  WlzCMeshCbEntry *newEntCb; /*!< Callbacks for new entities. */
4265  WlzCMeshCbEntry *delEntCb; /*!< Callbacks for deleted entities. */
4266 } WlzCMeshEntRes;
4267 
4268 /*!
4269 * \struct _WlzCMeshRes
4270 * \ingroup WlzMesh
4271 * \brief Resources used for efficient allocation, recycling and
4272 * location of mesh elements and nodes.
4273 * Typedef: ::WlzCMeshRes.
4274 */
4275 typedef struct _WlzCMeshRes
4276 {
4277  struct _WlzCMeshEntRes nod; /*!< Node resources. */
4278  struct _WlzCMeshEntRes elm; /*!< Element resources. */
4279 } WlzCMeshRes;
4280 
4281 /*!
4282 * \union _WlzCMeshEntP
4283 * \ingroup WlzMesh
4284 * \brief Union of pointers to top level mesh entities.
4285 * Typedef: ::WlzCMeshEntP
4286 */
4287 typedef union _WlzCMeshEntP
4288 {
4289  void *v; /*!< Generic pointer. */
4290  struct _WlzCMeshEntCore *core; /*!< Core pointer. */
4291  struct _WlzCMeshNod2D *n2; /*!< 2D node pointer. */
4292  struct _WlzCMeshNod2D *n2d5; /*!< 2D5 node pointer. */
4293  struct _WlzCMeshNod3D *n3; /*!< 3D node pointer. */
4294  struct _WlzCMeshElm2D *e2; /*!< 2D element pointer. */
4295  struct _WlzCMeshElm2D *e2d5; /*!< 2D5 element pointer. */
4296  struct _WlzCMeshElm3D *e3; /*!< 3D element pointer. */
4297 } WlzCMeshEntP;
4298 
4299 /*!
4300 * \union _WlzCMeshEntPP
4301 * \ingroup WlzMesh
4302 * \brief Union of second level pointers to top level mesh entities.
4303 * Typedef: ::WlzCMeshEntP
4304 */
4305 typedef union _WlzCMeshEntPP
4306 {
4307  void **v; /*!< Generic pointer. */
4308  struct _WlzCMeshEntCore **core; /*!< Core pointer. */
4309  struct _WlzCMeshNod2D **n2; /*!< 2D node pointer. */
4310  struct _WlzCMeshNod2D **n2d5; /*!< 2D5 node pointer. */
4311  struct _WlzCMeshNod3D **n3; /*!< 3D node pointer. */
4312  struct _WlzCMeshElm2D **e2; /*!< 2D element pointer. */
4313  struct _WlzCMeshElm2D **e2d5; /*!< 2D5 element pointer. */
4314  struct _WlzCMeshElm3D **e3; /*!< 3D element pointer. */
4315 } WlzCMeshEntPP;
4316 
4317 /*!
4318 * \struct _WlzCMesh2D
4319 * \ingroup WlzMesh
4320 * \brief A graph based mesh model for 2D boundary conforming
4321 * simplical meshes.
4322 * The mesh inherits it's core fields from the Woolz core
4323 * domain.
4324 * Typedef: ::WlzCMesh2D.
4325 */
4326 typedef struct _WlzCMesh2D
4327 {
4328  int type; /*!< Type of mesh. */
4329  int linkcount; /*!< Core. */
4330  void *freeptr; /*!< Core. */
4331  double maxSqEdgLen; /*!< Maximum of squared edge lengths
4332  which can be used to restrict
4333  geometric searches. This may not
4334  be correct if nodes have been
4335  deleted or modified so it should
4336  not be relied upon for any more
4337  than an upper limit. */
4338  WlzDBox2 bBox; /*!< Axis aligned bounding box of
4339  the mesh. */
4340  WlzCMeshCellGrid2D cGrid; /*!< Cell grid for fast node and
4341  element location queries. */
4342  struct _WlzCMeshRes res; /*!< Mesh resources. */
4343 
4344 } WlzCMesh2D;
4345 
4346 /*!
4347 * \struct _WlzCMesh2D5
4348 * \ingroup WlzMesh
4349 * \brief A graph based mesh model for 2D5 boundary conforming
4350 * simplical meshes.
4351 * The mesh inherits it's core fields from the Woolz core
4352 * domain.
4353 * Typedef: ::WlzCMesh2D5.
4354 */
4355 typedef struct _WlzCMesh2D5
4356 {
4357  int type; /*!< Type of mesh. */
4358  int linkcount; /*!< Core. */
4359  void *freeptr; /*!< Core. */
4360  double maxSqEdgLen; /*!< Maximum of squared edge lengths
4361  which can be used to restrict
4362  geometric searches. This may not
4363  be correct if nodes have been
4364  deleted or modified so it should
4365  not be relied upon for any more
4366  than an upper limit. */
4367  WlzDBox3 bBox; /*!< Axis aligned bounding box of
4368  the mesh. */
4369  WlzCMeshCellGrid2D5 cGrid; /*!< Cell grid for fast node and
4370  element location queries. */
4371  struct _WlzCMeshRes res; /*!< Mesh resources. */
4372 
4373 } WlzCMesh2D5;
4374 
4375 /*!
4376 * \struct _WlzCMesh3D
4377 * \ingroup WlzMesh
4378 * \brief A graph based mesh model for 3D boundary conforming
4379 * simplical meshes.
4380 * The mesh inherits it's core fields from the Woolz core
4381 * domain.
4382 * Typedef: ::WlzCMesh3D.
4383 */
4384 typedef struct _WlzCMesh3D
4385 {
4386  int type; /*!< Type of mesh. */
4387  int linkcount; /*!< Core. */
4388  void *freeptr; /*!< Core. */
4389  double maxSqEdgLen; /*!< Maximum of squared edge lengths
4390  which can be used to restrict
4391  geometric searches. This may not
4392  be correct if nodes have been
4393  deleted or modified so it should
4394  not be relied upon for any more
4395  than an upper limit. */
4396  WlzDBox3 bBox; /*!< Axis aligned bounding box of
4397  the mesh. */
4398  WlzCMeshCellGrid3D cGrid; /*!< Cell grid for fast node and
4399  element location queries. */
4400  struct _WlzCMeshRes res; /*!< Mesh resources. */
4401 
4402 } WlzCMesh3D;
4403 
4404 /*!
4405 * \union _WlzCMeshP
4406 * \ingroup WlzMesh
4407 * \brief Union of 2D and 3D conforming simplical mesh pointers.
4408 */
4409 typedef union _WlzCMeshP
4410 {
4411  void *v;
4413  WlzCMesh2D *m2;
4414  WlzCMesh2D5 *m2d5;
4415  WlzCMesh3D *m3;
4416 } WlzCMeshP;
4417 
4418 /************************************************************************
4419 * Functions
4420 ************************************************************************/
4421 
4422 /*!
4423 * \enum _WlzFnType
4424 * \ingroup WlzFunction
4425 * \brief The types of function.
4426 * Typedef: ::WlzFnType.
4427 */
4428 typedef enum _WlzFnType
4429 {
4430  WLZ_FN_BASIS_2DGAUSS, /*!< Gaussian basis function. */
4432  WLZ_FN_BASIS_2DIMQ, /*!< Inverse multiquadric basis
4433  function. */
4435  WLZ_FN_BASIS_2DPOLY, /*!< Polynomial basis function. */
4437  WLZ_FN_BASIS_2DMQ, /*!< Multiquadric basis function. */
4439  WLZ_FN_BASIS_2DTPS, /*!< Thin plate spline basis fn. */
4441  WLZ_FN_BASIS_2DCONF_POLY, /*!< 2D Conformal polynomial basis
4442  function. */
4444  WLZ_FN_BASIS_3DMOS, /*!< 3D Multi-order spline. */
4445  WLZ_FN_BASIS_SCALAR_3DMOS, /*!< 3D Multi-order spline with scalar
4446  values. */
4447  WLZ_FN_SCALAR_MOD, /*!< Modulus (abs() or fabs()). */
4448  WLZ_FN_SCALAR_EXP, /*!< Exponential (exp()). */
4449  WLZ_FN_SCALAR_LOG, /*!< Logarithm (log()). */
4450  WLZ_FN_SCALAR_SQRT, /*!< Square root (x^-1/2). */
4451  WLZ_FN_SCALAR_INVSQRT, /*!< Inverse square root (x^-1/2). */
4452  WLZ_FN_SCALAR_SQR, /*!< Square (x * x). */
4453  WLZ_FN_COUNT /*!< Not a function but the number
4454  of functions. Keep this the
4455  last of the enums! */
4456 } WlzFnType;
4457 
4458 /*!
4459 * \typedef WlzBasisEvalFn
4460 * \ingroup WlzFunction
4461 * \brief An alternative basis function evaluation function that may
4462 * may be called.
4463 */
4464 #ifdef WLZ_EXT_BIND
4465 typedef void *WlzBasisEvalFn;
4466 #else /* WLZ_EXT_BIND */
4467 typedef double (*WlzBasisEvalFn)(void *, double);
4468 #endif /* WLZ_EXT_BIND */
4469 
4470 /*!
4471 * \typedef WlzBasisDistFn
4472 * \ingroup WlzFunction
4473 * \brief An alternative basis function distance function that may
4474 * may be called.
4475 */
4476 #ifdef WLZ_EXT_BIND
4477 typedef void *WlzBasisDistFn;
4478 #else /* WLZ_EXT_BIND */
4479 typedef double (*WlzBasisDistFn)(void *, int, WlzVertex, void *);
4480 #endif /* WLZ_EXT_BIND */
4481 
4482 /*!
4483 * \struct _WlzBasisFn
4484 * \ingroup WlzFunction
4485 * \brief A basis function.
4486 * Typedef: ::WlzBasisFn.
4487 */
4488 typedef struct _WlzBasisFn
4489 {
4490  WlzFnType type; /*!< The transform basis function. */
4491  int nPoly; /*!< Polynomial order + 1. */
4492  int nBasis; /*!< Number of basis function
4493  coefficients. */
4494  int nVtx; /*!< Number of control point
4495  vertices. */
4496  int maxVx; /*!< Maximum number of vertices space
4497  has been allocated for. */
4498  WlzVertexP poly; /*!< Polynomial coefficients. */
4499  WlzVertexP basis; /*!< Basis function coefficients. */
4500  WlzVertexP vertices; /*!< Control point vertices, these are
4501  the destination vertices of the
4502  control points used to define the
4503  basis function transform. */
4504  WlzVertexP sVertices; /*!< Source vertices used to compute
4505  the transform. Not always used
4506  and may be NULL. */
4507  void *param; /*!< Other parameters used by the
4508  basis function, e.g. delta in
4509  the MQ and Gauss basis
4510  functions. Must be allocated
4511  in a single block to allow
4512  the parameters to be freed
4513  by AlcFree().
4514  For the MQ this is actually
4515  \f$(\delta r)^2\f$, where \f$r\f$
4516  is the range of the landmarks. */
4517 #ifdef WLZ_EXT_BIND
4518  void *evalFn;
4519 #else
4520  WlzBasisEvalFn evalFn; /*!< An alternative basis function
4521  evaluation function that may
4522  be called if non NULL. */
4523 #endif
4524  WlzHistogramDomain *evalData; /*!< Data passed to the alternative
4525  basis function evaluation
4526  function if the function pointer
4527  is non NULL. AlcFree() will be
4528  called to free the data when the
4529  basis function is free'd. */
4530 #ifdef WLZ_EXT_BIND
4531  void *distFn;
4532  void *mesh;
4533 #else
4534  WlzBasisDistFn distFn; /*!< An alternative basis function
4535  distance function that may
4536  be called if non NULL. */
4537  WlzCMeshP mesh; /*!< Associated mesh. */
4538 #endif
4539  double **distMap; /*!< Array of one dimensional arrays.
4540  There is a one dimensional array
4541  of mesh node distances for each
4542  landmark pair. Where the mesh is
4543  the mesh in the associated
4544  transform. In each one dimensional array the node distances are
4545  indexed bu the node indices.
4546  There is a one dimensional array
4547  for each of the control points.
4548  Essentialy these arrays cache
4549  distances to avoid recomputation.
4550  If a distance array is no longer
4551  valid it should be freed and set
4552  to NULL, it will then be
4553  recomputed as needed.
4554  Athough the number of control
4555  points may vary the number of
4556  mesh nodes must remain constant. */
4557 } WlzBasisFn;
4558 
4559 /*!
4560 * \struct _WlzThreshCbStr
4561 * \ingroup WlzType
4562 * \brief Callback structure from WlzCbThreshold()
4563 * Typedef: ::WlzThreshCbStr.
4564 */
4565 typedef struct _WlzThreshCbStr
4566 {
4567  WlzPixelP pix;
4569 } WlzThreshCbStr;
4570 
4571 /*!
4572 * \typedef WlzThreshCbFn
4573 * \ingroup WlzFunction
4574 * \brief Callback function for the WlzCbThreshold()
4575 */
4576 #ifdef WLZ_EXT_BIND
4577 typedef void *WlzThreshCbFn;
4578 #else /* WLZ_EXT_BIND */
4579 typedef int (*WlzThreshCbFn)(WlzObject *, void *, WlzThreshCbStr *);
4580 #endif /* WLZ_EXT_BIND */
4581 
4582 /************************************************************************
4583 * Transforms
4584 ************************************************************************/
4585 /*!
4586 * \union _WlzTransform
4587 * \ingroup WlzTransform
4588 * \brief A union of all valid transforms.
4589 * Typedef: ::WlzTransform.
4590 */
4591 typedef union _WlzTransform
4592 {
4593  struct _WlzCoreTransform *core; /*!< Core transform. */
4594  struct _WlzEmptyTransform *empty; /*!< Empty (zero) transform. */
4595  struct _WlzAffineTransform *affine; /*!< Affine transforms, 2D or 3D. */
4596  struct _WlzBasisFnTransform *basis; /*!< Any basis function transform. */
4597  struct _WlzMeshTransform *mesh; /*!< Any convex mesh transform. */
4598  struct _WlzObject *obj; /*!< Some transforms are objects
4599  with a domain and values (eg
4600  conforming mesh transforms). */
4601 } WlzTransform;
4602 
4603 /*!
4604 * \struct _WlzCoreTransform
4605 * \ingroup WlzTransform
4606 * \brief The core transform, with members common to all transforms.
4607 * Typedef: ::WlzCoreTransform.
4608 */
4609 typedef struct _WlzCoreTransform
4610 {
4611  WlzTransformType type; /*!< From WlzCoreDomain. */
4612  int linkcount; /*!< From WlzCoreDomain. */
4613  void *freeptr; /*!< From WlzCoreDomain. */
4615 
4616 /*!
4617 * \struct _WlzEmptyTransform
4618 * \ingroup WlzTransform
4619 * \brief An empty transform, with members common to all transforms.
4620 * An empty transform is a compact represetation of a zero
4621 * transform avoiding the use of NULL which implies an error.
4622 * Typedef: ::WlzCoreTransform.
4623 */
4624 typedef struct _WlzEmptyTransform
4625 {
4626  WlzTransformType type; /*!< From WlzCoreDomain. */
4627  int linkcount; /*!< From WlzCoreDomain. */
4628  void *freeptr; /*!< From WlzCoreDomain. */
4630 
4631 /*!
4632 * \struct _WlzAffineTransform
4633 * \ingroup WlzTransform
4634 * \brief Either a 2D or 3D affine transform.
4635 * The homogeneous matrix (mat) is always allocated as a 4x4
4636 * AlcDouble2Alloc style array. It is used as a 3x3
4637 * matrix for 2D and as a 4x4 matrix for 3D affine transforms.
4638 * Typedef: ::WlzAffineTransform.
4639 */
4640 typedef struct _WlzAffineTransform
4641 {
4642  WlzTransformType type; /*!< From WlzCoreDomain. */
4643  int linkcount; /*!< From WlzCoreDomain. */
4644  void *freeptr; /*!< From WlzCoreDomain. */
4645  double **mat; /*!< A 4x4 homogeneous matrix which is
4646  used as a 3x3 matrix for 2D
4647  transforms and as a 4x4 matrix for
4648  3D affine transforms. */
4650 
4651 /*!
4652 * \struct _WlzAffineTransformPrim
4653 * \ingroup WlzTransform
4654 * \brief Affine tranform primitives.
4655 * Typedef: ::WlzAffineTransformPrim.
4656 */
4658 {
4659  double tx, /*!< X translation. */
4660  ty, /*!< Y translation. */
4661  tz, /*!< Z translation. */
4662  scale, /*!< Scale transformation. */
4663  theta, /*!< Rotation about z-axis. */
4664  phi, /*!< Rotation about y-axis. */
4665  alpha, /*!< Shear strength. */
4666  psi, /*!< Shear angle in x-y plane. */
4667  xsi; /*!< 3D shear angle. */
4668  int invert; /*!< Non-zero if reflection about
4669  the y-axis. */
4671 
4672 /*!
4673 * \struct _WlzBasisFnTransform
4674 * \ingroup WlzTransform
4675 * \brief A basis function transform.
4676 * The delta is used by the MQ and Gauss basis functions:
4677 * For the MQ basis function delta = \f$R^2\f$,
4678 * and for the Gaussian basis function delta = \f$1/s^2\f$.
4679 * Typedef: ::WlzBasisFnTransform.
4680 */
4681 typedef struct _WlzBasisFnTransform
4682 {
4683  WlzTransformType type; /*!< From WlzCoreDomain. */
4684  int linkcount; /*!< From WlzCoreDomain. */
4685  void *freeptr; /*!< From WlzCoreDomain. */
4686  WlzBasisFn *basisFn; /*!< The basis function for the
4687  transform. */
4689 
4690 /*!
4691 * \struct _WlzMeshNode
4692 * \ingroup WlzTransform
4693 * \brief Defines a node within a mesh transform.
4694 * Typedef: ::WlzMeshNode.
4695 */
4696 typedef struct _WlzMeshNode
4697 {
4698  unsigned int flags; /*!< Mesh node flags. */
4699  WlzDVertex2 position; /*!< Node position. */
4700  WlzDVertex2 displacement; /*!< Node displacement. */
4701 } WlzMeshNode;
4702 
4703 /*!
4704 * \struct _WlzMeshNode3D
4705 * \ingroup WlzTransform
4706 * \brief Defines a 3D node within a mesh transform.
4707 * added by J. Rao 10/09/2001
4708 */
4710 {
4711  unsigned int flags; /*!< Mesh node flags */
4712  WlzDVertex3 position; /*!< Node position */
4713  WlzDVertex3 displacement; /*!< Node displacement */
4714 };
4716 
4717 
4718 
4719 /*!
4720 * \struct _WlzMeshNode2D5
4721 * \ingroup WlzTransform
4722 * \brief Defines a 2D5 node within a mesh transform.
4723 * added by J. Rao 23/10/2001
4724 */
4725 typedef struct _WlzMeshNode2D5
4726 {
4727  unsigned int flags; /*!< Mesh node flags */
4728  WlzDVertex2 position; /*!< Node position */
4729  WlzDVertex3 displacement; /*!< Node displacement */
4730 } WlzMeshNode2D5;
4731 
4732 /*!
4733 * \struct _WlzMeshElem
4734 * \ingroup WlzTransform
4735 * \brief Defines an triangular mesh element within a mesh transform.
4736 * The nodes and neighbours are indexed such that:
4737 * Neighbour 0 shares nodes 1 and 2, neighbour 1 shares nodes 2
4738 * and 0 and neighbour 2 shares nodes 0 and 1. All the nodes
4739 * are stored in counter clockwise (CCW) order.
4740 * Typedef: ::WlzMeshElem.
4741 */
4742 typedef struct _WlzMeshElem
4743 {
4744  WlzMeshElemType type; /*!< Type of mesh element. */
4745  int idx; /*!< Index of this element. */
4746  unsigned int flags; /*!< Mesh element flags. */
4747  int nodes[3]; /*!< Node indicies (CCW order). */
4748  int neighbours[3]; /*!< Indicies of neighbouring
4749  elements. */
4750  double strainU[3]; /*!< Constants of strain energy
4751  function. */
4752  double strainA[3]; /*!< Constants of strain energy
4753  function. */
4754 } WlzMeshElem;
4755 
4756 /*!
4757 * \struct _WlzMeshElem3D
4758 * \ingroup WlzTransform
4759 * \brief Defines an tetrahedral mesh element within a mesh transform.
4760 * The nodes and neighbours are indexed such that:
4761 * Neighbour 0 shares surface ( nodes 0, 1 and 2), neighbour 1
4762 * shares surface (nodes 1, 3 and 2), neighbour 2 shares surface
4763 * (nodes 2, 3 and 0 ) and neighbour 3 shares surface (nodes 0, 3 and 1 )
4764 * All the nodes stored in the following sequence:
4765 * 0-1-2 formed a counter clockwise (CCW) order using the dircection of a
4766 * surface outwards from the tetrahedron. 0-2-3 are also stored in
4767 * counter clockwise (CCW) order.
4768 * added by J. Rao 10/09/2001
4769 *
4770 */
4771 typedef struct _WlzMeshElem3D
4772 {
4773  WlzMeshElemType type; /*!< Type of mesh element */
4774  int idx; /*!< Index of this element */
4775  unsigned int flags; /*!< Mesh element flags */
4776  int nodes[4]; /*!< Node indicies (CCW order) */
4777  int neighbours[4]; /*!< Indicies of neighbouring
4778  elements */
4779 } WlzMeshElem3D;
4780 
4781 /*!
4782 * \struct _WlzMeshTransform
4783 * \ingroup WlzTransform
4784 * \brief A mesh convex transform.
4785 * Typedef: ::WlzMeshElem.
4786 */
4787 typedef struct _WlzMeshTransform
4788 {
4789  WlzTransformType type; /*!< From WlzCoreDomain. */
4790  int linkcount; /*!< From WlzCoreDomain. */
4791  void *freeptr; /*!< From WlzCoreDomain. */
4792  int nElem; /*!< Number of elements. */
4793  int nNodes; /*!< Number of vertex nodes. */
4794  int maxElem; /*!< Space allocated for elements. */
4795  int maxNodes; /*!< Space allocated for vertex
4796  nodes. */
4797  WlzMeshElem *elements; /*!< Mesh elements. */
4798  WlzMeshNode *nodes; /*!< Mesh nodes. */
4800 
4801 
4802 #ifndef WLZ_EXT_BIND
4803 /*!
4804 * \struct _WlzMeshTransform3D
4805 * \ingroup WlzTransform
4806 * \brief Defines a mesh transform.
4807 * added by J. Rao 10/09/2001
4808 */
4809 typedef struct _WlzMeshTransform3D
4810 {
4811  WlzTransformType type; /*!< From the core domain. */
4812  int linkcount; /*!< From the core domain. */
4813  void *freeptr; /*!< From the core domain. */
4814  int nElem; /*!< Number of elements */
4815  int nNodes; /*!< Number of vertex nodes */
4816  int maxElem; /*!< Space allocated for elements */
4817  int maxNodes; /*!< Space allocated for vertex
4818  nodes */
4819  WlzMeshElem3D *elements; /*!< Mesh elements */
4820  WlzMeshNode3D *nodes; /*!< Mesh nodes */
4822 
4823 #endif /* WLZ_EXT_BIND */
4824 
4825 /*!
4826 * \struct _WlzMeshTransform2D5
4827 * \ingroup WlzTransform
4828 * \brief Defines a mesh transform.
4829 * added by J. Rao 23/10/2001
4830 */
4831 typedef struct _WlzMeshTransform2D5
4832 {
4833  WlzTransformType type; /*!< From the core domain. */
4834  int linkcount; /*!< From the core domain. */
4835  void *freeptr; /*!< From the core domain. */
4836  int nElem; /*!< Number of elements */
4837  int nNodes; /*!< Number of vertex nodes */
4838  int maxElem; /*!< Space allocated for elements */
4839  int maxNodes; /*!< Space allocated for vertex
4840  nodes */
4841  double zConst; /*!< z plane const */
4842  WlzMeshElem *elements; /*!< Mesh elements */
4843  WlzMeshNode2D5 *nodes; /*!< Mesh nodes */
4845 
4846 /************************************************************************
4847 * User weighting functions and callback data structures for ICP based
4848 * registration and matching.
4849 ************************************************************************/
4850 #ifndef WLZ_EXT_BIND
4851 /*!
4852 * \typedef WlzRegICPUsrWgtFn
4853 * \ingroup WlzTransform
4854 * \brief A pointer to a function called for user code weighting
4855 * of the matched vertices.
4856 */
4859  AlcKDTTree *,
4861  double, double, void *);
4862 
4863 /*!
4864 * \typedef WlzMatchICPWeightCbData
4865 * \ingroup WlzTransform
4866 * \brief A data structure for wieghting vertex matches within
4867 * WlzMatchICPWeightMatches().
4868 * Typedef: ::WlzMatchICPWeightCbData.
4869 */
4871 {
4872  WlzGMModel *tGM;
4873  WlzGMModel *sGM;
4875  double maxDisp;
4877 
4878 #endif /* WLZ_EXT_BIND */
4879 
4880 /************************************************************************
4881 * Sequential/local transformation workspace structure.
4882 ************************************************************************/
4883 /*!
4884 * \struct _WlzSeqParWSpace
4885 * \ingroup WlzValuesFilters
4886 * \brief
4887 * Typedef: ::WlzSeqParWSpace.
4888 */
4889 typedef struct _WlzSeqParWSpace
4890 {
4891  int **adrptr;
4892  int kdelta;
4893  int ldelta;
4894  int brdrsz;
4895 } WlzSeqParWSpace;
4896 
4897 /*!
4898 * \struct _Wlz1DConvMask
4899 * \ingroup WlzValuesFilters
4900 * \brief
4901 * Typedef: ::Wlz1DConvMask.
4902 */
4903 typedef struct _Wlz1DConvMask
4904 {
4908 } Wlz1DConvMask;
4909 
4910 /*!
4911 * \struct _WlzSepTransWSpace
4912 * \ingroup WlzValuesFilters
4913 * \brief
4914 * Typedef: ::WlzSepTransWSpace.
4915 */
4916 typedef struct _WlzSepTransWSpace
4917 {
4918  WlzPixelP inbuf;
4919  WlzPixelP outbuf;
4920  int len;
4923 
4924 /************************************************************************
4925 * Standard workspace structure for interval objects.
4926 ************************************************************************/
4927 /*!
4928 * \struct _WlzIntervalWSpace
4929 * \ingroup WlzAccess
4930 * \brief The standard workspace structure for interval objects.
4931 * Typedef: ::WlzIntervalWSpace.
4932 */
4933 typedef struct _WlzIntervalWSpace
4934 {
4935  WlzObject *objaddr; /*!< The current object. */
4936  int dmntype; /*!< Domain type. */
4937  int lineraster; /*!< Line scan direction as follows:
4938  <ul>
4939  <li>
4940  1 increasing rows.
4941  </li>
4942  <li>
4943  -1 decreasing rows.
4944  </li>
4945  </ul> */
4946  int colraster; /*!< Column scan direction as follows:
4947  <ul>
4948  <li>
4949  1 increasing columns.
4950  </li>
4951  <li>
4952  -1 decreasing columns.
4953  </li>
4954  </ul> */
4955  WlzIntervalDomain *intdmn; /*!< Pointer to interval structure. */
4956  WlzIntervalLine *intvln; /*!< Pointer to current line of
4957  intervals. */
4958  WlzInterval *intpos; /*!< Pointer to current interval -
4959  in the case of
4960  WLZ_INTERVALDOMAIN_RECT this
4961  is set up to point to the column
4962  bounds in the interval domain
4963  structure. */
4964  int colpos; /*!< Column position. */
4965  int colrmn; /*!< Columns remaining. */
4966  int linbot; /*!< First line. */
4967  int linpos; /*!< Line position. */
4968  int linrmn; /*!< Lines remaining. */
4969  int intrmn; /*!< Intervals remaining in line. */
4970  int lftpos; /*!< Left end of interval. */
4971  int rgtpos; /*!< Right end of interval. */
4972  int nwlpos; /*!< Non-zero if new line, counts
4973  line increment since the last
4974  interval. */
4975  int plnpos; /*!< Plane position, for 3D domains
4976  and value tables. */
4977  struct _WlzGreyWSpace *gryptr; /*!< Pointer to grey value table
4978  workspace. */
4980 
4981 /************************************************************************
4982 * Standard workspace for grey value table manipulations
4983 ************************************************************************/
4984 /*!
4985 * \struct _WlzGreyWSpace
4986 * \ingroup WlzAccess
4987 * \brief The standard workspace for grey value table manipulations.
4988 * Typedef: ::WlzGreyWSpace.
4989 */
4990 typedef struct _WlzGreyWSpace
4991 {
4992  int gvio; /*!< Grey value I/O switch:
4993  <ul>
4994  <li>
4995  0 = input to object only
4996  </li>
4997  <li>
4998  1 = output from object only
4999  </li>
5000  </ul>
5001  Only relevant if tranpl set, as all
5002  grey-tables are unpacked. */
5003  int tranpl; /*!< If non-zero, transplant values
5004  to a buffer whose address is
5005  u_grintptr. Direction of
5006  transplant in gvio. */
5007  WlzGreyType pixeltype; /*!< Grey type. */
5008  WlzObjectType gdomaintype; /*!< Value table type. */
5009  WlzValues gtable; /*!< Grey value table. */
5010  WlzValueLine *gline; /*!< Pointer to current grey table
5011  line pointer. */
5012  WlzTiledValueBuffer *tvb; /*!< Tiled values buffer. */
5013  WlzIntervalWSpace *intptr; /*!< Pointer to interval table
5014  workspace. */
5015  WlzGreyP u_grintptr; /*!< Pointer to interval grey table.
5016  Always points to lowest order
5017  column, whatever the value of
5018  raster. */
5019 } WlzGreyWSpace;
5020 
5021 
5022 /*!
5023 * \struct _WlzIterateWSpace
5024 * \ingroup WlzAccess
5025 * \brief A workspace structure for interval objects which allows
5026 * iteration through an object's pixels/voxels.
5027 * Typedef: ::WlzIterateWSpace.
5028 */
5029 typedef struct _WlzIterateWSpace
5030 {
5031  WlzObject *obj; /*!< The object being iterated
5032  through. */
5033  WlzObject *obj2D; /*!< Object for the current plane. */
5034  WlzIntervalWSpace *iWSp; /*!< Interval workspace for the current
5035  2D object. */
5036  WlzGreyWSpace *gWSp; /*!< Grey workspace for the current
5037  2D object. */
5038  WlzRasterDir dir; /*!< Scanning direction. */
5039  int grey; /*!< Non-zero if initialised for
5040  grey values. */
5041  int itvPos; /*!< Offset into the current
5042  interval. */
5043  int plnIdx; /*!< Offset into planes of a 3D object
5044  for the current plane. */
5045  int plnRmn; /*!< Number of planes remaining for
5046  the current 2D object when
5047  iterating through a 3D object. */
5048  WlzIVertex3 pos; /*!< Current position. */
5049  WlzGreyType gType; /*!< The current grey type. If
5050  WLZ_GREY_ERROR then the work space
5051  has not been initialised for grey
5052  data. */
5053  WlzGreyP gP; /*!< Pointer to current grey value
5054  This will be NULL if grey values
5055  are not appopriate, ie gType
5056  is WLZ_GREY_ERROR. */
5058 
5059 /*!
5060 * \struct _WlzGreyValueWSpace
5061 * \ingroup WlzAccess
5062 * \brief Workspace for random access grey value manipulations.
5063 * Typedef: ::WlzGreyValueWSpace.
5064 */
5065 typedef struct _WlzGreyValueWSpace
5066 {
5067  WlzObjectType objType; /*!< Type of object, either
5068  WLZ_2D_DOMAINOBJ or
5069  WLZ_3D_DOMAINOBJ. */
5070  WlzDomain domain; /*!< The object's domain. */
5071  WlzValues values; /*!< The object's values. */
5072  WlzObjectType gTabType; /*!< The grey table type. */
5073  WlzObjectType *gTabTypes3D; /*!< Cache for efficiency with 2D
5074  value types. Not used for
5075  tiled values. */
5076  WlzAffineTransform *invTrans; /*!< If the object is a WLZ_TRANS_OBJ
5077  then used to cache the inverse
5078  transform. */
5079  WlzIntervalDomain *iDom2D; /*!< Current/last plane or 2D object
5080  domain. */
5081  WlzValues values2D; /*!< Current/last plane or 2D object
5082  values. Not used for tiled
5083  values. */
5084  int plane; /*!< Current/last plane position. */
5085  WlzGreyType gType; /*!< Grey type. */
5086  WlzObjectType gTabType2D; /*!< Current/last plane or 2D grey
5087  table. Not used for tiled
5088  values. */
5089  WlzGreyV gBkd; /*!< Background grey value, always
5090  of gType. */
5091  WlzGreyP gPtr[8]; /*!< One, four or eight grey
5092  pointers. */
5093  WlzGreyV gVal[8]; /*!< One, four or eight grey
5094  values. */
5095  unsigned bkdFlag; /*!< Flag set if background used
5096  with a bitmask to indicate
5097  which values are background.
5098  Value is 0 if there are no
5099  background values. */
5101 
5102 /************************************************************************
5103 * File I/O flags
5104 ************************************************************************/
5105 /*!
5106 * \enum _WlzIOFlags
5107 * \ingroup WlzIO
5108 * \brief Flags for Woolz file I/O.
5109 */
5110 typedef enum _WlzIOFlags
5111 {
5112  WLZ_IOFLAGS_NONE = (0), /*!< No flags set. */
5113  WLZ_IOFLAGS_READ = (1), /*!< Read flag bit. */
5114  WLZ_IOFLAGS_WRITE = (1<<1) /*!< Write flag bit. */
5115 } WlzIOFlags;
5116 
5117 /************************************************************************
5118 * Transform callback functions
5119 ************************************************************************/
5120 
5121 /*!
5122 * \typedef WlzAffineTransformCbFn
5123 * \ingroup WlzTransform
5124 * \brief Callback function for the WlzAffineTransformCb()
5125 * which may be used for value interpolation of an
5126 * interval of destination values.
5127 *
5128 * The parameters are:
5129 * \arg cbData Callback data passed to WlzAffineTransformCb().
5130 * \arg gWSp Target grey workspace.
5131 * \arg gVWSp Source grey value workspace.
5132 * \arg invTr Affine transform from target to source.
5133 * \arg pln Plane of interval in destination.
5134 * \arg ln Line of interval in destination.
5135 */
5136 #ifndef WLZ_EXT_BIND
5137 typedef WlzErrorNum (*WlzAffineTransformCbFn)(void *cbData,
5138  struct _WlzGreyWSpace *gWSp,
5139  struct _WlzGreyValueWSpace *gVWSp,
5140  struct _WlzAffineTransform *invTr,
5141  int pln, int ln);
5142 #endif
5143 
5144 /************************************************************************
5145 * Finite Element and Warping structures.
5146 ************************************************************************/
5147 
5148 /*!
5149 * \enum _WlzElementType
5150 * \ingroup WlzTransform
5151 * \brief The types of elements in a finite element warp mesh.
5152 * Typedef: ::WlzElementType.
5153 */
5154 typedef enum _WlzElementType
5155 {
5156  WLZ_LINEAR_RECT = 11, /*!< Linear and rectangular. */
5157  WLZ_INCOMPRESSIBLE_RECT, /*!< Incompessible and rectangular. */
5158  WLZ_COMPRESSIBLE_RECT, /*!< Compressible and rectangular. */
5159  WLZ_LINEAR_TRI = 21, /*!< Linear and triangular. */
5160  WLZ_INCOMPRESSIBLE_TRI, /*!< Incompessible and triangular. */
5161  WLZ_COMPRESSIBLE_TRI /*!< Compressible and triangular. */
5162 } WlzElementType;
5163 
5164 
5165 #define WLZ_LINEAR 1
5166 #define WLZ_INCOMPRESSIBLE 2
5167 #define WLZ_COMPRESSIBLE 3
5168 
5169 #define WLZ_RECTANGULAR 1
5170 #define WLZ_TRIANGULAR 2
5171 
5172 /*!
5173 * \struct _WlzTElement
5174 * \ingroup WlzTransform
5175 * \brief Triangular finite element warping mesh element.
5176 * Typedef: ::WlzTElement.
5177 */
5178 typedef struct _WlzTElement
5179 {
5180  WlzElementType type; /*!< Type of element (linear, compressible,
5181  incompressible). */
5182  int n; /*!< Global element number. */
5183  int nodes[3]; /*!< Global node numbers - in anti-clockwise
5184  order! */
5185  float u[3]; /*!< E = u[0] if type linear. */
5186  float a[3]; /*!< \f$\mu\f$ = a[0] if type linear. */
5187 } WlzTElement;
5188 
5189 /*!
5190 * \struct _WlzRElement
5191 * \ingroup WlzTransform
5192 * \brief Rectangular finite element warping mesh element.
5193 * Typedef: ::WlzRElement.
5194 */
5195 typedef struct _WlzRElement
5196 {
5197  WlzElementType type; /*!< Type of element (linear, compressible,
5198  incompressible). */
5199  int n; /*!< Global element number. */
5200  int nodes[4]; /*!< Global node numbers - in anti-clockwise
5201  order! */
5202  float u[3]; /*!< E = u[0] if type linear. */
5203  float a[3]; /*!< \f$\mu\f$ = a[0] if type linear. */
5204 } WlzRElement;
5205 
5206 /*!
5207 * \struct _WlzWarpTrans
5208 * \ingroup WlzTransform
5209 * \brief Finite element warp transformation.
5210 * Typedef: ::WlzWarpTrans.
5211 */
5212 typedef struct _WlzWarpTrans
5213 {
5214  int type; /*!< From WlzCoreDomain. */
5215  int linkcount; /*!< From WlzCoreDomain. */
5216  int nelts; /*!< Number of elements */
5217  int nodes; /*!< Number of nodes. */
5218  WlzDVertex2 *ncoords; /*!< Array of nodal coordinates. */
5219  WlzTElement *eltlist; /*!< List of elements. */
5220  WlzDVertex2 *displacements; /*!< Array of nodal displacements. */
5221  float imdisp; /*!< Max displacement in warped image. */
5222  float iterdisp; /*!< Max displacement during last iteration. */
5223 } WlzWarpTrans;
5224 
5225 /************************************************************************
5226 * Feature matching structures for finite element warping.
5227 ************************************************************************/
5228 
5229 /*!
5230 * \enum _WlzMatchType
5231 * \ingroup WlzRegistration
5232 * \brief Finite element warping match types.
5233 * Typedef: ::WlzMatchType.
5234 */
5235 typedef enum _WlzMatchType
5236 {
5240 } WlzMatchType;
5241 
5242 #define WLZ_MAX_NODAL_DEGREE 20
5243 
5244 /*!
5245 * \struct _WlzFeatureVector
5246 * \ingroup WlzRegistration
5247 * \brief Finite element warping feature vector.
5248 * Typedef: ::WlzFeatureVector.
5249 */
5250 typedef struct _WlzFeatureVector
5251 {
5253  float magnitude;
5254  float mean1;
5255  float mean2;
5256  float std1;
5257  float std2;
5259 
5260 
5261 /*!
5262 * \struct _WlzFeatValueLine
5263 * \ingroup WlzRegistration
5264 * \brief A line of finite element warping feature vectors.
5265 * Typedef: ::WlzFeatValueLine.
5266 */
5267 typedef struct _WlzFeatValueLine
5268 {
5269  int vkol1; /*!< Left end. */
5270  int vlastkl; /*!< Right end. */
5271  WlzFeatureVector *values; /*!< Array of feature vector values. */
5273 
5274 
5275 /*!
5276 * \struct _WlzFeatValues
5277 * \ingroup WlzRegistration
5278 * \brief A ragged rectangular feature value table.
5279 * Typedef: ::WlzFeatValues.
5280 */
5281 typedef struct _WlzFeatValue
5282 {
5283  WlzObjectType type; /*!< From WlzCoreValues. */
5284  int linkcount; /*!< From WlzCoreValues. */
5285  void *freeptr; /*!< From WlzCoreValues. */
5286  WlzValues original_table; /*!< If non-NULL, the values table
5287  which owns the raw values we
5288  are using. */
5289  int line1; /*!< First line. */
5290  int lastln; /*!< Last line. */
5291  int kol1; /*!< First column. */
5292  int width; /*!< Width. */
5293  WlzFeatureVector backgrnd; /*!< Background value for feature
5294  vectors not in object. */
5295  WlzFeatValueLine *vtblines; /*!< Array of feature value table line
5296  structures. */
5297 } WlzFeatValues;
5298 
5299 
5300 /*!
5301 * \struct _WlzRectFeatValues
5302 * \ingroup WlzRegistration
5303 * \brief A rectangular feature value table.
5304 * Typedef: ::WlzRectFeatValues.
5305 */
5306 typedef struct _WlzRectFeatValues
5307 {
5308  WlzObjectType type; /*!< From WlzCoreValues. */
5309  int linkcount; /*!< From WlzCoreValues. */
5310  void *freeptr; /*!< From WlzCoreValues. */
5311  WlzValues original_table; /*!< If non-NULL, the values table
5312  which owns the raw values we
5313  are using. */
5314  int line1; /*!< First line. */
5315  int lastln; /*!< Last line. */
5316  int kol1; /*!< First column. */
5317  int width; /*!< Width. */
5318  WlzFeatureVector backgrnd; /*!< Background value for feature
5319  vectors not in object. */
5320  WlzFeatureVector *values; /*!< Contiguous array of feature
5321  vector values. */
5323 
5324 
5325 /*!
5326 * \struct _WlzFMatchPoint
5327 * \ingroup WlzRegistration
5328 * \brief Finite element warping feature match point.
5329 * Typedef: ::WlzFMatchPoint.
5330 */
5331 typedef struct _WlzFMatchPoint
5332 {
5333  WlzMatchType type; /*!< Match type. */
5334  int node; /*!< Node or element to which point
5335  attached. */
5336  WlzFVertex2 ptcoords; /*!< Coordinate of interesting
5337  point. */
5338  int elements[WLZ_MAX_NODAL_DEGREE]; /*!< Array of elements in
5339  which to search for point. */
5340  WlzFeatureVector *features; /*!< Pointer to features of point. */
5341 } WlzFMatchPoint;
5342 
5343 /*!
5344 * \struct _WlzFMatchObj
5345 * \ingroup WlzRegistration
5346 * \brief A finite element warping feature match, interesting points
5347 * object.
5348 * Typedef: ::WlzFMatchObj.
5349 */
5350 typedef struct _WlzFMatchObj
5351 {
5352  WlzObjectType type; /*!< From WlzCoreObject. */
5353  int linkcount; /*!< From WlzCoreObject. */
5354  int nopts; /*!< Number of interesting points. */
5355  WlzFMatchPoint *matchpts; /*!< Array of interesting points. */
5356 } WlzFMatchObj;
5357 
5358 /*!
5359 * \struct _Wlz3DWarpTrans
5360 * \ingroup WlzRegistration
5361 * \brief A plane-wise 3D finite element warping transform.
5362 * Typedef: ::Wlz3DWarpTrans.
5363 */
5364 typedef struct _Wlz3DWarpTrans
5365 {
5366  WlzObjectType type; /*!< From WlzCoreObject. */
5367  int linkcount; /*!< From WlzCoreObject. */
5368  WlzPlaneDomain *pdom; /*!< Plane domain. */
5369  WlzFMatchObj **intptdoms; /*!< Array of pointers to interesting
5370  point objects. */
5371  int iteration; /*!< Current iteration. */
5372  int currentplane; /*!< Current plane. */
5373  float maxdisp; /*!< Maximum displacement. */
5374  WlzPropertyList *plist; /*!< A list of the object's
5375  properties. */
5376  WlzObject *assoc; /*!< Associated object. */
5377 } Wlz3DWarpTrans;
5378 
5379 /*!
5380 * \enum _Wlz3DViewStructInitMask
5381 * \ingroup WlzTransform
5382 * \brief Mesh transform element flag bit masks.
5383 * Typedef: ::WlzMeshElemFlags.
5384 */
5386 {
5388  WLZ_3DVIEWSTRUCT_INIT_TRANS = (1), /*!< Initialised transform */
5389  WLZ_3DVIEWSTRUCT_INIT_BB = (1<<1), /*!< Initialised bounding box */
5390  WLZ_3DVIEWSTRUCT_INIT_LUT = (1<<2), /*!< Initialised look-up tables */
5391 #ifndef WLZ_EXT_BIND
5392  WLZ_3DVIEWSTRUCT_INIT_ALL = 0x7 /*!< Initialised all convenience mask */
5393 #else
5394  WLZ_3DVIEWSTRUCT_INIT_ALL = (7) /*!< Initialised all convenience mask */
5395 #endif
5397 
5398 /************************************************************************
5399 * 3D section structure.
5400 ************************************************************************/
5401 /*!
5402 * \struct _WlzThreeDViewStruct
5403 * \ingroup WlzSectionTransform
5404 * \brief Defines a planar section through a 3D volume.
5405 * Typedef: ::WlzThreeDViewStruct.
5406 */
5407 typedef struct _WlzThreeDViewStruct
5408 {
5409  WlzObjectType type; /*!< Identifies the 3D view data
5410  structure: WLZ_3D_VIEW_STRUCT. */
5411  int linkcount; /*!< Core. */
5412  void *freeptr; /*!< Core. */
5413  int initialised; /*!< Non zero if the 3D view structure
5414  has been initialized. */
5415  WlzDVertex3 fixed; /*!< Fixed point. */
5416  double theta; /*!< Angle of rotation about the z-axis
5417  (radians). */
5418  double phi; /*!< Angle between the viewing
5419  direction and the original
5420  z-axis (radians). */
5421  double zeta;
5422  double dist; /*!< Perpendicular distance from the
5423  fixed point to the view plane. */
5424  double scale; /*!< Overall scale parameter */
5425  double voxelSize[3]; /*!< Voxel rescaling if required */
5426  int voxelRescaleFlg; /*!< Voxel rescaling mode */
5427  WlzInterpolationType interp; /*!< use pixel interpolation */
5428  WlzThreeDViewMode view_mode; /*!< Determines the angle at which the
5429  section cut. */
5430  WlzDVertex3 up; /*!< Up vector. */
5431  WlzDVertex3 fixed_2; /*!< Second fixed point. */
5432  double fixed_line_angle; /*!< Angle of fixed line. */
5433  WlzObject *ref_obj;
5436  double *xp_to_x, *xp_to_y, *xp_to_z;
5437  double *yp_to_x, *yp_to_y, *yp_to_z;
5438 /* double **rotation;*/
5439  WlzAffineTransform *trans; /*!< Affine transform for given
5440  parameters. Could include the
5441  voxel size rescaling */
5443 
5444 /*!
5445 * \typedef WlzProjectIntMode
5446 * \ingroup WlzTransform
5447 * \brief 3D to 2D projection integration modes.
5448 */
5450 {
5451  WLZ_PROJECT_INT_MODE_NONE, /*!< No integration. */
5452  WLZ_PROJECT_INT_MODE_DOMAIN, /*!< Integration using constant
5453  density within a domain. */
5454  WLZ_PROJECT_INT_MODE_VALUES /*!< Integration using voxel value
5455  dependant density. */
5457 
5458 /*!
5459 * \enum _WlzKrigModelFnType
5460 * \ingroup WlzType
5461 * \brief Enumerated values for kriging variogram model functions. See
5462 * the functions for details.
5463 */
5465 {
5466  WLZ_KRIG_MODELFN_INVALID = 0, /*!< Invalid function, may be used
5467  to indicate an error. */
5468  WLZ_KRIG_MODELFN_NUGGET, /*!< Nugget model function, see
5469  WlzKrigModelFnNugget(). */
5470  WLZ_KRIG_MODELFN_LINEAR, /*!< Linear model function, see
5471  WlzKrigModelFnNugget(). */
5472  WLZ_KRIG_MODELFN_SPHERICAL, /*!< Spherical model function, see
5473  WlzKrigModelFnSpherical(). */
5474  WLZ_KRIG_MODELFN_EXPONENTIAL, /*!< Exponential model function, see
5475  WlzKrigModelFnExponential(). */
5476  WLZ_KRIG_MODELFN_GAUSSIAN, /*!< Gaussian model function, see
5477  WlzKrigModelFnGaussian(). */
5478  WLZ_KRIG_MODELFN_QUADRATIC /*!< Quadratic model function, see
5479  WlzKrigModelFnQuadratic(). */
5481 
5482 /*!
5483 * \struct _WlzKrigModelFn
5484 * \ingroup WlzType
5485 * \brief Parameters and function pointer for a kriging model function.
5486 */
5487 typedef struct _WlzKrigModelFn
5488 {
5489  WlzKrigModelFnType type; /*!< Kriging model function type. */
5490  double c0; /*!< Nugget (offset) parameter. */
5491  double c1; /*!< Sill (slope) parameter. */
5492  double a; /*!< Range parameter. */
5493 #ifdef WLZ_EXT_BIND
5494  void *fn;
5495 #else
5496  double (*fn)(struct _WlzKrigModelFn *, double h);
5497 #endif
5498  /*!< Function pointer. */
5499 } WlzKrigModelFn;
5500 
5501 
5502 #ifndef WLZ_EXT_BIND
5503 #ifdef __cplusplus
5504 }
5505 #endif /* __cplusplus */
5506 #endif /* WLZ_EXT_BIND */
5507 
5508 #endif /* !WLZ_TYPE_H Don't put anything after this line */
Definition: WlzType.h:607
Definition: WlzType.h:4870
Definition: WlzType.h:726
WlzObject * assoc
Definition: WlzType.h:2787
Definition: WlzType.h:2049
double phi
Definition: WlzType.h:5418
int nelts
Definition: WlzType.h:5216
Definition: WlzType.h:703
Definition: WlzType.h:887
int plnpos
Definition: WlzType.h:4975
struct _WlzConvolution WlzConvolution
WlzDomain domain
Definition: WlzType.h:2755
double cellSz
Definition: WlzType.h:4212
WlzGMEdgeT * edgeT
Definition: WlzType.h:1923
enum _WlzObjectType WlzObjectType
int idx
Definition: WlzType.h:1759
void * prop
Definition: WlzType.h:3786
Definition: WlzType.h:5474
Definition: WlzType.h:590
Definition: WlzType.h:1004
WlzFBox2 * f2
Definition: WlzType.h:1431
unsigned int flags
Definition: WlzType.h:3725
struct _WlzGMVertexG2I WlzGMVertexG2I
Definition: WlzType.h:706
struct _WlzBoundList * down
Definition: WlzType.h:3427
struct _WlzIVertex3 WlzIVertex3
double maxDisp
Definition: WlzType.h:4875
Definition: WlzType.h:1638
Finite element warping feature vector. Typedef: WlzFeatureVector.
Definition: WlzType.h:5250
Definition: WlzType.h:670
Definition: WlzType.h:520
_WlzProjectIntMode
Definition: WlzType.h:5449
int ileft
Definition: WlzType.h:2892
Definition: WlzType.h:211
unsigned char ** ubytes
Definition: WlzType.h:1475
WlzObjectType type
Definition: WlzType.h:3099
int idx
Definition: WlzType.h:2027
int rgtpos
Definition: WlzType.h:4971
Definition: WlzType.h:475
int zMin
Definition: WlzType.h:1383
A 3D convex hull with coordinate vertices and faces defined by vertex index triples. Typedef: WlzConvHullDomain3.
Definition: WlzType.h:3468
Definition: WlzType.h:2134
Definition: WlzType.h:1049
WlzDVertex3 pos
Definition: WlzType.h:3781
WlzDVertex2 position
Definition: WlzType.h:4699
struct _WlzCMeshElm2D5 * elm
Definition: WlzType.h:3837
_WlzLBTNodeClass2D
Classification of a 2D LBT node a face of a 3D LBT node bycl its connectivity with it&#39;s neighbouring ...
Definition: WlzType.h:2234
WlzObjectType type
Definition: WlzType.h:3544
int idx
Definition: WlzType.h:3893
int maxVx
Definition: WlzType.h:4496
long creationTime
Definition: WlzType.h:2646
int kdelta
Definition: WlzType.h:4892
WlzFVertex2 f2
Definition: WlzType.h:1321
unsigned int flags
Definition: WlzType.h:3914
Histograms are Woolz domains and not values as might be expected. Typedef: WlzHistogramDomain.
Definition: WlzType.h:3500
WlzIBox3 i3
Definition: WlzType.h:1449
struct _WlzCMeshEdgU3D * edu
Definition: WlzType.h:3782
struct _WlzCMeshCellElm2D * next
Definition: WlzType.h:4069
Definition: WlzType.h:860
Definition: WlzType.h:210
struct _WlzCompoundArray WlzCompoundArray
A single interval. Typedef: WlzInterval.
Definition: WlzType.h:2890
A 2D space domain convolution mask. To reduce computational cost at the expense of data storage the c...
Definition: WlzType.h:3583
struct _WlzCMeshCellElm2D5 WlzCMeshCellElm2D5
Definition: WlzType.h:245
struct _WlzCMeshNod2D5 * nod
Definition: WlzType.h:3830
int brdrsz
Definition: WlzType.h:4894
_WlzHistFeature
Features of histograms. Typedef: WlzHistFeature.
Definition: WlzType.h:3524
int lastln
Definition: WlzType.h:2858
struct _WlzCMeshCell2D5 * cell
Definition: WlzType.h:4086
Definition: WlzType.h:5281
Definition: WlzType.h:773
void * freeptr
Definition: WlzType.h:2575
struct _WlzFMatchObj WlzFMatchObj
float yMax
Definition: WlzType.h:1370
Defines a node within a mesh transform. Typedef: WlzMeshNode.
Definition: WlzType.h:4696
unsigned int numElm
Definition: WlzType.h:2062
struct _WlzAffineTransformPrim WlzAffineTransformPrim
Definition: WlzType.h:1180
WlzBasisEvalFn evalFn
Definition: WlzType.h:4520
Definition: WlzType.h:388
WlzDVertex2 displacement
Definition: WlzType.h:4700
Definition: WlzType.h:266
struct _WlzCMeshNod3D ** n3
Definition: WlzType.h:4311
int valid
Definition: WlzType.h:2989
Definition: WlzType.h:596
float imdisp
Definition: WlzType.h:5221
int tranpl
Definition: WlzType.h:5003
struct _WlzGMDiskT * next
Definition: WlzType.h:1857
Definition: WlzType.h:1586
The position of a point in 3D integer space. Typedef: WlzGMVertexG3I.
Definition: WlzType.h:1742
Definition: WlzType.h:1105
double * xp_to_z
Definition: WlzType.h:5436
WlzDVertex3 vtx
Definition: WlzType.h:1761
enum _WlzRGBAColorChannel WlzRGBAColorChannel
Definition: WlzType.h:3623
int line1
Definition: WlzType.h:2857
WlzDVertex2 * d2
Definition: WlzType.h:1304
enum _WlzSampleFn WlzSampleFn
union _WlzGreyV WlzGreyV
WlzCMeshCellElm2D5 * freeCE
Definition: WlzType.h:4195
_WlzEMAPPropertyType
Sub types of EMAP properties Typedef: WlzEMAPPropertyType.
Definition: WlzType.h:495
enum _WlzRCCClass WlzRCCClass
The resources used by a model. Typedef: WlzGMModelR.
Definition: WlzType.h:2077
WlzObjectType type
Definition: WlzType.h:2372
struct _WlzLVertex3 WlzLVertex3
Definition: WlzType.h:242
struct _WlzGMCbEntry WlzGMCbEntry
Definition: WlzType.h:876
void * freeptr
Definition: WlzType.h:2703
Definition: WlzType.h:470
WlzGMResource vertexG
Definition: WlzType.h:2085
Definition: WlzType.h:621
void * freeptr
Definition: WlzType.h:3353
WlzGMVertexG2D * vg2D
Definition: WlzType.h:1794
WlzValueLine * vtblines
Definition: WlzType.h:3023
WlzPixelV bckgrnd
Definition: WlzType.h:3021
int linkcount
Definition: WlzType.h:3545
Definition: WlzType.h:740
WlzFVertex3 * f3
Definition: WlzType.h:1307
enum _WlzRGBAColorSpace WlzRGBAColorSpace
Definition: WlzType.h:1150
int nElem
Definition: WlzType.h:4792
struct _WlzGMShellG2D WlzGMShellG2D
struct _WlzCMeshCellElm2D5 * next
Definition: WlzType.h:4087
int maxvertices
Definition: WlzType.h:3377
Definition: WlzType.h:602
WlzLVertex3 * l3
Definition: WlzType.h:1306
int idx
Definition: WlzType.h:1833
WlzDVertex2 nrm
Definition: WlzType.h:1733
WlzObjectType type
Definition: WlzType.h:5283
WlzPixelV bckgrnd
Definition: WlzType.h:3047
WlzDVertex3 d3
Definition: WlzType.h:1326
Definition: WlzType.h:863
Definition: WlzType.h:260
Definition: WlzType.h:2433
Definition: WlzType.h:557
struct _WlzCMeshNod3D * nod
Definition: WlzType.h:3848
struct _WlzLBTDomain2D * l2
Definition: WlzType.h:2524
Definition: WlzType.h:1103
Definition: WlzType.h:988
WlzObjectType type
Definition: WlzType.h:3417
_WlzScalarFeatureType
Scalar features of objects.
Definition: WlzType.h:1137
Dynamic interval pool, for building interval domains. Typedef: WlzDynItvPool.
Definition: WlzType.h:2902
struct _WlzGMVertexT * next
Definition: WlzType.h:1814
_WlzGreyTableType
Woolz pixel/voxel value table types.
Definition: WlzType.h:156
Definition: WlzType.h:198
WlzGMShellG3I * sg3I
Definition: WlzType.h:2013
enum _WlzThresholdType WlzThresholdType
A node of a 2D5 mesh with a 3D position but 2D connectivity. Typedef: WlzCMeshNod2D5.
Definition: WlzType.h:3755
Definition: WlzType.h:1003
A 2D linear binary tree node for spatial domain representation. Typedef: WlzLBTNode2D.
Definition: WlzType.h:2332
struct _WlzBoundList * b
Definition: WlzType.h:2516
WlzIVertex2 * vtx
Definition: WlzType.h:3380
void * v
Definition: WlzType.h:1300
WlzMatchType type
Definition: WlzType.h:5333
WlzGreyP gP
Definition: WlzType.h:5053
Definition: WlzType.h:574
Definition: WlzType.h:691
Definition: WlzType.h:990
Definition: WlzType.h:235
WlzObject * objaddr
Definition: WlzType.h:4935
WlzDVertex3 displacement
Definition: WlzType.h:4729
WlzGreyP values
Definition: WlzType.h:3049
WlzObjectType type
Definition: WlzType.h:2852
WlzGMElemType type
Definition: WlzType.h:1729
struct _WlzObject WlzObject
int vtY
Definition: WlzType.h:1262
double cellSz
Definition: WlzType.h:4192
double(* WlzBasisEvalFn)(void *, double)
An alternative basis function evaluation function that may may be called.
Definition: WlzType.h:4467
Definition: WlzType.h:924
struct _WlzIBox3 WlzIBox3
Definition: WlzType.h:206
int idx
Definition: WlzType.h:1899
Definition: WlzType.h:1029
Definition: WlzType.h:4450
struct _WlzGMVertexG2N * vertexG2N
Definition: WlzType.h:1655
_WlzThreeDStdViews
Standard 3D views. Typedef: WlzThreeDStdViews.
Definition: WlzType.h:1027
WlzIBox2 bBox
Definition: WlzType.h:1955
enum _WlzCMeshNodFlags WlzCMeshNodFlags
int idx
Definition: WlzType.h:1812
struct _WlzGMLoopT * prev
Definition: WlzType.h:1918
double a
Definition: WlzType.h:5492
WlzGMVertexG3N * vg3N
Definition: WlzType.h:1798
int linkcount
Definition: WlzType.h:3586
void * freeptr
Definition: WlzType.h:3138
int linkcount
Definition: WlzType.h:2955
Definition: WlzType.h:719
double maxSqEdgLen
Definition: WlzType.h:4389
#define EMAP_PROPERTY_MODELNAME_LENGTH
Maximum length of the model name in an EMAP property.
Definition: WlzType.h:2585
struct _WlzGMEdgeT * rad
Definition: WlzType.h:1879
int nScatter
Definition: WlzType.h:4874
enum _WlzPolyFillMode WlzPolyFillMode
enum _WlzGMCbReason WlzGMCbReason
int vtY
Definition: WlzType.h:1211
double * dbp
Definition: WlzType.h:1472
A resource vector (extensible array) used for allocating geometric modeling elements. Typedef: WlzGMResource.
Definition: WlzType.h:2060
struct _WlzGMVertexG3I WlzGMVertexG3I
int idxCnt
Definition: WlzType.h:2154
enum _WlzGMModelType WlzGMModelType
Definition: WlzType.h:4445
int vlastkl
Definition: WlzType.h:2967
Definition: WlzType.h:4439
long long WlzLong
A 64 bit integer.
Definition: WlzType.h:73
_WlzCMeshElmFlags
Conforming mesh element flags. These are bit masks which are used in a conforming mesh&#39;s elements fla...
Definition: WlzType.h:3671
struct _WlzCMeshElm2D * elm
Definition: WlzType.h:4067
The topological properties of a point in space. The ordering of the linked list of vertex topology el...
Definition: WlzType.h:1809
Definition: WlzType.h:991
_WlzDistanceType
Distance metrics in a 2D or 3D digital space. Typedef: WlzDistanceType.
Definition: WlzType.h:717
struct _WlzCMeshCellElm2D * cElm
Definition: WlzType.h:4123
struct _WlzGMEdgeT * next
Definition: WlzType.h:1876
struct _WlzVoxelValues * vox
Definition: WlzType.h:2494
int xMin
Definition: WlzType.h:1381
The parameters , and with which define a recursive filter: Typedef: WlzRsvFilter.
Definition: WlzType.h:3652
WlzGMResIdx face
Definition: WlzType.h:2173
int idx
Definition: WlzType.h:3777
_WlzMarkerType
Basic markers. Typedef: WlzMarkerType.
Definition: WlzType.h:1551
The position of a point in 2D double precision space. Typedef: WlzGMVertexG2D.
Definition: WlzType.h:1708
Definition: WlzType.h:4438
WlzGMResIdx loopT
Definition: WlzType.h:2174
int len
Definition: WlzType.h:4920
WlzRsvFilterName name
Definition: WlzType.h:3654
Definition: WlzType.h:5472
struct _Wlz1DConvMask Wlz1DConvMask
int idx
Definition: WlzType.h:1778
WlzGMVertex ** vertexHT
Definition: WlzType.h:2115
Definition: WlzType.h:271
struct _WlzConvHullDomain3 * cvh3
Definition: WlzType.h:2532
Definition: WlzType.h:1590
void * freeptr
Definition: WlzType.h:4813
struct _WlzGMDiskT * diskT
Definition: WlzType.h:1834
int vkol1
Definition: WlzType.h:2966
WlzDomain * domains
Definition: WlzType.h:2863
WlzUInt rgbv
Definition: WlzType.h:1493
int linkcount
Definition: WlzType.h:2447
struct _WlzPlaneDomain WlzPlaneDomain
struct _WlzTElement WlzTElement
float vtX
Definition: WlzType.h:1224
Definition: WlzType.h:810
Definition: WlzType.h:848
WlzGMResIdx diskT
Definition: WlzType.h:2170
WlzLVertex3 l3
Definition: WlzType.h:1324
struct _WlzCMeshNod2D * nod
Definition: WlzType.h:4120
WlzGMLoopT * loopT
Definition: WlzType.h:1940
int nFaces
Definition: WlzType.h:3478
WlzIVertex2 nCells
Definition: WlzType.h:4169
int ln
Definition: WlzType.h:2981
double(* WlzRegICPUsrWgtFn)(WlzVertexType, WlzAffineTransform *, AlcKDTTree *, WlzVertexP, WlzVertexP, WlzVertex, WlzVertex, double, double, void *)
A pointer to a function called for user code weighting of the matched vertices.
Definition: WlzType.h:4857
void * freeptr
Definition: WlzType.h:5310
WlzObject * ref_obj
Definition: WlzType.h:5433
int plnIdx
Definition: WlzType.h:5043
int linkcount
Definition: WlzType.h:4643
char * name
Definition: WlzType.h:2704
Definition: WlzType.h:3629
WlzGMResIdx vertexG
Definition: WlzType.h:2169
_WlzGMElemTypeFlags
Bit masks for the types of geometric model elements. Typedef: WlzGMElemTypeFlags. ...
Definition: WlzType.h:1628
Definition: WlzType.h:93
struct _WlzRect WlzIRect
void * v
Definition: WlzType.h:3865
Definition: WlzType.h:5468
void * freeptr
Definition: WlzType.h:4330
struct _WlzGMVertexG2I * vertexG2I
Definition: WlzType.h:1653
A plane-wise 3D finite element warping transform. Typedef: Wlz3DWarpTrans.
Definition: WlzType.h:5364
WlzCMeshCbFn fn
Definition: WlzType.h:4240
A mesh convex transform. Typedef: WlzMeshElem.
Definition: WlzType.h:4787
The standard workspace structure for interval objects. Typedef: WlzIntervalWSpace.
Definition: WlzType.h:4933
Definition: WlzType.h:5237
double c
Definition: WlzType.h:3657
double yMax
Definition: WlzType.h:1355
Definition: WlzType.h:497
WlzErrorNum(* WlzCMeshCbFn)(void *, void *, void *)
A pointer to a function called to make mesh entity properties. Parameters passed are: mesh...
Definition: WlzType.h:4228
WlzObjectType type
Definition: WlzType.h:2558
Definition: WlzType.h:1553
int idx
Definition: WlzType.h:3912
WlzObjectType otype
Definition: WlzType.h:2780
Definition: WlzType.h:855
General purpose data structure for maintaining blocks of some data type. Useful for efficient memory ...
Definition: AlcType.h:104
Definition: WlzType.h:1183
A directed face within the parent simplex. Typedef: WlzCMeshFace.
Definition: WlzType.h:3877
enum _WlzMatchType WlzMatchType
int yMax
Definition: WlzType.h:1385
struct _WlzIBox2 WlzIBox2
int linkcount
Definition: WlzType.h:3374
AlcVector * vec
Definition: WlzType.h:2067
Definition: WlzType.h:1108
struct _WlzRectValues * r
Definition: WlzType.h:2491
Definition: WlzType.h:5454
struct _WlzCMeshEdgU2D5 * nnxt
Definition: WlzType.h:3835
Definition: WlzType.h:922
int pl
Definition: WlzType.h:2979
Definition: WlzType.h:452
Definition: WlzType.h:310
union _WlzValues WlzValues
Definition: WlzType.h:4437
int plane
Definition: WlzType.h:5084
WlzVertexP sVertices
Definition: WlzType.h:4504
int linkcount
Definition: WlzType.h:3395
WlzValues values
Definition: WlzType.h:2758
double cellSz
Definition: WlzType.h:4172
Definition: WlzType.h:683
int width
Definition: WlzType.h:5292
Definition: WlzType.h:2321
Definition: WlzType.h:689
2D double precision floating point axis aligned rectangle (box). Typedef: WlzDBox2.
Definition: WlzType.h:1350
void ** v
Definition: WlzType.h:4307
struct _WlzGMCbEntry * next
Definition: WlzType.h:2138
Definition: WlzType.h:478
struct _WlzLBTNode2D WlzLBTNode2D
int kol1
Definition: WlzType.h:2859
The geometric properties of a shell in 3D double precision. space. Typedef: WlzGMShellG3D.
Definition: WlzType.h:1994
union _WlzGMShellGU WlzGMShellGU
WlzDVertex2 position
Definition: WlzType.h:4728
A complete list of a set of boundaries which is encoded in tree form.
Definition: WlzType.h:3415
Definition: WlzType.h:249
struct _WlzIndexedValues WlzIndexedValues
Definition: WlzType.h:1635
struct _WlzPoints * pts
Definition: WlzType.h:2529
int linkcount
Definition: WlzType.h:2702
WlzPixelV il
Definition: WlzType.h:1531
WlzGreyP values
Definition: WlzType.h:2968
struct _WlzCoreProperty WlzCoreProperty
WlzGMVertexG3D * vg3D
Definition: WlzType.h:1797
WlzCMesh2D * m2
Definition: WlzType.h:4413
Definition: WlzType.h:3626
struct _WlzGMEdgeT * parent
Definition: WlzType.h:1819
void * freeptr
Definition: WlzType.h:3546
Definition: WlzType.h:277
Resource look up tables for all geometric elements in a model. Typedef: WlzGMResIdxTb.
Definition: WlzType.h:2165
struct _WlzContour WlzContour
Definition: WlzType.h:1615
int divscale
Definition: WlzType.h:3590
Definition: WlzType.h:752
WlzFVertex3 f3
Definition: WlzType.h:1325
struct _WlzRectFeatValues WlzRectFeatValues
struct _WlzFMatchPoint WlzFMatchPoint
Definition: WlzType.h:168
Definition: WlzType.h:2048
A 2D CCW directed (half) edge within the parent simplex. Typedef: WlzCMeshEdgU2D. ...
Definition: WlzType.h:3810
struct _WlzRectValues WlzRectValues
void * v
Definition: WlzType.h:4051
Definition: WlzType.h:4431
_WlzMeshGenMethod
Mesh generation methods. Typedef: WlzMeshGenMethod.
Definition: WlzType.h:666
size_t numTiles
Definition: WlzType.h:3265
Definition: WlzType.h:723
struct _WlzHistogramDomain WlzHistogramDomain
Definition: WlzType.h:3123
Definition: WlzType.h:466
WlzDVertex3 * d3
Definition: WlzType.h:1308
Definition: WlzType.h:749
struct _WlzCMeshEdgU3D WlzCMeshEdgU3D
WlzObjectType type
Definition: WlzType.h:3585
int linkcount
Definition: WlzType.h:3449
WlzVertexP basis
Definition: WlzType.h:4499
int linkcount
Definition: WlzType.h:2473
Definition: WlzType.h:745
int maxElem
Definition: WlzType.h:4816
WlzTransformType type
Definition: WlzType.h:4789
int lastln
Definition: WlzType.h:5315
WlzRasterDir dir
Definition: WlzType.h:5038
int lineraster
Definition: WlzType.h:4937
WlzObjectType type
Definition: WlzType.h:3311
short shv
Definition: WlzType.h:1489
WlzGreyP tiles
Definition: WlzType.h:3274
int yMin
Definition: WlzType.h:1338
double origin
Definition: WlzType.h:3508
A 2D linear binary tree spatial domain representation. Typedef: WlzLBTDomain2D.
Definition: WlzType.h:2370
Definition: WlzType.h:451
WlzObjectType type
Definition: WlzType.h:3470
The position of a point in 2D double precision space and the normal vector at that point...
Definition: WlzType.h:1727
struct _WlzCMeshNod3D * next
Definition: WlzType.h:3785
struct _WlzCMeshNod2D5 * nod
Definition: WlzType.h:4136
Definition: WlzType.h:3696
int linkcount
Definition: WlzType.h:2559
Definition: WlzType.h:859
2D integer vertex. Typedef: WlzIVertex2.
Definition: WlzType.h:1209
WlzGMElemType type
Definition: WlzType.h:1811
int idx
Definition: WlzType.h:1711
WlzPixelP outbuf
Definition: WlzType.h:4919
Definition: WlzType.h:640
Definition: WlzType.h:971
int idx
Definition: WlzType.h:1953
int idx
Definition: WlzType.h:3737
int grey
Definition: WlzType.h:5039
A resource index look up table (WlzGMResIdxTb). The array of indicies is a look up table from the ind...
Definition: WlzType.h:2152
struct _WlzIndexedValues * x
Definition: WlzType.h:2498
WlzObject ** o
Definition: WlzType.h:2783
WlzGMModel * sGM
Definition: WlzType.h:4873
WlzDVertex3 fixed
Definition: WlzType.h:5415
int mode
Definition: WlzType.h:2991
int vertexHTSz
Definition: WlzType.h:2114
struct _WlzCMeshElm3D * e3
Definition: WlzType.h:4296
Definition: WlzType.h:672
Definition: WlzType.h:85
struct _WlzCMeshNod2D5 * next
Definition: WlzType.h:3765
float mean1
Definition: WlzType.h:5254
WlzValues original_table
Definition: WlzType.h:3102
enum _WlzLBTNodeClass2D WlzLBTNodeClass2D
int nPoints
Definition: WlzType.h:3354
struct _WlzFVertex3 WlzFVertex3
2D integer axis aligned rectangle (box). Typedef: WlzIBox2.
Definition: WlzType.h:1335
double yMin
Definition: WlzType.h:1353
int offset
Definition: WlzType.h:2906
_WlzThreeDViewMode
3D viewing modes which determine the angle at which the plane is cut through a 3D volume...
Definition: WlzType.h:1042
WlzValues original_table
Definition: WlzType.h:3040
struct _WlzPolygonDomain WlzPolygonDomain
int yMax
Definition: WlzType.h:1340
Definition: WlzType.h:1032
Definition: WlzType.h:1606
Definition: WlzType.h:3703
WlzElementType type
Definition: WlzType.h:5197
enum _WlzKrigModelFnType WlzKrigModelFnType
int nVertices
Definition: WlzType.h:3451
WlzGMVertexGU geo
Definition: WlzType.h:1838
int nVtx
Definition: WlzType.h:4494
WlzGreyType gType
Definition: WlzType.h:5049
struct _WlzCMeshEdgU2D5 * opp
Definition: WlzType.h:3834
3D single precision floating point axis aligned cubiod (box). Typedef: WlzFBox3.
Definition: WlzType.h:1411
int linkcount
Definition: WlzType.h:5215
WlzGMResource diskT
Definition: WlzType.h:2086
A line of intervals. Typedef: WlzIntervalLine.
Definition: WlzType.h:2878
WlzIntervalWSpace * iWSp
Definition: WlzType.h:5034
int maxPoints
Definition: WlzType.h:3355
Definition: WlzType.h:3611
Definition: WlzType.h:1109
void * freeptr
Definition: WlzType.h:3039
Definition: WlzType.h:363
int gvio
Definition: WlzType.h:4992
double vtZ
Definition: WlzType.h:1289
int maxFaces
Definition: WlzType.h:3479
struct _WlzEMAPProperty WlzEMAPProperty
struct _Wlz3DWarpTrans Wlz3DWarpTrans
double c1
Definition: WlzType.h:5491
int idx
Definition: WlzType.h:4032
WlzGMModelType type
Definition: WlzType.h:2107
struct _WlzEMAPProperty * emap
Definition: WlzType.h:2718
int idx
Definition: WlzType.h:4774
enum _WlzIOFlags WlzIOFlags
struct _WlzLUTDomain WlzLUTDomain
unsigned char WlzUByte
An eight bit unsigned integer.
Definition: WlzType.h:56
Definition: WlzType.h:262
WlzGMResource shellG
Definition: WlzType.h:2092
double vtX
Definition: WlzType.h:1236
Definition: WlzType.h:654
A single precision floating point rectangle domain. Side from (l[0],k[0]) to (l[1],k[1]) is a long side. The vertices are cyclic. Typedef: WlzFRect.
Definition: WlzType.h:3561
WlzTransformType type
Definition: WlzType.h:4626
WlzIVertex2 * i2
Definition: WlzType.h:1301
struct _WlzCMeshFace * face
Definition: WlzType.h:3854
struct _WlzCMeshElm2D ** e2d5
Definition: WlzType.h:4313
struct _WlzCMeshCell3D * cell
Definition: WlzType.h:4104
size_t lo
Definition: WlzType.h:2986
WlzCMeshCellGrid2D cGrid
Definition: WlzType.h:4340
Defines a planar section through a 3D volume. Typedef: WlzThreeDViewStruct.
Definition: WlzType.h:5407
WlzDBox2 bBox
Definition: WlzType.h:1970
Definition: WlzType.h:237
double maxSqEdgLen
Definition: WlzType.h:4360
_WlzRGBAColorChannel
Colour channel selection. Typedef: WlzRGBAColorChannel.
Definition: WlzType.h:980
Definition: WlzType.h:163
unsigned flags
Definition: WlzType.h:2353
int idx
Definition: WlzType.h:1915
Definition: WlzType.h:1631
_WlzElementType
The types of elements in a finite element warp mesh. Typedef: WlzElementType.
Definition: WlzType.h:5154
An array of either 2D or 3D points which may have either integral of floating point values...
Definition: WlzType.h:3349
WlzLBTNode2D * nodes
Definition: WlzType.h:2386
WlzDomain domain
Definition: WlzType.h:5070
WlzObjectType type
Definition: WlzType.h:2804
int width
Definition: WlzType.h:5317
Definition: WlzType.h:164
Definition: WlzType.h:5476
Definition: WlzType.h:684
struct _WlzBasisFn WlzBasisFn
Data structure which is used to link lists of 3D elements with the grid cells that they intersect...
Definition: WlzType.h:4101
enum _WlzThreeDStdViews WlzThreeDStdViews
float std1
Definition: WlzType.h:5256
WlzVertexP vertices
Definition: WlzType.h:4500
Definition: WlzType.h:1588
Definition: WlzType.h:5113
Definition: WlzType.h:1601
WlzVertex centroid
Definition: WlzType.h:3457
WlzGreyType type
Definition: WlzType.h:1506
_WlzFnType
The types of function. Typedef: WlzFnType.
Definition: WlzType.h:4428
union _WlzBox WlzBox
float maxdisp
Definition: WlzType.h:5373
Defines an tetrahedral mesh element within a mesh transform. The nodes and neighbours are indexed suc...
Definition: WlzType.h:4771
struct _WlzThreshCbStr WlzThreshCbStr
WlzGreyType pixeltype
Definition: WlzType.h:5007
Definition: WlzType.h:3680
void * freeptr
Definition: WlzType.h:2854
Definition: WlzType.h:202
struct _WlzCMeshElm2D * elm
Definition: WlzType.h:3819
Rectangular finite element warping mesh element. Typedef: WlzRElement.
Definition: WlzType.h:5195
int linkcount
Definition: WlzType.h:5284
int linkcount
Definition: WlzType.h:3222
Definition: WlzType.h:1016
void * freeptr
Definition: WlzType.h:3223
Definition: WlzType.h:3609
Definition: WlzType.h:4436
void * freeptr
Definition: WlzType.h:4388
void * freeptr
Definition: WlzType.h:2448
Definition: WlzType.h:968
WlzTransformType type
Definition: WlzType.h:4683
_WlzMatchType
Finite element warping match types. Typedef: WlzMatchType.
Definition: WlzType.h:5235
WlzGMShellGU geo
Definition: WlzType.h:2031
struct _WlzCMeshNod2D * nod
Definition: WlzType.h:3812
WlzVertexP points
Definition: WlzType.h:3358
A single 3D tetrahedral mesh element. Typedef: WlzCMeshElm3D.
Definition: WlzType.h:4030
int linkcount
Definition: WlzType.h:3076
int linkcount
Definition: WlzType.h:5411
WlzObjectType type
Definition: WlzType.h:2701
Definition: WlzType.h:1554
int fd
Definition: WlzType.h:3269
struct _WlzGMVertexT * prev
Definition: WlzType.h:1815
int nBasis
Definition: WlzType.h:4492
struct _WlzGMLoopT * opp
Definition: WlzType.h:1920
int voxelRescaleFlg
Definition: WlzType.h:5426
WlzTransformType type
Definition: WlzType.h:4642
WlzGMModelR res
Definition: WlzType.h:2116
Definition: WlzType.h:5160
union _WlzCMeshNodP WlzCMeshNodP
Definition: WlzType.h:3527
void * prop
Definition: WlzType.h:2577
float xMax
Definition: WlzType.h:1416
Definition: WlzType.h:797
Definition: WlzType.h:743
struct _WlzCMeshNod2D * n2
Definition: WlzType.h:4291
Definition: WlzType.h:230
int linkcount
Definition: WlzType.h:2805
float yMin
Definition: WlzType.h:1368
double ** distMap
Definition: WlzType.h:4539
Definition: WlzType.h:398
Definition: WlzType.h:246
struct _WlzHistogramDomain * hist
Definition: WlzType.h:2517
double p0
Definition: WlzType.h:1535
Definition: WlzType.h:604
WlzPropertyList * plist
Definition: WlzType.h:2785
WlzFeatureVector backgrnd
Definition: WlzType.h:5318
struct _WlzBasisFnTransform WlzBasisFnTransform
int * cv
Definition: WlzType.h:3588
A typed grey value. Typedef: WlzPixelV.
Definition: WlzType.h:1504
void * data
Definition: WlzType.h:4244
int * mask_values
Definition: WlzType.h:4906
Definition: WlzType.h:600
int idx
Definition: WlzType.h:1730
int kol1
Definition: WlzType.h:3231
Definition: WlzType.h:858
Definition: WlzType.h:218
A core node/element structure containing the initial fields common to all node and element structures...
Definition: WlzType.h:3722
struct _WlzCMeshCellGrid2D5 WlzCMeshCellGrid2D5
int kol1
Definition: WlzType.h:3019
int lastpl
Definition: WlzType.h:3236
Definition: WlzType.h:316
WlzObjectType gdomaintype
Definition: WlzType.h:5008
WlzGreyType gtype
Definition: WlzType.h:2993
Definition: WlzType.h:282
WlzGMEdgeT * edgeT
Definition: WlzType.h:1900
A union of grey values. Typedef: WlzGreyV.
Definition: WlzType.h:1484
A line of finite element warping feature vectors. Typedef: WlzFeatValueLine.
Definition: WlzType.h:5267
struct _WlzBoundList * next
Definition: WlzType.h:3423
int * dim
Definition: WlzType.h:3319
struct _WlzPropertyList WlzPropertyList
WlzDBox3 bBox
Definition: WlzType.h:4396
Definition: WlzType.h:781
A union of pointers to the geometric properties of a point. Typedef: WlzGMVertexGU.
Definition: WlzType.h:1790
Definition: WlzType.h:1611
Definition: WlzType.h:5161
A 3D domain defining an arbitrary region of space in 3D. The 3D plane domain composed of plane-wise a...
Definition: WlzType.h:2850
Definition: WlzType.h:1126
struct _WlzGMVertexG3I * vertexG3I
Definition: WlzType.h:1656
int kol1
Definition: WlzType.h:3083
WlzDVertex3 org
Definition: WlzType.h:2212
WlzDVertex3 fixed_2
Definition: WlzType.h:5431
A typed grey value pointer. Typedef: WlzPixelP.
Definition: WlzType.h:1516
struct _WlzGMCore * core
Definition: WlzType.h:1651
int inv
Definition: WlzType.h:1488
struct _WlzWarpTrans WlzWarpTrans
WlzPixelP pix
Definition: WlzType.h:4567
WlzVertexType vtxType
Definition: WlzType.h:3482
WlzVertexType vtxType
Definition: WlzType.h:3455
Definition: WlzType.h:951
struct _WlzEmptyTransform WlzEmptyTransform
WlzFnType type
Definition: WlzType.h:4490
int linkcount
Definition: WlzType.h:2634
WlzGMElemType type
Definition: WlzType.h:1832
struct _WlzMeshTransform WlzMeshTransform
int n
Definition: WlzType.h:5199
Definition: WlzType.h:955
void * freeptr
Definition: WlzType.h:3296
Definition: WlzType.h:101
WlzObjectType type
Definition: WlzType.h:2753
int width
Definition: WlzType.h:3020
WlzGMModel * tGM
Definition: WlzType.h:4872
unsigned int vpe
Definition: WlzType.h:3253
WlzThreeDViewMode view_mode
Definition: WlzType.h:5428
struct _WlzGMModel * parent
Definition: WlzType.h:2037
Definition: WlzType.h:87
void * v
Definition: WlzType.h:1466
int linkcount
Definition: WlzType.h:3100
int idx
Definition: WlzType.h:1997
double vtY
Definition: WlzType.h:1235
struct _WlzCMeshEntCore * core
Definition: WlzType.h:4290
struct _WlzTextProperty WlzTextProperty
Definition: WlzType.h:1605
WlzBasisDistFn distFn
Definition: WlzType.h:4534
Definition: WlzType.h:3707
int linkcount
Definition: WlzType.h:3503
struct _WlzGMEdge WlzGMEdge
int linkcount
Definition: WlzType.h:5353
WlzGMVertexT * vertexT
Definition: WlzType.h:1861
Definition: WlzType.h:4448
struct _WlzCMeshEdgU2D5 WlzCMeshEdgU2D5
unsigned int flags
Definition: WlzType.h:4711
int idx
Definition: WlzType.h:1939
enum _WlzElementType WlzElementType
struct _WlzGMCbEntry * callbacks
Definition: WlzType.h:2079
double zMin
Definition: WlzType.h:1399
size_t tileWidth
Definition: WlzType.h:3264
void * freeptr
Definition: WlzType.h:3565
int maxvertices
Definition: WlzType.h:3398
int idx
Definition: WlzType.h:1874
Definition: WlzType.h:214
Union of axis aligned box pointers. Typedef: WlzBoxP.
Definition: WlzType.h:1427
A ragged rectangular feature value table. Typedef: WlzFeatValues.
void * freeptr
Definition: WlzType.h:5285
struct _WlzCMeshEdgU2D * opp
Definition: WlzType.h:3816
A union of pointers to all the valid geometric model elements. Typedef: WlzGMElemP.
Definition: WlzType.h:1649
struct _WlzGMFace WlzGMFace
Definition: WlzType.h:724
3D double precision float point vertex. Typedef: WlzDVertex3.
Definition: WlzType.h:1285
int bin1
Definition: WlzType.h:2475
WlzObjectType type
Definition: WlzType.h:2736
WlzUByte * ubp
Definition: WlzType.h:1470
Definition: WlzType.h:1152
int lastln
Definition: WlzType.h:3082
Definition: WlzType.h:1630
Definition: WlzType.h:983
Definition: WlzType.h:970
int invert
Definition: WlzType.h:4668
struct _WlzCMeshElm3D * elm
Definition: WlzType.h:4103
float magnitude
Definition: WlzType.h:5253
WlzGMElemType type
Definition: WlzType.h:1744
struct _WlzMeshElem WlzMeshElem
int linkcount
Definition: WlzType.h:2832
A single grey value, which for example might represent the preferred display colour of a binary domai...
Definition: WlzType.h:2678
struct _WlzCMesh3D WlzCMesh3D
struct _WlzCMeshCellGrid3D WlzCMeshCellGrid3D
float xMin
Definition: WlzType.h:1413
Union of vertex pointers. Typedef: WlzVertexP.
Definition: WlzType.h:1298
double scale
Definition: WlzType.h:5424
A line or curve between a pair of vertices. Although this only has a topological component a geometri...
Definition: WlzType.h:1896
Definition: WlzType.h:431
char * name
Definition: WlzType.h:2667
Definition: WlzType.h:5159
struct _WlzCoreValues WlzCoreValues
Definition: WlzType.h:5389
WlzTransformType type
Definition: WlzType.h:4611
float rangle
Definition: WlzType.h:3549
unsigned int flags
Definition: WlzType.h:3895
Definition: WlzType.h:5239
int linkcount
Definition: WlzType.h:3418
Definition: WlzType.h:444
A spatial grid or array of square 3D cells that are used for fast node and element location queries...
Definition: WlzType.h:4207
Definition: WlzType.h:3698
struct _WlzCMeshElm2D WlzCMeshElm2D
WlzObjectType type
Definition: WlzType.h:5366
Definition: WlzType.h:4447
struct _WlzCMesh2D * cm2
Definition: WlzType.h:2526
Definition: WlzType.h:588
int lastkl
Definition: WlzType.h:2379
Definition: WlzType.h:4449
union _WlzCMeshEdgUP WlzCMeshEdgUP
Definition: WlzType.h:391
Definition: WlzType.h:529
struct _WlzCMeshCellElm3D * cElm
Definition: WlzType.h:4037
struct _WlzCMeshCbEntry WlzCMeshCbEntry
struct _WlzConvHullDomain2 WlzConvHullDomain2
WlzDVertex3 minvals
Definition: WlzType.h:5434
Definition: WlzType.h:4443
union _WlzGMVertexGU WlzGMVertexGU
int norm_factor
Definition: WlzType.h:4907
struct _WlzCMeshCellElm3D WlzCMeshCellElm3D
WlzLong vtX
Definition: WlzType.h:1248
WlzPixelV bckgrnd
Definition: WlzType.h:3237
Definition: WlzType.h:593
struct _WlzGMVertex * next
Definition: WlzType.h:1839
Definition: WlzType.h:687
int nNodes
Definition: WlzType.h:4793
WlzObjectType type
Definition: WlzType.h:2446
enum _WlzCompThreshType WlzCompThreshType
struct _WlzGMDiskT * diskT
Definition: WlzType.h:1816
void * freeptr
Definition: WlzType.h:2682
WlzAffineTransform * invTrans
Definition: WlzType.h:5076
struct _WlzCMeshEntRes WlzCMeshEntRes
Definition: WlzType.h:402
struct _WlzConvHullDomain3 WlzConvHullDomain3
Definition: WlzType.h:165
int cellVecMax
Definition: WlzType.h:2215
enum _WlzGreyType WlzGreyType
WlzObjectType type
Definition: WlzType.h:3294
WlzObjectType type
Definition: WlzType.h:3394
WlzGreyTransformType type
Definition: WlzType.h:1530
Definition: WlzType.h:857
struct _WlzLBTNode3D WlzLBTNode3D
WlzGMElemType type
Definition: WlzType.h:2026
int nPoly
Definition: WlzType.h:4491
AlcBlockStack * allCE
Definition: WlzType.h:4177
Voxel value table. Typedef: WlzVoxelValues.
Definition: WlzType.h:3097
int nNodes
Definition: WlzType.h:2410
Definition: WlzType.h:1107
Definition: WlzType.h:829
struct _WlzCMeshCellElm2D5 * cElm
Definition: WlzType.h:3917
struct _WlzIntervalDomain WlzIntervalDomain
Definition: WlzType.h:1127
Affine tranform primitives. Typedef: WlzAffineTransformPrim.
Definition: WlzType.h:4657
void * freeptr
Definition: WlzType.h:3473
WlzInterpolationType interp
Definition: WlzType.h:5427
struct _WlzPartialItv3D WlzPartialItv3D
Data structure that can be used to hold partial intervals. These can then be sorted and condensed to ...
Definition: WlzType.h:2931
double binSize
Definition: WlzType.h:3510
int colrmn
Definition: WlzType.h:4965
int n
Definition: WlzType.h:2782
Definition: WlzType.h:575
WlzDVertex2 d2
Definition: WlzType.h:1322
int type
Definition: WlzType.h:5214
Definition: WlzType.h:92
Definition: WlzType.h:952
struct _WlzRagRValues WlzRagRValues
Grey values along a line. Typedef: WlzValueLine.
Definition: WlzType.h:2964
enum _WlzDistanceType WlzDistanceType
Definition: WlzType.h:4440
enum _WlzDirection WlzDirection
_WlzRsvFilterName
Recursive filter types that can be used to define a recursive filter along with a filter parameter (e...
Definition: WlzType.h:3621
Definition: WlzType.h:954
Definition: WlzType.h:832
struct _WlzPointValues WlzPointValues
enum _WlzWindowFnType WlzWindowFnType
double c0
Definition: WlzType.h:5490
int lastln
Definition: WlzType.h:2835
struct _WlzGMDiskT * prev
Definition: WlzType.h:1858
int linkcount
Definition: WlzType.h:2779
struct _WlzCMesh2D WlzCMesh2D
enum _WlzContourMethod WlzContourMethod
int idx
Definition: WlzType.h:1697
WlzObjectType type
Definition: WlzType.h:3037
void * freeptr
Definition: WlzType.h:4613
int lastln
Definition: WlzType.h:2376
WlzGreyP val
Definition: WlzType.h:3299
int rank
Definition: WlzType.h:3314
Definition: WlzType.h:501
int plane1
Definition: WlzType.h:3235
double yMin
Definition: WlzType.h:1398
WlzGMVertexG2I * vg2I
Definition: WlzType.h:1793
int nNodes
Definition: WlzType.h:4837
A node of a 2D mesh. Typedef: WlzCMeshNod2D.
Definition: WlzType.h:3735
A single cell entry in an axis aligned grid for a 3D model. Typedef: WlzGMGridWSpCell3D.
Definition: WlzType.h:2185
struct _WlzDBox3 WlzDBox3
struct _WlzDVertex3 WlzDVertex3
The standard workspace for grey value table manipulations. Typedef: WlzGreyWSpace.
Definition: WlzType.h:4990
Definition: WlzType.h:3697
int maxElem
Definition: WlzType.h:4794
int idx
Definition: WlzType.h:1856
Union of pointers to top level mesh entities. Typedef: WlzCMeshEntP.
Definition: WlzType.h:4287
3D double precision floating point axis aligned cubiod (box). Typedef: WlzDBox3.
Definition: WlzType.h:1395
int vkol1
Definition: WlzType.h:5269
int kol1
Definition: WlzType.h:2836
Resources used for efficient allocation and recycling of mesh entities. Typedef: WlzCMeshEntRes.
Definition: WlzType.h:4255
Definition: WlzType.h:854
enum _WlzGMElemType WlzGMElemType
Definition: WlzType.h:623
Definition: WlzType.h:417
int nvertices
Definition: WlzType.h:3397
WlzGreyType vType
Definition: WlzType.h:3153
struct _WlzGMShellG2I * shellG2I
Definition: WlzType.h:1666
int kol1
Definition: WlzType.h:5316
enum _WlzSpecialStructElmType WlzSpecialStructElmType
AlcVector * values
Definition: WlzType.h:3157
Definition: WlzType.h:302
union _WlzTransform WlzTransform
struct _WlzCMeshCellElm2D WlzCMeshCellElm2D
Definition: WlzType.h:290
Definition: WlzType.h:4453
union _WlzBoxP WlzBoxP
int zMax
Definition: WlzType.h:1386
WlzMeshElemType type
Definition: WlzType.h:4773
Definition: WlzType.h:1618
Definition: WlzType.h:956
Definition: WlzType.h:4435
int nElem
Definition: WlzType.h:4836
int pl
Definition: WlzType.h:2936
void * prop
Definition: WlzType.h:3901
struct _WlzCMeshEntCore WlzCMeshEntCore
WlzCMeshCellElm3D * freeCE
Definition: WlzType.h:4215
int dim
Definition: WlzType.h:3229
The position of a point in 3D double precision space and the normal vector at that point...
Definition: WlzType.h:1775
long tileOffset
Definition: WlzType.h:3271
int plane1
Definition: WlzType.h:3105
unsigned long size
Definition: WlzType.h:2576
Definition: WlzType.h:3710
Definition: WlzType.h:899
int offset
Definition: WlzType.h:3592
Definition: WlzType.h:336
Definition: WlzType.h:722
float iterdisp
Definition: WlzType.h:5222
void * freeptr
Definition: WlzType.h:2833
union _WlzDomain WlzDomain
WlzGMElemType type
Definition: WlzType.h:1710
Union of axis aligned boxes. Typedef: WlzBox.
Definition: WlzType.h:1444
3D single precision float point vertex. Typedef: WlzFVertex3.
Definition: WlzType.h:1272
WlzLVertex2 l2
Definition: WlzType.h:1320
int xMin
Definition: WlzType.h:1337
WlzDBox3 * d3
Definition: WlzType.h:1435
Definition: WlzType.h:1102
WlzObjectType type
Definition: WlzType.h:3075
WlzFeatureVector * values
Definition: WlzType.h:5320
WlzVertexP vertices
Definition: WlzType.h:3458
struct _WlzGMShellG3I * shellG3I
Definition: WlzType.h:1668
Definition: WlzType.h:573
A doubly linked list of pointers. Typedef: AlcDLPList.
Definition: AlcType.h:317
float xMax
Definition: WlzType.h:1369
Definition: WlzType.h:969
struct _WlzCMeshEdgU2D WlzCMeshEdgU2D
unsigned flags
Definition: WlzType.h:2334
WlzGMShell * child
Definition: WlzType.h:2111
int intrmn
Definition: WlzType.h:4969
WlzDBox2 d2
Definition: WlzType.h:1448
WlzValues values
Definition: WlzType.h:5071
WlzGMElemType type
Definition: WlzType.h:1898
struct _WlzIntervalWSpace WlzIntervalWSpace
WlzObjectType type
Definition: WlzType.h:3502
Definition: WlzType.h:926
Look up table values. Typedef: WlzLUTValues.
Definition: WlzType.h:3292
Definition: WlzType.h:264
WlzGMResIdx vertexT
Definition: WlzType.h:2168
WlzObjectType type
Definition: WlzType.h:2398
struct _WlzCoreDomain WlzCoreDomain
Definition: WlzType.h:4444
Definition: WlzType.h:1017
struct _WlzFRect * fr
Definition: WlzType.h:2519
WlzFMatchPoint * matchpts
Definition: WlzType.h:5355
The union of Woolz domains. Typedef: WlzDomain.
Definition: WlzType.h:2510
Definition: WlzType.h:725
int linkcount
Definition: WlzType.h:2574
3D integer axis aligned cubiod (box). Typedef: WlzIBox3.
Definition: WlzType.h:1379
double theta
Definition: WlzType.h:5416
Definition: WlzType.h:853
WlzGMResIdx shell
Definition: WlzType.h:2175
struct _WlzContour * ctr
Definition: WlzType.h:2522
Definition: WlzType.h:226
int maxVertices
Definition: WlzType.h:3452
int direction
Definition: WlzType.h:5252
struct _WlzGMResIdx WlzGMResIdx
double xMin
Definition: WlzType.h:1397
struct _WlzGMModelR WlzGMModelR
void * prop
Definition: WlzType.h:3921
Definition: WlzType.h:343
struct _WlzGMShellG3D * shellG3D
Definition: WlzType.h:1669
struct _WlzSimpleProperty * simple
Definition: WlzType.h:2717
WlzObjectType type
Definition: WlzType.h:2633
void * v
Definition: WlzType.h:1429
Definition: WlzType.h:586
double zConst
Definition: WlzType.h:4841
Definition: WlzType.h:231
Definition: WlzType.h:1633
Definition: WlzType.h:572
float std2
Definition: WlzType.h:5257
char * comment
Definition: WlzType.h:2651
int idx
Definition: WlzType.h:1683
Definition: WlzType.h:2247
int linkcount
Definition: WlzType.h:5309
Definition: WlzType.h:1607
WlzIVertex2 vtx
Definition: WlzType.h:1699
2D long integer vertex. Typedef: WlzIVertex2.
Definition: WlzType.h:1197
WlzGMCbFn fn
Definition: WlzType.h:2136
Definition: WlzType.h:457
struct _WlzCMeshEntCore * core
Definition: WlzType.h:4052
double fixed_line_angle
Definition: WlzType.h:5432
WlzValues values2D
Definition: WlzType.h:5081
Definition: WlzType.h:785
WlzGMElemType type
Definition: WlzType.h:1855
int nopts
Definition: WlzType.h:5354
Definition: WlzType.h:332
struct _WlzCoreObject WlzCoreObject
struct _WlzThreeDViewStruct * vs3d
Definition: WlzType.h:2533
struct _WlzCMeshEdgU2D * edu
Definition: WlzType.h:3742
int iright
Definition: WlzType.h:2934
Definition: WlzType.h:636
Definition: WlzType.h:1616
Definition: WlzType.h:862
struct _WlzSeqParWSpace WlzSeqParWSpace
WlzMeshElem * elements
Definition: WlzType.h:4797
unsigned int vRank
Definition: WlzType.h:3238
Definition: WlzType.h:1018
Definition: WlzType.h:828
struct _WlzPointValues * pts
Definition: WlzType.h:2501
A element pointer for a 2 or 3D mesh. Typedef: WlzCMeshElmP.
Definition: WlzType.h:4049
Definition: WlzType.h:2431
A basis function transform. The delta is used by the MQ and Gauss basis functions: For the MQ basis f...
Definition: WlzType.h:4681
_WlzDirection
Basic directions.
Definition: WlzType.h:568
Defines an triangular mesh element within a mesh transform. The nodes and neighbours are indexed such...
Definition: WlzType.h:4742
struct _WlzRect * r
Definition: WlzType.h:2518
struct _WlzDVertex2 WlzDVertex2
WlzDVertex2 pos
Definition: WlzType.h:3741
unsigned bkdFlag
Definition: WlzType.h:5095
int lftpos
Definition: WlzType.h:4970
Definition: WlzType.h:1005
int lastln
Definition: WlzType.h:5290
Union of vertex values. Typedef: WlzVertex.
Definition: WlzType.h:1317
WlzObject * obj
Definition: WlzType.h:5031
A simple property to hold arbitrary length string data. Read and writing then coercing to a structure...
Definition: WlzType.h:2571
Definition: WlzType.h:3526
_WlzTransformType
Types of spatial transformation. Typedef: WlzTransformType.
Definition: WlzType.h:584
Definition: WlzType.h:982
Definition: WlzType.h:298
struct _WlzBoundList * up
Definition: WlzType.h:3420
WlzGMElemType type
Definition: WlzType.h:1981
A graph based mesh model for 3D boundary conforming simplical meshes. The mesh inherits it&#39;s core fie...
Definition: WlzType.h:4384
WlzUInt * rgbp
Definition: WlzType.h:1473
Definition: WlzType.h:239
Definition: WlzType.h:545
void * freeptr
Definition: WlzType.h:3375
A single cell of a spatial grid or array of 3D cells. Typedef: WlzCMeshCell3D.
Definition: WlzType.h:4150
Definition: WlzType.h:744
Definition: WlzType.h:5114
Definition: WlzType.h:516
union _WlzCMeshEntP WlzCMeshEntP
struct _WlzFeatValue WlzFeatValues
Definition: WlzType.h:919
void * freeptr
Definition: WlzType.h:2666
struct _WlzCMeshElm2D * e2d5
Definition: WlzType.h:4295
struct _WlzLUTDomain * lut
Definition: WlzType.h:2530
struct _WlzRElement WlzRElement
void * freeptr
Definition: WlzType.h:3013
float zMax
Definition: WlzType.h:1418
Definition: WlzType.h:598
WlzGMResource face
Definition: WlzType.h:2089
Definition: WlzType.h:777
Definition: WlzType.h:201
Definition: WlzType.h:1104
void * v
Definition: WlzType.h:1486
Definition: WlzType.h:587
Definition: WlzType.h:437
union _WlzVertex WlzVertex
float vtX
Definition: WlzType.h:1274
struct _WlzObject * assoc
Definition: WlzType.h:2762
An axis aligned grid of cuboid cells. This has an array (the grid) of linked lists of cells...
Definition: WlzType.h:2203
AlcBlockStack * allCE
Definition: WlzType.h:4197
struct _WlzCoreValues * core
Definition: WlzType.h:2489
Definition: WlzType.h:1555
The union of Woolz values. Typedef: WlzValues.
Definition: WlzType.h:2487
WlzMeshElem * elements
Definition: WlzType.h:4842
WlzDVertex2 * ncoords
Definition: WlzType.h:5218
Definition: WlzType.h:5478
WlzFVertex2 ptcoords
Definition: WlzType.h:5336
struct _WlzPolygonDomain3 WlzPolygonDomain3
_WlzConnectType
Connectivity in a 2D or 3D digital space. Typedef: WlzConnectType.
Definition: WlzType.h:701
In indexed value table. Typedef: WlzIndexedValues.
Definition: WlzType.h:3133
Definition: WlzType.h:3674
float zMin
Definition: WlzType.h:1415
Definition: WlzType.h:208
WlzPixelV ou
Definition: WlzType.h:1534
Defines a mesh transform. added by J. Rao 10/09/2001.
Definition: WlzType.h:4809
Definition: WlzType.h:1129
Definition: WlzType.h:3625
Definition: WlzType.h:160
WlzObjectType type
Definition: WlzType.h:2573
enum _WlzHistFeature WlzHistFeature
int linkcount
Definition: WlzType.h:2665
struct _WlzCMeshElm2D5 * e2d5
Definition: WlzType.h:4054
Definition: WlzType.h:4434
The geometric properties of a shell in 3D integer space. Typedef: WlzGMShellG3I.
Definition: WlzType.h:1979
WlzLong * lnp
Definition: WlzType.h:1467
Definition: WlzType.h:5112
Definition: WlzType.h:306
int nintvs
Definition: WlzType.h:3060
struct _WlzGMEdgeT WlzGMEdgeT
union _WlzProperty WlzProperty
struct _WlzGMResource WlzGMResource
int ln
Definition: WlzType.h:2921
AlcBlockStack * allCE
Definition: WlzType.h:4217
struct _WlzInterval * intvs
Definition: WlzType.h:2881
The core domain: All Woolz domains have all the fields of the core domain in the same order and befor...
Definition: WlzType.h:2802
int line1
Definition: WlzType.h:5289
int vtZ
Definition: WlzType.h:1263
WlzGMElemType type
Definition: WlzType.h:1682
Definition: WlzType.h:827
Definition: WlzType.h:1182
WlzPixelV(* Wlz3DProjectionIntFn)(WlzPixelP, int, int, void *, WlzErrorNum *)
Callback function for the WlzGetProjectionFromObject().
Definition: WlzType.h:2460
Definition: WlzType.h:831
WlzFeatureVector * features
Definition: WlzType.h:5340
Definition: WlzType.h:1185
struct _WlzGMFace * face
Definition: WlzType.h:1922
void * freeptr
Definition: WlzType.h:3504
unsigned int flags
Definition: WlzType.h:4698
enum _WlzFnType WlzFnType
Definition: WlzType.h:856
WlzGMShellG2D * sg2D
Definition: WlzType.h:2012
Definition: WlzType.h:2432
Definition: WlzType.h:1153
struct _WlzFBox3 WlzFBox3
enum _WlzVertexType WlzVertexType
A geometric model which can represent both 2D graphs and 3D surfaces, with the surfaces being either ...
Definition: WlzType.h:2105
Definition: WlzType.h:3705
Definition: WlzType.h:637
Definition: WlzType.h:957
WlzGMElemType type
Definition: WlzType.h:1696
Definition: WlzType.h:920
Definition: WlzType.h:1031
Definition: WlzType.h:634
int * nIdx
Definition: WlzType.h:3266
Definition: WlzType.h:1589
struct _WlzCMeshCellElm2D5 * cElm
Definition: WlzType.h:4139
Definition: WlzType.h:622
Definition: WlzType.h:274
Definition: WlzType.h:355
WlzObjectType type
Definition: WlzType.h:3447
WlzGreyType gType
Definition: WlzType.h:5085
Definition: WlzType.h:937
A topological disk around a vertex. In 2D or 3D manifold there is one disk per vertex. But in a 3D non-manifold shell many sheets (manifold surfaces components) may be connected at a single vertex, in which case there is one disk per sheet. The disk encodes the radial order of the vertex topology elements around the vertex. Typedef: WlzGMDiskT.
Definition: WlzType.h:1853
struct _WlzCMeshCellElm3D * nextCell
Definition: WlzType.h:4108
int lastpl
Definition: WlzType.h:3106
WlzGMElemP elem
Definition: WlzType.h:2187
int linrmn
Definition: WlzType.h:4968
struct _WlzDynItvPool WlzDynItvPool
struct _WlzGMGridWSpCell3D * next
Definition: WlzType.h:2190
struct _WlzCMeshNod2D5 * n2d5
Definition: WlzType.h:3800
Definition: WlzType.h:537
WlzObjectType gTabType2D
Definition: WlzType.h:5086
struct _WlzGreyValueWSpace WlzGreyValueWSpace
_WlzMeshError
Mesh error bit masks. Typedef: WlzMeshError.
Definition: WlzType.h:681
WlzObjectType type
Definition: WlzType.h:2472
double vtY
Definition: WlzType.h:1288
int lastln
Definition: WlzType.h:3234
struct _WlzFBox2 WlzFBox2
WlzGreyType vType
Definition: WlzType.h:3297
Definition: WlzType.h:445
Definition: WlzType.h:639
WlzIVertex3 * i3
Definition: WlzType.h:1305
The core geometric model element from which all geometric modeling elements inherit the type and inde...
Definition: WlzType.h:1680
_WlzSpecialStructElmType
Special structuring elements for morphological operations. Typedef: WlzSpecialStructElmType.
Definition: WlzType.h:825
Point values - values with arbitrary rank and dimension defined at points. Typedef: WlzPointValues...
Definition: WlzType.h:3309
#define WLZ_GREY_TABLE_TYPE(AR, TT, GT)
For historical reasons a pixel/voxel value table encodes both the grey type and the table type in a s...
Definition: WlzType.h:119
WlzGMVertex * vertex
Definition: WlzType.h:1859
int linkcount
Definition: WlzType.h:4329
WlzValueIntervalLine * vil
Definition: WlzType.h:3087
A property list which has a type, link count and a linked list of properties.
Definition: WlzType.h:2542
An integer rectangle domain. Side from (l[0],k[0]) to (l[1],k[1]) is a long side. The vertices are cy...
Definition: WlzType.h:3542
Definition: WlzType.h:3630
struct _WlzGMGridWSpCell3D **** cells
Definition: WlzType.h:2214
Definition: WlzType.h:422
WlzDBox3 d3
Definition: WlzType.h:1451
struct _WlzPlaneDomain * p
Definition: WlzType.h:2514
struct _WlzGMVertexG3D WlzGMVertexG3D
size_t li
Definition: WlzType.h:2988
WlzDBox3 bBox
Definition: WlzType.h:4367
WlzGMResIdx shellG
Definition: WlzType.h:2176
WlzCMeshCbEntry * newEntCb
Definition: WlzType.h:4264
Definition: WlzType.h:1044
Definition: WlzType.h:833
struct _WlzGMVertex * vertex
Definition: WlzType.h:1652
WlzIVertex3 i3
Definition: WlzType.h:1323
Typedef: WlzSepTransWSpace.
Definition: WlzType.h:4916
int linkcount
Definition: WlzType.h:4684
float yMax
Definition: WlzType.h:1417
float vtY
Definition: WlzType.h:1275
struct _WlzCMeshNod3D * nod
Definition: WlzType.h:4152
struct _WlzCMeshCellElm2D * nextCell
Definition: WlzType.h:4072
enum _WlzLBTNodeFlags WlzLBTNodeFlags
int linkcount
Definition: WlzType.h:2545
The position of a point in 3D double precision space. Typedef: WlzGMVertexG3D.
Definition: WlzType.h:1756
struct _WlzCMeshEdgU2D * nnxt
Definition: WlzType.h:3817
AlcVector * cellVec
Definition: WlzType.h:2218
int nBins
Definition: WlzType.h:3507
struct _WlzGMVertexG3N * vertexG3N
Definition: WlzType.h:1658
Definition: WlzType.h:921
WlzGMElemType type
Definition: WlzType.h:1873
_WlzRGBAThresholdType
Colour threshold type selection. Typedef: WlzRGBAThresholdType.
Definition: WlzType.h:949
int nodes
Definition: WlzType.h:5217
A pair of simple null terminated ASCII strings one for the property name and one for it&#39;s value...
Definition: WlzType.h:2699
struct _WlzCMeshEntCore ** core
Definition: WlzType.h:4308
Definition: WlzType.h:313
int plnRmn
Definition: WlzType.h:5045
void * v
Definition: WlzType.h:4411
enum _WlzCMeshElmFlags WlzCMeshElmFlags
struct _WlzRsvFilter WlzRsvFilter
int type
Definition: WlzType.h:4328
WlzMeshElemType type
Definition: WlzType.h:4744
Definition: WlzType.h:167
Definition: WlzType.h:213
Definition: WlzType.h:1128
Specifies what values (for example thoose in an indexed value table) are attached to...
WlzGMResIdx vertex
Definition: WlzType.h:2167
struct _WlzTiledValues WlzTiledValues
int itvPos
Definition: WlzType.h:5041
Definition: WlzType.h:570
Definition: WlzType.h:423
Defines a 3D node within a mesh transform. added by J. Rao 10/09/2001.
Definition: WlzType.h:4709
int nNodes
Definition: WlzType.h:4815
int n
Definition: WlzType.h:5182
Definition: WlzType.h:609
int nintvs
Definition: WlzType.h:2880
The Woolz object. Typedef: WlzObject.
Definition: WlzType.h:2751
_WlzIOFlags
Flags for Woolz file I/O.
Definition: WlzType.h:5110
An empty transform, with members common to all transforms. An empty transform is a compact represetat...
Definition: WlzType.h:4624
struct _WlzMeshTransform2D5 WlzMeshTransform2D5
int xMax
Definition: WlzType.h:1339
struct _WlzPolygonDomain * poly
Definition: WlzType.h:2515
Definition: WlzType.h:953
The topological properties of a directed edge. Typedef: WlzGMEdgeT.
Definition: WlzType.h:1871
WlzIVertex3 nCells
Definition: WlzType.h:2207
A finite element warping feature match, interesting points object. Typedef: WlzFMatchObj.
Definition: WlzType.h:5350
Union of second level pointers to top level mesh entities. Typedef: WlzCMeshEntP. ...
Definition: WlzType.h:4305
Definition: WlzType.h:986
WlzCMeshCellGrid3D cGrid
Definition: WlzType.h:4398
struct _WlzCMeshElm3D ** e3
Definition: WlzType.h:4314
A 2D polyline domain with possible types:WLZ_POLYGON_INT, WLZ_POLYGON_FLOAT or WLZ_POLYGON_DOUBLE. Typedef: WlzPolygonDomain.
Definition: WlzType.h:3392
WlzPixelV iu
Definition: WlzType.h:1532
_WlzLBTNodeFlags
The reason a callback function is called. Typedef: WlzGMCbReason.
Definition: WlzType.h:2319
int maxVertices
Definition: WlzType.h:3475
struct _WlzCMeshElm3D WlzCMeshElm3D
int idx
Definition: WlzType.h:1968
int linkcount
Definition: WlzType.h:4387
WlzFBox2 f2
Definition: WlzType.h:1447
int line1
Definition: WlzType.h:2403
struct _WlzCMeshNod2D ** n2
Definition: WlzType.h:4309
WlzMeshElem3D * elements
Definition: WlzType.h:4819
WlzObject * obj2D
Definition: WlzType.h:5033
Core property with sufficient to data to provide the type and enough to allow the property to be free...
Definition: WlzType.h:2556
Definition: WlzType.h:754
int linkcount
Definition: WlzType.h:3038
WlzGMLoopT * child
Definition: WlzType.h:2032
float vtY
Definition: WlzType.h:1223
WlzGMShellG2I * sg2I
Definition: WlzType.h:2011
WlzObjectType type
Definition: WlzType.h:5409
Definition: WlzType.h:5238
WlzGreyP binValues
Definition: WlzType.h:3512
_WlzObjectType
The Woolz object types. Many of the integer enumeration values are required for historical reasons bu...
Definition: WlzType.h:193
WlzIVertex2 i2
Definition: WlzType.h:1319
struct _WlzGMShell * parent
Definition: WlzType.h:1927
The geometric properties of a shell in 2D double precision space. Typedef: WlzGMShellG2D.
Definition: WlzType.h:1965
struct _WlzMatchICPWeightCbData WlzMatchICPWeightCbData
A data structure for wieghting vertex matches within WlzMatchICPWeightMatches(). Typedef: WlzMatchICP...
enum _WlzRasterDir WlzRasterDir
WlzGMElemType type
Definition: WlzType.h:1914
unsigned int nextIdx
Definition: WlzType.h:4260
struct _WlzCMesh2D5 * cm2d5
Definition: WlzType.h:2527
Definition: WlzType.h:755
WlzIVertex3 nCells
Definition: WlzType.h:4189
enum _WlzMarkerType WlzMarkerType
WlzIBox3 bBox
Definition: WlzType.h:1984
int line1
Definition: WlzType.h:3017
WlzDVertex2 * displacements
Definition: WlzType.h:5220
double p1
Definition: WlzType.h:1538
int dmntype
Definition: WlzType.h:4936
WlzValueLine * vtbint
Definition: WlzType.h:3061
Definition: WlzType.h:436
double cellSz
Definition: WlzType.h:2210
struct _WlzPartialItv2D WlzPartialItv2D
int idx
Definition: WlzType.h:1745
Definition: WlzType.h:5470
Definition: WlzType.h:635
double(* WlzBasisDistFn)(void *, int, WlzVertex, void *)
An alternative basis function distance function that may may be called.
Definition: WlzType.h:4479
Definition: WlzType.h:1140
struct _WlzIntervalDomain * i
Definition: WlzType.h:2513
struct _WlzObject * obj
Definition: WlzType.h:2495
Definition: WlzType.h:895
WlzIVertex3 nCells
Definition: WlzType.h:4209
int nElem
Definition: WlzType.h:4814
enum _WlzRsvFilterName WlzRsvFilterName
Definition: WlzType.h:541
struct _WlzValueIntervalLine WlzValueIntervalLine
Definition: WlzType.h:2430
int nwlpos
Definition: WlzType.h:4972
WlzTransformType type
Definition: WlzType.h:4811
int vtX
Definition: WlzType.h:1261
void * v
Definition: WlzType.h:3797
WlzGreyP p
Definition: WlzType.h:1519
Definition: WlzType.h:851
Definition: WlzType.h:347
int ileft
Definition: WlzType.h:2933
Definition: WlzType.h:1030
struct _WlzGMEdge * edge
Definition: WlzType.h:1881
float mean2
Definition: WlzType.h:5255
A 3D linear binary tree node for spatial domain representation. Typedef: WlzLBTNode3D.
Definition: WlzType.h:2351
unsigned int flags
Definition: WlzType.h:3739
WlzIntervalDomain * iDom2D
Definition: WlzType.h:5079
enum _WlzThreeDViewMode WlzThreeDViewMode
Definition: WlzType.h:3124
WlzDBox2 * d2
Definition: WlzType.h:1432
Definition: WlzType.h:692
struct _WlzCMeshNod2D * n2d5
Definition: WlzType.h:4292
void * param
Definition: WlzType.h:4507
The core Woolz object type which can be used to determine the type of a Woolz object. Typedef: WlzCoreObject.
Definition: WlzType.h:2734
WlzGreyType type
Definition: WlzType.h:1518
struct _WlzCMeshEdgU2D * e2
Definition: WlzType.h:3866
int wrap
Definition: WlzType.h:3429
Resources used for efficient allocation, recycling and location of mesh elements and nodes...
Definition: WlzType.h:4275
Definition: WlzType.h:3673
WlzObject * assoc
Definition: WlzType.h:5376
_WlzGMCbReason
The reason a callback function is called. Typedef: WlzGMCbReason.
Definition: WlzType.h:2046
WlzMeshNode3D * nodes
Definition: WlzType.h:4820
Definition: WlzType.h:224
Definition: WlzType.h:5466
int vtX
Definition: WlzType.h:1212
int linkcount
Definition: WlzType.h:2373
The core transform, with members common to all transforms. Typedef: WlzCoreTransform.
Definition: WlzType.h:4609
WlzDBox3 bBox
Definition: WlzType.h:1999
struct _WlzEmptyTransform * empty
Definition: WlzType.h:4594
struct _WlzCMeshEntCore * core
Definition: WlzType.h:3798
void(* WlzGMCbFn)(WlzGMModel *, WlzGMElemP, WlzGMCbReason, void *)
A pointer function to a function called when elements of a Woolz geometric model are either created o...
Definition: WlzType.h:2126
WlzPolygonDomain * poly
Definition: WlzType.h:3433
WlzLong lnv
Definition: WlzType.h:1487
Workspace for random access grey value manipulations. Typedef: WlzGreyValueWSpace.
Definition: WlzType.h:5065
struct _WlzGreyWSpace WlzGreyWSpace
_WlzThresholdType
Threshold value selection. Typedef: WlzThresholdType.
Definition: WlzType.h:935
int linkcount
Definition: WlzType.h:2109
WlzGMElemType type
Definition: WlzType.h:1996
Definition: WlzType.h:5452
struct _WlzCMeshCellElm3D * next
Definition: WlzType.h:4105
int linkcount
Definition: WlzType.h:2737
struct _WlzCMeshFace * opp
Definition: WlzType.h:3880
A 2D polyline domain with possible types: WLZ_POLYGON_INT, WLZ_POLYGON_FLOAT or WLZ_POLYGON_DOUBLE. Typedef: WlzPolygonDomain.
Definition: WlzType.h:3371
int nVertices
Definition: WlzType.h:3474
struct _WlzGMLoopT * loopT
Definition: WlzType.h:1664
A union of pointers to the geometric properties of a shell. Typedef: WlzGMShellGU.
Definition: WlzType.h:2008
struct _WlzSepTransWSpace WlzSepTransWSpace
Definition: WlzType.h:359
void * freeptr
Definition: WlzType.h:4791
struct _WlzGMResIdxTb WlzGMResIdxTb
_Wlz3DViewStructInitMask
Mesh transform element flag bit masks. Typedef: WlzMeshElemFlags.
Definition: WlzType.h:5385
Definition: WlzType.h:779
struct _WlzGMVertexG2N WlzGMVertexG2N
struct _WlzCMeshEdgU2D * next
Definition: WlzType.h:3814
WlzDBox2 bBox
Definition: WlzType.h:4338
Definition: WlzType.h:707
_WlzVertexType
2D and 3D vertex types. Typedef: WlzVertexType.
Definition: WlzType.h:1173
struct _WlzCMeshCell2D5 WlzCMeshCell2D5
Definition: WlzType.h:5390
struct _WlzGMVertexG2D WlzGMVertexG2D
Definition: WlzType.h:553
WlzGreyWSpace * gWSp
Definition: WlzType.h:5036
_WlzCMeshNodFlags
Conforming mesh node flags. These are bit masks which are used in a conforming mesh&#39;s node flags...
Definition: WlzType.h:3694
struct _WlzFeatValues * fv
Definition: WlzType.h:2496
WlzGMResource edge
Definition: WlzType.h:2087
struct _WlzCMeshElm3D * elm
Definition: WlzType.h:3882
WlzValues * values
Definition: WlzType.h:3109
int nvertices
Definition: WlzType.h:3376
int ysize
Definition: WlzType.h:3587
struct _WlzDBox2 WlzDBox2
struct _WlzCMeshCell2D * cell
Definition: WlzType.h:4068
struct _WlzRagRValues * v
Definition: WlzType.h:2490
WlzGMElemType type
Definition: WlzType.h:1952
Definition: WlzType.h:861
WlzDVertex3 nrm
Definition: WlzType.h:1781
struct _WlzAffineTransform WlzAffineTransform
union _WlzCMeshP WlzCMeshP
WlzLong vtX
Definition: WlzType.h:1200
struct _WlzGMGridWSp3D WlzGMGridWSp3D
Definition: WlzType.h:339
Definition: WlzType.h:240
WlzGMCore * core
Definition: WlzType.h:2010
float vtZ
Definition: WlzType.h:1276
WlzDVertex2 vtx
Definition: WlzType.h:1732
WlzObjectType type
Definition: WlzType.h:2954
#define EMAP_PROPERTY_VERSION_LENGTH
Maximum length of the version string in an EMAP property.
Definition: WlzType.h:2599
struct _WlzConvHullValues * c
Definition: WlzType.h:2493
WlzValues original_table
Definition: WlzType.h:5311
Definition: WlzType.h:2322
Definition: WlzType.h:1124
struct _WlzGMVertexT * vertexT
Definition: WlzType.h:1659
int lastpl
Definition: WlzType.h:2856
struct _WlzLUTValues * lut
Definition: WlzType.h:2500
WlzLong vtY
Definition: WlzType.h:1249
WlzGMElemType type
Definition: WlzType.h:1967
Definition: WlzType.h:1187
Definition: WlzType.h:4451
void * freeptr
Definition: WlzType.h:4835
Definition: WlzType.h:84
Definition: WlzType.h:985
int ileft
Definition: WlzType.h:2919
Definition: WlzType.h:751
struct _WlzGMCore WlzGMCore
int line1
Definition: WlzType.h:3043
A basis function. Typedef: WlzBasisFn.
Definition: WlzType.h:4488
struct _WlzCMeshElm2D ** e2
Definition: WlzType.h:4312
Definition: WlzType.h:251
WlzFBox3 * f3
Definition: WlzType.h:1434
struct _WlzCMeshCell3D WlzCMeshCell3D
Grey-level transform parameters. Typedef: WlzGreyTransformParam.
Definition: WlzType.h:1528
Definition: WlzType.h:1177
void * freeptr
Definition: WlzType.h:3077
Definition: WlzType.h:526
enum _WlzGreyTransformType WlzGreyTransformType
A simple null terminated ASCII string for the object&#39;s name. Typedef: WlzNameProperty.
Definition: WlzType.h:2662
Definition: WlzType.h:381
int modflag
Definition: WlzType.h:3594
WlzGMResIdx edgeT
Definition: WlzType.h:2172
Definition: WlzType.h:518
WlzCMeshCellGrid2D5 cGrid
Definition: WlzType.h:4369
3D integer vertex. Typedef: WlzIVertex3.
Definition: WlzType.h:1259
int linkcount
Definition: WlzType.h:3012
struct _WlzValueLine WlzValueLine
Definition: WlzType.h:793
void * freeptr
Definition: WlzType.h:2400
struct _WlzCMeshElm2D5 * elm
Definition: WlzType.h:4085
union _WlzCMeshElmP WlzCMeshElmP
A 2D convex hull with counter clockwise ordered vertices and segments implicitly defined by the polyg...
Definition: WlzType.h:3445
Definition: WlzType.h:789
int plane1
Definition: WlzType.h:2855
WlzValues gtable
Definition: WlzType.h:5009
void * prop
Definition: WlzType.h:3766
Definition: WlzType.h:203
Definition: WlzType.h:1015
struct _WlzFeatValueLine WlzFeatValueLine
void * freeptr
Definition: WlzType.h:4628
int iteration
Definition: WlzType.h:5371
void * freeptr
Definition: WlzType.h:2374
_WlzGreyType
The valid grey value types. Typedef: WlzGreyType.
Definition: WlzType.h:82
Definition: WlzType.h:209
enum _WlzProjectIntMode WlzProjectIntMode
3D to 2D projection integration modes.
WlzValueLine * gline
Definition: WlzType.h:5010
float flv
Definition: WlzType.h:1491
char * text
Definition: WlzType.h:2705
struct _WlzGMEdgeT * edgeT
Definition: WlzType.h:1662
A tiled value table for both 2 an 3D domain objects. Typedef: WlzTiledValues.
Definition: WlzType.h:3217
Definition: WlzType.h:783
struct _WlzWarpTrans * wt
Definition: WlzType.h:2521
struct _WlzGMEdgeT * opp
Definition: WlzType.h:1878
struct _WlzPoints WlzPoints
struct _WlzAffineTransform * affine
Definition: WlzType.h:4595
A binary space partition tree (kD-tree). Typedef: AlcKDTTree.
Definition: AlcType.h:428
int linkcount
Definition: WlzType.h:4790
double vtX
Definition: WlzType.h:1287
WlzIVertex3 pos
Definition: WlzType.h:4568
WlzObjectType type
Definition: WlzType.h:2680
Definition: WlzType.h:1634
int idx
Definition: WlzType.h:3757
WlzUByte ubv
Definition: WlzType.h:1490
int colpos
Definition: WlzType.h:4964
#define EMAP_PROPERTY_MACHINENAME_LENGTH
Maximum length of the machine name strings in an EMAP property.
Definition: WlzType.h:2613
Definition: WlzType.h:595
enum _WlzRsvFilterActionMask WlzRsvFilterActionMask
Definition: WlzType.h:435
int plane1
Definition: WlzType.h:2401
int linkcount
Definition: WlzType.h:2853
WlzGreyP u_grintptr
Definition: WlzType.h:5015
Definition: WlzType.h:1151
Definition: WlzType.h:294
struct _WlzCoreDomain * core
Definition: WlzType.h:2512
int maxNodes
Definition: WlzType.h:4817
struct _WlzLBTDomain2D WlzLBTDomain2D
struct _WlzGreyProperty * greyV
Definition: WlzType.h:2720
unsigned int numEnt
Definition: WlzType.h:4257
The ragged rectangle values table. The type encodes both the type of value table and the type of grey...
Definition: WlzType.h:3009
struct _WlzCMeshCell3D *** cells
Definition: WlzType.h:4214
unsigned int * vDim
Definition: WlzType.h:3246
WlzDVertex3 vtx
Definition: WlzType.h:1780
_WlzRGBAColorSpace
Colour space (i.e. rgb, hsb, grey etc.) selection. Typedef: WlzRGBAColorSpace.
Definition: WlzType.h:966
int linkcount
Definition: WlzType.h:4612
struct _WlzCMeshNod3D * n3
Definition: WlzType.h:4293
Definition: WlzType.h:476
size_t tileSz
Definition: WlzType.h:3261
Definition: WlzType.h:446
Definition: WlzType.h:2292
struct _WlzIterateWSpace WlzIterateWSpace
Definition: WlzType.h:1178
Definition: WlzType.h:880
A union of pointers to grey values. Typedef: WlzGreyP.
Definition: WlzType.h:1464
Definition: WlzType.h:1636
WlzObjectType type
Definition: WlzType.h:2831
Definition: WlzType.h:5157
Definition: WlzType.h:1614
WlzLong vtZ
Definition: WlzType.h:1250
Definition: WlzType.h:782
WlzGreyType vType
Definition: WlzType.h:3331
WlzGMCore * core
Definition: WlzType.h:1792
Definition: WlzType.h:2236
Definition: WlzType.h:474
struct _WlzGMVertexT * vertexT
Definition: WlzType.h:1882
struct _WlzCMeshCellElm2D * cElm
Definition: WlzType.h:3898
A 3D directed (half) edge within the parent face. Typedef: WlzCMeshEdgU3D.
Definition: WlzType.h:3846
WlzVertexP poly
Definition: WlzType.h:4498
WlzCMesh2D5 * m2d5
Definition: WlzType.h:4414
Definition: WlzType.h:597
WlzKrigModelFnType type
Definition: WlzType.h:5489
struct _WlzCoreTransform WlzCoreTransform
WlzObjectType type
Definition: WlzType.h:3011
struct _WlzSimpleProperty WlzSimpleProperty
char * fileName
Definition: WlzType.h:2645
Definition: WlzType.h:1123
int linkcount
Definition: WlzType.h:3137
Definition: WlzType.h:406
WlzGMResource shell
Definition: WlzType.h:2091
struct _WlzThreeDViewStruct WlzThreeDViewStruct
WlzCMesh3D * m3
Definition: WlzType.h:4415
struct _WlzCMeshElm2D * e2
Definition: WlzType.h:4053
WlzGMElemType type
Definition: WlzType.h:1777
enum _Wlz3DViewStructInitMask Wlz3DViewStructInitMask
WlzErrorNum(* WlzAffineTransformCbFn)(void *cbData, struct _WlzGreyWSpace *gWSp, struct _WlzGreyValueWSpace *gVWSp, struct _WlzAffineTransform *invTr, int pln, int ln)
Callback function for the WlzAffineTransformCb() which may be used for value interpolation of an inte...
Definition: WlzType.h:5137
Typedef: Wlz1DConvMask.
Definition: WlzType.h:4903
int ln
Definition: WlzType.h:2935
WlzCMeshCbEntry * delEntCb
Definition: WlzType.h:4265
Definition: WlzType.h:5388
Definition: WlzType.h:3528
WlzElementType type
Definition: WlzType.h:5180
Definition: WlzType.h:5158
Definition: WlzType.h:1106
Definition: WlzType.h:835
Definition: WlzType.h:708
A 3D linear binary tree spatial domain representation. Typedef: WlzLBTDomain3D.
Definition: WlzType.h:2396
int * dim
Definition: WlzType.h:3146
Definition: WlzType.h:1632
Definition: WlzType.h:88
The rectangle values table. The type encodes both the type of value table and the type of grey value...
Definition: WlzType.h:3035
A union of pointers for properties. Typedef: WlzProperty.
Definition: WlzType.h:2714
double xMin
Definition: WlzType.h:1352
WlzIntervalWSpace * intptr
Definition: WlzType.h:5013
WlzHistogramDomain * evalData
Definition: WlzType.h:4524
struct _WlzNameProperty * name
Definition: WlzType.h:2719
struct _WlzCoreTransform * core
Definition: WlzType.h:4593
struct _WlzGMShell * next
Definition: WlzType.h:2028
Definition: WlzType.h:2281
enum _WlzTransformType WlzTransformType
struct _WlzCMeshElm3D * e3
Definition: WlzType.h:4055
WlzValues original_table
Definition: WlzType.h:3226
WlzPixelP inbuf
Definition: WlzType.h:4918
WlzPixelV bckgrnd
Definition: WlzType.h:3085
int linkcount
Definition: WlzType.h:3564
WlzIntervalLine * intvln
Definition: WlzType.h:4956
WlzGreyV gBkd
Definition: WlzType.h:5089
enum _WlzMeshError WlzMeshError
size_t maxPoints
Definition: WlzType.h:3333
WlzFBox3 f3
Definition: WlzType.h:1450
struct _WlzGMVertex WlzGMVertex
Definition: WlzType.h:688
#define EMAP_PROPERTY_STAGE_LENGTH
Maximum length of the stage strings in an EMAP property.
Definition: WlzType.h:2620
Finite element warp transformation. Typedef: WlzWarpTrans.
Definition: WlzType.h:5212
int * inp
Definition: WlzType.h:1468
struct _WlzGMEdge * edge
Definition: WlzType.h:1661
AlcDLPList * list
Definition: WlzType.h:2546
Definition: WlzType.h:757
int linpos
Definition: WlzType.h:4967
int maxNodes
Definition: WlzType.h:4795
#define EMAP_PROPERTY_AUTHORNAME_LENGTH
Maximum length of the author strings in an EMAP property.
Definition: WlzType.h:2606
struct _WlzIntervalLine * intvlines
Definition: WlzType.h:2839
double ** mat
Definition: WlzType.h:4645
A single 3D triangular mesh element. Typedef: WlzCMeshElm2D5.
Definition: WlzType.h:3910
WlzDVertex3 maxvals
Definition: WlzType.h:5435
struct _WlzKrigModelFn WlzKrigModelFn
All Woolz value tables must have all the fields of the core values, in the same order and before any ...
Definition: WlzType.h:2952
WlzGMResource vertex
Definition: WlzType.h:2083
WlzTElement * eltlist
Definition: WlzType.h:5219
int linbot
Definition: WlzType.h:4966
struct _WlzGMVertexT WlzGMVertexT
struct _WlzCMeshNod2D * n2
Definition: WlzType.h:3799
struct _WlzCMeshCell2D WlzCMeshCell2D
Definition: WlzType.h:1056
int maxElem
Definition: WlzType.h:4838
int kol1
Definition: WlzType.h:3045
int nNodes
Definition: WlzType.h:2382
struct _WlzCMeshElm2D * e2
Definition: WlzType.h:4294
WlzGreyV v
Definition: WlzType.h:1507
struct _WlzGMShellG2I WlzGMShellG2I
#define EMAP_PROPERTY_UID_LENGTH
Maximum length of the model or anatomy UID in an EMAP property.
Definition: WlzType.h:2592
int kol1
Definition: WlzType.h:5291
WlzGMElemType type
Definition: WlzType.h:1758
Definition: WlzType.h:484
int linkcount
Definition: WlzType.h:4812
Definition: WlzType.h:3608
int * idxLut
Definition: WlzType.h:2155
struct _WlzLBTDomain3D * l3
Definition: WlzType.h:2525
struct _WlzGMShell * shell
Definition: WlzType.h:1665
WlzFMatchObj ** intptdoms
Definition: WlzType.h:5369
unsigned int flags
Definition: WlzType.h:4746
_WlzWindowFnType
Types of window functions. Window functions are used to weight the grey values of Woolz domain object...
Definition: WlzType.h:1100
void * freeptr
Definition: WlzType.h:2474
Definition: WlzType.h:1602
Definition: WlzType.h:1613
enum _WlzBinaryOperatorType WlzBinaryOperatorType
WlzFeatureVector * values
Definition: WlzType.h:5271
WlzIBox2 * i2
Definition: WlzType.h:1430
AlcVector * vec
Definition: WlzType.h:4262
Triangular finite element warping mesh element. Typedef: WlzTElement.
Definition: WlzType.h:5178
int * faces
Definition: WlzType.h:3486
Definition: WlzType.h:324
Definition: WlzType.h:351
struct _WlzGreyWSpace * gryptr
Definition: WlzType.h:4977
enum _WlzMeshNodeFlags WlzMeshNodeFlags
WlzTiledValueBuffer * tvb
Definition: WlzType.h:5012
WlzObjectType type
Definition: WlzType.h:3135
Definition: WlzType.h:651
WlzEMAPPropertyType emapType
Definition: WlzType.h:2636
struct _WlzCMeshNod3D WlzCMeshNod3D
void * freeptr
Definition: WlzType.h:4644
void * freeptr
Definition: WlzType.h:5412
unsigned int flags
Definition: WlzType.h:3759
_WlzGMElemType
Types of geometric model elements. Typedef: WlzGMElemType.
Definition: WlzType.h:1599
WlzDVertex2 vtx
Definition: WlzType.h:1713
WlzAffineTransform * trans
Definition: WlzType.h:5439
struct _WlzCMeshCellElm3D * cElm
Definition: WlzType.h:4155
enum _WlzConnectType WlzConnectType
Data structure which is used to link lists of 2D elements with the grid cells that they intersect...
Definition: WlzType.h:4065
double * yp_to_z
Definition: WlzType.h:5437
int linkcount
Definition: WlzType.h:4627
Definition: WlzType.h:320
WlzObjectType type
Definition: WlzType.h:3563
_WlzRasterDir
Raster scan directions as used by WlzIntervalWSpace and WlzIterateWSpace. These are built using bit m...
Definition: WlzType.h:513
Definition: WlzType.h:425
struct _WlzMeshNode2D5 WlzMeshNode2D5
Definition: WlzType.h:256
double xMax
Definition: WlzType.h:1354
Definition: WlzType.h:1054
Definition: WlzType.h:286
_WlzSampleFn
Sampling functions. Typedef: WlzSampleFn.
Definition: WlzType.h:1121
Definition: WlzType.h:233
Definition: WlzType.h:86
WlzValues original_table
Definition: WlzType.h:3014
float yMin
Definition: WlzType.h:1414
Definition: WlzType.h:1587
WlzGMVertexG3I * vg3I
Definition: WlzType.h:1796
WlzFVertex2 * f2
Definition: WlzType.h:1303
A compound object implemented as either an array or a linked list of other objects. There is a distinction between an compound of the same type (e.g. resulting from a labelling) and a compound of different types (e.g. resulting from a range of image processes from a single original object). Typedef: WlzCompoundArray.
Definition: WlzType.h:2776
struct _WlzCMeshEdgU2D5 * next
Definition: WlzType.h:3832
WlzDVertex3 position
Definition: WlzType.h:4712
Definition: WlzType.h:261
Callback structure from WlzCbThreshold() Typedef: WlzThreshCbStr.
Definition: WlzType.h:4565
int ldelta
Definition: WlzType.h:4893
void * freeptr
Definition: WlzType.h:3396
struct _WlzCMeshEdgU3D * next
Definition: WlzType.h:3850
A node pointer for a 2 or 3D mesh. Typedef: WlzCMeshNodP.
Definition: WlzType.h:3795
WlzLBTNode3D * nodes
Definition: WlzType.h:2414
WlzGMVertexG2N * vg2N
Definition: WlzType.h:1795
struct _WlzCMeshElm2D5 WlzCMeshElm2D5
Definition: WlzType.h:1188
int linkcount
Definition: WlzType.h:3472
Definition: WlzType.h:3627
Definition: WlzType.h:656
WlzObjectType type
Definition: WlzType.h:3219
double zMax
Definition: WlzType.h:1402
A single 2D triangular mesh element. Typedef: WlzCMeshElm2D.
Definition: WlzType.h:3891
int line1
Definition: WlzType.h:3233
_WlzDGTensorFeatureType
Features of Jacobian deformation gradient tensors.
Definition: WlzType.h:1148
unsigned int flags
Definition: WlzType.h:4775
struct _WlzFeatureVector WlzFeatureVector
WlzCMeshCellElm2D * freeCE
Definition: WlzType.h:4175
int depth
Definition: WlzType.h:2381
Definition: WlzType.h:685
void * prop
Definition: WlzType.h:4040
Definition: WlzType.h:469
Definition: WlzType.h:638
struct _WlzCMeshFace WlzCMeshFace
Definition: WlzType.h:1055
WlzValueAttach attach
Definition: WlzType.h:3155
double dbv
Definition: WlzType.h:1492
A collection of 2D polylines or 3D surface elements represented by a Woolz geometric model...
Definition: WlzType.h:2444
WlzPropertyList * plist
Definition: WlzType.h:2760
A single point in space defined in terms of both it&#39;s geometry and it&#39;s topology. Typedef: WlzGMVerte...
Definition: WlzType.h:1830
Definition: WlzType.h:1585
Definition: WlzType.h:258
struct _WlzCMeshCell2D ** cells
Definition: WlzType.h:4174
int depth
Definition: WlzType.h:2409
struct _WlzMeshTransform * mesh
Definition: WlzType.h:4597
_WlzMeshElemType
Mesh transform element types. Typedef: WlzMeshElemType.
Definition: WlzType.h:619
int node
Definition: WlzType.h:5334
Defines a mesh transform. added by J. Rao 23/10/2001.
Definition: WlzType.h:4831
struct _WlzCMesh2D5 WlzCMesh2D5
struct _WlzFVertex2 WlzFVertex2
Definition: WlzType.h:498
_WlzBinaryOperatorType
Binary operators. Typedef: WlzBinaryOperatorType.
Definition: WlzType.h:845
A 2D domain defining an arbitrary region of space in 2D. The domain may be of type WLZ_INTERVALDOMAIN...
Definition: WlzType.h:2829
WlzDVertex3 up
Definition: WlzType.h:5430
float * flp
Definition: WlzType.h:1471
WlzMeshNode * nodes
Definition: WlzType.h:4798
struct _WlzObject * obj
Definition: WlzType.h:4598
struct _WlzCMesh3D * cm3
Definition: WlzType.h:2528
int currentplane
Definition: WlzType.h:5372
WlzPixelV ol
Definition: WlzType.h:1533
struct _WlzCMeshEdgU3D * e3
Definition: WlzType.h:3868
Definition: WlzType.h:3682
Definition: WlzType.h:515
WlzLong vtY
Definition: WlzType.h:1199
struct _WlzCMeshNod3D * n3
Definition: WlzType.h:3801
int linkcount
Definition: WlzType.h:4834
A single cell of a spatial grid or array of 2D5 cells. Typedef: WlzCMeshCell2D5.
Definition: WlzType.h:4134
WlzIVertex3 vtx
Definition: WlzType.h:1747
struct _WlzGreyTransformParam WlzGreyTransformParam
2D double precision float point vertex. Typedef: WlzDVertex2.
Definition: WlzType.h:1233
WlzGMResource loopT
Definition: WlzType.h:2090
A property to hold EMAP information to attach to the reference models, anatomy and GE domains...
Definition: WlzType.h:2631
WlzObjectType objType
Definition: WlzType.h:5067
int idx
Definition: WlzType.h:3724
The position of a point in 2D integer space. Typedef: WlzGMVertexG2I.
Definition: WlzType.h:1694
void * freeptr
Definition: WlzType.h:2560
One line&#39;s worth of grey value intervals. Typedef: WlzValueIntervalLine.
Definition: WlzType.h:3058
A node of a 3D mesh. Typedef: WlzCMeshNod3D.
Definition: WlzType.h:3775
WlzPropertyList * plist
Definition: WlzType.h:5374
struct _WlzFRect WlzFRect
int lastkl
Definition: WlzType.h:3232
WlzGMResource vertexT
Definition: WlzType.h:2084
WlzInterval * itvBlock
Definition: WlzType.h:2904
int kol1
Definition: WlzType.h:2405
struct _WlzTextProperty * text
Definition: WlzType.h:2721
WlzGMElemType type
Definition: WlzType.h:1938
Definition: WlzType.h:221
struct _WlzNameProperty WlzNameProperty
Definition: WlzType.h:904
Definition: WlzType.h:601
WlzObjectType type
Definition: WlzType.h:3373
_WlzInterpolationType
Interpolation methods. Typedef: WlzInterpolationType.
Definition: WlzType.h:917
int linkcount
Definition: WlzType.h:4358
Definition: WlzType.h:778
Definition: WlzType.h:158
Definition: WlzType.h:1639
WlzPlaneDomain * pdom
Definition: WlzType.h:5368
Definition: WlzType.h:430
void * freeptr
Definition: WlzType.h:2110
struct _WlzGMShellG3I WlzGMShellG3I
Definition: WlzType.h:1125
Definition: WlzType.h:413
struct _WlzCoreProperty * core
Definition: WlzType.h:2716
Definition: WlzType.h:1637
struct _WlzGMDiskT * diskT
Definition: WlzType.h:1660
WlzDVertex3 displacement
Definition: WlzType.h:4713
int linkcount
Definition: WlzType.h:3312
void * freeptr
Definition: WlzType.h:3419
WlzLVertex2 * l2
Definition: WlzType.h:1302
WlzGMResIdx edge
Definition: WlzType.h:2171
_WlzGreyTransformType
Grey-level transform types. Typedef: WlzGreyTransformType.
Definition: WlzType.h:1014
int maxNodes
Definition: WlzType.h:4839
Definition: WlzType.h:3610
struct _WlzGMVertexG2D * vertexG2D
Definition: WlzType.h:1654
int itvsInBlock
Definition: WlzType.h:2905
Definition: WlzType.h:1608
Definition: WlzType.h:549
Definition: WlzType.h:704
struct _WlzCMeshCbEntry * next
Definition: WlzType.h:4245
struct _WlzIntervalLine WlzIntervalLine
unsigned int WlzUInt
A 32 bit unsigned integer.
Definition: WlzType.h:63
Typedef: WlzSeqParWSpace.
Definition: WlzType.h:4889
Definition: WlzType.h:328
Definition: WlzType.h:591
A 2D CCW directed (half) edge within the parent simplex. Typedef: WlzCMeshEdgU2D5.
Definition: WlzType.h:3828
Definition: WlzType.h:212
struct _WlzGMShell * prev
Definition: WlzType.h:2029
Definition: WlzType.h:657
Definition: WlzType.h:850
int lastkl
Definition: WlzType.h:2407
Definition: WlzType.h:652
enum _WlzMeshElemFlags WlzMeshElemFlags
Data structure which is used to link lists of 2D5 elements with the grid cells that they intersect...
Definition: WlzType.h:4083
int maxNodes
Definition: WlzType.h:2384
Definition: WlzType.h:3122
Definition: WlzType.h:750
int linkcount
Definition: WlzType.h:2754
double yMax
Definition: WlzType.h:1401
Definition: WlzType.h:756
int rank
Definition: WlzType.h:3141
int linkcount
Definition: WlzType.h:3352
int width
Definition: WlzType.h:3084
unsigned int flags
Definition: WlzType.h:4727
Definition: WlzType.h:2269
Definition: WlzType.h:366
unsigned int * indices
Definition: WlzType.h:3268
struct _WlzAffineTransform * t
Definition: WlzType.h:2520
Definition: WlzType.h:502
WlzObjectType * gTabTypes3D
Definition: WlzType.h:5073
int linkcount
Definition: WlzType.h:2681
WlzGreyP lnbuf
Definition: WlzType.h:2994
union _WlzCMeshEntPP WlzCMeshEntPP
struct _WlzGMShell WlzGMShell
Definition: WlzType.h:1612
Union of 2D and 3D conforming simplical mesh pointers.
Definition: WlzType.h:4409
Either a 2D or 3D affine transform. The homogeneous matrix (mat) is always allocated as a 4x4 AlcDoub...
Definition: WlzType.h:4640
int lastbin
Definition: WlzType.h:2477
_WlzRsvFilterActionMask
The action to be performed by a recursive filter. These values are bit masks which may be combined...
Definition: WlzType.h:3606
Definition: WlzType.h:747
int xMax
Definition: WlzType.h:1384
struct _WlzVoxelValues WlzVoxelValues
WlzInterval * intpos
Definition: WlzType.h:4958
Definition: WlzType.h:721
struct _WlzGMGridWSpCell3D WlzGMGridWSpCell3D
enum _WlzInterpolationType WlzInterpolationType
struct _WlzGMShellG3D WlzGMShellG3D
Definition: WlzType.h:222
WlzObjectType type
Definition: WlzType.h:2544
Definition: WlzType.h:4432
int colraster
Definition: WlzType.h:4946
A spatial grid or array of square 2D cells that are used for fast node and element location queries...
Definition: WlzType.h:4167
struct _WlzCMeshEdgU2D5 * edu
Definition: WlzType.h:3762
Definition: WlzType.h:830
Definition: WlzType.h:467
int(* WlzThreshCbFn)(WlzObject *, void *, WlzThreshCbStr *)
Callback function for the WlzCbThreshold()
Definition: WlzType.h:4579
Definition: WlzType.h:984
Definition: WlzType.h:373
_WlzRCCClass
A Discrete Region Connected Calculus (RCC) clasification of an ordered pair of spatial regions...
Definition: WlzType.h:771
Definition: WlzType.h:377
WlzDVertex3 pos
Definition: WlzType.h:3761
Definition: WlzType.h:780
struct _WlzTiledValues * t
Definition: WlzType.h:2499
_WlzCompThreshType
Automatic threshold computation methods. The histogram may need to be smoothed for these algorithms t...
Definition: WlzType.h:874
Definition: WlzType.h:468
Definition: WlzType.h:410
struct _WlzGMVertexG3D * vertexG3D
Definition: WlzType.h:1657
Definition: WlzType.h:939
int lastln
Definition: WlzType.h:2404
union _WlzVertexP WlzVertexP
Definition: WlzType.h:517
union _WlzGreyP WlzGreyP
Defines a 2D5 node within a mesh transform. added by J. Rao 23/10/2001.
Definition: WlzType.h:4725
Definition: WlzType.h:852
Definition: WlzType.h:1139
enum _WlzRGBAThresholdType WlzRGBAThresholdType
WlzCoreDomain * core
Definition: WlzType.h:4412
Definition: WlzType.h:806
Definition: WlzType.h:690
enum _WlzGreyTableType WlzGreyTableType
void * freeptr
Definition: WlzType.h:3313
Definition: WlzType.h:925
struct _WlzMeshTransform3D WlzMeshTransform3D
WlzCMeshP mesh
Definition: WlzType.h:4537
Definition: WlzType.h:741
Definition: WlzType.h:571
Definition: WlzType.h:385
struct _WlzGMShellG2D * shellG2D
Definition: WlzType.h:1667
unsigned int maxEnt
Definition: WlzType.h:4259
WlzObjectType type
Definition: WlzType.h:3351
enum _WlzValueAttach WlzValueAttach
Definition: WlzType.h:746
Definition: WlzType.h:415
A shell which is a collection of connected geometric modeling elements. Typedef: WlzGMShell.
Definition: WlzType.h:2024
int ** adrptr
Definition: WlzType.h:4891
Definition: WlzType.h:802
WlzGreyP values
Definition: WlzType.h:3334
WlzFeatureVector backgrnd
Definition: WlzType.h:5293
int linkcount
Definition: WlzType.h:3295
Position of and data for locating and buffering any interval of values in either 2 or 3D tiled value ...
Definition: WlzType.h:2977
Data structure that can be used to hold partial intervals. These can then be sorted and condensed to ...
Definition: WlzType.h:2917
void * data
Definition: WlzType.h:2137
Definition: WlzType.h:2258
WlzObjectType type
Definition: WlzType.h:5352
Definition: WlzType.h:592
struct _WlzCMeshRes WlzCMeshRes
int iright
Definition: WlzType.h:2920
_WlzContourMethod
Contour generation methods. Typedef: WlzContourMethod.
Definition: WlzType.h:2428
int iright
Definition: WlzType.h:2893
Definition: WlzType.h:847
struct _WlzGMEdgeT * prev
Definition: WlzType.h:1877
WlzGMShellG3D * sg3D
Definition: WlzType.h:2014
int vlastkl
Definition: WlzType.h:5270
Definition: WlzType.h:533
Definition: WlzType.h:4430
struct _WlzMeshElem3D WlzMeshElem3D
Definition: WlzType.h:5387
Definition: WlzType.h:220
struct _WlzGMLoopT * next
Definition: WlzType.h:1917
Definition: WlzType.h:686
struct _WlzCMeshNod2D5 WlzCMeshNod2D5
enum _WlzErrorNum WlzErrorNum
2D single precision float point vertex. Typedef: WlzFVertex2.
Definition: WlzType.h:1221
int type
Definition: WlzType.h:4357
A spatial grid or array of cubiod 3D cells that are used for fast 2D5 node and element location queri...
Definition: WlzType.h:4187
A graph based mesh model for 2D boundary conforming simplical meshes. The mesh inherits it&#39;s core fie...
Definition: WlzType.h:4326
Definition: WlzType.h:1604
struct _WlzConvHullDomain2 * cvh2
Definition: WlzType.h:2531
char ** bytes
Definition: WlzType.h:1474
struct _WlzCMeshNod2D WlzCMeshNod2D
WlzVertexP vertices
Definition: WlzType.h:3485
WlzPixelV bckgrnd
Definition: WlzType.h:4921
Definition: WlzType.h:523
struct _WlzGMFace * face
Definition: WlzType.h:1663
struct _WlzPixelV WlzPixelV
A single cell of a spatial grid or array of 2D cells. Typedef: WlzCMeshCell2D.
Definition: WlzType.h:4118
WlzObjectType type
Definition: WlzType.h:2664
double xsi
Definition: WlzType.h:4659
void * freeptr
Definition: WlzType.h:2635
void * freeptr
Definition: WlzType.h:3101
double dist
Definition: WlzType.h:5422
WlzObjectType type
Definition: WlzType.h:2778
3D long integer vertex. Typedef: WlzLVertex3.
Definition: WlzType.h:1246
_WlzMeshElemFlags
Mesh transform element flag bit masks. Typedef: WlzMeshElemFlags.
Definition: WlzType.h:632
WlzValues original_table
Definition: WlzType.h:5286
An edge use pointer for a 2 or 3D mesh. Typedef: WlzCMeshEdgUP.
Definition: WlzType.h:3863
int lastln
Definition: WlzType.h:3044
struct _WlzLBTDomain3D WlzLBTDomain3D
struct _WlzLUTValues WlzLUTValues
WlzIBox3 * i3
Definition: WlzType.h:1433
Definition: WlzType.h:3628
struct _WlzLVertex2 WlzLVertex2
struct _WlzMeshNode WlzMeshNode
Definition: WlzType.h:836
Definition: WlzType.h:499
Definition: WlzType.h:1609
WlzGMModel * model
Definition: WlzType.h:2449
Definition: WlzType.h:90
Definition: WlzType.h:1617
void * freeptr
Definition: WlzType.h:4359
Definition: WlzType.h:814
void * v
Definition: WlzType.h:4289
Definition: WlzType.h:3700
int maxVal
Definition: WlzType.h:3298
struct _WlzCMeshNod2D * next
Definition: WlzType.h:3745
WlzGMModelType elemType
Definition: WlzType.h:2205
Definition: WlzType.h:653
Definition: WlzType.h:269
struct _WlzGMLoopT * parent
Definition: WlzType.h:1884
struct _WlzIVertex2 WlzIVertex2
struct _WlzMeshTransform * mt
Definition: WlzType.h:2523
double zeta
Definition: WlzType.h:5421
int yMin
Definition: WlzType.h:1382
enum _WlzGMElemTypeFlags WlzGMElemTypeFlags
void * prop
Definition: WlzType.h:3746
double maxSqEdgLen
Definition: WlzType.h:4331
int line1
Definition: WlzType.h:2834
float rangle
Definition: WlzType.h:3568
Definition: WlzType.h:989
_WlzRCCClassIdx
Discrete Region Connected Calculus (RCC) clasification indices. The classifications indices are for b...
Definition: WlzType.h:738
int lastln
Definition: WlzType.h:3018
Definition: WlzType.h:1603
WlzObjectType gTabType
Definition: WlzType.h:5072
A workspace structure for interval objects which allows iteration through an object&#39;s pixels/voxels...
Definition: WlzType.h:5029
Definition: WlzType.h:1610
Definition: WlzType.h:162
int line1
Definition: WlzType.h:3081
struct _WlzCMeshNod2D ** n2d5
Definition: WlzType.h:4310
WlzMeshNode2D5 * nodes
Definition: WlzType.h:4843
Definition: WlzType.h:228
long modificationTime
Definition: WlzType.h:2649
A graph based mesh model for 2D5 boundary conforming simplical meshes. The mesh inherits it&#39;s core fi...
Definition: WlzType.h:4355
double xMax
Definition: WlzType.h:1400
A look up table domain. Typedef: WlzLUTDomain.
Definition: WlzType.h:2470
A rectangular feature value table. Typedef: WlzRectFeatValues.
Definition: WlzType.h:5306
int width
Definition: WlzType.h:3046
WlzFeatValueLine * vtblines
Definition: WlzType.h:5295
The geometric properties of a shell in 2D integer space. Typedef: WlzGMShellG2I.
Definition: WlzType.h:1950
Definition: WlzType.h:461
void * freeptr
Definition: WlzType.h:4685
struct _WlzIntervalValues WlzIntervalValues
enum _WlzMeshGenMethod WlzMeshGenMethod
Definition: WlzType.h:5392
WlzIntervalDomain * intdmn
Definition: WlzType.h:4955
struct _WlzInterval WlzInterval
unsigned int flags
Definition: WlzType.h:4034
struct _WlzGMVertexG3N WlzGMVertexG3N
Definition: WlzType.h:720
2D single precision floating point axis aligned rectangle (box). Typedef: WlzFBox2.
Definition: WlzType.h:1365
union _WlzGMElemP WlzGMElemP
Callback entry for list of callbacks. Typedef: WlzCMeshCbEntry.
Definition: WlzType.h:4237
int maxNodes
Definition: WlzType.h:2412
int kol1
Definition: WlzType.h:2377
WlzValues original_table
Definition: WlzType.h:3078
void * freeptr
Definition: WlzType.h:3450
Definition: WlzType.h:369
_WlzKrigModelFnType
Enumerated values for kriging variogram model functions. See the functions for details.
Definition: WlzType.h:5464
WlzObjectType type
Definition: WlzType.h:5308
Definition: WlzType.h:443
int lastpl
Definition: WlzType.h:2402
Definition: WlzType.h:1154
struct _WlzCMeshEdgU2D5 * e2d5
Definition: WlzType.h:3867
An extensible 1D array. Typedef: AlcVector.
Definition: AlcType.h:364
int linkcount
Definition: WlzType.h:2399
Definition: WlzType.h:4452
enum _WlzEMAPPropertyType WlzEMAPPropertyType
Definition: WlzType.h:1175
Definition: WlzType.h:500
int mask_size
Definition: WlzType.h:4905
struct _WlzGreyProperty WlzGreyProperty
int maxBins
Definition: WlzType.h:3505
Definition: WlzType.h:776
Definition: WlzType.h:605
int idx
Definition: WlzType.h:4745
int lastkl
Definition: WlzType.h:2861
Definition: WlzType.h:742
WlzIBox2 i2
Definition: WlzType.h:1446
enum _WlzMeshElemType WlzMeshElemType
WlzVertex centroid
Definition: WlzType.h:3484
_WlzMeshNodeFlags
Mesh transform node flag masks. Typedef: WlzMeshNodeFlags.
Definition: WlzType.h:649
Parameters and function pointer for a kriging model function.
Definition: WlzType.h:5487
WlzIVertex2 * vtx
Definition: WlzType.h:3401
Definition: WlzType.h:938
Definition: WlzType.h:418
A directed loop or the topological properties of a loop. Typedef: WlzGMLoopT.
Definition: WlzType.h:1912
int linkcount
Definition: WlzType.h:5367
struct _WlzBoundList WlzBoundList
Definition: WlzType.h:987
Definition: WlzType.h:5156
struct _WlzCMeshCell2D5 *** cells
Definition: WlzType.h:4194
struct _WlzIntervalValues * i
Definition: WlzType.h:2492
int initialised
Definition: WlzType.h:5413
short * shp
Definition: WlzType.h:1469
Finite element warping feature match point. Typedef: WlzFMatchPoint.
Definition: WlzType.h:5331
enum _WlzDGTensorFeatureType WlzDGTensorFeatureType
A union of all valid transforms. Typedef: WlzTransform.
Definition: WlzType.h:4591
enum _WlzRCCClassIdx WlzRCCClassIdx
unsigned int numIdx
Definition: WlzType.h:2063
int type
Definition: WlzType.h:4386
A circuit of edges. Typedef: WlzGMFace.
Definition: WlzType.h:1936
struct _WlzPixelP WlzPixelP
Definition: WlzType.h:1619
WlzTransformType type
Definition: WlzType.h:4833
struct _WlzGMModel WlzGMModel
enum _WlzScalarFeatureType WlzScalarFeatureType
char * name
Definition: WlzType.h:2683
Definition: WlzType.h:223
Definition: WlzType.h:834
unsigned int flags
Definition: WlzType.h:3779
WlzIVertex3 pos
Definition: WlzType.h:5048
int idx
Definition: WlzType.h:1982
int line1
Definition: WlzType.h:5314
struct _WlzBasisFnTransform * basis
Definition: WlzType.h:4596
Definition: WlzType.h:4441
int lastkl
Definition: WlzType.h:2838
An interval structured value table. The type encodes both the type of value table and the type of gre...
Definition: WlzType.h:3073
_WlzPolyFillMode
Polygon fill modes. Typedef: WlzPolyFillMode.
Definition: WlzType.h:1001
WlzGMResource edgeT
Definition: WlzType.h:2088
struct _WlzCMeshCellElm2D5 * nextCell
Definition: WlzType.h:4090
struct _WlzGMLoopT WlzGMLoopT
Definition: WlzType.h:5451
struct _WlzGMDiskT WlzGMDiskT
_WlzGMModelType
Types of geometric models. Typedef: WlzGMModelType.
Definition: WlzType.h:1583
struct _WlzCMeshCellGrid2D WlzCMeshCellGrid2D
struct _WlzRectFeatValues * rfv
Definition: WlzType.h:2497
Definition: WlzType.h:849
float xMin
Definition: WlzType.h:1367
Definition: WlzType.h:216
Definition: WlzType.h:992
struct _WlzTiledValueBuffer WlzTiledValueBuffer
struct _WlzCMeshEdgU3D * nnxt
Definition: WlzType.h:3852
int line1
Definition: WlzType.h:2375
WlzBasisFn * basisFn
Definition: WlzType.h:4686
Definition: WlzType.h:668
void * freeptr
Definition: WlzType.h:2813
Definition: WlzType.h:705
int pSz
Definition: WlzType.h:3326
WlzPixelV bckgrnd
Definition: WlzType.h:3107
#define WLZ_MAX_NODAL_DEGREE
Definition: WlzType.h:5242
Definition: WlzType.h:3677
Definition: WlzType.h:394