/*! * \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); }
/*! * \ingroup WlzAllocation * \brief Free space allocated to a woolz object. * * \return Error number, values: WLZ_ERR_NONE, WLZ_ERR_MEM_FREE * \param obj Object to be freed. * \par Source: * WlzFreeSpace.c */ WlzErrorNum WlzFreeObj(WlzObject *obj) { int i; WlzCompoundArray *ca = (WlzCompoundArray *) obj; WlzErrorNum errNum = WLZ_ERR_NONE; WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_FN|WLZ_DBG_LVL_1), ("WlzFreeObj FE %p\n", obj)); /* check the object pointer and linkcount */ if (obj == NULL){ return( WLZ_ERR_NONE ); } if( WlzUnlink(&(obj->linkcount), &errNum) ){ /* Check linkcount */ switch( obj->type ){ case WLZ_2D_DOMAINOBJ: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_2D_DOMAINOBJ " "%p %d %p %d %p\n", obj, (obj->domain.i), (obj->domain.i?obj->domain.i->linkcount: 0), (obj->values.core), ((obj->values.core)? obj->values.core->linkcount: 0), (obj->plist))); errNum = WlzFreeDomain(obj->domain); if((errNum == WLZ_ERR_NONE) && (obj->values.core != NULL)) { if(WlzGreyTableIsTiled(obj->values.core->type) == WLZ_GREY_TAB_TILED) { errNum = WlzFreeTiledValues(obj->values.t); } else { errNum = WlzFreeValueTb(obj->values.v); } } if(errNum == WLZ_ERR_NONE) { errNum = WlzFreePropertyList(obj->plist); } if(errNum == WLZ_ERR_NONE) { errNum = WlzFreeObj(obj->assoc); } break; case WLZ_3D_DOMAINOBJ: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_3D_DOMAINOBJ %p, " "%d %p %d %p\n", obj, obj->domain.i, (obj->domain.p? obj->domain.p->linkcount: 0), obj->values.core, (obj->values.core? obj->values.core->linkcount: 0), obj->plist)); errNum = WlzFreePlaneDomain(obj->domain.p); if((errNum == WLZ_ERR_NONE) && (obj->values.core != NULL)){ if(WlzGreyTableIsTiled(obj->values.core->type) == WLZ_GREY_TAB_TILED) { errNum = WlzFreeTiledValues(obj->values.t); } else { errNum = WlzFreeVoxelValueTb(obj->values.vox); } } if(errNum == WLZ_ERR_NONE) { errNum = WlzFreePropertyList(obj->plist); } if(errNum == WLZ_ERR_NONE) { errNum = WlzFreeObj(obj->assoc); } break; case WLZ_TRANS_OBJ: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_TRANS_OBJ %p, " "%d %p %d %p\n", obj, obj->domain.t, ((obj->domain.t)?(obj->domain.t)->linkcount: 0), obj->values.obj, ((obj->values.obj)?(obj->values.obj)->linkcount: 0), obj->plist)); if( WlzFreeAffineTransform(obj->domain.t) || WlzFreeObj(obj->values.obj) || WlzFreePropertyList(obj->plist) || WlzFreeObj(obj->assoc) ){ errNum = WLZ_ERR_MEM_FREE; } break; case WLZ_2D_POLYGON: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_2D_POLYGON %p\n", obj, obj->domain.poly)); errNum = WlzFreePolyDmn(obj->domain.poly); break; case WLZ_BOUNDLIST: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_BOUNDLIST %p\n", obj, obj->domain.b)); errNum = WlzFreeBoundList(obj->domain.b); break; case WLZ_CONTOUR: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_CONTOUR %p\n", obj, obj->domain.ctr)); errNum = WlzFreeContour(obj->domain.ctr); break; case WLZ_CONV_HULL: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_CONV_HULL %p %p\n", obj, obj->domain.core, obj->values.core)); if(obj->domain.core) { switch(obj->domain.core->type) { case WLZ_CONVHULL_DOMAIN_2D: errNum = WlzFreeConvexHullDomain2(obj->domain.cvh2); break; case WLZ_CONVHULL_DOMAIN_3D: errNum = WlzFreeConvexHullDomain3(obj->domain.cvh3); break; default: errNum = WLZ_ERR_DOMAIN_TYPE; break; } } break; case WLZ_CMESH_2D: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_CMESH_2D %p, " "%d %p %d %p\n", obj, obj->domain.cm2, ((obj->domain.cm2)? (obj->domain.cm2)->linkcount: 0), obj->values.x, ((obj->values.x)? (obj->values.x)->linkcount: 0), obj->plist)); errNum = WlzCMeshFree2D(obj->domain.cm2); if((errNum == WLZ_ERR_NONE) && (obj->values.core != NULL)) { errNum = WlzFreeIndexedValues(obj->values.x); } if((errNum == WLZ_ERR_NONE) && (obj->plist != NULL)) { errNum = WlzFreePropertyList(obj->plist); } if((errNum == WLZ_ERR_NONE) && (obj->assoc != NULL)) { errNum = WlzFreeObj(obj->assoc); } break; case WLZ_CMESH_2D5: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_CMESH_2D5 %p, " "%d %p %d %p\n", obj, obj->domain.cm2d5, ((obj->domain.cm2d5)? (obj->domain.cm2d5)->linkcount: 0), obj->values.x, ((obj->values.x)? (obj->values.x)->linkcount: 0), obj->plist)); errNum = WlzCMeshFree2D5(obj->domain.cm2d5); if((errNum == WLZ_ERR_NONE) && (obj->values.core != NULL)) { errNum = WlzFreeIndexedValues(obj->values.x); } if((errNum == WLZ_ERR_NONE) && (obj->plist != NULL)) { errNum = WlzFreePropertyList(obj->plist); } if((errNum == WLZ_ERR_NONE) && (obj->assoc != NULL)) { errNum = WlzFreeObj(obj->assoc); } break; case WLZ_CMESH_3D: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_CMESH_3D %p, " "%d %p %d %p\n", obj, obj->domain.cm3, ((obj->domain.cm3)?(obj->domain.cm3)->linkcount: 0), obj->values.x, ((obj->values.x)?(obj->values.x)->linkcount: 0), obj->plist)); errNum = WlzCMeshFree3D(obj->domain.cm3); if((errNum == WLZ_ERR_NONE) && (obj->values.core != NULL)) { errNum = WlzFreeIndexedValues(obj->values.x); } if((errNum == WLZ_ERR_NONE) && (obj->plist != NULL)) { errNum = WlzFreePropertyList(obj->plist); } if((errNum == WLZ_ERR_NONE) && (obj->assoc != NULL)) { errNum = WlzFreeObj(obj->assoc); } break; case WLZ_POINTS: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_POINTS %p\n", obj, obj->domain.pts)); errNum = WlzFreeDomain(obj->domain); if((errNum == WLZ_ERR_NONE) && (obj->values.core != NULL)) { errNum = WlzFreePointValues(obj->values.pts); } if((errNum == WLZ_ERR_NONE) && (obj->plist != NULL)) { errNum = WlzFreePropertyList(obj->plist); } if((errNum == WLZ_ERR_NONE) && (obj->assoc != NULL)) { errNum = WlzFreeObj(obj->assoc); } break; case WLZ_HISTOGRAM: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_CONV_HULL %p\n", obj, obj->domain.hist)); errNum = WlzFreeDomain(obj->domain); break; case WLZ_RECTANGLE: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_RECTANGLE %p\n", obj, obj->domain.r)); errNum = WlzFreeDomain(obj->domain); break; case WLZ_AFFINE_TRANS: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_AFFINE_TRANS\n", obj)); errNum = WlzFreeAffineTransform(obj->domain.t); break; case WLZ_LUT: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_LUT\n", obj)); errNum = WlzFreeDomain(obj->domain); if(errNum == WLZ_ERR_NONE) { errNum = WlzFreeLUTValues(obj->values); } break; case WLZ_COMPOUND_ARR_1: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_COMPOUND_ARR_1\n", ca)); for (i=0; i<ca->n; i++){ if( WlzFreeObj(ca->o[i]) != WLZ_ERR_NONE ){ errNum = WLZ_ERR_MEM_FREE; } } break; case WLZ_COMPOUND_ARR_2: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_COMPOUND_ARR_2\n", ca)); for (i=0; i<ca->n; i++){ if( WlzFreeObj(ca->o[i]) != WLZ_ERR_NONE ){ errNum = WLZ_ERR_MEM_FREE; } } break; case WLZ_PROPERTY_OBJ: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_PROPERTY_OBJ\n", obj)); errNum = WlzFreePropertyList(obj->plist); break; case WLZ_EMPTY_OBJ: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p WLZ_EMPTY_OBJ\n", obj)); break; default: WLZ_DBG((WLZ_DBG_ALLOC|WLZ_DBG_LVL_1), ("WlzFreeObj %p %d\n", obj, (int )(obj->type))); errNum = WLZ_ERR_OBJECT_TYPE; break; } /* End of switch */ AlcFree((void *) obj); } return( errNum ); }