示例#1
0
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;
}
示例#2
0
文件: WlzSAToWlz.c 项目: dscho/Woolz
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;
}
示例#3
0
文件: WlzExtFFAm.c 项目: dscho/Woolz
/*!
* \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);
}
示例#4
0
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;
}