35 #ifndef AIMS_PRIMALSKETCH_PRIMALSKETCHUTIL_H 36 #define AIMS_PRIMALSKETCH_PRIMALSKETCHUTIL_H 66 template<
typename Geom,
typename Text>
void AddBlobsToPSGraph(PrimalSketch<Geom,Text> *sketch,
Graph *graph);
77 int x,y,z,sx,sy,sz, i;
79 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
80 std::list<ScaleSpaceBlob<Site>*>
::iterator itBlob=ssBlobList.begin();
82 std::set<Site,ltstr_p3d<Site> > points;
83 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints;
85 sx=sketch->scaleSpace()->GetOriginalImage().dimX();
86 sy=sketch->scaleSpace()->GetOriginalImage().dimY();
87 sz=sketch->scaleSpace()->GetOriginalImage().dimZ();
88 dx=sketch->scaleSpace()->GetOriginalImage().sizeX();
89 dy=sketch->scaleSpace()->GetOriginalImage().sizeY();
90 dz=sketch->scaleSpace()->GetOriginalImage().sizeZ();
100 for (; itBlob!=ssBlobList.end(); ++itBlob)
102 glBlob=(*itBlob)->GlBlobRep();
104 itPoints=points.begin();
105 for (; itPoints!=points.end(); ++itPoints)
107 x=(*itPoints)[0]; y=(*itPoints)[1]; z=(*itPoints)[2];
108 if ((i=(*image)(x,y,z))==0)
109 (*image)(x,y,z)=100 + ((*itBlob)->Label() * 10);
111 (*image)(x,y,z)=105 + ((*itBlob)->Label() * 10);
123 typedef std::pair<Point3df,uint> Site;
126 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
127 std::list<ScaleSpaceBlob<Site>*>
::iterator itBlob=ssBlobList.begin();
129 std::set<Site,ltstr_p3d<Site> > points;
130 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints;
135 std::set<float> scale= sketch->scaleSpace()->GetScaleList();
139 for (
uint i=0;i<scale.size();i++)
140 for (
uint j=0;j<sketch->scaleSpace()->Mesh()->vertex().size();j++)
144 std::set<float>::iterator it;
147 for (; itBlob!=ssBlobList.end(); ++itBlob)
150 glBlob=(*itBlob)->GlBlobRep();
152 itPoints=points.begin();
154 std::list<GreyLevelBlob<Site>*> glBlobs=(*itBlob)->glBlobs;
155 std::list<GreyLevelBlob<Site>*>
::iterator glit;
156 for (glit = glBlobs.begin() ; glit != glBlobs.end() ; glit++){
157 points=(*glit)->GetListePoints();
158 itPoints=points.begin();
159 sc = (*glit)->GetScale();
160 for (i=0,it=scale.begin();
161 *it != sc && it!=scale.end();it++,i++) {}
163 for (; itPoints!=points.end(); ++itPoints)
165 tex[i].item((*itPoints).second)= (*itBlob)->GetMeasurements().t;
180 for (i=0,it=scale.begin();*it != sc && it!=scale.end();
196 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
197 std::list<ScaleSpaceBlob<Site>*>
::iterator itBlob=ssBlobList.begin();
199 std::set<Site,ltstr_p3d<Site> > points;
200 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints;
203 dx=sketch->scaleSpace()->GetOriginalImage().sizeX();
204 dy=sketch->scaleSpace()->GetOriginalImage().sizeY();
205 dz=sketch->scaleSpace()->GetOriginalImage().sizeZ();
212 for (; itBlob!=ssBlobList.end(); ++itBlob)
214 glBlob=(*itBlob)->GlBlobRep();
216 itPoints=points.begin();
217 for (; itPoints!=points.end(); ++itPoints)
220 (*blobBck)[(*itBlob)->Label()].push_back(bckItem);
229 typedef std::pair<Point3df,uint> Site;
233 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
234 std::list<ScaleSpaceBlob<Site>*>
::iterator ssblobit=ssBlobList.begin();
235 std::set<Site,ltstr_p3d<Site> > points;
237 std::map<int,int> tableNodes;
239 uint count=0, count2=0;
242 std::vector<Point3df> nodes;
243 std::vector<Point3dd> pts;
244 std::vector< AimsVector<uint,3> > poly, allPoly;
245 std::vector< AimsVector<uint,3> >
::iterator itPoly;
249 (*mesh)[0].updateNormals();
251 std::cout <<
"==============================" << std::endl;
252 for (; ssblobit!=ssBlobList.end(); ++ssblobit ) {
254 label=(*ssblobit)->Label();
256 std::cout <<
"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bssb n°" << label <<
"("<< count2++ <<
"/" << ssBlobList.size()<<
") " << std::flush;
258 std::list<GreyLevelBlob<Site>*>
::iterator glblobit=(*ssblobit)->glBlobs.begin();
259 std::map<float,GreyLevelBlob<Site>*> glblobmap;
260 for (;glblobit != (*ssblobit)->glBlobs.end();glblobit++){
261 glblobmap[(*glblobit)->GetScale()] = *glblobit;
263 std::map<float,GreyLevelBlob<Site>*>
::iterator mapit=glblobmap.begin();
265 for (count = 0;count<1 && count <glblobmap.size();count++,mapit++){
268 points=(*mapit).second->GetListePoints();
269 points=(*ssblobit)->GlBlobRep()->GetListePoints();
270 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints=points.begin();
271 std::set<uint> auxpts;
272 for (; itPoints!=points.end(); ++itPoints){
273 index=(*itPoints).second;
274 auxpts.insert(index);
276 for (
uint i=0; i<(*mesh)[0].polygon().size(); i++){
277 if ((auxpts.find((*mesh)[0].polygon()[i][0]) != auxpts.end())
278 && (auxpts.find((*mesh)[0].polygon()[i][1]) != auxpts.end())
279 && (auxpts.find((*mesh)[0].polygon()[i][2]) != auxpts.end())){
280 for (
uint j=0;j<3;j++){
281 Point3df node((*mesh)[0].vertex()[(*mesh)[0].polygon()[i][j]]);
282 Point3df norm((*mesh)[0].normal()[(*mesh)[0].polygon()[i][j]]);
285 tempMesh[0].
vertex().push_back(
Point3df(node[0],node[1],node[2]));
287 tempMesh[0].
polygon().push_back(
AimsVector<uint,3>( tempMesh[0].vertex().size()-3,tempMesh[0].vertex().size()-2,tempMesh[0].vertex().size()-1));
314 if (oneMesh[0].polygon().size()!=0){
317 (*meshBlob)[label].vertex()=oneMesh[0].
vertex();
318 (*meshBlob)[label].updateNormals();
323 Point3df auxnode = (*mesh)[0].vertex()[(*ssblobit)->GlBlobRep()->GetMaximum()->_node.second];
326 (*meshBlob)[label].
polygon()=(*msh).polygon();
327 (*meshBlob)[label].vertex()=(*msh).vertex();
328 (*meshBlob)[label].updateNormals();
332 std::cout <<
"END" << std::endl;
347 for (
uint i=0; i<(*mesh).size(); i++) {
348 for (
uint j=0; j<(*mesh)[i].vertex().size(); j++)
351 (*blobBck)[i].push_back(bckItem);
366 std::set<Vertex * > vertSet;
367 std::set<Vertex *>::iterator itVert;
373 std::vector<int> bounding_min, bounding_max;
374 std::vector<float> resolution;
376 bounding_min.push_back(0);
377 bounding_min.push_back(0);
378 bounding_min.push_back(0);
379 bounding_max.push_back(sketch->scaleSpace()->GetOriginalImage().dimX());
380 bounding_max.push_back(sketch->scaleSpace()->GetOriginalImage().dimY());
381 bounding_max.push_back(sketch->scaleSpace()->GetOriginalImage().dimZ());
382 resolution.push_back(sketch->scaleSpace()->GetOriginalImage().sizeX());
383 resolution.push_back(sketch->scaleSpace()->GetOriginalImage().sizeY());
384 resolution.push_back(sketch->scaleSpace()->GetOriginalImage().sizeZ());
386 graph->setProperty(
"boundingbox_min", bounding_min );
387 graph->setProperty(
"boundingbox_max", bounding_max );
388 graph->setProperty(
"voxel_size", resolution );
395 for ( itVert = vertSet.begin() ; itVert != vertSet.end() ; ++itVert ) {
397 node->getProperty(
"index", label );
399 (*ptrBck)[0] = (*bckMap)[label];
400 ptrBck->setSizeX( resolution[0] );
401 ptrBck->setSizeY( resolution[1] );
402 ptrBck->setSizeZ( resolution[2] );
403 manip.
storeAims( *graph, node,
"ssblob", ptrBck );
404 node->setProperty(
"ssblob_label", label );
410 std::set<Vertex * > vertSet;
411 std::set<Vertex *>::iterator itVert;
421 std::vector<int> bounding_min, bounding_max;
422 std::vector<float> bounding_minf, bounding_maxf;
423 std::vector<float> resolution;
429 if (sketch->scaleSpace()->AuxMesh() != NULL){
430 mesh = sketch->scaleSpace()->AuxMesh();
434 (*mesh)[0] = auxsurf;
437 for (
uint z=0;z<3;z++){ mini[z] = 100000000.0; maxi[z] = -100000000.0; }
439 for (
uint i=0;i<(*mesh)[0].vertex().size();i++)
440 for (
uint z=0;z<3;z++){
441 mini[z] =
std::min((*mesh)[0].vertex()[i][z], mini[z]);
442 maxi[z] =
std::max((*mesh)[0].vertex()[i][z], maxi[z]);
445 resolution.push_back(1);
446 resolution.push_back(1);
447 resolution.push_back(1);
448 bounding_min.push_back(-1);
449 bounding_min.push_back(-1);
450 bounding_min.push_back(-1);
451 bounding_max.push_back(1);
452 bounding_max.push_back(1);
453 bounding_max.push_back(1);
454 graph->setProperty(
"boundingbox_min", bounding_min);
455 graph->setProperty(
"boundingbox_max", bounding_max);
456 graph->setProperty(
"voxel_size", resolution);
465 for (itVert=vertSet.begin(); itVert!=vertSet.end(); ++itVert){
467 node->getProperty(
"index", label);
470 (*ptrTore)[0]=(*tore)[label];
477 manip.
storeAims( *graph, node,
"ssblob", ptrTore );
480 (*ptrBck)[0]=(*bckMap)[label];
481 ptrBck->setSizeX(resolution[0]);
482 ptrBck->setSizeY(resolution[1]);
483 ptrBck->setSizeZ(resolution[2]);
486 node->setProperty(
"ssblob_label", label);
502 unsigned i, t=0, p, t1, t2, t3;
510 for (t=0; t<blobMesh->size(); t++)
512 const std::vector<Point3df> vert = (*blobMesh)[t].vertex();
513 const std::vector<AimsVector<uint,3> > poly = (*blobMesh)[t].polygon();
514 std::map<std::pair<unsigned, unsigned>,
unsigned> edges;
515 std::map<std::pair<unsigned, unsigned>,
unsigned>
::iterator ie, eie = edges.end();
525 ++edges[ std::pair<unsigned, unsigned>( t1, t2 ) ];
527 ++edges[ std::pair<unsigned, unsigned>( t2, t1 ) ];
529 ++edges[ std::pair<unsigned, unsigned>( t1, t3 ) ];
531 ++edges[ std::pair<unsigned, unsigned>( t3, t1 ) ];
533 ++edges[ std::pair<unsigned, unsigned>( t2, t3 ) ];
535 ++edges[ std::pair<unsigned, unsigned>( t3, t2 ) ];
539 for( ie=edges.begin(); ie!=eie; ++ie)
540 if( (*ie).second == 1 )
547 (*blobTore)[t]=(*tmpMesh)[0];
float min(float x, float y)
const std::set< Vertex *> & vertices() const
void setSizeY(float sizey)
float max(float x, float y)
static AimsSurfaceTriangle * cylinder(const carto::GenericObject ¶ms)
AimsData< short > * GetSSBlobImage(PrimalSketch< AimsData< T >, AimsData< T > > *sketch)
std::set< T, ltstr_p3d< T > > & GetListePoints()
AIMSDATA_API AimsTimeSurface< 3, Void > AimsSurfaceTriangle
void setSizeX(float sizex)
void setSizeY(float sizey)
const AimsVector< short, 3 > & location() const
AimsBucket< Void > * GetSSBlobBucket(PrimalSketch< AimsData< T >, AimsData< T > > *sketch)
void setSizeX(float sizex)
const std::vector< AimsVector< uint, D > > & polygon() const
void AddBlobsToPSGraph(PrimalSketch< Geom, Text > *sketch, Graph *graph)
const std::vector< AimsVector< uint, D > > & polygon() const
AimsSurfaceTriangle * GetSSBlobTore(PrimalSketch< AimsSurface< D, Void >, Texture< T > > *sketch)
void setSizeZ(float sizez)
static void meshMerge(AimsTimeSurface< D, T > &dst, const AimsTimeSurface< D, T > &add)
const std::vector< Point3df > & vertex() const
void setSizeXYZT(float sizex=1.0f, float sizey=1.0f, float sizez=1.0f, float sizet=1.0f)
void setSizeZ(float sizez)
AIMSDATA_API float norm(const Tensor &thing)
AimsSurfaceTriangle * GetSSBlobMesh(PrimalSketch< AimsSurface< D, Void >, Texture< T > > *sketch)
AimsBucket< Void > * GetSSBlobMeshBucket(AimsSurfaceTriangle *mesh)
TimeTexture< float > GetSSBlobTexture(PrimalSketch< AimsSurface< D, Void >, Texture< T > > *sketch)
static AimsSurfaceTriangle * sphere(const carto::GenericObject ¶ms)
static void storeAims(Graph &graph, GraphObject *vertex, const std::string &attribute, carto::rc_ptr< T > obj)