35 #ifndef AIMS_PRIMALSKETCH_PRIMALSKETCHUTIL_H
36 #define AIMS_PRIMALSKETCH_PRIMALSKETCHUTIL_H
77 int x,y,z,sx,sy,sz, i;
78 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
81 std::set<Site,ltstr_p3d<Site> > points;
82 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints;
84 sx=sketch->scaleSpace()->GetOriginalImage().getSizeX();
85 sy=sketch->scaleSpace()->GetOriginalImage().getSizeY();
86 sz=sketch->scaleSpace()->GetOriginalImage().getSizeZ();
90 sketch->scaleSpace()->GetOriginalImage().getVoxelSize() );
97 for (; itBlob!=ssBlobList.end(); ++itBlob)
99 glBlob=(*itBlob)->GlBlobRep();
101 itPoints=points.begin();
102 for (; itPoints!=points.end(); ++itPoints)
104 x=(*itPoints)[0]; y=(*itPoints)[1]; z=(*itPoints)[2];
105 if ((i=(*image)(x,y,z))==0)
106 (*image)(x,y,z)=100 + ((*itBlob)->Label() * 10);
108 (*image)(x,y,z)=105 + ((*itBlob)->Label() * 10);
120 typedef std::pair<Point3df,uint> Site;
123 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
124 std::list<ScaleSpaceBlob<Site>*>
::iterator itBlob=ssBlobList.begin();
126 std::set<Site,ltstr_p3d<Site> > points;
127 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints;
132 std::set<float> scale= sketch->scaleSpace()->GetScaleList();
136 for (
uint i=0;i<scale.size();i++)
137 for (
uint j=0;j<sketch->scaleSpace()->Mesh()->vertex().size();j++)
141 std::set<float>::iterator it;
144 for (; itBlob!=ssBlobList.end(); ++itBlob)
147 glBlob=(*itBlob)->GlBlobRep();
149 itPoints=points.begin();
151 std::list<GreyLevelBlob<Site>*> glBlobs=(*itBlob)->glBlobs;
152 std::list<GreyLevelBlob<Site>*>
::iterator glit;
153 for (glit = glBlobs.begin() ; glit != glBlobs.end() ; glit++){
154 points=(*glit)->GetListePoints();
155 itPoints=points.begin();
156 sc = (*glit)->GetScale();
157 for (i=0,it=scale.begin();
158 *it != sc && it!=scale.end();it++,i++) {}
160 for (; itPoints!=points.end(); ++itPoints)
162 tex[i].
item((*itPoints).second)= (*itBlob)->GetMeasurements().t;
177 for (i=0,it=scale.begin();*it != sc && it!=scale.end();
193 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
194 std::list<ScaleSpaceBlob<Site>*>
::iterator itBlob=ssBlobList.begin();
196 std::set<Site,ltstr_p3d<Site> > points;
197 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints;
200 dx=sketch->scaleSpace()->GetOriginalImage().getVoxelSize()[0];
201 dy=sketch->scaleSpace()->GetOriginalImage().getVoxelSize()[1];
202 dz=sketch->scaleSpace()->GetOriginalImage().getVoxelSize()[2];
209 for (; itBlob!=ssBlobList.end(); ++itBlob)
211 glBlob=(*itBlob)->GlBlobRep();
213 itPoints=points.begin();
214 for (; itPoints!=points.end(); ++itPoints)
217 (*blobBck)[(*itBlob)->Label()].push_back(bckItem);
226 typedef std::pair<Point3df,uint> Site;
230 std::list<ScaleSpaceBlob<Site>*> ssBlobList=sketch->BlobSet();
231 std::list<ScaleSpaceBlob<Site>*>
::iterator ssblobit=ssBlobList.begin();
232 std::set<Site,ltstr_p3d<Site> > points;
234 std::map<int,int> tableNodes;
236 uint count=0, count2=0;
239 std::vector<Point3df> nodes;
240 std::vector<Point3dd> pts;
241 std::vector< AimsVector<uint,3> > poly, allPoly;
242 std::vector< AimsVector<uint,3> >
::iterator itPoly;
246 (*mesh)[0].updateNormals();
248 std::cout <<
"==============================" << std::endl;
249 for (; ssblobit!=ssBlobList.end(); ++ssblobit ) {
251 label=(*ssblobit)->Label();
253 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;
255 std::list<GreyLevelBlob<Site>*>
::iterator glblobit=(*ssblobit)->glBlobs.begin();
256 std::map<float,GreyLevelBlob<Site>*> glblobmap;
257 for (;glblobit != (*ssblobit)->glBlobs.end();glblobit++){
258 glblobmap[(*glblobit)->GetScale()] = *glblobit;
260 std::map<float,GreyLevelBlob<Site>*>
::iterator mapit=glblobmap.begin();
262 for (count = 0;count<1 && count <glblobmap.size();count++,mapit++){
265 points=(*mapit).second->GetListePoints();
266 points=(*ssblobit)->GlBlobRep()->GetListePoints();
267 std::set<Site,ltstr_p3d<Site> >
::iterator itPoints=points.begin();
268 std::set<uint> auxpts;
269 for (; itPoints!=points.end(); ++itPoints){
270 index=(*itPoints).second;
271 auxpts.insert(index);
273 for (
uint i=0; i<(*mesh)[0].polygon().size(); i++){
274 if ((auxpts.find((*mesh)[0].polygon()[i][0]) != auxpts.end())
275 && (auxpts.find((*mesh)[0].polygon()[i][1]) != auxpts.end())
276 && (auxpts.find((*mesh)[0].polygon()[i][2]) != auxpts.end())){
277 for (
uint j=0;j<3;j++){
278 Point3df node((*mesh)[0].vertex()[(*mesh)[0].polygon()[i][j]]);
279 Point3df norm((*mesh)[0].normal()[(*mesh)[0].polygon()[i][j]]);
282 tempMesh[0].
vertex().push_back(
Point3df(node[0],node[1],node[2]));
284 tempMesh[0].
polygon().push_back(
AimsVector<uint,3>( tempMesh[0].vertex().size()-3,tempMesh[0].vertex().size()-2,tempMesh[0].vertex().size()-1));
311 if (oneMesh[0].polygon().size()!=0){
313 (*meshBlob)[label].polygon()=oneMesh[0].
polygon();
314 (*meshBlob)[label].vertex()=oneMesh[0].
vertex();
315 (*meshBlob)[label].updateNormals();
320 Point3df auxnode = (*mesh)[0].vertex()[(*ssblobit)->GlBlobRep()->GetMaximum()->_node.second];
323 (*meshBlob)[label].polygon()=(*msh).polygon();
324 (*meshBlob)[label].vertex()=(*msh).vertex();
325 (*meshBlob)[label].updateNormals();
329 std::cout <<
"END" << std::endl;
344 for (
uint i=0; i<(*mesh).size(); i++) {
345 for (
uint j=0; j<(*mesh)[i].vertex().size(); j++)
348 (*blobBck)[i].push_back(bckItem);
363 std::set<Vertex * > vertSet;
364 std::set<Vertex *>::iterator itVert;
370 std::vector<int> bounding_min, bounding_max;
371 std::vector<float> resolution;
373 bounding_min.push_back(0);
374 bounding_min.push_back(0);
375 bounding_min.push_back(0);
376 bounding_max.push_back(sketch->scaleSpace()->GetOriginalImage().getSizeX());
377 bounding_max.push_back(sketch->scaleSpace()->GetOriginalImage().getSizeY());
378 bounding_max.push_back(sketch->scaleSpace()->GetOriginalImage().getSizeZ());
379 resolution = sketch->scaleSpace()->GetOriginalImage().getVoxelSize();
381 graph->setProperty(
"boundingbox_min", bounding_min );
382 graph->setProperty(
"boundingbox_max", bounding_max );
383 graph->setProperty(
"voxel_size", resolution );
390 for ( itVert = vertSet.begin() ; itVert != vertSet.end() ; ++itVert ) {
392 node->getProperty(
"index", label );
394 (*ptrBck)[0] = (*bckMap)[label];
395 ptrBck->setSizeX( resolution[0] );
396 ptrBck->setSizeY( resolution[1] );
397 ptrBck->setSizeZ( resolution[2] );
398 manip.
storeAims( *graph, node,
"ssblob", ptrBck );
399 node->setProperty(
"ssblob_label", label );
405 std::set<Vertex * > vertSet;
406 std::set<Vertex *>::iterator itVert;
416 std::vector<int> bounding_min, bounding_max;
417 std::vector<float> bounding_minf, bounding_maxf;
418 std::vector<float> resolution;
424 if (sketch->scaleSpace()->AuxMesh() != NULL){
425 mesh = sketch->scaleSpace()->AuxMesh();
429 (*mesh)[0] = auxsurf;
432 for (
uint z=0;z<3;z++){ mini[z] = 100000000.0; maxi[z] = -100000000.0; }
434 for (
uint i=0;i<(*mesh)[0].vertex().size();i++)
435 for (
uint z=0;z<3;z++){
436 mini[z] =
std::min((*mesh)[0].vertex()[i][z], mini[z]);
437 maxi[z] =
std::max((*mesh)[0].vertex()[i][z], maxi[z]);
440 resolution.push_back(1);
441 resolution.push_back(1);
442 resolution.push_back(1);
443 bounding_min.push_back(-1);
444 bounding_min.push_back(-1);
445 bounding_min.push_back(-1);
446 bounding_max.push_back(1);
447 bounding_max.push_back(1);
448 bounding_max.push_back(1);
449 graph->setProperty(
"boundingbox_min", bounding_min);
450 graph->setProperty(
"boundingbox_max", bounding_max);
451 graph->setProperty(
"voxel_size", resolution);
460 for (itVert=vertSet.begin(); itVert!=vertSet.end(); ++itVert){
462 node->getProperty(
"index", label);
465 (*ptrTore)[0]=(*tore)[label];
472 manip.
storeAims( *graph, node,
"ssblob", ptrTore );
475 (*ptrBck)[0]=(*bckMap)[label];
476 ptrBck->setSizeX(resolution[0]);
477 ptrBck->setSizeY(resolution[1]);
478 ptrBck->setSizeZ(resolution[2]);
481 node->setProperty(
"ssblob_label", label);
497 unsigned i, t=0, p, t1, t2, t3;
505 for (t=0; t<blobMesh->size(); t++)
507 const std::vector<Point3df> vert = (*blobMesh)[t].vertex();
508 const std::vector<AimsVector<uint,3> > poly = (*blobMesh)[t].polygon();
509 std::map<std::pair<unsigned, unsigned>,
unsigned> edges;
510 std::map<std::pair<unsigned, unsigned>,
unsigned>
::iterator ie, eie = edges.end();
520 ++edges[ std::pair<unsigned, unsigned>( t1, t2 ) ];
522 ++edges[ std::pair<unsigned, unsigned>( t2, t1 ) ];
524 ++edges[ std::pair<unsigned, unsigned>( t1, t3 ) ];
526 ++edges[ std::pair<unsigned, unsigned>( t3, t1 ) ];
528 ++edges[ std::pair<unsigned, unsigned>( t2, t3 ) ];
530 ++edges[ std::pair<unsigned, unsigned>( t3, t2 ) ];
534 for( ie=edges.begin(); ie!=eie; ++ie)
535 if( (*ie).second == 1 )
542 (*blobTore)[t]=(*tmpMesh)[0];
const AimsVector< short, 3 > & location() const
void setSizeX(float sizex)
void setSizeY(float sizey)
void setSizeZ(float sizez)
const std::vector< AimsVector< uint, D > > & polygon() const
const std::vector< Point3df > & vertex() const
const std::set< Vertex * > & vertices() const
const T & item(int n) const
void setSizeX(float sizex)
void setSizeY(float sizey)
void setSizeZ(float sizez)
static void storeAims(Graph &graph, GraphObject *vertex, const std::string &attribute, carto::rc_ptr< T > obj)
std::set< T, ltstr_p3d< T > > & GetListePoints()
static AimsSurfaceTriangle * cylinder(const carto::GenericObject ¶ms)
static AimsSurfaceTriangle * sphere(const carto::GenericObject ¶ms)
static void meshMerge(AimsTimeSurface< D, T > &dst, const AimsTimeSurface< D, T > &add)
void setVoxelSize(float vx, float vy=1., float vz=1., float vt=1.)
float min(float x, float y)
float max(float x, float y)
AimsBucket< Void > * GetSSBlobMeshBucket(AimsSurfaceTriangle *mesh)
AimsSurfaceTriangle * GetSSBlobMesh(PrimalSketch< AimsSurface< D, Void >, Texture< T > > *sketch)
TimeTexture< float > GetSSBlobTexture(PrimalSketch< AimsSurface< D, Void >, Texture< T > > *sketch)
AimsSurfaceTriangle * GetSSBlobTore(PrimalSketch< AimsSurface< D, Void >, Texture< T > > *sketch)
AimsBucket< Void > * GetSSBlobBucket(PrimalSketch< carto::VolumeRef< T >, carto::VolumeRef< T > > *sketch)
carto::VolumeRef< short > * GetSSBlobImage(PrimalSketch< carto::VolumeRef< T >, carto::VolumeRef< T > > *sketch)
void AddBlobsToPSGraph(PrimalSketch< Geom, Text > *sketch, Graph *graph)
AIMSDATA_API AimsTimeSurface< 3, Void > AimsSurfaceTriangle
AIMSDATA_API float norm(const Tensor &thing)