Woolz Image Processing Version 1.4.0
WlzExtFFType.h
Go to the documentation of this file.
00001 #ifndef WLZ_EXTFFTYPE_H
00002 #define WLZ_EXTFFTYPE_H
00003 #if defined(__GNUC__)
00004 #ident "University of Edinburgh $Id: 1bfceeaf2024faaa34d4978e6c5b563d83d196be $"
00005 #else
00006 static char _WlzExtFFType_h[] = "University of Edinburgh $Id: 1bfceeaf2024faaa34d4978e6c5b563d83d196be $";
00007 #endif
00008 /*!
00009 * \file         libWlzExtFF/WlzExtFFType.h
00010 * \author       Bill Hill
00011 * \date         March 1999
00012 * \version      $Id: 1bfceeaf2024faaa34d4978e6c5b563d83d196be $
00013 * \par
00014 * Address:
00015 *               MRC Human Genetics Unit,
00016 *               MRC Institute of Genetics and Molecular Medicine,
00017 *               University of Edinburgh,
00018 *               Western General Hospital,
00019 *               Edinburgh, EH4 2XU, UK.
00020 * \par
00021 * Copyright (C), [2012],
00022 * The University Court of the University of Edinburgh,
00023 * Old College, Edinburgh, UK.
00024 * 
00025 * This program is free software; you can redistribute it and/or
00026 * modify it under the terms of the GNU General Public License
00027 * as published by the Free Software Foundation; either version 2
00028 * of the License, or (at your option) any later version.
00029 *
00030 * This program is distributed in the hope that it will be
00031 * useful but WITHOUT ANY WARRANTY; without even the implied
00032 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00033 * PURPOSE.  See the GNU General Public License for more
00034 * details.
00035 *
00036 * You should have received a copy of the GNU General Public
00037 * License along with this program; if not, write to the Free
00038 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00039 * Boston, MA  02110-1301, USA.
00040 * \brief        Header file with data types for external data file format
00041 *               support for the MRC Human Genetics Unit Woolz library.
00042 * \ingroup      WlzExtFF
00043 */
00044 
00045 #ifndef WLZ_EXT_BIND
00046 #ifdef  __cplusplus
00047 extern "C" {
00048 #endif /* __cplusplus */
00049 #endif /* WLZ_EXT_BIND */
00050 
00051 /*
00052 * Can be used to initialise any WlzExtFF enumaerated type to an invalid
00053 * value.
00054 */
00055 #define WLZEFF_INVALID -1
00056 
00057 /*!
00058 * \enum         _WlzEffFormat
00059 * \ingroup      WlzExtFF
00060 * \brief        enumeration of the file formats supported.
00061 *               Typedef: ::WlzEffFormat
00062 */
00063 typedef enum _WlzEffFormat
00064 {
00065   WLZEFF_FORMAT_NONE = 0,       /*!< None, used to indicating no match (equal
00066                                      to zero).  */
00067   WLZEFF_FORMAT_BMP,            /*!< Microscoft bitmap. */
00068   WLZEFF_FORMAT_DEN,            /*!< Stanford density. */
00069   WLZEFF_FORMAT_ICS,            /*!< International cytometry standard.  */
00070   WLZEFF_FORMAT_PNM,            /*!< Portable any map. */
00071   WLZEFF_FORMAT_PIC,            /*!< Biorad confocal pic format. */
00072   WLZEFF_FORMAT_SLC,            /*!< SLC volume files. */
00073   WLZEFF_FORMAT_VFF,            /*!< Sunvision volumes. */
00074   WLZEFF_FORMAT_VTK,            /*!< Visualization Toolkit. */
00075   WLZEFF_FORMAT_WLZ,            /*!< Woolz. */
00076   WLZEFF_FORMAT_IPL,            /*!< IP Lab. */
00077   WLZEFF_FORMAT_TIFF,           /*!< Tiff. */
00078   WLZEFF_FORMAT_RAW,            /*!< Raw data. */
00079   WLZEFF_FORMAT_AM,             /*!< Amira. */
00080   WLZEFF_FORMAT_JPEG,           /*!< Jpeg. */
00081   WLZEFF_FORMAT_ANL,            /*!< Analyze 7.5. */
00082   WLZEFF_FORMAT_GIF,            /*!< Graphics Interchange Format. */
00083   WLZEFF_FORMAT_MESH,           /*!< Pascal Frey's tetrahedral mesh format. */
00084   WLZEFF_FORMAT_NODEELE,        /*!< Jonathan Shewchuk's mesh format. */
00085   WLZEFF_FORMAT_VMESH,          /*!< GRUMMP tetrahedral mesh format. */
00086   WLZEFF_FORMAT_PLY2,           /*!< Riken PLY2 mesh format. */
00087   WLZEFF_FORMAT_OBJ,            /*!< Wavefront geometry format. */
00088   WLZEFF_FORMAT_TXT,            /*!< Simple ASCII text listing, csv format. */
00089   WLZEFF_FORMAT_NIFTI,          /*!< Neuroimaging Informatics Technology
00090                                      Initiative format based on Analyze 7.5. */
00091   WLZEFF_FORMAT_SMESH,          /*!< GRUMMP surface mesh format. */
00092   WLZEFF_FORMAT_EMT,            /*!< Netgen neutral mesh format. */
00093   WLZEFF_FORMAT_STL,            /*!< Stereolithography file format. */
00094   WLZEFF_FORMAT_PVL,            /*!< Drishti PVL dot NC format. */
00095   WLZEFF_FORMAT_COUNT           /*!< Keep last: Number of formats (including
00096                                      WLZEFF_FORMAT_NONE). */
00097 } WlzEffFormat;
00098 
00099 #ifndef WLZ_EXT_BIND
00100 
00101 #define WLZEFF_BMP_MAGIC_0              ('B')
00102 #define WLZEFF_BMP_MAGIC_1              ('M')
00103 
00104 #define WLZEFF_BMP_WIN_NEW              (40)
00105 
00106 #define WLZEFF_BMP_CMP_RGB              (0)
00107 #define WLZEFF_BMP_CMP_RLE8             (1)
00108 #define WLZEFF_BMP_CMP_ESC              (0)
00109 #define WLZEFF_BMP_CMP_EOL              (0)
00110 #define WLZEFF_BMP_CMP_EOB              (1)
00111 #define WLZEFF_BMP_CMP_DELTA            (2)
00112 
00113 typedef unsigned char   WLZEFF_BMP_BYTE;
00114 
00115 typedef short           WLZEFF_BMP_WORD;
00116 
00117 typedef unsigned short  WLZEFF_BMP_UINT;
00118 
00119 typedef int             WLZEFF_BMP_DWORD;
00120 
00121 typedef int             WLZEFF_BMP_LONG;
00122 
00123 typedef struct _WlzEffBmpFileHead
00124 {
00125   WLZEFF_BMP_UINT       bfType;
00126   WLZEFF_BMP_DWORD      bfSize;
00127   WLZEFF_BMP_UINT       bfReserved1;
00128   WLZEFF_BMP_UINT       bfReserved2;
00129   WLZEFF_BMP_DWORD      bfOffBits;
00130 } WlzEffBmpFileHead;
00131 
00132 typedef struct _WlzEffBmpInfoHead
00133 {
00134   WLZEFF_BMP_DWORD      biSize;
00135   WLZEFF_BMP_LONG       biWidth;
00136   WLZEFF_BMP_LONG       biHeight;
00137   WLZEFF_BMP_WORD       biPlanes;
00138   WLZEFF_BMP_WORD       biBitCount;
00139   WLZEFF_BMP_DWORD      biCompression;
00140   WLZEFF_BMP_DWORD      biSizeImage;
00141   WLZEFF_BMP_LONG       biXPelsPerMeter;
00142   WLZEFF_BMP_LONG       biYPelsPerMeter;
00143   WLZEFF_BMP_DWORD      biClrUsed;
00144   WLZEFF_BMP_DWORD      biClrImportant;
00145 } WlzEffBmpInfoHead;
00146 
00147 typedef struct _WlzEffBmpRGBQuad
00148 {
00149   WLZEFF_BMP_BYTE       rgbBlue;
00150   WLZEFF_BMP_BYTE       rgbGreen;
00151   WLZEFF_BMP_BYTE       rgbRed;
00152   WLZEFF_BMP_BYTE       rgbReserved;
00153 } WlzEffBmpRGBQuad;
00154 
00155 
00156 #define WLZEFF_DEN_VERSION              (1)
00157 
00158 typedef struct _WlzEffDenHeader
00159 {
00160   short         version;
00161   short         orgMin[3];              /* Dimensions of original data file */
00162   short         orgMax[3];
00163   short         orgLen[3];
00164   short         extrMin[3];             /* Extracted portion of orig file */
00165   short         extrMax[3];
00166   short         extrLen[3];
00167   short         mapMin[3];              /* Dimensions of this map */
00168   short         mapMax[3];
00169   short         mapLen[3];
00170   short         mapWarps;               /* Number of warps since extraction */
00171   unsigned int  mapLength;              /* Total number of densities in map */
00172 } WlzEffDenHeader;
00173 
00174 #define WLZEFF_ICS_REC_LEN_MAX          (256)
00175 #define WLZEFF_ICS_VERSION_MAJOR        (1)
00176 #define WLZEFF_ICS_VERSION_MINOR        (0)
00177 #define WLZEFF_ICS_PARAMETERS_MAX       (8)
00178 
00179 typedef enum _WlzEffIcsToken
00180 {
00181   WLZEFF_ICS_TKN_NONE =                 (0),
00182   WLZEFF_ICS_TKN_BITS,
00183   WLZEFF_ICS_TKN_COORDS,
00184   WLZEFF_ICS_TKN_FILENAME,
00185   WLZEFF_ICS_TKN_FLOAT,
00186   WLZEFF_ICS_TKN_FORMAT,
00187   WLZEFF_ICS_TKN_G3D,
00188   WLZEFF_ICS_TKN_INT,
00189   WLZEFF_ICS_TKN_LAYOUT,
00190   WLZEFF_ICS_TKN_L3D,
00191   WLZEFF_ICS_TKN_ORDER,
00192   WLZEFF_ICS_TKN_PARAMETERS,
00193   WLZEFF_ICS_TKN_REPRESENTATION,
00194   WLZEFF_ICS_TKN_SCIL,
00195   WLZEFF_ICS_TKN_SIGBITS,
00196   WLZEFF_ICS_TKN_SIGN,
00197   WLZEFF_ICS_TKN_SIGNED,
00198   WLZEFF_ICS_TKN_SIZES,
00199   WLZEFF_ICS_TKN_UNSIGNED,
00200   WLZEFF_ICS_TKN_VERSION,
00201   WLZEFF_ICS_TKN_VIDEO,
00202   WLZEFF_ICS_TKN_X,
00203   WLZEFF_ICS_TKN_Y,
00204   WLZEFF_ICS_TKN_Z
00205 } WlzEffIcsToken;
00206 
00207 typedef struct _WlzEffIcsHeader
00208 {
00209   int           versionMajor;
00210   int           versionMinor;
00211   int           parameters;
00212   int           sizes[WLZEFF_ICS_PARAMETERS_MAX];
00213   int           sigBits;
00214   WlzEffIcsToken coords;
00215   WlzEffIcsToken order[WLZEFF_ICS_PARAMETERS_MAX];
00216   WlzEffIcsToken format;
00217   WlzEffIcsToken sign;
00218   WlzEffIcsToken scil;
00219 } WlzEffIcsHeader;
00220 
00221 #define WLZEFF_PIC_MAGIC                (12345)  /* BioRad .pic magic number */
00222 #define WLZEFF_PIC_HEADBYTES            (76)
00223 
00224 #define WLZEFF_PIC_OFF_NX               (0)
00225 #define WLZEFF_PIC_OFF_NY               (2)
00226 #define WLZEFF_PIC_OFF_NPIC             (4)
00227 #define WLZEFF_PIC_OFF_BLACKVAL         (6)
00228 #define WLZEFF_PIC_OFF_WHITEVAL         (8)
00229 #define WLZEFF_PIC_OFF_BYTEPIX          (14)
00230 #define WLZEFF_PIC_OFF_MERGED           (50)
00231 #define WLZEFF_PIC_OFF_RGB              (52)
00232 #define WLZEFF_PIC_OFF_MAGIC            (54)
00233 #define WLZEFF_PIC_OFF_BLACKVALMERGE    (56)
00234 #define WLZEFF_PIC_OFF_WHITEVALMERGE    (58)
00235 #define WLZEFF_PIC_OFF_RGBMERGED        (60)
00236 #define WLZEFF_PIC_OFF_LENSPOWER        (64)
00237 #define WLZEFF_PIC_OFF_MAGFACTOR        (66)
00238 
00239 #define WLZEFF_PIC_HEAD_WORD_SET(H,O,V) \
00240 { \
00241   *((unsigned char *)H + O) = (unsigned char )(V & 0xff); \
00242   *((unsigned char *)H + O + 1) = (unsigned char )((V >> 8) & 0xff); \
00243 }
00244 
00245 #define WLZEFF_PIC_HEAD_WORD_GET(V,O,H) \
00246 { \
00247   V = *((unsigned char *)H + O + 1); \
00248   V <<= 8; \
00249   V |= *((unsigned char *)H + O); \
00250 }
00251 
00252 typedef struct _WlzEffPicHeader
00253 {
00254   short         nX;
00255   short         nY;
00256   short         nPic;
00257   short         blackVal;
00258   short         whiteVal;
00259   short         nBytes;           /* 1 for 8 bit pixels, 0 for 16 bit pixels */
00260   short         merged;
00261   short         colSelect;
00262   short         magic;
00263   short         blackValMerged;
00264   short         whiteValMerged;
00265   short         colSelectMerged;
00266   short         lens;
00267   float         magFactor;
00268 } WlzEffPicHeader;
00269 
00270 #define WLZEFF_PGM_MAGIC                "P5"
00271 
00272 typedef enum _WlzEffPnmType
00273 {
00274   WLZEFF_PNM_TYPE_NONE =                (0),
00275   WLZEFF_PNM_TYPE_PBM_ASC,
00276   WLZEFF_PNM_TYPE_PBM_BIN,
00277   WLZEFF_PNM_TYPE_PGM_ASC,
00278   WLZEFF_PNM_TYPE_PGM_BIN,
00279   WLZEFF_PNM_TYPE_PPM_ASC,
00280   WLZEFF_PNM_TYPE_PPM_BIN
00281 } WlzEffPnmType;
00282 
00283 typedef struct _WlzEffStackCtrHeader
00284 {
00285   WlzIVertex3   volOrigin;
00286   WlzIVertex3   volSize;
00287   WlzFVertex3   voxSize;
00288 } WlzEffStackCtrHeader;
00289 
00290 #define WLZEFF_STACK_NAMEDIGITS         (8)
00291 
00292 #define WLZEFF_STACK_CTR_IDENT          "ident"
00293 #define WLZEFF_STACK_CTR_IDENTSTR       "WLZSTACKCTR"
00294 #define WLZEFF_STACK_CTR_IDENTVERSION   "1.0"
00295 #define WLZEFF_STACK_CTR_VOLORIGIN      "volume origin"
00296 #define WLZEFF_STACK_CTR_VOLSIZE        "volume size"
00297 #define WLZEFF_STACK_CTR_VOXSIZE        "voxel size"
00298 #define WLZEFF_STACK_CTR_FILES          "files"
00299 #define WLZEFF_STACK_CTR_COMMENT        "#"
00300 #define WLZEFF_STACK_CTR_FIELDSEP       ":"
00301 #define WLZEFF_STACK_CTR_RECORDMAX      (1024)
00302 
00303 #define WLZEFF_SLC_MAGIC                (11111)
00304 
00305 typedef enum _WlzEffSlcDataUnits
00306 {
00307   WLZEFF_SLC_DATAUNITS_METER,
00308   WLZEFF_SLC_DATAUNITS_MILLIMETER,
00309   WLZEFF_SLC_DATAUNITS_MICROMETER,
00310   WLZEFF_SLC_DATAUNITS_FOOT
00311 } WlzEffSlcDataUnits;
00312 
00313 typedef enum _WlzEffSlcDataSource
00314 {
00315   WLZEFF_SLC_DATASRC_BIORAD,
00316   WLZEFF_SLC_DATASRC_MRI,
00317   WLZEFF_SLC_DATASRC_CT,
00318   WLZEFF_SLC_DATASRC_SIM,
00319   WLZEFF_SLC_DATASRC_BINVOX,
00320   WLZEFF_SLC_DATASRC_FUZVOX,
00321   WLZEFF_SLC_DATASRC_OTHER
00322 } WlzEffSlcDataSource;
00323 
00324 typedef enum _WlzEffSlcDataMod
00325 {
00326   WLZEFF_SLC_DATAMOD_ORIGINAL,
00327   WLZEFF_SLC_DATAMOD_RESAMPLED,
00328   WLZEFF_SLC_DATAMOD_FILTERED,
00329   WLZEFF_SLC_DATAMOD_RESANDFILT,
00330   WLZEFF_SLC_DATAMOD_OTHER
00331 } WlzEffSlcDataMod;
00332 
00333 typedef struct _WlzEffSlcHeader
00334 {
00335   int           magic;
00336   WlzIVertex3   size;
00337   int           bits;
00338   WlzFVertex3   spacing;
00339   int           units;
00340   int           source;
00341   int           modification;
00342   int           compression;
00343   WlzIVertex2   iconSize;
00344   unsigned char *icon;          /* Three components R, G, B each of iconSize */
00345 } WlzEffSlcHeader;
00346 
00347 #define WLZEFF_VFF_REC_LEN_MAX          (256)
00348 
00349 typedef enum _WlzEffVffRecord
00350 {
00351   WLZEFF_VFF_REC_NONE =                 (0),
00352   WLZEFF_VFF_REC_NCAA,
00353   WLZEFF_VFF_REC_TYPE,
00354   WLZEFF_VFF_REC_FORMAT,
00355   WLZEFF_VFF_REC_RANK,
00356   WLZEFF_VFF_REC_BANDS,
00357   WLZEFF_VFF_REC_BITS,
00358   WLZEFF_VFF_REC_RAWSIZE,
00359   WLZEFF_VFF_REC_SIZE,
00360   WLZEFF_VFF_REC_ORIGIN,
00361   WLZEFF_VFF_REC_EXTENT,
00362   WLZEFF_VFF_REC_ASPECT
00363 } WlzEffVffRecord;
00364 
00365 typedef enum _WlzEffVffFormat
00366 {
00367   WLZEFF_VFF_FORMAT_NONE =              (0),
00368   WLZEFF_VFF_FORMAT_BASE,
00369   WLZEFF_VFF_FORMAT_SLICE
00370 } WlzEffVffFormat;
00371 
00372 typedef enum _WlzEffVffType
00373 {
00374   WLZEFF_VFF_TYPE_NONE =                (0),
00375   WLZEFF_VFF_TYPE_CONNECTIVITY,
00376   WLZEFF_VFF_TYPE_INCLUDE,
00377   WLZEFF_VFF_TYPE_NURBPATCH,
00378   WLZEFF_VFF_TYPE_RASTER,
00379   WLZEFF_VFF_TYPE_VERTICIES
00380 } WlzEffVffType;
00381 
00382 typedef struct _WlzEffVffHeader
00383 {
00384   int           ncaa;
00385   WlzEffVffType   type;
00386   WlzEffVffFormat format;
00387   int           rank;
00388   int           bands;
00389   int           bits;
00390   int           rawsize;
00391   WlzIVertex3   size;
00392   WlzDVertex3   origin;
00393   WlzDVertex3   extent;
00394   WlzDVertex3   aspect;
00395 } WlzEffVffHeader;
00396 
00397 #define WLZEFF_VTK_VERSION_MAJOR        (1)
00398 #define WLZEFF_VTK_VERSION_MINOR        (0)
00399 
00400 typedef enum _WlzEffVtkDataType
00401 {
00402   WLZEFF_VTK_DATATYPE_ASCII,
00403   WLZEFF_VTK_DATATYPE_BINARY
00404 } WlzEffVtkDataType;
00405 
00406 typedef enum _WlzEffVtkType
00407 {
00408   WLZEFF_VTK_TYPE_STRUCTURED_POINTS,
00409   WLZEFF_VTK_TYPE_STRUCTURED_GRID,
00410   WLZEFF_VTK_TYPE_UNSTRUCTURED_GRID,
00411   WLZEFF_VTK_TYPE_POLYDATA,
00412   WLZEFF_VTK_TYPE_RECTILNEAR_GRID
00413 } WlzEffVtkType;
00414 
00415 typedef enum _WlzEffVtkPolyDataType
00416 {
00417   WLZEFF_VTK_POLYDATATYPE_POINTS,
00418   WLZEFF_VTK_POLYDATATYPE_VERTICIES,
00419   WLZEFF_VTK_POLYDATATYPE_LINES,
00420   WLZEFF_VTK_POLYDATATYPE_POLYGONS,
00421   WLZEFF_VTK_POLYDATATYPE_TRIANGLE_STRIPS
00422 } WlzEffVtkPolyDataType;
00423 
00424 typedef enum _WlzEffVtkUnstructuredGridType
00425 {
00426   WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_CELLS,
00427   WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_CELL_TYPES,
00428   WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_LOOKUP_TABLE,
00429   WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_POINT_DATA,
00430   WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_POINTS,
00431   WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_SCALARS,
00432   WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_VECTORS
00433 } WlzEffVtkUnstructuredGridType;
00434 
00435 typedef struct _WlzEffVtkHeader
00436 {
00437   int           versionMajor;
00438   int           versionMinor;
00439   char          title[256];
00440   WlzEffVtkDataType dataType;
00441   WlzEffVtkType type;
00442 } WlzEffVtkHeader;
00443 
00444 /* IPLab format */
00445 
00446 typedef enum _WlzEffIPLType
00447 {
00448   WLZEFF_IPL_TYPE_UBYTE         = 0,
00449   WLZEFF_IPL_TYPE_SHORT         = 1,
00450   WLZEFF_IPL_TYPE_INT           = 2,
00451   WLZEFF_IPL_TYPE_FLOAT         = 3,
00452   WLZEFF_IPL_TYPE_COL_16        = 4,
00453   WLZEFF_IPL_TYPE_COL_24        = 5,
00454   WLZEFF_IPL_TYPE_U_16          = 6,
00455   WLZEFF_IPL_TYPE_LAST
00456 } WlzEffIPLType;
00457 
00458 typedef void * WlzIPLCSpecArray;
00459 
00460 typedef struct _WlzEffIPLHeader
00461 {
00462   char          version[5];
00463   unsigned char format;
00464   WlzEffIPLType dType;
00465   int           nWidth;
00466   int           nHeight;
00467   int           nFrames;
00468   char          fileClutID;
00469   int           overlayInFile;
00470   char          viewMode;
00471   double        delta;
00472   char          units[11];
00473   char          normType;
00474   char          normSource;
00475   int           numRegNarks;
00476   double        normMin;
00477   double        normMax;
00478   WlzIPLCSpecArray      colorTable;
00479 }WlzEffIPLHeader;
00480 
00481 /*!
00482 * \enum         _WlzEffAmToken
00483 * \ingroup      WlzExtFF
00484 * \brief        Tokens for parsing the headers of Amira lattice files.
00485 *               Typedef: ::WlzEffAmToken
00486 */
00487 typedef enum _WlzEffAmToken
00488 {
00489   WLZEFF_AM_TOKEN_NONE          = (0),
00490   WLZEFF_AM_TOKEN_BOUNDINGBOX,
00491   WLZEFF_AM_TOKEN_CLOSE,
00492   WLZEFF_AM_TOKEN_COLOR,
00493   WLZEFF_AM_TOKEN_COLORMAP,
00494   WLZEFF_AM_TOKEN_CONTENT,
00495   WLZEFF_AM_TOKEN_COORDTYPE,
00496   WLZEFF_AM_TOKEN_DEFINE,
00497   WLZEFF_AM_TOKEN_EXPRESSION,
00498   WLZEFF_AM_TOKEN_HASH,
00499   WLZEFF_AM_TOKEN_ID,
00500   WLZEFF_AM_TOKEN_IMAGEDATA,
00501   WLZEFF_AM_TOKEN_LATTICE,
00502   WLZEFF_AM_TOKEN_MATERIALS,
00503   WLZEFF_AM_TOKEN_NAME,
00504   WLZEFF_AM_TOKEN_OPEN,
00505   WLZEFF_AM_TOKEN_PARAMETERS,
00506   WLZEFF_AM_TOKEN_SEEDS,
00507   WLZEFF_AM_TOKEN_LIMITS,
00508   WLZEFF_AM_TOKEN_TIFF,
00509   WLZEFF_AM_TOKEN_TRANSFORM
00510 } WlzEffAmToken;
00511 
00512 /*!
00513 * \enum         _WlzEffAmDim
00514 * \ingroup      WlzExtFF
00515 * \brief        Dimension of the data.
00516 *               Typedef: ::WlzEffAmDim
00517 */
00518 typedef enum _WlzEffAmDim
00519 {
00520   WLZEFF_AM_DIM_NONE            = (0),  /*!< Dimension unknown. */
00521   WLZEFF_AM_DIM_2               = (2),  /*!< 2D. */
00522   WLZEFF_AM_DIM_3               = (3)   /*!< 3D. */
00523 } WlzEffAmDim;
00524 
00525 /*!
00526 * \enum         _WlzEffAmEndian
00527 * \ingroup      WlzExtFF
00528 * \brief        Big or little endian binary data. The values endian enum
00529 *               must be kept distinct from the dimension enum values
00530 *               (apart from none).
00531 *               Typedef: ::WlzEffAmFormat
00532 */
00533 typedef enum _WlzEffAmEndian
00534 {
00535   WLZEFF_AM_ENDIAN_NONE         = (0),  /*!< Unknown endianness. */
00536   WLZEFF_AM_ENDIAN_BIG          = (10), /*!< Big endian. */
00537   WLZEFF_AM_ENDIAN_LITTLE       = (11)  /*!< Little endian. */
00538 } WlzEffAmEndian;
00539 
00540 /*!
00541 * \enum         _WlzEffAmFormat
00542 * \ingroup      WlzExtFF
00543 * \brief        ASCII or binary data.
00544 *               Typedef: ::WlzEffAmFormat
00545 */
00546 typedef enum _WlzEffAmFormat
00547 {
00548   WLZEFF_AM_FMT_NONE            = (0),  /*!< Unknown data format. */
00549   WLZEFF_AM_FMT_BINARY          = (1),  /*!< Header ascii, Binary data. */
00550   WLZEFF_AM_FMT_ASCII           = (2)   /*!< Ascii header and data. */
00551 } WlzEffAmFormat;
00552 
00553 /*!
00554 * \enum         _WlzEffAmDatType
00555 * \ingroup      WlzExtFF
00556 * \brief        Type of data: byte, ...
00557 *               Typedef: ::WlzEffAmDatType
00558 */
00559 typedef enum _WlzEffAmDatType
00560 {
00561   WLZEFF_AM_DATTYPE_NONE        = (0),  /*!< Unknown data type. */
00562   WLZEFF_AM_DATTYPE_BYTE        = (1),  /*!< Byte (8 bit) data. */
00563   WLZEFF_AM_DATTYPE_SHORT       = (2)   /*!< Short (16 bit) data. */
00564 } WlzEffAmDatType;
00565 
00566 /*!
00567 * \enum         _WlzEffAmCoordType
00568 * \ingroup      WlzExtFF
00569 * \brief        Type of coordinate system.
00570 *               Typedef: ::WlzEffAmCoordType
00571 */
00572 typedef enum _WlzEffAmCoordType
00573 {
00574   WLZEFF_AM_COORDTYPE_NONE      = (0),  /*!< Unknown coordinate type. */
00575   WLZEFF_AM_COORDTYPE_UNITFORM  = (1)   /*!< Uniform coordinates. */
00576 } WlzEffAmCoordType;
00577 
00578 /*!
00579 * \enum         _WlzEffAmLatComp
00580 * \ingroup      WlzExtFF
00581 * \brief        Type of compression used.
00582 *               Typedef: ::WlzEffAmLatComp
00583 */
00584 typedef enum _WlzEffAmLatComp
00585 {
00586   WLZEFF_AM_LATCOMP_NONE        = (0),  /*!< No compression. */
00587   WLZEFF_AM_LATCOMP_HXBYTERLE   = (1)   /*!< Run length encoded bytes. */
00588 } WlzEffAmLatComp;
00589 
00590 /*!
00591 * \enum         _WlzEffAmLatType
00592 * \ingroup      WlzExtFF
00593 * \brief        Type of lattice: uniform, ...
00594 *               Typedef: ::WlzEffAmLatType
00595 */
00596 typedef enum    _WlzEffAmLatType
00597 {
00598   WLZEFF_AM_LATTYPE_NONE        = (0),  /*!< Unknown lattice type. */
00599   WLZEFF_AM_LATTYPE_DATA        = (1),  /*!< Voxel lattice data. */
00600   WLZEFF_AM_LATTYPE_LABELS      = (2)   /*!< Domain lattice data. */
00601 } WlzEffAmLatType;
00602 
00603 /*!
00604 * \struct       _WlzEffAmMaterial
00605 * \ingroup      WlzExtFF
00606 * \brief        Item in an Amira material list.
00607 *               Typedef: ::WlzEffAmMaterial
00608 */
00609 typedef struct _WlzEffAmMaterial
00610 {
00611   int                   id;             /*!< Index in lattice labels. */
00612   double                color[3];       /*!< RGB colour components. */
00613   char                  *name;          /*!< Material name. Should be free'd
00614                                             using AlcFree(). */
00615   struct _WlzEffAmMaterial *next;       /*!< Next material in list. */
00616   struct _WlzEffAmMaterial *prev;       /*!< Previous material in list */
00617 } WlzEffAmMaterial;
00618 
00619 /*!
00620 * \struct       _WlzEffAmHead
00621 * \ingroup      WlzExtFF
00622 * \brief        Head of a list of Amira materials.
00623 *               Typedef: ::WlzEffAmHead
00624 */
00625 typedef struct _WlzEffAmHead
00626 {
00627   int                   versionMajor;
00628   int                   versionMinor;
00629   WlzEffAmDim           dim;            /*!< Dimension of the data. */
00630   WlzEffAmFormat        fmt;            /*!< Data format. */
00631   WlzEffAmEndian        endian;         /*!< Whether the binary data in a file
00632                                              is big or little endian? */
00633   WlzEffAmLatType       latType;        /*!< Lattice type. */
00634   WlzEffAmDatType       latDatType;     /*!< Lattice data type. */
00635   WlzEffAmCoordType     coordType;      /*!< Coordinate type. */
00636   WlzDBox3              bBox;           /*!< Real world coordinates of the
00637                                              bounding box. */
00638   WlzIVertex3           latSize;        /*!< Lattice size. */
00639   int                   latBytes;       /*!< Number of bytes to read. */
00640   int                   latLabel;       /*!< Label for lattice. */
00641   WlzEffAmLatComp       latComp;        /*!< Lattice compression. */
00642   int                   matCount;       /*!< Number of materials. */
00643   WlzEffAmMaterial      *materials;     /*!< Linked list of materials, with
00644                                              the first item in the list having
00645                                              a NULL 'prev' entry and the last
00646                                              having a NULL 'next' entry. */
00647   char                  *imageData;     /*!< Associated image file. */
00648 } WlzEffAmHead;
00649 
00650 /*!
00651 * \struct       _WlzEffBibWarpInputThresholdParamsStruct
00652 * \brief        Bibfile threshold parameters record.
00653 *               Typedef: ::WlzEffBibWarpInputThresholdParamsStruct
00654 */
00655 typedef struct _WlzEffBibWarpInputThresholdParamsStruct
00656 {
00657   WlzRGBAThresholdType  thresholdType;  /*!< Threshold type - single, multi etc. */
00658   WlzRGBAColorSpace     threshRGBSpace; /*!< Colour space */
00659   WlzRGBAColorChannel   threshColorChannel; /*!< Colour channel */
00660   int           threshRangeLow;         /*!< Single channel low threshold value */
00661   int           threshRangeHigh;        /*!< Single channel high threshold value */
00662   int           threshRangeRGBLow[3];   /*!< Multi channel low threshold value */
00663   int           threshRangeRGBHigh[3];  /*!< Multi channel high threshold value */
00664   WlzUInt       threshRGBCombination;   /*!< Colour combination logic mask */
00665   WlzPixelV     lowRGBPoint;    /*!< Low-point for slice/box/ball threshold */
00666   WlzPixelV     highRGBPoint;   /*!< High-point for slice/box/ball threshold */
00667   double        colorEllipseEcc;        /*!< Ball eccentricity */
00668   int           globalThreshFlg;        /*!< Global thresholding flag */
00669   WlzIVertex2   globalThreshVtx;        /*!< Global threshold vertex */
00670   int           incrThreshFlg;          /*!< Incremental threshold flag */
00671   int           pickThreshFlg;          /*!< Pick mode (endpoint values) flag */
00672   int           distanceThreshFlg;      /*!< Distance mode flag */
00673 
00674 } WlzEffBibWarpInputThresholdParamsStruct;
00675 
00676 /* Analyze 7.5 file format types. */
00677 
00678 /*!
00679 * \enum         _WlzEffAnlDataType
00680 * \ingroup      WlzExtFF
00681 * \brief        Valid Analyze data type values.
00682 *               Typedef: ::WlzEffAnlDataType
00683 */
00684 typedef enum _WlzEffAnlDataType
00685 {
00686   WLZEFF_ANL_DT_NONE =          0,
00687   WLZEFF_ANL_DT_UNKOWN =        0,
00688   WLZEFF_ANL_DT_BINARY =        1,
00689   WLZEFF_ANL_DT_UNSIGNED_CHAR = 2,
00690   WLZEFF_ANL_DT_SIGNED_SHORT =  4,
00691   WLZEFF_ANL_DT_SIGNED_INT =    8,
00692   WLZEFF_ANL_DT_FLOAT =         16,
00693   WLZEFF_ANL_DT_COMPLEX =       32,
00694   WLZEFF_ANL_DT_DOUBLE =        64,
00695   WLZEFF_ANL_DT_RGB =           128,
00696   WLZEFF_ANL_DT_ALL =           255
00697 } WlzEffAnlDataType;
00698 
00699 /*!
00700 * \enum         _WlzEffAnlDataType
00701 * \ingroup      WlzExtFF
00702 * \brief        Valid Analyze data type values.
00703 *               Typedef: ::WlzEffAnlOrient
00704 */
00705 typedef enum _WlzEffAnlOrient
00706 {
00707   WLZEFF_ANL_ORIENT_TU =        0,      /*!< Transverse unflipped. */
00708   WLZEFF_ANL_ORIENT_CU =        1,      /*!< Coronal unflipped. */
00709   WLZEFF_ANL_ORIENT_SU =        2,      /*!< Sagital unflipped. */
00710   WLZEFF_ANL_ORIENT_TF =        3,      /*!< Transverse flipped. */
00711   WLZEFF_ANL_ORIENT_CF =        4,      /*!< Coronal flipped. */
00712   WLZEFF_ANL_ORIENT_SF =        5       /*!< Sagital flipped. */
00713 } WlzEffAnlOrient;
00714 
00715 /*!
00716 * \struct       _WlzEffAnlComplex
00717 * \ingroup      WlzExtFF
00718 * \brief        Analyze 7.5 complex number representation.
00719 *               Typedef: ::WlzEffAnlComplex
00720 */
00721 typedef struct _WlzEffAnlComplex
00722 {
00723   float         real;
00724   float         imag;
00725 } WlzEffAnlComplex;
00726 
00727 /*!
00728 * \struct       _WlzEffAnlHeaderKey
00729 * \ingroup      WlzExtFF
00730 * \brief        Analyze 7.5 file header key.
00731 *               Typedef: ::WlzEffAnlFileKey
00732 */
00733 typedef struct _WlzEffAnlHeaderKey
00734 {
00735   int           hdrSz;                  /*!< Size of header in bytes: 4
00736                                             bytes. */
00737   char          dataType[10];           /*!< Data type: 10 bytes. */
00738   char          dbName[18];             /*!< 18 bytes. */
00739   int           extents;                /*!< Should be 16384: 4 bytes. */
00740   short         sessionErr;             /*!< Session error: 2 bytes. */
00741   char          regular;                /*!< Must be 'r' to indicate that the
00742                                             images are the same size: 1
00743                                             byte. */
00744   char          hKeyUn0;                /*!< 1 byte.
00745                                             Total = 40 bytes. */
00746 } WlzEffAnlFileKey;
00747 
00748 /*!
00749 * \struct       _WlzEffAnlImageDim
00750 * \ingroup      WlzExtFF
00751 * \brief        Analyze 7.5 file header structure for the image dimensions.
00752 *               Typedef: ::WlzEffAnlImageDim
00753 */
00754 typedef struct _WlzEffAnlImageDim
00755 {
00756   short         dim[8];                 /*!< Array of the image dimensions.
00757                                             The number of dimensions is
00758                                             usually 4 with;
00759                                             [0] = number of dimensions,
00760                                             [1] = number of columns (X),
00761                                             [2] = number of lines (Y),
00762                                             [3] = number of planes (Z),
00763                                             [4] = number of time points.
00764                                             16 bytes. */
00765   short         unused8;                /*!< Unused. 2 bytes. */
00766   short         unused9;                /*!< Unused. 2 bytes. */
00767   short         unused10;               /*!< Unused. 2 bytes. */
00768   short         unused11;               /*!< Unused. 2 bytes. */
00769   short         unused12;               /*!< Unused. 2 bytes. */
00770   short         unused13;               /*!< Unused. 2 bytes. */
00771   short         unused14;               /*!< Unused. 2 bytes. */
00772   short         dataType;               /*!< The data type for the image, which
00773                                             must be a member of
00774                                             enum::_WlzEffAnlDataType.
00775                                             2 bytes. */
00776   short         bitPix;                 /*!< Number of bits per pixel, which
00777                                             must be one of; 1, 8, 16, 32 or
00778                                             64. 2 bytes. */
00779   short         dimUn0;                 /*!< 2 bytes. */
00780   float         pixdim[8];              /*!< Real world pixel dimensions in mm
00781                                             and ms. The number of dimensions is
00782                                             usually 4 with;
00783                                             [0] = number of dimensions,
00784                                             [1] = x size (pixel width),
00785                                             [2] = y size (pixel height),
00786                                             [3] = z size (voxel depth),
00787                                             [4] = time interval.
00788                                             32 bytes.*/
00789   float         voxOffset;              /*!< The byte offset in the ".img" file
00790                                             at which the pixels start.
00791                                             If negative then the absolute value
00792                                             applies to every image in the file.
00793                                             4 bytes. */
00794   float         fUnused1;               /*!< 4 bytes. */
00795   float         fUnused2;               /*!< 4 bytes. */
00796   float         fUnused3;               /*!< 4 bytes. */
00797   float         calMax;                 /*!< Maximum calibratin value.
00798                                             4 bytes. */
00799   float         calMin;                 /*!< Minimum calibratin value.
00800                                             4 bytes. */
00801   float         compressed;             /*!< 4 bytes. */
00802   float         verified;               /*!< 4 bytes. */
00803   int           glMax;                  /*!< Maximum pixel value. 4 bytes. */
00804   int           glMin;                  /*!< Minimum pixel value. 4 bytes.
00805                                             Total = 108 bytes.*/
00806 } WlzEffAnlImageDim;
00807 
00808 
00809 /*!
00810 * \struct       _WlzEffAnlDataHistory
00811 * \ingroup      WlzExtFF
00812 * \brief        Analyze 7.5 file header structure for the image history.
00813 *               Typedef: ::WlzEffAnlDataHistory
00814 */
00815 typedef struct _WlzEffAnlDataHistory
00816 {
00817   char          descrip[80];            /*!< Description: 80 bytes. */
00818   char          auxFile[24];            /*!< 24 bytes. */
00819   char          orient;                 /*!< Slice orientation, which must
00820                                             be a member of
00821                                             enum::_WlzEffAnlOrient.
00822                                             This may be used by Analyze to
00823                                             determine whether images should be
00824                                             flipped before being displayed.
00825                                             1 byte. */
00826   char          originator[10];         /*!< 10 bytes. */
00827   char          generated[10];          /*!< 10 bytes. */
00828   char          scanNum[10];            /*!< 10 bytes. */
00829   char          patientId[10];          /*!< 10 bytes. */
00830   char          expDate[10];            /*!< 10 bytes. */
00831   char          expTime[10];            /*!< 10 bytes. */
00832   char          hisUn0[3];              /*!< 3 bytes. */
00833   int           views;                  /*!< 4 bytes. */
00834   int           volsAdded;              /*!< 4 bytes. */
00835   int           startField;             /*!< 4 bytes. */
00836   int           fieldSkip;              /*!< 4 bytes. */
00837   int           oMax;                   /*!< 4 bytes. */
00838   int           oMin;                   /*!< 4 bytes. */
00839   int           sMax;                   /*!< 4 bytes. */
00840   int           sMin;                   /*!< 4 bytes. */
00841 } WlzEffAnlDataHistory;
00842 
00843 /*!
00844 * \struct       _WlzEffAnlDsr
00845 * \ingroup      WlzExtFF
00846 * \brief        Analyze 7.5 file header.
00847 *               Typedef: ::WlzEffAnlDsr
00848 */
00849 typedef struct _WlzEffAnlDsr
00850 {
00851   struct _WlzEffAnlHeaderKey    hk;     /*!< 40 bytes. */
00852   struct _WlzEffAnlImageDim     dim;    /*!< 108 bytes. */
00853   struct _WlzEffAnlDataHistory  hist;   /*!< 200 bytes. */
00854 } WlzEffAnlDsr;
00855 
00856 #endif /* WLZ_EXT_BIND */
00857 
00858 #ifndef WLZ_EXT_BIND
00859 #ifdef  __cplusplus
00860 }
00861 #endif /* __cplusplus */
00862 #endif /* WLZ_EXT_BIND */
00863 
00864 #endif /* ! WLZ_EXTFFTYPE_H */