SimpleCloud* CloudSamplingTools::resampleCloudWithOctreeAtLevel(GenericIndexedCloudPersist* theCloud, uchar octreeLevel, RESAMPLING_CELL_METHOD resamplingMethod, GenericProgressCallback* progressCb, DgmOctree* _theOctree) { assert(theCloud); DgmOctree* theOctree = _theOctree; if (!theOctree) { theOctree = new DgmOctree(theCloud); if (theOctree->build(progressCb) < 1) { delete theOctree; return 0; } } SimpleCloud* cloud = new SimpleCloud(); unsigned nCells = theOctree->getCellNumber(octreeLevel); if (!cloud->reserve(nCells)) { if (!_theOctree) delete theOctree; delete cloud; return 0; } //structure contenant les parametres additionnels void* additionalParameters[2]; additionalParameters[0] = (void*)cloud; additionalParameters[1] = (void*)&resamplingMethod; //The process is so simple that MT is slower! //#ifdef ENABLE_MT_OCTREE //theOctree->executeFunctionForAllCellsAtLevel_MT(octreeLevel, //#else if (theOctree->executeFunctionForAllCellsAtLevel(octreeLevel, &resampleCellAtLevel, additionalParameters, progressCb, "Cloud Resampling") == 0) { //something went wrong delete cloud; cloud=0; } if (!_theOctree) delete theOctree; return cloud; }
SimpleCloud* CloudSamplingTools::resampleCloudWithOctreeAtLevel(GenericIndexedCloudPersist* inputCloud, unsigned char octreeLevel, RESAMPLING_CELL_METHOD resamplingMethod, GenericProgressCallback* progressCb/*=0*/, DgmOctree* inputOctree/*=0*/) { assert(inputCloud); DgmOctree* octree = inputOctree; if (!octree) { octree = new DgmOctree(inputCloud); if (octree->build(progressCb) < 1) { delete octree; return 0; } } SimpleCloud* cloud = new SimpleCloud(); unsigned nCells = octree->getCellNumber(octreeLevel); if (!cloud->reserve(nCells)) { if (!inputOctree) delete octree; delete cloud; return 0; } //structure contenant les parametres additionnels void* additionalParameters[2] = { reinterpret_cast<void*>(cloud), reinterpret_cast<void*>(&resamplingMethod) }; if (octree->executeFunctionForAllCellsAtLevel( octreeLevel, &resampleCellAtLevel, additionalParameters, false, //the process is so simple that MT is slower! progressCb, "Cloud Resampling") == 0) { //something went wrong delete cloud; cloud=0; } if (!inputOctree) delete octree; return cloud; }