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