00001 #ifndef __WORKSPACE_H__
00002 #define __WORKSPACE_H__
00003
00004
00005
00006
00007
00008
00009
00010 #include "configure.h"
00011 #include "prjmgrfuncs.h"
00012 #include "projectionmgr.h"
00013 #include "imagestackmgr.h"
00014 #include "handle.h"
00015 #include "imagerw.h"
00016 #include "progress.h"
00017 #include "vectori.h"
00018 #include "imalign.h"
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 typedef enum
00085 {
00086 vVWS_VIEW_FORWARD = vPROJ_Z,
00087 vVWS_VIEW_SIDE = vPROJ_X,
00088 vVWS_VIEW_TOP = vPROJ_Y
00089 }
00090 vVWS_VIEW_TYPE;
00091
00092
00093 typedef enum
00094 {
00095
00096
00097 vCROP_LEFT,
00098 vCROP_RIGHT,
00099
00100
00101
00102 vCROP_TOP,
00103 vCROP_BOTTOM,
00104
00105
00106
00107 vCROP_NEAR,
00108 vCROP_FAR
00109 }
00110 vCROP_TYPE;
00111
00112
00113
00114
00115
00116
00117 typedef enum
00118 {
00119 vVWS_NO_ERROR,
00120 vVWS_ERROR_OUT_OF_MEMORY,
00121 vVWS_ERROR_INVALID_VWS_DIR,
00122 vVWS_ERROR_INVALID_STACK_DIR,
00123 vVWS_ERROR_INVALID_VWS_FNAME,
00124 vVWS_ERROR_WORKSPACE,
00125 vVWS_ERROR_STACK_PROPERTIES,
00126 vVWS_ERROR_REMOVE,
00127 vVWS_ERROR_INVALID_FILTER,
00128
00129 vVWS_ERROR_PROJ_OUT_OF_MEMORY,
00130 vVWS_ERROR_PROJ_MISMATCH_PIXELS,
00131 vVWS_ERROR_PROJ_MISMATCH_DIMENSIONS,
00132 vVWS_ERROR_PROJ_MULTIPLE_FILE_TYPES,
00133 vVWS_ERROR_PROJ_FILE_OPEN,
00134 vVWS_ERROR_PROJ_FILE_READ,
00135 vVWS_ERROR_PROJ_FILE_WRITE,
00136 vVWS_ERROR_PROJ_FILE_INVALID,
00137 vVWS_ERROR_PROJ_FILE_TYPE,
00138 vVWS_ERROR_PROJ_UNSUPPORTED,
00139 vVWS_ERROR_PROJ_FUNCTION,
00140 vVWS_ERROR_PROJ_HANDLE,
00141
00142 vVWS_ERROR_FILE_LIST_NO_FILES,
00143 vVWS_ERROR_FILE_LIST_INVALID_SPEC,
00144 vVWS_ERROR_FILE_LIST_OUT_OF_MEMORY,
00145
00146 vVWS_ERROR_NEW_VWS_DIR_EXISTS,
00147 vVWS_ERROR_NEW_VWS_DIR_PATH,
00148
00149 vVWS_ERROR_INTERNAL,
00150
00151 vVWS_ERROR_VWS_DIR_PATH_LENGTH,
00152
00153 vVWS_ERROR_READ_CUBE_PIXEL_CODE,
00154 vVWS_ERROR_CREATE_CUBE_PIXEL_CODE,
00155
00156 vVWS_ERROR_STACK_HANDLE,
00157
00158 vVWS_ERROR_MULTIPLE_2D_3D,
00159
00160 vVWS_ERROR_SENTINEL
00161 }
00162 vVWS_ERROR_CODE;
00163
00164
00165 #define vNUM_VWS_ERROR_CODES ( ( vINT )vVWS_ERROR_SENTINEL )
00166 #define vWORKSPACE_PROGRESS_CANCEL vVWS_ERROR_SENTINEL
00167 #define vWORKSPACE_FILE_EXTENSION ".vws"
00168
00169
00170 typedef struct tagVOXELSARGS
00171 {
00172 vUNITS_TYPE units;
00173 vFLOAT spacingX;
00174 vFLOAT spacingY;
00175 vFLOAT spacingZ;
00176 }
00177 VOXELSARGS;
00178
00179 #define vDEFAULT_VOXEL_UNITS vUNITS_MICRONS
00180 #define vDEFAULT_VOXEL_SPACING_X 1.0f
00181 #define vDEFAULT_VOXEL_SPACING_Y vDEFAULT_VOXEL_SPACING_X
00182 #define vDEFAULT_VOXEL_SPACING_Z vDEFAULT_VOXEL_SPACING_X
00183
00184
00185 typedef struct tagWorkspace
00186 {
00187 ProjectionManager *projectionManager;
00188 ImageStackManager *imageStackManager;
00189
00190
00191 vHIMAGESTACK *imageStacks;
00192
00193 vSIZE imageStackCapacity;
00194
00195 vSIZE numStacks;
00196
00197
00198
00199 vHIMAGESTACK *selectedStacks;
00200 vSIZE numSelectedStacks;
00201
00202
00203 vHIMAGESTACK hCropStack;
00204
00205
00206 vPIXEL_CODE_TYPE pixelCode;
00207
00208
00209 VOXELSARGS voxels;
00210
00211
00212
00213 vINDEX uniqueIndex;
00214
00215
00216 vUINT backgroundColor;
00217 vUINT selectedStackBorderColor;
00218 vUINT gridLineColor;
00219 vUINT gridPointColor;
00220 vUINT gridIsVisible;
00221 vINT gridStep;
00222 vUINT gridFlags;
00223 vUINT gridLineStyle;
00224 vUINT gridPointSize;
00225
00226
00227 vCHAR directory[ vMAX_PATH ];
00228 vCHAR fileName[ vMAX_PATH ];
00229 }
00230 Workspace;
00231
00232
00233
00234 #define vVWS_DEFAULT_BACKGROUND_COLOR 0xCCCCCC
00235 #define vVWS_DEFAULT_SELECTED_STACKS_BORDER_COLOR 0xFF0000
00236 #define vVWS_DEFAULT_GRID_LINE_COLOR 0x999999
00237 #define vVWS_DEFAULT_GRID_POINT_COLOR 0
00238
00239
00240
00241
00242 vSTRING GetVoxelUnitsLongString( vUNITS_TYPE type );
00243 vSTRING GetVoxelUnitsShortString( vUNITS_TYPE type );
00244
00245
00246
00247 vVWS_ERROR_CODE InitWorkspace( Workspace *vws );
00248
00249
00250 vVOID DestroyWorkspace( Workspace *vws );
00251
00252
00253
00254
00255
00256 DERIVE_PROGRESSPROCARGS( OPENWORKSPACEARGS,
00257 vUINT hwndVisual;
00258 Workspace *vws;
00259 vSTRING fullPath;
00260 );
00261
00262 vVOID OpenWorkspace( vVOID *openWorkspaceArgs );
00263
00264
00265
00266 vVWS_ERROR_CODE SaveWorkspace( Workspace *vws );
00267
00268
00269 vVWS_ERROR_CODE NewWorkspace( Workspace *vws, vSTRING fullPath );
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279 vVWS_ERROR_CODE CreateImageStack
00280 (
00281 Workspace *vws,
00282 vUINT hwndVisual,
00283 vSTRING fullPath,
00284 PROGRESSBAR *progressBar,
00285 vHIMAGESTACK *hSaveHandle,
00286 const ImageDescriptor *descriptor
00287 );
00288
00289
00290
00291 vHIMAGESTACK GetDuplicateImageStack( Workspace *vws, vHIMAGESTACK hStack );
00292
00293
00294 vSIZE GetNumImageStacks( Workspace *vws );
00295 vSIZE GetNumSelectedStacks( Workspace *vws );
00296 vSTRING GetWorkspaceDirectory( Workspace *vws );
00297 vSTRING GetWorkspaceFileName( Workspace *vws );
00298
00299
00300 vVOID GetWorkspaceFullPath( Workspace *vws, vSTRING fullPath );
00301
00302 vFLOAT GetWorkspaceVoxelSpacing( Workspace *vws, vDIM_TYPE which );
00303 vVOID SetWorkspaceVoxelSpacing( Workspace *vws, vDIM_TYPE which, vFLOAT spacing );
00304
00305
00306
00307 vVOID GetViewDependentVoxelSpacing
00308 (
00309 Workspace *vws,
00310 vVWS_VIEW_TYPE viewType,
00311 vFLOAT *spacingX,
00312 vFLOAT *spacingY
00313 );
00314
00315 vUNITS_TYPE GetWorkspaceVoxelUnits( Workspace *vws );
00316 vVOID SetWorkspaceVoxelUnits( Workspace *vws, vUNITS_TYPE type );
00317
00318 vPIXEL_CODE_TYPE GetWorkspacePixelCode( Workspace *vws );
00319
00320
00321
00322 vUINT GetImageStackProjectionsReferenceCount( Workspace *vws, vHIMAGESTACK hStack );
00323
00324
00325
00326 vHIMAGESTACK GetImageStackHandle( Workspace *vws, vINDEX index );
00327
00328
00329 vHIMAGESTACK GetSelectedStackHandle( Workspace *vws, vINDEX index );
00330
00331
00332 ImageStack* GetImageStack( Workspace *vws, vHIMAGESTACK hStack );
00333
00334
00335
00336
00337 vVOID SelectImageStack( Workspace *vws, vHIMAGESTACK hStack );
00338
00339 vVOID DeselectImageStack( Workspace *vws, vHIMAGESTACK hStack );
00340 vVOID DeselectAllImageStacks( Workspace *vws );
00341
00342 vBOOL ImageStackIsSelected( Workspace *vws, vHIMAGESTACK hStack );
00343
00344 vBOOL ImageStackIsInverted( Workspace *vws, vHIMAGESTACK hStack );
00345 void ImageStackSetInverted( Workspace *vws, vHIMAGESTACK hStack, vBOOL is_inverted );
00346
00347
00348
00349 vBOOL ImageStackIsOnFile( Workspace *vws, vHIMAGESTACK hStack );
00350
00351
00352
00353 vVOID GetImageStackPosition( Workspace *vws, vHIMAGESTACK hStack, Vector3i *position );
00354
00355 vVOID SaveImageStackPosition( Workspace *vws, vHIMAGESTACK hStack );
00356
00357 vVOID SwapImageStackPositions( Workspace *vws, vHIMAGESTACK hStack );
00358
00359
00360
00361 vVOID SetImageStackPosition( Workspace *vws, vHIMAGESTACK hStack, const Vector3i *const position );
00362
00363
00364
00365 const vCHAR* GetImageStackSourceDirectory( Workspace *vws, vHIMAGESTACK hStack );
00366 const vCHAR* GetImageStackFileFilter( Workspace *vws, vHIMAGESTACK hStack );
00367
00368
00369
00370 vSIZE* GetImageStackCropCube( Workspace *vws, vHIMAGESTACK hStack );
00371 vVOID SaveImageStackCropCube( Workspace *vws, vHIMAGESTACK hStack );
00372 vVOID SwapImageStackCropCubes( Workspace *vws, vHIMAGESTACK hStack );
00373
00374
00375 vVOID CopyImageStackCropCube( Workspace *vws, vHIMAGESTACK hStack, vHIMAGESTACK hCopy );
00376
00377
00378
00379 vSIZE* GetImageStackDimensions( Workspace *vws, vHIMAGESTACK hStack );
00380
00381
00382 typedef struct tagDimensions3D
00383 {
00384 vSIZE width;
00385 vSIZE height;
00386 vSIZE length;
00387 }
00388 Dimensions3D;
00389
00390
00391
00392
00393 void GetImageStackFullAndCroppedDimensions3D
00394 (
00395 Workspace *const vws,
00396 const vHIMAGESTACK hStack,
00397 Dimensions3D *const full,
00398 Dimensions3D *const cropped
00399 );
00400
00401
00402
00403 vVOID SetImageStackVisibility( Workspace *vws, vHIMAGESTACK hStack, vBOOL isVisible );
00404 vBOOL ImageStackIsVisible( Workspace *vws, vHIMAGESTACK hStack );
00405
00406
00407 vVOID SetImageStackPositionLocked( Workspace *vws, vHIMAGESTACK hStack, vBOOL isLocked );
00408 vBOOL IsImageStackPositionLocked( Workspace *vws, vHIMAGESTACK hStack );
00409
00410
00411
00412 vVOID SetSelectedCropStack( Workspace *vws );
00413 vHIMAGESTACK GetSelectedCropStack( Workspace *vws );
00414 vVOID ClearSelectedCropStack( Workspace *vws );
00415 vBOOL IsSelectedCropStack( Workspace *vws, vHIMAGESTACK hStack );
00416
00417
00418
00419 vUINT GetImageStackAlphaValue( Workspace *vws, vHIMAGESTACK hStack );
00420 vVOID SetImageStackAlphaValue( Workspace *vws, vHIMAGESTACK, vUINT alpha );
00421
00422
00423
00424 vVOID GetImageStackClientRect( Workspace *vws, vHIMAGESTACK hStack, vRECTANGLE *client );
00425 vVOID SetImageStackClientRect( Workspace *vws, vHIMAGESTACK hStack, vRECTANGLE *client );
00426
00427
00428
00429 vSTRING GetImageStackDescription( Workspace *vws, vHIMAGESTACK hStack );
00430 vVOID SetImageStackDescription( Workspace *vws, vHIMAGESTACK hStack, vSTRING description );
00431
00432
00433
00434
00435
00436 vHIMAGESTACK GetStackAtPoint( Workspace *vws, Vector2i point, vVWS_VIEW_TYPE viewType );
00437
00438
00439
00440 vBOOL SelectStackByPoint( Workspace *vws, Vector2i point, vVWS_VIEW_TYPE viewType );
00441
00442
00443
00444
00445
00446
00447 vVOID DeleteImageStacks( Workspace *vws, vHIMAGESTACK *stacks, vSIZE numStacks );
00448
00449
00450
00451
00452
00453 vVOID RestoreImageStacks( Workspace *vws, vHIMAGESTACK *stacks, vSIZE numStacks );
00454
00455
00456
00457 vVWS_ERROR_CODE RemoveImageStackProjections( Workspace *vws, vHIMAGESTACK hStack );
00458
00459
00460
00461 vVOID ReleaseImageStack( Workspace *vws, vHIMAGESTACK hStack );
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473 vVOID CropImageStack
00474 (
00475 Workspace *vws,
00476 vHIMAGESTACK hStack,
00477 vCOORD left,
00478 vCOORD top,
00479 vCOORD right,
00480 vCOORD bottom,
00481 vVWS_VIEW_TYPE viewType
00482 );
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495 vBOOL TranslateAllSelectedStacks( Workspace *vws, Vector2i offset, vVWS_VIEW_TYPE viewType );
00496
00497
00498
00499 vVOID GetImageStackProjection
00500 (
00501 Workspace *vws,
00502 vHIMAGESTACK hStack,
00503 vVWS_VIEW_TYPE viewType,
00504 ImageStackProjection *isp
00505 );
00506
00507
00508
00509
00510
00511
00512
00513
00514 vVOID SortImageStacks( Workspace *vws, vVWS_VIEW_TYPE viewType );
00515
00516
00517
00518 #define vAUTO_ALIGN_NUM_STACKS 1
00519 #define vAUTO_ALIGN_DEFAULT_OVERLAP 100
00520
00521
00522
00523
00524 typedef struct tagAutoAlignStack
00525 {
00526 Image_t image_t;
00527 IMAGEA image_a;
00528 Vector2i position;
00529 Vector3i alignedCoord;
00530 }
00531 AutoAlignStack;
00532
00533 typedef struct tagAutoAlignment
00534 {
00535 vVWS_VIEW_TYPE viewType;
00536 vSIZE overlap;
00537 AutoAlignStack stacks[ vAUTO_ALIGN_NUM_STACKS ];
00538 AutoAlignStack anchor;
00539 }
00540 AutoAlignment;
00541
00542
00543
00544
00545 vVWS_ERROR_CODE SetupAutoAlignment
00546 (
00547 Workspace *vws,
00548 vVWS_VIEW_TYPE viewType,
00549 vINT overlap,
00550 vHIMAGESTACK hAnchor,
00551 AutoAlignment *autoAlign
00552 );
00553
00554
00555
00556
00557
00558
00559 DERIVE_PROGRESSPROCARGS( AUTOALIGNARGS,
00560 Workspace *workspace;
00561 AutoAlignment *autoAlign;
00562 );
00563
00564 vVOID AutoAlignImageStacks( vVOID *autoAlignArgs );
00565
00566
00567
00568
00569 vVOID SetAlignedImageStackCoords( Workspace *vws, AutoAlignment *autoAlign );
00570
00571
00572
00573
00574 vVOID CleanupAutoAlignment( AutoAlignment *autoAlign );
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584 #endif
00585