Ejemplo n.º 1
0
static dErr doGlobalID(iMesh_Instance mesh,iBase_EntitySetHandle root)
{
  MeshListEH ents=MLZ;
  MeshListInt type=MLZ;
  int count[4] = {0,0,0,0};
  int owned,*number;
  dMeshTag idTag;
  dErr err;

  dFunctionBegin;
  iMesh_getEntities(mesh,root,iBase_ALL_TYPES,iMesh_ALL_TOPOLOGIES,MLREF(ents),&err);dICHK(mesh,err);
  iMesh_getEntArrType(mesh,ents.v,ents.s,MLREF(type),&err);dICHK(mesh,err);
  err = dMalloc(ents.s*sizeof(number[0]),&number);dCHK(err);
  owned = ents.s;
  for (int i=0; i<owned; i++) {
    number[i] = count[type.v[i]]++;
  }
  iMesh_getTagHandle(mesh,"GLOBAL_ID",&idTag,&err,sizeof("GLOBAL_ID"));dICHK(mesh,err);
  iMesh_setIntArrData(mesh,ents.v,owned,idTag,number,owned,&err);dICHK(mesh,err);
  err = dFree(number);dCHK(err);
  MeshListFree(ents); MeshListFree(type);
  dFunctionReturn(0);
}
Ejemplo n.º 2
0
inline iMesh::Error
iMesh::getEntArrType( const EntityHandle* entity_handles,
                      int entity_handles_size,
                      EntityType* types_out ) const
{
  int err, alloc = entity_handles_size, junk, *ptr;
  std::vector<int> storage;
  if (sizeof(EntityType) == sizeof(int))
    ptr = reinterpret_cast<int*>(types_out);
  else {
    storage.resize( entity_handles_size );
    ptr = &storage[0];
  }
  
  iMesh_getEntArrType( mInstance, entity_handles, entity_handles_size,
                       &ptr, &alloc, &junk, &err );
  
  if (sizeof(EntityType) != sizeof(int))
    for (int i = 0; i < entity_handles_size; ++i)
      types_out[i] = (EntityType)storage[i];
      
  return (Error)err;
}