/*! * - Function: WlzEffWriteMeshTransform3DWithoutDisplacementVTK * - Returns: none * - Purpose: output the orginal mesh. * - Parameters: * -# *fp: pointer pointing to a specific file. * -# wmt3D: mesh transform. * - Author: J. Rao, R. Baldock and B. Hill */ static WlzErrorNum ReadBibFile(FILE *inFile, char *inFileStr, WlzThreeDViewStruct *wlzViewStr ) { WlzErrorNum errNum = WLZ_ERR_NONE; BibFileRecord *bibfileRecord; BibFileError bibFileErr; char *errMsg; if((inFile = fopen(inFileStr, "r")) == NULL ) { printf("cannot open the input sample bib file.\n"); exit(1); } /* read the bibfile */ bibFileErr = BibFileRecordRead(&bibfileRecord, &errMsg, inFile); while( bibFileErr == BIBFILE_ER_NONE ){ if( !strncmp(bibfileRecord->name, "Wlz3DSectionViewParams", 22) ){ /* allocate memory for wlzViewStr */ WlzEffBibParse3DSectionViewParamsRecord(bibfileRecord, wlzViewStr); } BibFileRecordFree(&bibfileRecord); bibFileErr = BibFileRecordRead(&bibfileRecord, &errMsg, inFile); } BibFileRecordFree(&bibfileRecord); fclose(inFile); inFile = NULL; return errNum; }
int main(int argc, char **argv) { WlzObject *obj = NULL, *nobj = NULL, *subDomain = NULL; FILE *inFP = NULL, *outFP = NULL, *trFP = NULL, *bibFP = NULL; char *outFile = NULL, *trFile = NULL, *bibFile = NULL; char optList[] = "ACLNTa:b:d:f:m:o:r:s:t:u:R:h"; int option; int i, j, iVal, timer = 0, voxRescale = 0, allFlg = 0; double dist=0.0, pitch=0.0, yaw=0.0, roll=0.0; double scale=1.0; WlzDVertex3 fixed={0.0,0.0,0.0}; WlzDVertex3 up={0.0,0.0,-1.0}; WlzThreeDViewStruct *viewStr=NULL; WlzThreeDViewMode mode=WLZ_UP_IS_UP_MODE; WlzInterpolationType interp = WLZ_INTERPOLATION_NEAREST; WlzErrorNum errNum=WLZ_ERR_NONE; BibFileRecord *bibfileRecord; BibFileError bibFileErr; struct timeval times[3]; char *errMsg; /* additional defaults */ outFile = "-"; bibFile = NULL; trFile = NULL; subDomain = NULL; /* read the argument list and check for an input file */ opterr = 0; while( (option = getopt(argc, argv, optList)) != EOF ){ switch( option ){ case 'A': allFlg = 1; break; case 'C': interp = WLZ_INTERPOLATION_CLASSIFY_1; break; case 'L': interp = WLZ_INTERPOLATION_LINEAR; break; case 'N': interp = WLZ_INTERPOLATION_NEAREST; break; case 'a': switch( sscanf(optarg, "%lg,%lg,%lg", &pitch, &yaw, &roll) ){ default: usage(argv[0]); return 1; case 2: break; case 3: mode = WLZ_ZETA_MODE; break; } break; case 'b': bibFile = optarg; break; case 'd': if( sscanf(optarg, "%lg", &dist) < 1 ){ usage(argv[0]); return 1; } break; case 'f': if( sscanf(optarg, "%lg,%lg,%lg", &(fixed.vtX), &(fixed.vtY), &(fixed.vtZ)) < 3 ){ usage(argv[0]); return 1; } break; case 'm': if( sscanf(optarg, "%d", &iVal) < 1 ){ usage(argv[0]); return 1; } else if( mode != WLZ_ZETA_MODE ){ switch( iVal ){ default: usage(argv[0]); return 1; case 0: mode = WLZ_UP_IS_UP_MODE; break; case 1: mode = WLZ_STATUE_MODE; break; case 2: mode = WLZ_ZETA_MODE; break; } } break; case 'o': outFile = optarg; break; case 'r': if( sscanf(optarg, "%d", &voxRescale) < 1 ){ usage(argv[0]); return 1; } break; case 's': if( sscanf(optarg, "%lg", &scale) < 1 ){ usage(argv[0]); return 1; } break; case 'u': if( sscanf(optarg, "%lg,%lg,%lg", &(up.vtX), &(up.vtY), &(up.vtZ)) < 3 ){ usage(argv[0]); return 1; } break; case 'R': if((inFP = fopen(optarg, "rb"))){ if((subDomain = WlzReadObj(inFP, &errNum)) == NULL){ fprintf(stderr, "%s: can't read sub-domain object %s\n", argv[0], optarg); usage(argv[0]); return 1; } fclose(inFP); } else { fprintf(stderr, "%s: can't open file %s\n", argv[0], optarg); usage(argv[0]); return 1; } break; case 'T': timer = 1; break; case 't': trFile = optarg; break; case 'h': default: usage(argv[0]); return 0; } } /* check input file/stream */ inFP = stdin; if( optind < argc ){ if( (inFP = fopen(*(argv+optind), "rb")) == NULL ){ fprintf(stderr, "%s: can't open file %s\n", argv[0], *(argv+optind)); usage(argv[0]); return 1; } } /* check output file/stream */ if( allFlg ){ if(strcmp(outFile, "-")) { /* strip any file extension */ for(i=0, j=strlen(outFile); i < strlen(outFile); i++){ if( outFile[i] == '.' ){ j = i; } } outFile[j] = '\0'; } else { outFile = "plane"; } } else { if(strcmp(outFile, "-")) { if((outFP = fopen(outFile, "wb")) == NULL) { errNum = WLZ_ERR_WRITE_EOF; } } else { outFP = stdout; } } /* create view structure */ if((viewStr = WlzMake3DViewStruct(WLZ_3D_VIEW_STRUCT, &errNum)) != NULL){ viewStr->theta = yaw * WLZ_M_PI / 180.0; viewStr->phi = pitch * WLZ_M_PI / 180.0; viewStr->zeta = roll * WLZ_M_PI / 180.0; viewStr->dist = dist; viewStr->fixed = fixed; viewStr->up = up; viewStr->view_mode = mode; viewStr->scale = scale; viewStr->voxelRescaleFlg = voxRescale; } if((errNum == WLZ_ERR_NONE) && (bibFile != NULL) && (trFile != NULL)) { fprintf(stderr, "%s: both bibfile and transform file specified.\n", argv[0]); } /* check bibfile - select first section parameters in the file */ if((errNum == WLZ_ERR_NONE) && (bibFile != NULL)){ if((bibFP = fopen(bibFile, "r")) != NULL){ bibFileErr = BibFileRecordRead(&bibfileRecord, &errMsg, bibFP); while((bibFileErr == BIBFILE_ER_NONE) && (strncmp(bibfileRecord->name, "Wlz3DSectionViewParams", 22))){ BibFileRecordFree(&bibfileRecord); bibFileErr = BibFileRecordRead(&bibfileRecord, &errMsg, bibFP); } fclose( bibFP ); if( bibFileErr != BIBFILE_ER_NONE ){ fprintf(stderr, "%s: error reading bibfile: %s\n", argv[0], errMsg); AlcFree((void *) errMsg); return 1; } WlzEffBibParse3DSectionViewParamsRecord(bibfileRecord, viewStr); BibFileRecordFree(&bibfileRecord); } else { fprintf(stderr, "%s: can't open parameter bibfile %s\n", argv[0], bibFile); return 1; } } if((errNum == WLZ_ERR_NONE) && (trFile != NULL)){ if((trFP = fopen(trFile, "r")) != NULL){ WlzObject *trObj = NULL; if((trObj = WlzReadObj(trFP, &errNum)) != NULL) { if(trObj->type != WLZ_3D_VIEW_STRUCT) { errNum = WLZ_ERR_OBJECT_TYPE; } else if (trObj->domain.core == NULL) { errNum = WLZ_ERR_DOMAIN_NULL; } else { WlzThreeDViewStruct *fViewStr; fViewStr = trObj->domain.vs3d; viewStr->theta = fViewStr->theta; viewStr->phi = fViewStr->phi; viewStr->zeta = fViewStr->zeta; viewStr->dist = fViewStr->dist; viewStr->fixed = fViewStr->fixed; viewStr->up = fViewStr->up; viewStr->view_mode = fViewStr->view_mode; viewStr->scale = fViewStr->scale; viewStr->voxelRescaleFlg = fViewStr->voxelRescaleFlg; } (void )WlzFreeObj(trObj); } } if(errNum != WLZ_ERR_NONE) { fprintf(stderr, "%s: error reading section view transform from %s.\n", argv[0], trFile); return 1; } } /* read objects and section if possible */ while((errNum == WLZ_ERR_NONE) && ((obj = WlzReadObj(inFP, &errNum)) != NULL)) { obj = WlzAssignObject(obj, &errNum); switch( obj->type ) { case WLZ_CONTOUR: case WLZ_3D_DOMAINOBJ: if(voxRescale && obj->domain.core) { viewStr->voxelSize[0] = obj->domain.p->voxel_size[0]; viewStr->voxelSize[1] = obj->domain.p->voxel_size[1]; viewStr->voxelSize[2] = obj->domain.p->voxel_size[2]; } WlzInit3DViewStruct(viewStr, obj); if(timer) { gettimeofday(times + 0, NULL); } if( allFlg ){ /* loop through all possible planes */ for(i=WLZ_NINT(viewStr->minvals.vtZ), j=0; i <= WLZ_NINT(viewStr->maxvals.vtZ); i++, j++){ viewStr->dist = i; WlzInit3DViewStruct(viewStr, obj); nobj = WlzGetSubSectionFromObject(obj, subDomain, viewStr, interp, NULL, &errNum); if( nobj != NULL){ char fileBuf[256]; sprintf(fileBuf, "%s%06d.wlz", outFile, j); if((outFP = fopen(fileBuf, "w")) != NULL){ WlzWriteObj(outFP, nobj); fclose(outFP); } } else { return errNum; } WlzFreeObj(nobj); } } else { nobj = WlzGetSubSectionFromObject(obj, subDomain, viewStr, interp, NULL, &errNum); if( nobj != NULL){ WlzWriteObj(outFP, nobj); } else { return errNum; } WlzFreeObj(nobj); } if(timer) { gettimeofday(times + 1, NULL); ALC_TIMERSUB(times + 1, times + 0, times + 2); (void )fprintf(stderr, "%s: Elapsed time = %g\n", *argv, times[2].tv_sec + (0.000001 * times[2].tv_usec)); } break; default: WlzWriteObj(outFP, obj); break; } WlzFreeObj(obj); } if(errNum == WLZ_ERR_READ_EOF) { errNum = WLZ_ERR_NONE; } if( viewStr ){ WlzFree3DViewStruct(viewStr); } if( subDomain ){ WlzFreeObj(subDomain); } return errNum; }
int main(int argc, char **argv) { WlzObject *obj, *nobj; FILE *inFP, *outFP, *bibFP; char *outFile, *bibFile; char optList[] = "a:b:d:f:m:o:s:u:hv"; int option; int iVal; double dist=0.0, pitch=0.0, yaw=0.0, roll=0.0; double scale=1.0; WlzDVertex3 fixed={0.0,0.0,0.0}; WlzDVertex3 up={0.0,0.0,-1.0}; WlzThreeDViewStruct *viewStr=NULL; WlzThreeDViewMode mode=WLZ_UP_IS_UP_MODE; WlzErrorNum errNum=WLZ_ERR_NONE; BibFileRecord *bibfileRecord; BibFileError bibFileErr; int verboseFlg=0; char *errMsg; /* additional defaults */ outFile = "-"; bibFile = NULL; /* read the argument list and check for an input file */ opterr = 0; while( (option = getopt(argc, argv, optList)) != EOF ){ switch( option ){ case 'a': switch( sscanf(optarg, "%lg,%lg,%lg", &pitch, &yaw, &roll) ){ default: usage(argv[0]); return 1; case 2: break; case 3: mode = WLZ_ZETA_MODE; break; } break; case 'b': bibFile = optarg; break; case 'd': if( sscanf(optarg, "%lg", &dist) < 1 ){ usage(argv[0]); return 1; } break; case 'f': if( sscanf(optarg, "%lg,%lg,%lg", &(fixed.vtX), &(fixed.vtY), &(fixed.vtZ)) < 3 ){ usage(argv[0]); return 1; } break; case 'm': if( sscanf(optarg, "%d", &iVal) < 1 ){ usage(argv[0]); return 1; } else if( mode != WLZ_ZETA_MODE ){ switch( iVal ){ default: usage(argv[0]); return 1; case 0: mode = WLZ_UP_IS_UP_MODE; break; case 1: mode = WLZ_STATUE_MODE; break; case 2: mode = WLZ_ZETA_MODE; break; } } break; case 'o': outFile = optarg; break; case 's': if( sscanf(optarg, "%lg", &scale) < 1 ){ usage(argv[0]); return 1; } break; case 'u': if( sscanf(optarg, "%lg,%lg,%lg", &(up.vtX), &(up.vtY), &(up.vtZ)) < 3 ){ usage(argv[0]); return 1; } break; case 'h': default: usage(argv[0]); return 0; case 'v': verboseFlg = 1; break; } } /* check input file/stream */ inFP = stdin; if( optind < argc ){ if( (inFP = fopen(*(argv+optind), "r")) == NULL ){ fprintf(stderr, "%s: can't open file %s\n", argv[0], *(argv+optind)); usage(argv[0]); return 1; } } /* check output file/stream */ if(strcmp(outFile, "-")) { if((outFP = fopen(outFile, "w")) == NULL) { errNum = WLZ_ERR_WRITE_EOF; } } else { outFP = stdout; } /* create view structure */ if((viewStr = WlzMake3DViewStruct(WLZ_3D_VIEW_STRUCT, &errNum)) != NULL){ viewStr->theta = yaw * WLZ_M_PI / 180.0; viewStr->phi = pitch * WLZ_M_PI / 180.0; viewStr->zeta = roll * WLZ_M_PI / 180.0; viewStr->dist = dist; viewStr->fixed = fixed; viewStr->up = up; viewStr->view_mode = mode; viewStr->scale = scale; } /* check bibfile - select first section parameters in the file */ if((errNum == WLZ_ERR_NONE) && (bibFile != NULL)){ if((bibFP = fopen(bibFile, "r")) != NULL){ bibFileErr = BibFileRecordRead(&bibfileRecord, &errMsg, bibFP); while((bibFileErr == BIBFILE_ER_NONE) && (strncmp(bibfileRecord->name, "Wlz3DSectionViewParams", 22))){ BibFileRecordFree(&bibfileRecord); bibFileErr = BibFileRecordRead(&bibfileRecord, &errMsg, bibFP); } fclose( bibFP ); if( bibFileErr != BIBFILE_ER_NONE ){ fprintf(stderr, "%s: error reading bibfile: %s\n", argv[0], errMsg); AlcFree((void *) errMsg); return 1; } WlzEffBibParse3DSectionViewParamsRecord(bibfileRecord, viewStr); BibFileRecordFree(&bibfileRecord); } else { fprintf(stderr, "%s: can't open parameter bibfile %s\n", argv[0], bibFile); return 1; } } /* read objects and section if possible */ while((errNum == WLZ_ERR_NONE) && ((obj = WlzReadObj(inFP, &errNum)) != NULL)) { switch( obj->type ) { case WLZ_3D_DOMAINOBJ: WlzInit3DViewStruct(viewStr, obj); nobj = WlzGetProjectionFromObject(obj, viewStr, NULL, NULL, &errNum); if( nobj != NULL){ WlzWriteObj(outFP, nobj); } else { return errNum; } WlzFreeObj(nobj); break; default: WlzWriteObj(outFP, obj); break; } WlzFreeObj(obj); } if(errNum == WLZ_ERR_READ_EOF) { errNum = WLZ_ERR_NONE; } return errNum; }
/*! * \return Woolz error code. * \brief Read the input section parameters file to find the reference * and source file object file names, read the reference and * source objects from these files and parse the section view * parameters. * \param fP Input section parameters file. * \param dstView Destination pointer for the 3D view * transform. * \param dstRefFileStr Destination pointer for the reference * object file name. If the reference file * string is NULL and the reference object * is not NULL then the reference object * is assumed valid. * \param dstRefFileType Destination pointer for the reference * object file type. * \param dstRefObj Destination pointer for the reference * object. * \param dstSrcFileStr Destination pointer for the source * object file name. If the source file * string is NULL and the source object * is not NULL then the source object is * assumed valid. * \param dstSrcFileType Destination pointer for the source * object file type. * \param dstsrcObj Destination pointer for the source * object. */ static WlzErrorNum WlzMatchICPPlaneReadSecParam(FILE *fP, WlzThreeDViewStruct **dstView, char **dstRefFileStr, WlzEffFormat *dstRefFileType, WlzObject **dstRefObj, char **dstSrcFileStr, WlzEffFormat *dstSrcFileType, WlzObject **dstSrcObj) { int idx; char *fileStr; WlzEffFormat fileType; BibFileRecord *bibRec; BibFileError bibErr = BIBFILE_ER_NONE; WlzErrorNum errNum = WLZ_ERR_NONE; *dstView = WlzMake3DViewStruct(WLZ_3D_VIEW_STRUCT, &errNum); if(errNum == WLZ_ERR_NONE) { bibErr = BibFileRecordRead(&bibRec, NULL, fP); } while((bibErr == BIBFILE_ER_NONE) && (errNum == WLZ_ERR_NONE)) { if(!strcmp(bibRec->name, "Wlz3DSectionViewParams")) { errNum = WlzEffBibParse3DSectionViewParamsRecord(bibRec, *dstView); } if(!strcmp(bibRec->name, "MAPaintWarpInputSourceFile")) { errNum = WlzEffBibParseFileRecord(bibRec, &idx, &fileStr, &fileType); if(dstSrcFileStr) { *dstSrcFileStr = fileStr; if(dstSrcFileType) { *dstSrcFileType = fileType; } if(dstSrcObj) { *dstSrcObj = WlzAssignObject( WlzEffReadObj(NULL, fileStr, fileType, 0, 0, 0, &errNum), NULL); } } } if(!strcmp(bibRec->name, "MAPaintWarpInputReferenceFile")) { errNum = WlzEffBibParseFileRecord(bibRec, &idx, &fileStr, &fileType); if(dstRefFileStr) { *dstRefFileStr = fileStr; if(dstRefFileType) { *dstRefFileType = fileType; } if(dstRefObj) { *dstRefObj = WlzAssignObject( WlzEffReadObj(NULL, fileStr, fileType, 0, 0, 0, &errNum), NULL); } } } BibFileRecordFree(&bibRec); bibErr = BibFileRecordRead(&bibRec, NULL, fP); if((errNum == WLZ_ERR_NONE) && (bibErr != BIBFILE_ER_NONE)) { if(bibErr != BIBFILE_ER_EOF) { errNum = WLZ_ERR_READ_INCOMPLETE; } } } return(errNum); }