Changeset 5267
- Timestamp:
- 08/16/10 09:30:59 (15 years ago)
- Location:
- issm/trunk/src/c/objects/Bamg
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Bamg/QuadTree.cpp
r5266 r5267 99 99 /*FUNCTION QuadTree::QuadTree(){{{1*/ 100 100 QuadTree::QuadTree() : 101 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/QuadTree)*/102 103 lenStorageQuadTreeBox(100), // by default 100 vertices by box104 101 th(NULL), // initial mesh = NULL 105 102 NbQuadTreeBox(0), // initial number of quadtree boxes = 0 106 103 NbVertices(0){ // initial number of vertices = 0 107 104 108 / /create lenStorageQuadTreeBox (100) StorageQuadTreeBox elements109 sb =new StorageQuadTreeBox(lenStorageQuadTreeBox);110 111 / /root=QuadTreeBox* pointer toward next quadtree box105 /*Create container*/ 106 boxcontainer=new DataSet(); 107 108 /*Create Root, pointer toward the main box*/ 112 109 root=NewQuadTreeBox(); 113 110 … … 116 113 /*FUNCTION QuadTree::QuadTree(Mesh * t,long nbv){{{1*/ 117 114 QuadTree::QuadTree(Mesh * t,long nbv) : 118 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/QuadTree)*/119 120 lenStorageQuadTreeBox(t->maxnbv/8+10),121 115 th(t), 122 116 NbQuadTreeBox(0), 123 117 NbVertices(0) 124 118 { 125 if (nbv == -1) nbv = t->nbv; 126 sb = new StorageQuadTreeBox(lenStorageQuadTreeBox); 119 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/QuadTree)*/ 120 121 /*Get number of vertices*/ 122 if (nbv==-1) nbv=t->nbv; 123 124 /*Create container*/ 125 boxcontainer=new DataSet(); 126 127 /*Create Root, pointer toward the main box*/ 127 128 root=NewQuadTreeBox(); 128 if ( MaxISize <= MaxICoor){ 129 ISSMERROR("MaxISize <= MaxICoor"); 130 } 131 for (int i=0;i<nbv;i++) 132 Add(t->vertices[i]); 129 130 /*Check Sizes*/ 131 ISSMASSERT(MaxISize>MaxICoor); 132 133 /*Add all vertices of the mesh*/ 134 for (int i=0;i<nbv;i++) Add(t->vertices[i]); 135 133 136 } 134 137 /*}}}1*/ 135 138 /*FUNCTION QuadTree::~QuadTree(){{{1*/ 136 139 QuadTree::~QuadTree() { 137 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/~QuadTree)*/ 138 139 delete sb; 140 root=0; 140 delete boxcontainer; 141 root=NULL; 141 142 } 142 143 /*}}}1*/ … … 491 492 QuadTree::QuadTreeBox* QuadTree::NewQuadTreeBox(void){ 492 493 493 /*if currentbox==lastbox or currentbox>lastbox (we have reach the end of the StorageQuadTreeBox) 494 * create a new StorageQuadTreeBox)*/ 495 if(!(sb->currentbox<sb->lastbox)){ 496 sb=new StorageQuadTreeBox(lenStorageQuadTreeBox,sb); 497 } 498 ISSMASSERT(sb && sb->currentbox->nbitems==0); 494 /*Output*/ 495 QuadTreeBox* newbox=NULL; 496 497 /*Create and initialize a new box*/ 498 newbox=new QuadTreeBox; 499 newbox->nbitems=0; 500 newbox->b[0]=NULL; 501 newbox->b[1]=NULL; 502 newbox->b[2]=NULL; 503 newbox->b[3]=NULL; 504 505 /*Add root to the container*/ 506 boxcontainer->AddObject(newbox); 499 507 500 508 /*Increase counter*/ … … 502 510 503 511 /*currentbox now points toward next quadtree box*/ 504 return sb->currentbox++;512 return newbox; 505 513 }/*}}}*/ 506 /*FUNCTION QuadTree::SizeOf{{{1*/507 long QuadTree::SizeOf() const {508 return sizeof(QuadTree)+sb->SizeOf();509 }510 /*}}}1*/511 514 /*FUNCTION QuadTree::ToClose {{{1*/ 512 515 BamgVertex* QuadTree::ToClose(BamgVertex & v,double seuil,Icoor1 hx,Icoor1 hy){ … … 584 587 } 585 588 /*}}}1*/ 586 587 /*StorageQuadTreeBox Methods*/588 /*FUNCTION QuadTree::StorageQuadTreeBox::StorageQuadTreeBox{{{1*/589 QuadTree::StorageQuadTreeBox::StorageQuadTreeBox(long nbquadtreeboxes_in,StorageQuadTreeBox *nextsb_in) {590 /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, QuadTree.cpp/StorageQuadTreeBox)*/591 592 /*Initilalize variables*/593 nbquadtreeboxes = nbquadtreeboxes_in; // number of quadtree boxes594 nextsb = nextsb_in; // next StorageQuadTreeBox pointer595 boxes = new QuadTreeBox[nbquadtreeboxes]; // quadtree boxes596 ISSMASSERT(boxes); // check allocation597 598 /*Initialize all quadtree boxes (empty)*/599 for (int i = 0; i <nbquadtreeboxes;i++){600 boxes[i].nbitems=0;601 boxes[i].b[0]=NULL;602 boxes[i].b[1]=NULL;603 boxes[i].b[2]=NULL;604 boxes[i].b[3]=NULL;605 }606 607 currentbox = boxes;608 lastbox = boxes + nbquadtreeboxes;609 610 }611 /*}}}1*/612 /*FUNCTION QuadTree::StorageQuadTreeBox::~StorageQuadTreeBox{{{1*/613 QuadTree::StorageQuadTreeBox::~StorageQuadTreeBox(){614 615 if(nextsb) delete nextsb;616 delete [] boxes;617 618 }619 /*}}}1*/620 /*FUNCTION QuadTree::StorageQuadTreeBox::SizeOf {{{1*/621 long QuadTree::StorageQuadTreeBox::SizeOf() const {622 623 return nbquadtreeboxes*sizeof(QuadTreeBox)+sizeof(StorageQuadTreeBox)+ (nextsb?nextsb->SizeOf():0);624 625 }/*}}}*/626 589 } -
issm/trunk/src/c/objects/Bamg/QuadTree.h
r5224 r5267 17 17 private: 18 18 19 class QuadTreeBox{ 20 /*A quadtree box contains a maximum of 4 vertices. 4 other quadtree boxes are 21 * created if a fifth vertex is added to the same box. A Quadtree box is therefore 22 * composed of EITHER: 23 * - up to 4 vertices 24 * - 4 "sub" quadtree boxes*/ 25 19 /*A quadtree box contains a maximum of 4 vertices. 4 other quadtree boxes are 20 * created if a fifth vertex is added to the same box. A Quadtree box is therefore 21 * composed of EITHER: 22 * - up to 4 vertices 23 * - 4 "sub" quadtree boxes*/ 24 class QuadTreeBox: public Object{ 26 25 public: 27 26 int id; 28 27 int nbitems; // number of current vertices in the box 29 30 28 union{ 31 29 QuadTreeBox* b[4]; 32 30 BamgVertex* v[4]; 33 31 }; 34 }; 35 36 class StorageQuadTreeBox{ 37 38 public: 39 40 /*Fields*/ 41 QuadTreeBox *boxes,*currentbox,*lastbox; 42 long nbquadtreeboxes; 43 StorageQuadTreeBox *nextsb; // next StorageQuadTreeBox 44 45 /*Methods*/ 46 StorageQuadTreeBox(long ,StorageQuadTreeBox* =NULL); 47 ~StorageQuadTreeBox(); 48 long SizeOf() const; 32 /*Object functions*/ 33 void Echo(){ISSMERROR("not implemented yet");}; 34 void DeepEcho(){ISSMERROR("not implemented yet");}; 35 int Id(){ISSMERROR("not implemented yet");}; 36 int MyRank(){ISSMERROR("not implemented yet");}; 37 void Marshall(char** pmarshalled_dataset){ISSMERROR("not implemented yet");}; 38 int MarshallSize(){ISSMERROR("not implemented yet");}; 39 void Demarshall(char** pmarshalled_dataset){ISSMERROR("not implemented yet");}; 40 int Enum(){ISSMERROR("not implemented yet");}; 41 Object* copy(){ISSMERROR("not implemented yet");}; 49 42 }; 50 43 51 44 /*QuadTree private Fields*/ 52 StorageQuadTreeBox* sb; 53 long lenStorageQuadTreeBox; 45 DataSet* boxcontainer; 54 46 55 47 public: … … 69 61 QuadTreeBox* NewQuadTreeBox(void); 70 62 BamgVertex* ToClose(BamgVertex & ,double ,Icoor1,Icoor1); 71 long SizeOf() const;72 63 void Add( BamgVertex & w); 73 64
Note:
See TracChangeset
for help on using the changeset viewer.