AlcDLPList *HGU_XmFileListCreateList( String resourceFile, WlzErrorNum *dstErr) { AlcDLPList *list=NULL; FILE *fp; HGU_XmFileListCallbackStruct *cbs; int index; WlzErrorNum errNum=WLZ_ERR_NONE; AlcErrno alcErrno; /* check input parameters */ if( resourceFile == NULL ){ errNum = WLZ_ERR_PARAM_NULL; } /* create list */ list = AlcDLPListNew(&alcErrno); /* read file to get menu items */ if( errNum == WLZ_ERR_NONE ){ if( (fp = fopen(resourceFile, "r")) ){ BibFileRecord *bibfileRecord; BibFileError bibFileErr; /* search for file list entry */ bibFileErr = BibFileRecordRead(&bibfileRecord, NULL, fp); while( bibFileErr == BIBFILE_ER_NONE ){ /* create items and add to list */ if( !strncmp(bibfileRecord->name, "HGU_XmFileListFileRecord", 23) ){ cbs = (HGU_XmFileListCallbackStruct *) AlcMalloc(sizeof(HGU_XmFileListCallbackStruct)); errNum = WlzEffBibParseFileRecord(bibfileRecord, &index, &(cbs->file), &(cbs->format)); AlcDLPListEntryAppend(list, NULL, (void *) cbs, HGU_XmFileListItemFree); } BibFileRecordFree(&bibfileRecord); bibFileErr = BibFileRecordRead(&bibfileRecord, NULL, fp); } } else { errNum = WLZ_ERR_FILE_OPEN; } } if( dstErr ){ *dstErr = errNum; } return list; }
void addToBndList( AlcDLPList *list, char *name, WlzBoundList *bnd) { AlcDLPItem *bndItem; NamedBndItem *namedBndItem; WlzBoundList *tmpBnd; /* check if name exists */ bndItem = list->head; namedBndItem = NULL; while( bndItem ){ namedBndItem = (NamedBndItem *) bndItem->entry; if( strcmp(name, namedBndItem->name) == 0 ){ break; } namedBndItem = NULL; bndItem = bndItem->next; if( bndItem == list->head ){ break; } } if( namedBndItem ){ tmpBnd = namedBndItem->bnd; while(tmpBnd->next){ tmpBnd = tmpBnd->next; } tmpBnd->next = WlzAssignBoundList(bnd, NULL); } else { /* create a NamedBndItem */ namedBndItem = (NamedBndItem *) AlcMalloc(sizeof(NamedBndItem)); namedBndItem->name = name; namedBndItem->bnd = bnd; /* add to the list */ AlcDLPListEntryAppend(list, NULL, (void *) namedBndItem, NULL); } return; }
/*! * \return New property list. * \ingroup WlzExtFF * \brief Creates a new property list from an Amira material * specification. * The WlzNameProperty is used for the material name and * WlzGreyProperty is used for the color. * \param mat Material specification. * \param dstErr Destination pointer for error number, * may be NULL. */ static WlzPropertyList *WlzEffAmMakeMaterialPropList(WlzEffAmMaterial *mat, WlzErrorNum *dstErr) { int idx; unsigned int tI0; WlzProperty prop; WlzPixelV pix; WlzPropertyList *pList = NULL; WlzErrorNum errNum = WLZ_ERR_NONE; pix.v.rgbv = 0; for(idx = 0; idx < 3; ++idx) { if(mat->color[idx] < (0.0 + DBL_EPSILON)) { tI0 = 0; } else if(mat->color[idx] > (1.0 - DBL_EPSILON)) { tI0 = 255; } else { tI0 = (int )floor((mat->color[idx] * 255.0) + 0.5); } pix.v.rgbv |= tI0 << idx; } if((pList = WlzMakePropertyList(NULL)) == NULL) { errNum = WLZ_ERR_MEM_ALLOC; } else { prop.name = WlzMakeNameProperty(mat->name, &errNum); } if(errNum == WLZ_ERR_NONE) { if(AlcDLPListEntryAppend(pList->list, NULL, (void *)(prop.core), WlzFreePropertyListEntry) != ALC_ER_NONE) { errNum = WLZ_ERR_MEM_ALLOC; } } if(errNum == WLZ_ERR_NONE) { pix.type = WLZ_GREY_RGBA; prop.greyV = WlzMakeGreyProperty("Colour", pix, &errNum); } if(errNum == WLZ_ERR_NONE) { if(AlcDLPListEntryAppend(pList->list, NULL, (void *)(prop.core), WlzFreePropertyListEntry) != ALC_ER_NONE) { errNum = WLZ_ERR_MEM_ALLOC; } } if((errNum != WLZ_ERR_NONE) && pList) { (void )WlzFreePropertyList(pList); pList = NULL; } if(dstErr) { *dstErr = errNum; } return(pList); }
int main(int argc, char **argv) { WlzObject *obj; FILE *inFile; char optList[] = "a:e:E:c:C:f:F:l:m:M:n:rs:S:t:T:V:hv"; int option; WlzEMAPPropertyType emapType=WLZ_EMAP_PROPERTY_DOMAIN_OTHER; int emapTypeFlg=0; char *modelUID=NULL; char *anatomyUID=NULL; char *targetUID=NULL; char *targetVersion=NULL; char *stage=NULL, *subStage=NULL; char *modelName=NULL; char *version=NULL; char *fileName=NULL; time_t creationTime; int cTimeFlg=0; char *creationAuthor=NULL; char *creationMachineName=NULL; time_t modificationTime; int mTimeFlg=0; char *modificationAuthor=NULL; char *comment=NULL; int removeFlg=0; WlzProperty property; struct tm tm; WlzErrorNum errNum; /* read the argument list and check for an input file */ opterr = 0; while( (option = getopt(argc, argv, optList)) != EOF ) { switch( option ) { case 'a': anatomyUID = optarg; break; case 'e': modelUID = optarg; break; case 'E': targetUID = optarg; break; case 'c': if(sscanf(optarg, "%d/%d/%d", &(tm.tm_mday), &(tm.tm_mon), &(tm.tm_year)) == 3) { tm.tm_sec = 0; tm.tm_min = 0; tm.tm_hour = 0; if( tm.tm_year > 1900 ) { tm.tm_year -= 1900; } creationTime = mktime(&tm); cTimeFlg = 1; } else { usage(argv[0]); return( 1 ); } break; case 'C': creationAuthor = optarg; break; case 'f': fileName = optarg; break; case 'F': targetVersion = optarg; break; case 'l': creationMachineName = optarg; break; case 'm': if(sscanf(optarg, "%d/%d/%d", &(tm.tm_mday), &(tm.tm_mon), &(tm.tm_year)) == 3) { tm.tm_sec = 0; tm.tm_min = 0; tm.tm_hour = 0; if( tm.tm_year > 1900 ) { tm.tm_year -= 1900; } modificationTime = mktime(&tm); mTimeFlg = 1; } else { usage(argv[0]); return( 1 ); } break; case 'M': modificationAuthor = optarg; break; case 'n': modelName = optarg; break; case 'r': removeFlg = 1; break; case 's': stage = optarg; break; case 'S': subStage = optarg; break; case 't': switch( emapType = (WlzEMAPPropertyType) atoi(optarg) ) { case WLZ_EMAP_PROPERTY_GREY_MODEL: case WLZ_EMAP_PROPERTY_GREY_OTHER: case WLZ_EMAP_PROPERTY_DOMAIN_ANATOMY: case WLZ_EMAP_PROPERTY_DOMAIN_OTHER: case WLZ_EMAP_PROPERTY_TRANSFORM: break; default: fprintf(stderr, "%s: EMAP property type = %d is invalid\n", argv[0], emapType ); usage(argv[0]); return 1; } emapTypeFlg=1; break; case 'T': comment = optarg; break; case 'V': version = optarg; break; case 'h': default: usage(argv[0]); return( 1 ); } } inFile = stdin; if( optind < argc ) { if( (inFile = fopen(*(argv+optind), "r")) == NULL ) { fprintf(stderr, "%s: can't open file %s\n", argv[0], *(argv+optind)); usage(argv[0]); return 1; } } /* read objects and convert if possible */ while( (obj = WlzReadObj(inFile, NULL)) != NULL ) { switch( obj->type ) { case WLZ_2D_DOMAINOBJ: case WLZ_3D_DOMAINOBJ: case WLZ_TRANS_OBJ: case WLZ_3D_WARP_TRANS: case WLZ_PROPERTY_OBJ: /* get the EMAP property, if absent add one */ if( obj->plist == NULL ) { obj->plist = WlzMakePropertyList(NULL); } if( obj->plist ) { property = WlzGetProperty(obj->plist->list, WLZ_PROPERTY_EMAP, NULL); if( property.core == NULL ) { property.emap = WlzMakeEMAPProperty(WLZ_EMAP_PROPERTY_GREY_MODEL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &errNum); WlzAssignProperty(property, NULL); AlcDLPListEntryAppend(obj->plist->list, NULL, (void *) property.emap, WlzFreePropertyListEntry); } } if( removeFlg ) { WlzRemoveProperty(obj->plist->list, property); } else { if( !emapTypeFlg ) { emapType = property.emap->emapType; } WlzChangeEMAPProperty(property.emap, emapType, modelUID, anatomyUID, targetUID, targetVersion, stage, subStage, modelName, version, fileName, comment); if( cTimeFlg ) { property.emap->creationTime = creationTime; } if( creationAuthor ) { strcpy(property.emap->creationAuthor, creationAuthor); } if( creationMachineName ) { strcpy(property.emap->creationMachineName, creationMachineName); } if( mTimeFlg ) { property.emap->modificationTime = modificationTime; } if( modificationAuthor ) { strcpy(property.emap->modificationAuthor, modificationAuthor); } } break; case WLZ_COMPOUND_ARR_1: case WLZ_COMPOUND_ARR_2: break; default: break; } (void )WlzWriteObj(stdout, obj); WlzFreeObj(obj); } return WLZ_ERR_NONE; }