bcell2d_voronoi_impl_diagram< C, V > Class Template Reference

#include <bcell2d_voronoi_impl_diagram.hpp>

Inheritance diagram for bcell2d_voronoi_impl_diagram< C, V >:
bcell2d< C, V > bcell< C, REF_OF(V) > cell< C, V > bounding_box< C, V >

List of all members.

Public Types

Public Member Functions

Public Attributes

Protected Attributes


Detailed Description

template<class C, class V = default_env>
class mmx::shape::bcell2d_voronoi_impl_diagram< C, V >

Definition at line 43 of file bcell2d_voronoi_impl_diagram.hpp.


Member Typedef Documentation

typedef bcell<C,V>::BoundingBox BoundingBox

Reimplemented from bcell2d< C, V >.

Definition at line 49 of file bcell2d_voronoi_impl_diagram.hpp.

typedef bcell<C, REF_OF(V) > Cell [inherited]
typedef Interval<double> coeff

Definition at line 58 of file bcell2d_voronoi_impl_diagram.hpp.

typedef mesher2d<C,V>::Edge Edge

Reimplemented from bcell2d< C, V >.

Definition at line 51 of file bcell2d_voronoi_impl_diagram.hpp.

typedef bcell2d<C,V>::Point Point

Reimplemented from bcell2d< C, V >.

Definition at line 50 of file bcell2d_voronoi_impl_diagram.hpp.

typedef polynomial< double, with<Bernstein> > Polynomial

Definition at line 57 of file bcell2d_voronoi_impl_diagram.hpp.

typedef topology<C,REF_OF(V)> Topology

Reimplemented from bcell2d< C, V >.

Definition at line 54 of file bcell2d_voronoi_impl_diagram.hpp.

typedef tpl3d<C,V> Topology3d

Definition at line 53 of file bcell2d_voronoi_impl_diagram.hpp.


Constructor & Destructor Documentation

bcell2d_voronoi_impl_diagram ( void   )  [inline]

Definition at line 647 of file bcell2d_voronoi_impl_diagram.hpp.

00647 : m_intersected(false), m_treated(false) {}

bcell2d_voronoi_impl_diagram ( double  xmin,
double  xmax 
)
bcell2d_voronoi_impl_diagram ( double  xmin,
double  xmax,
double  ymin,
double  ymax 
) [inline]

Definition at line 650 of file bcell2d_voronoi_impl_diagram.hpp.

00650 :  bcell2d<C,V>(xmin, xmax, ymin, ymax), m_intersected(false), m_bisector(false), m_treated(false) {}

bcell2d_voronoi_impl_diagram ( double  xmin,
double  xmax,
double  ymin,
double  ymax,
bool  itr 
) [inline]

Definition at line 653 of file bcell2d_voronoi_impl_diagram.hpp.

00653 : bcell2d<C,V>(xmin, xmax, ymin, ymax), m_intersected(itr), m_bisector(false), m_treated(false) {}

bcell2d_voronoi_impl_diagram ( const BoundingBox bx  )  [inline]

Definition at line 656 of file bcell2d_voronoi_impl_diagram.hpp.

00656 : bcell2d<C,V>(bx), m_intersected(false), m_bisector(false), m_treated(false)  {};

~bcell2d_voronoi_impl_diagram ( void   )  [inline, virtual]

Definition at line 659 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell3d, and bcell2d_voronoi_impl_diagram< C, V >::m_objects.

00659                                         {
00660     foreach (Cell3d* m, this->m_objects) delete m;
00661 }


Member Function Documentation

void addsite ( unsigned  i  )  [inline]

Definition at line 171 of file bcell2d_voronoi_impl_diagram.hpp.

00171 {m_sites<<i;};

BoundingBox boundingBox (  )  const [inline, inherited]

Definition at line 71 of file cell.hpp.

00071 { return (BoundingBox)*this; }

bool compute_boundary (  )  [inline]

Definition at line 381 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell2d, Cell3d, Cell3dImplicitCurve, bcell2d< C, V >::e_neighbors, bcell2d_voronoi_impl_diagram< C, V >::intersections(), bcell2d_voronoi_impl_diagram< C, V >::m_bisector, bcell2d_voronoi_impl_diagram< C, V >::m_objects, bcell2d_voronoi_impl_diagram< C, V >::m_sites, bcell2d_voronoi_impl_diagram< C, V >::m_treated, Seq< C, R >::member(), bcell2d< C, V >::n_neighbors, bcell2d< C, V >::s_neighbors, SELF, Seq< C, R >::size(), bcell2d< C, V >::w_neighbors, point< C, N, V >::x(), bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), point< C, N, V >::y(), bounding_box< C, V >::ymax(), and bounding_box< C, V >::ymin().

00382 {
00383   int i(0),j(0), r(m_sites.size()-1);
00384   foreach ( Cell3d* obj, this->m_objects)
00385   {
00386     Cell3dImplicitCurve* cc= dynamic_cast<Cell3dImplicitCurve*>(obj);
00387     if (j<r) // bisector signature (i,j)
00388       j++;
00389     else
00390       { i++; j=i+1;}
00391 
00392     //0
00393     if ( this->s_neighbors.size()==0)
00394     {
00395       Seq<Point *> ip;
00396         Solver::edge_point(ip,
00397                            cc->m_polynomial,
00398                            Solver::south_edge, 
00399                            *cc);
00400         cc->s_intersections << ip;
00401       }
00402     else
00403       foreach( Cell2d *c, this->s_neighbors )
00404         if  ( ((SELF*)c)->m_bisector ) 
00405         {
00406           Seq<unsigned> a= ((SELF*)c)->sites();
00407             if ( a.member( m_sites[i]) && a.member(m_sites[j]) )
00408             {
00409               foreach(Point * p, ((SELF*)c)->intersections(2) ) 
00410                 if (this->xmin()<p->x() && this->xmax()>p->x())
00411                   cc->s_intersections << p;
00412             }
00413           }
00414         else if ( ((SELF*)c)->m_treated )
00415         {
00416               int u(0),v(0);
00417               foreach( Cell3d *nc, ((SELF*)c)->m_objects )
00418               {
00419                 if (v<r) // bisector signature (u,v)
00420                   v++;
00421                 else
00422                 { u++; v=u+1;}
00423                   if ( ((SELF*)c)->m_sites[u]==m_sites[i] && 
00424                        ((SELF*)c)->m_sites[v]==m_sites[j] )
00425               foreach(Point * p, ((SELF*)nc)->intersections(2) ) 
00426                 if (this->xmin()<p->x() && this->xmax()>p->x())
00427                   cc->s_intersections << p;
00428           }
00429        }
00430         else
00431         {
00432           Seq<Point *> ip;
00433             Solver::edge_point(ip,
00434                                cc->m_polynomial,
00435                                Solver::south_edge, 
00436                                *cc  );
00437             foreach(Point * p, ip ) 
00438               if (c->xmin()<p->x() && c->xmax()>p->x())
00439                 cc->s_intersections << p;
00440             //std::cout<<"ip: "<< ip.size() <<"\n";
00441           }
00442         
00443         //1
00444         if (this->e_neighbors.size()==0)
00445         {
00446           Seq<Point *> ip;
00447             Solver::edge_point(ip,
00448                                cc->m_polynomial,
00449                                Solver::east_edge, 
00450                                *cc);
00451                cc->e_intersections << ip;
00452           }
00453         else
00454           foreach( Cell2d *c, this->e_neighbors )
00455             if ( ((SELF*)c)->m_bisector ) 
00456             {
00457               Seq<unsigned> a= ((SELF*)c)->sites();
00458               if ( a.member( m_sites[i]) && a.member(m_sites[j]) )
00459               {
00460                 foreach(Point * p, ((SELF*)c)->intersections(3) ) 
00461                   if (this->ymin()<p->y() && this->ymax()>p->y())
00462                     cc->e_intersections << p;
00463               }
00464             }
00465             else if ( ((SELF*)c)->m_treated )
00466             {
00467               int u(0),v(0);
00468               foreach( Cell3d *nc, ((SELF*)c)->m_objects )
00469               {
00470                 if (v<r) // bisector signature (u,v)
00471                   v++;
00472                 else
00473                 { u++; v=u+1;}
00474                   if ( ((SELF*)c)->m_sites[u]==m_sites[i] && 
00475                        ((SELF*)c)->m_sites[v]==m_sites[j] )
00476                     foreach(Point * p, ((SELF*)nc)->intersections(3) ) 
00477                       if (this->ymin()<p->y() && this->ymax()>p->y())
00478                         cc->e_intersections << p;                    
00479                     }
00480               }
00481             else
00482             {
00483               Seq<Point *> ip;
00484                 Solver::edge_point(ip,
00485                                    cc->m_polynomial,
00486                                    Solver::east_edge, 
00487                                    *cc  );
00488                  foreach(Point * p, ip ) 
00489                    if (c->ymin()<p->y() && c->ymax()>p->y())
00490                      cc->e_intersections << p;
00491               }
00492             
00493             //2
00494              if (this->n_neighbors.size()==0 )
00495              {
00496                Seq<Point *> ip;
00497                  Solver::edge_point(ip,
00498                                     cc->m_polynomial,
00499                                     Solver::north_edge, 
00500                                     *cc);
00501                  cc->n_intersections << ip;
00502                }
00503              else
00504                foreach( Cell2d *c, this->n_neighbors )
00505                  if ( ((SELF*)c)->m_bisector ) 
00506                  {
00507                    Seq<unsigned> a= ((SELF*)c)->sites();
00508                      if ( a.member( m_sites[i]) && a.member(m_sites[j]) )
00509                      {
00510                    foreach(Point * p, ((SELF*)c)->intersections(0) ) 
00511                      if (this->xmin()<p->x() && this->xmax()>p->x())
00512                        cc->n_intersections << p;
00513                      }
00514                    }
00515             else if ( ((SELF*)c)->m_treated )
00516             {
00517               int u(0),v(0);
00518               foreach( Cell3d *nc, ((SELF*)c)->m_objects )
00519               {
00520                 if (v<r) // bisector signature (u,v)
00521                   v++;
00522                 else
00523                 { u++; v=u+1;}
00524                   if ( ((SELF*)c)->m_sites[u]==m_sites[i] && 
00525                        ((SELF*)c)->m_sites[v]==m_sites[j] )
00526                    foreach(Point * p, ((SELF*)nc)->intersections(0) ) 
00527                       if (this->xmin()<p->x() && this->xmax()>p->x())
00528                         cc->n_intersections << p;                    
00529                 }
00530               }
00531                  else
00532                  {
00533                    Seq<Point *> ip;
00534                      Solver::edge_point(ip,
00535                                         cc->m_polynomial,
00536                                         Solver::north_edge, 
00537                                         *cc );
00538                      foreach(Point * p, ip ) 
00539                        if (c->xmin()<p->x() && c->xmax()>p->x())
00540                          cc->n_intersections << p;
00541                    }
00542                  
00543                  //3
00544                  if (this->w_neighbors.size()==0)
00545                  {
00546                    Seq<Point *> ip;
00547                  Solver::edge_point(ip,
00548                                     cc->m_polynomial,
00549                                     Solver::west_edge, 
00550                                     *cc);
00551                  cc->w_intersections << ip;
00552                }
00553                  else
00554                foreach( Cell2d *c, this->w_neighbors )
00555                  if ( ((SELF*)c)->m_bisector ) 
00556                  {
00557                    Seq<unsigned> a= ((SELF*)c)->sites();
00558                      if ( a.member( m_sites[i]) && a.member(m_sites[j]) )
00559                      {
00560                    //Cell2d *c;
00561                    //foreach(Point * p, ((VSite*)( ((SELF*)c)->m_objects[0]))->e_intersections ) 
00562                    foreach(Point * p, ((SELF*)c)->intersections(1) ) 
00563                      if (this->ymin()<p->y() && this->ymax()>p->y())
00564                        cc->w_intersections << p;
00565                      }
00566                    }
00567             else if ( ((SELF*)c)->m_treated )
00568             {
00569               int u(0),v(0);
00570               foreach( Cell3d *nc, ((SELF*)c)->m_objects )
00571               {
00572                 if (v<r) // bisector signature (u,v)
00573                   v++;
00574                 else
00575                 { u++; v=u+1;}
00576                   if ( ((SELF*)c)->m_sites[u]==m_sites[i] && 
00577                        ((SELF*)c)->m_sites[v]==m_sites[j] )
00578                    foreach(Point * p, ((SELF*)nc)->intersections(1) ) 
00579                      if (this->ymin()<p->y() && this->ymax()>p->y())
00580                        cc->w_intersections << p;                    
00581                     }
00582               }
00583                  else
00584                  {
00585                    Seq<Point *> ip;
00586                      Solver::edge_point(ip,
00587                                         cc->m_polynomial,
00588                                         Solver::west_edge, 
00589                                         *cc  );
00590                      foreach(Point * p, ip ) 
00591                        if (c->ymin()<p->y() && c->ymax()>p->y())
00592                          cc->w_intersections << p;
00593                      
00594                      //std::cout<<"west: "<< *ip[0] <<"\n";
00595                    }
00596                  
00597         }
00598   this->m_treated=true;
00599   return true;
00600 }//compute_boundary

void connect0 ( bcell2d< C, V > *  a,
bcell2d< C, V > *  b 
) [inline, inherited]

Definition at line 273 of file bcell2d.hpp.

References mmx::shape::check_overlap(), bcell2d< C, V >::e_neighbors, bcell2d< C, V >::n_neighbors, bcell2d< C, V >::s_neighbors, Seq< C, R >::search(), SELF, and bcell2d< C, V >::w_neighbors.

Referenced by bcell2d_voronoi_impl_diagram< C, V >::subdivide(), bcell2d_voronoi_diagram< C, V >::subdivide(), bcell2d_list< C, V >::subdivide(), and bcell2d_intersection< C, V >::subdivide().

00274 {
00275     int i;
00276     bool flag;
00277 
00278     //copy horizontally
00279     b->e_neighbors= this->e_neighbors ;
00280     foreach(SELF* cl,b->e_neighbors) {
00281         i= cl->w_neighbors.search(this);
00282         cl->w_neighbors[i]= b;
00283     }
00284     a->w_neighbors= this->w_neighbors ;
00285     foreach(SELF* cl,a->w_neighbors) {
00286         i= cl->e_neighbors.search(this);
00287         cl->e_neighbors[i]= a;
00288     }
00289 
00290     //update vertically
00291     foreach(SELF* cl,this->s_neighbors) {
00292         flag=false;
00293         if ( check_overlap(cl,a,0))
00294         {
00295           //assert( cl->ymax()== a->ymin() );
00296             a->s_neighbors<< cl;
00297             i= cl->n_neighbors.search(this);
00298             cl->n_neighbors[i]= a;
00299             flag=true;
00300         }
00301         if ( check_overlap(cl,b,0) )
00302         {
00303           //assert( cl->ymax()== b->ymin() );
00304             b->s_neighbors<< cl;
00305             if (!flag)
00306             {
00307                 i= cl->n_neighbors.search(this);
00308                 cl->n_neighbors[i]= b;
00309             }
00310             else
00311                 cl->n_neighbors << b;
00312         }
00313     }
00314     foreach(SELF* cl,this->n_neighbors) {
00315         flag=false;
00316         if ( check_overlap(cl,a,0)) 
00317         {
00318             a->n_neighbors<< cl;
00319             i= cl->s_neighbors.search(this);
00320             cl->s_neighbors[i]= a;
00321             flag=true;
00322         }
00323         if ( check_overlap(cl,b,0) )
00324         {
00325             b->n_neighbors<< cl;
00326             if (!flag)
00327             {
00328                                         i= cl->s_neighbors.search(this);
00329                                         cl->s_neighbors[i]= b;
00330             }
00331             else
00332                                         cl->s_neighbors << b;
00333         }
00334   }
00335 }

void connect1 ( bcell2d< C, V > *  a,
bcell2d< C, V > *  b 
) [inline, inherited]

Definition at line 338 of file bcell2d.hpp.

References mmx::shape::check_overlap(), bcell2d< C, V >::e_neighbors, bcell2d< C, V >::n_neighbors, bcell2d< C, V >::s_neighbors, Seq< C, R >::search(), SELF, and bcell2d< C, V >::w_neighbors.

Referenced by bcell2d_voronoi_impl_diagram< C, V >::subdivide(), bcell2d_voronoi_diagram< C, V >::subdivide(), bcell2d_list< C, V >::subdivide(), and bcell2d_intersection< C, V >::subdivide().

00339 {
00340     int i;
00341     bool flag;
00342 
00343     //copy vertically
00344    a->s_neighbors= this->s_neighbors ;
00345      foreach(SELF* cl,a->s_neighbors) {
00346         i= cl->n_neighbors.search(this);
00347         cl->n_neighbors[i]= a;
00348     }
00349     b->n_neighbors= this->n_neighbors ;
00350     foreach(SELF* cl,b->n_neighbors) {
00351         i= cl->s_neighbors.search(this);
00352         cl->s_neighbors[i]= b;
00353     }
00354 
00355     //update horizontally
00356     foreach(SELF* cl,this->w_neighbors) {
00357             flag=false;
00358             if ( check_overlap(cl,a,1)) 
00359             {
00360                 //assert( cl->xmax()== a->xmin() );
00361                 a->w_neighbors<< cl;
00362                 i= cl->e_neighbors.search(this);
00363                 cl->e_neighbors[i]= a;
00364                 flag=true;
00365             }
00366             if ( check_overlap(cl,b,1) )
00367             {
00368                 //assert( cl->xmax()== b->xmin() );
00369                 b->w_neighbors<< cl;
00370                 if (!flag)
00371                 {
00372                     i= cl->e_neighbors.search(this);
00373                     cl->e_neighbors[i]= b;
00374                 }
00375                 else
00376                     cl->e_neighbors << b;
00377             }
00378     }
00379     foreach(SELF* cl,this->e_neighbors) {
00380         flag=false;
00381         if ( check_overlap(cl,a,1)) 
00382         {
00383             a->e_neighbors<< cl;
00384             i= cl->w_neighbors.search(this);
00385             cl->w_neighbors[i]= a;
00386             flag=true;
00387         }
00388         if ( check_overlap(cl,b,1) )
00389         {
00390             b->e_neighbors<< cl;
00391             if (!flag)
00392             {
00393                 i= cl->w_neighbors.search(this);
00394                 cl->w_neighbors[i]= b;
00395             }
00396             else
00397                 cl->w_neighbors << b;
00398         }
00399     }
00400 }

bool contains ( double  x,
double  y,
double  z,
bool  strict = false 
) [inline, inherited]

Definition at line 226 of file bounding_box.hpp.

References bounding_box< C, V >::m_xmax, bounding_box< C, V >::m_xmin, bounding_box< C, V >::m_ymax, bounding_box< C, V >::m_ymin, bounding_box< C, V >::m_zmax, and bounding_box< C, V >::m_zmin.

00227 {
00228     if(!strict)
00229         return (((m_xmin <= x) && (x <= m_xmax))
00230                 &&   ((m_ymin <= y) && (y <= m_ymax))
00231                 &&   ((m_zmin <= z) && (z <= m_zmax)))  ;
00232     else
00233         return (((m_xmin <  x) && (x <  m_xmax))
00234                 &&   ((m_ymin <  y) && (y <  m_ymax))
00235                 &&   ((m_zmin <  z) && (z <  m_zmax)))  ;
00236 }

bool contains ( double  x,
double  y,
bool  strict = false 
) [inline, inherited]

Definition at line 215 of file bounding_box.hpp.

References bounding_box< C, V >::m_xmax, bounding_box< C, V >::m_xmin, bounding_box< C, V >::m_ymax, and bounding_box< C, V >::m_ymin.

00216 {
00217     if(!strict)
00218         return (((m_xmin <= x) && (x <= m_xmax))
00219                 &&   ((m_ymin <= y) && (y <= m_ymax))) ;
00220     else
00221         return (((m_xmin <  x) && (x <  m_xmax))
00222                 &&   ((m_ymin <  y) && (y <  m_ymax))) ;
00223 }

bool contains ( double  x,
bool  strict = false 
) [inline, inherited]

Definition at line 206 of file bounding_box.hpp.

References bounding_box< C, V >::m_xmax, and bounding_box< C, V >::m_xmin.

00207 {
00208     if(!strict)
00209         return (((m_xmin <= x) && (x <= m_xmax))) ;
00210     else
00211         return (((m_xmin <  x) && (x <  m_xmax))) ;
00212 }

int count ( void   )  [inline]
void disconnect (  )  [inline, inherited]
Polynomial func ( const int  i  )  const [inline]

Definition at line 122 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::m_objects, and VSite.

00122                                               {
00123        return ((VSite*)(this->m_objects[0]))->m_polynomial;
00124      };

bool insert_regular ( Topology s  )  [inline, virtual]

Implements bcell< C, REF_OF(V) >.

Definition at line 694 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell2d, Cell3d, bcell2d< C, V >::e_neighbors, EPSILON, topology< C, V >::insert(), bcell2d_voronoi_impl_diagram< C, V >::intersections(), bcell2d_voronoi_impl_diagram< C, V >::m_objects, bcell2d< C, V >::n_neighbors, bcell2d_voronoi_impl_diagram< C, V >::nb_intersect(), bcell2d< C, V >::s_neighbors, SELF, Seq< C, R >::size(), VSite, bcell2d< C, V >::w_neighbors, bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), and bounding_box< C, V >::ymin().

00694                                 {
00695 
00696   Seq<Point*> l;
00697   l= this->intersections();
00698 
00699   
00700   //std::cout<<"VD, regular: "<< *this<<", #="<<l.size() <<std::endl;
00701   // foreach( Point* e, l)
00702   //    std::cout<<*e <<", at "<< e <<std::endl;
00703 
00704   int * sz;
00705   int * st;
00706   Point *q;
00707 
00708   if ( l.size()==2 )
00709   {
00710     s->insert( l[0] );
00711     s->insert( l[1] );
00712     s->insert( new Edge(l[0],l[1]) );
00713     return true;
00714   }
00715 
00716   if ( l.size()==4 ) // two dublicated
00717   {
00718     s->insert( l[0] );
00719     s->insert( l[1] );
00720     s->insert( new Edge(l[0],l[1]) );
00721     return true;
00722   }
00723   
00724   if ( l.size()==1)
00725   {
00726     std::cout<< "SIZE ONE, "<< *this<<std::endl;
00727 
00728     s->insert( l[0] );
00729     foreach( Cell3d* c, this->m_objects )
00730       if ( ((Cell2d*)c)->nb_intersect()==1 )
00731       {
00732         sz= ((VSite*)c)->m_polynomial.rep().szs();
00733         st= ((VSite*)c)->m_polynomial.rep().str();
00734         if ( ((VSite*)c)->m_polynomial[0]<EPSILON )
00735         {
00736           q= new Point(this->xmin(),this->ymin(),0); 
00737           std::cout<< "1.add ("<< *q <<")->("<< *l[0] << ") in "<< *this<<std::endl;
00738           s->insert(q);
00739           s->insert( new Edge(l[0],q) );
00740           ((VSite*)c)->n_intersections<< q;
00741 
00742           foreach( Cell2d *nb, this->s_neighbors )
00743             foreach( Cell3d* cc, ((SELF*)nb)->m_objects )
00744             if ( cc->is_active() )
00745             {
00746               ((VSite*)cc)->n_intersections<< q;
00747               std::cout<<"This Intersections: "<< this->intersections().size() << std::endl;
00748               std::cout<<"Neib Intersections: "<< nb->intersections().size() << std::endl;
00749               return true;
00750             }
00751           foreach( Cell2d *nb, this->w_neighbors )
00752             foreach( Cell3d* cc, ((SELF*)nb)->m_objects )
00753             if ( cc->is_active() )
00754             {
00755               ((VSite*)cc)->e_intersections<< q;
00756               std::cout<<"This Intersections: "<< this->intersections().size() << std::endl;
00757               std::cout<<"Neib Intersections: "<< nb->intersections().size() << std::endl;
00758               return true;
00759             }
00760 
00761         } else if ( ((VSite*)c)->m_polynomial[(sz[0]-1)*st[0]]<EPSILON )
00762         {
00763           q= new Point(this->xmax(),this->ymax(),0);
00764           std::cout<< "2.add ("<< *q <<")->("<< *l[0] << ") in "<< *this<<std::endl;
00765           s->insert(q);
00766           s->insert( new Edge(l[0],q) );
00767           ((VSite*)c)->s_intersections<< q;
00768 
00769 
00770           foreach( Cell2d *nb, this->e_neighbors )
00771             foreach( Cell3d* cc, ((SELF*)nb)->m_objects )
00772             if ( cc->is_active() )
00773             {
00774               ((VSite*)cc)->w_intersections<< q;
00775               std::cout<<"This Intersections: "<< this->intersections().size() << std::endl;
00776               std::cout<<"Neib Intersections: "<< nb->intersections().size() << std::endl;
00777               return true;
00778             }
00779           foreach( Cell2d *nb, this->n_neighbors )
00780             foreach( Cell3d* cc, ((SELF*)nb)->m_objects )
00781             if ( cc->is_active() )
00782             {
00783               ((VSite*)cc)->s_intersections<< q;
00784               std::cout<<"This Intersections: "<< this->intersections().size() << std::endl;
00785               std::cout<<"Neib Intersections: "<< nb->intersections().size() << std::endl;
00786               return true;
00787             }
00788 
00789         } else if ( ((VSite*)c)->m_polynomial[sz[0]*sz[1]-1]<EPSILON )
00790         {
00791           q= new Point(this->xmin(),this->ymax(),0);
00792           std::cout<< "3.add ("<< *q <<")->("<< *l[0] << ") in "<< *this<<std::endl;
00793           s->insert(q);
00794           s->insert( new Edge(l[0],q) );
00795           ((VSite*)c)->w_intersections<< q;
00796           return true;
00797         } else if ( ((VSite*)c)->m_polynomial[(sz[1]-1)*st[1]]<EPSILON )
00798         {
00799           q= new Point(this->xmax(),this->ymin(),0);
00800           std::cout<< "4.add ("<< *q <<")->("<< *l[0] << ") in "<< *this<<std::endl;
00801           s->insert(q);
00802           s->insert( new Edge(l[0],q) );
00803           ((VSite*)c)->e_intersections<< q;
00804           return true;
00805         }  
00806       }
00807   }
00808 
00809   if ( l.size()==0)
00810   {
00811     std::cout<< "SIZE ZERO, "<< *this<<std::endl;
00812     return true;
00813 
00814     foreach( Cell3d* c, this->m_objects )
00815       {
00816         sz= ((VSite*)c)->m_polynomial.rep().szs();
00817         st= ((VSite*)c)->m_polynomial.rep().str();
00818         if ( ((VSite*)c)->m_polynomial[0]<EPSILON )
00819         {
00820           q= new Point(this->xmin(),this->ymin(),0); 
00821           std::cout<< "1.add ("<< *q <<") in "<< *this<<std::endl;
00822           s->insert(q);
00823           ((VSite*)c)->n_intersections<< q;
00824           return true;
00825         } else if ( ((VSite*)c)->m_polynomial[(sz[0]-1)*st[0]]<EPSILON )
00826         {
00827           q= new Point(this->xmax(),this->ymax(),0);
00828           std::cout<< "1.add ("<< *q <<") in "<< *this<<std::endl;
00829           s->insert(q);
00830           ((VSite*)c)->s_intersections<< q;
00831           return true;
00832         } else if ( ((VSite*)c)->m_polynomial[sz[0]*sz[1]-1]<EPSILON )
00833         {
00834           q= new Point(this->xmin(),this->ymax(),0);
00835           std::cout<< "1.add ("<< *q <<") in "<< *this<<std::endl;
00836           s->insert( new Edge(l[0],q) );
00837           ((VSite*)c)->w_intersections<< q;
00838           return true;
00839         } else if ( ((VSite*)c)->m_polynomial[(sz[1]-1)*st[1]]<EPSILON )
00840         {
00841           q= new Point(this->xmax(),this->ymin(),0);
00842           std::cout<< "1.add ("<< *q <<") in "<< *this<<std::endl;
00843           s->insert(q);
00844           s->insert( new Edge(l[0],q) );
00845           ((VSite*)c)->e_intersections<< q;
00846           return true;
00847         }  
00848       }
00849   }
00850 
00851     std::cout<< "nb_in= "<<  this->nb_intersect() <<std::endl;
00852     //std::cout<< "box  = "<< *this <<std::endl;
00853         //foreach(Point* q, this->intersections() ) 
00854         //std::cout<< " "<< *q <<std::endl;
00855 //    print((Cell3dImplicitCurve*)m_objects[0]);
00856     return true;
00857 }

virtual bool insert_singular ( Topology  )  [inline, virtual]

Implements bcell< C, REF_OF(V) >.

Definition at line 74 of file bcell2d_voronoi_impl_diagram.hpp.

00074 {return false;};// not used

bounding_box< C, V > * intersect ( const bounding_box< C, V > &  other  )  [inline, inherited]

Definition at line 319 of file bounding_box.hpp.

References mmx::shape::mmxmax(), mmx::shape::mmxmin(), SELF, bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), bounding_box< C, V >::ymin(), bounding_box< C, V >::zmax(), and bounding_box< C, V >::zmin().

Referenced by bounding_box< double, V >::operator*().

00319                                  {
00320     SELF * bcell = new SELF ;
00321     bcell->set_xmin(mmxmax(this->xmin(), other.xmin())) ;
00322     bcell->set_xmax(mmxmin(this->xmax(), other.xmax())) ;
00323     bcell->set_ymin(mmxmax(this->ymin(), other.ymin())) ;
00324     bcell->set_ymax(mmxmin(this->ymax(), other.ymax())) ;
00325     bcell->set_zmin(mmxmax(this->zmin(), other.zmin())) ;
00326     bcell->set_zmax(mmxmin(this->zmax(), other.zmax())) ;
00327     return bcell ;
00328 }

void intersected ( bounding_box< C, V > *  other  )  [inline, inherited]
virtual Seq<Point *> intersections ( int  i  )  const [inline, virtual]

Reimplemented from bcell2d< C, V >.

Definition at line 91 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell3d, Cell3dImplicitCurve, and bcell2d_voronoi_impl_diagram< C, V >::m_objects.

00091                                                  {
00092       Seq<Point*> l;
00093       Cell3dImplicitCurve* c;
00094       
00095       foreach(Cell3d *m, this->m_objects)
00096       {
00097         std::cout<<"NEED intersections\n";
00098         // c = dynamic_cast<Cell3dAlgebraicSurface*>(m);
00099         //  l<< c->intersections(i);
00100       }
00101       return l;
00102   }

Seq< typename mmx::shape::bcell2d< C, V >::Point * > intersections (  )  const [inline, virtual]

Reimplemented from bcell2d< C, V >.

Definition at line 1196 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell2d, Cell3d, bcell2d_voronoi_impl_diagram< C, V >::m_objects, Seq< C, R >::reversed(), and Seq< C, R >::sort().

Referenced by bcell2d_voronoi_impl_diagram< C, V >::compute_boundary(), and bcell2d_voronoi_impl_diagram< C, V >::insert_regular().

01196                          {
01197     Seq<Point *> s,e,n,w,r;
01198     //std::cout<<"intersections, "<<*this<<std::endl;
01199     Cell2d* cl;
01200     foreach (Cell3d* m, m_objects)
01201     {
01202         cl = dynamic_cast<Cell2d*>(m);           
01203         s<< cl->s_intersections;
01204         e<< cl->e_intersections;
01205         n<< cl->n_intersections;
01206         w<< cl->w_intersections;
01207     }
01208     s.sort(this->coord<0>);
01209     e.sort(this->coord<1>);
01210     n.sort(this->coord<0>);
01211     w.sort(this->coord<1>);
01212 
01213     r<<s;
01214     r<<e;
01215     r<<n.reversed();
01216     r<<w.reversed();
01217 
01218 
01219     return ( r ); 
01220 }

bool intersects ( bounding_box< C, V > *  other,
bool  strict = true 
) [inline, inherited]

Definition at line 239 of file bounding_box.hpp.

References bounding_box< C, V >::is0D(), bounding_box< C, V >::is1D(), bounding_box< C, V >::is2D(), bounding_box< C, V >::is3d(), mmx::shape::mmxmax(), mmx::shape::mmxmin(), bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), bounding_box< C, V >::ymin(), bounding_box< C, V >::zmax(), and bounding_box< C, V >::zmin().

00240 {
00241     if(this->is0D())
00242         return (this->xmin() == other->xmin()) ;
00243     else if(this->is1D())
00244         if(strict)
00245             return ((mmxmax(this->xmin(), other->xmin()) <  mmxmin(this->xmax(), other->xmax()))) ;
00246         else
00247             return ((mmxmax(this->xmin(), other->xmin()) <= mmxmin(this->xmax(), other->xmax()))) ;
00248     else if(this->is2D())
00249         if(strict)
00250             return ((mmxmax(this->xmin(), other->xmin()) <  mmxmin(this->xmax(), other->xmax())) &&
00251                     (mmxmax(this->ymin(), other->ymin()) <  mmxmin(this->ymax(), other->ymax()))) ;
00252         else
00253             return ((mmxmax(this->xmin(), other->xmin()) <= mmxmin(this->xmax(), other->xmax())) &&
00254                     (mmxmax(this->ymin(), other->ymin()) <= mmxmin(this->ymax(), other->ymax()))) ;
00255     else if(this->is3d()) {
00256         if(strict)
00257             return ((mmxmax(this->xmin(), other->xmin()) <  mmxmin(this->xmax(), other->xmax())) &&
00258                     (mmxmax(this->ymin(), other->ymin()) <  mmxmin(this->ymax(), other->ymax())) &&
00259                     (mmxmax(this->zmin(), other->zmin()) <  mmxmin(this->zmax(), other->zmax()))) ;
00260         else
00261             return ((mmxmax(this->xmin(), other->xmin()) <= mmxmin(this->xmax(), other->xmax())) &&
00262                     (mmxmax(this->ymin(), other->ymin()) <= mmxmin(this->ymax(), other->ymax())) &&
00263                     (mmxmax(this->zmin(), other->zmin()) <= mmxmin(this->zmax(), other->zmax()))) ;
00264     }
00265     return false ;
00266 }

bool is0D ( void   )  const [inline, inherited]

Definition at line 80 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersects(), and bounding_box< C, V >::unites().

00080 { return ((m_xmin == m_xmax) && (m_ymin == m_ymax) && (m_zmin == m_zmax)) ; }

bool is1D ( void   )  const [inline, inherited]

Definition at line 81 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersects(), and bounding_box< C, V >::unites().

00081 { return ((m_xmin != m_xmax) && (m_ymin == m_ymax) && (m_zmin == m_zmax)) ; }

bool is2D ( void   )  const [inline, inherited]

Definition at line 82 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersects(), and bounding_box< C, V >::unites().

00082 { return ((m_xmin != m_xmax) && (m_ymin != m_ymax) && (m_zmin == m_zmax)) ; }

bool is3d ( void   )  const [inline, inherited]

Definition at line 83 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersects(), and bounding_box< C, V >::unites().

00083 { return ((m_xmin != m_xmax) && (m_ymin != m_ymax) && (m_zmin != m_zmax)) ; }

bool is_active ( void   )  [inline, virtual]

Implements cell< C, V >.

Definition at line 1040 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::m_objects.

01040                  {
01041   if ( this->is_bisector() ) 
01042   {
01043     return (this->m_objects[0])->is_active();
01044   }
01045   else
01046   {
01047     return true;
01048   }
01049 
01050 }

bool is_border ( void   )  const [inline, inherited]

Definition at line 114 of file bcell2d.hpp.

Referenced by voronoi2dimpl< C, V >::run(), voronoi2d< C, V >::run(), semialgebraic2d< C, V >::run(), mesher2d< C, V >::run(), and arrangement2d< C, V >::run().

00114                                     {
00115       return (  this->s_neighbors.size()==0 ||
00116                 this->e_neighbors.size()==0 ||
00117                 this->n_neighbors.size()==0 ||
00118                 this->w_neighbors.size()==0  );
00119   }

bool is_corner ( void   )  const [inline, inherited]

Definition at line 423 of file bcell2d.hpp.

References bcell2d< C, V >::e_neighbors, bcell2d< C, V >::n_neighbors, bcell2d< C, V >::s_neighbors, Seq< C, R >::size(), and bcell2d< C, V >::w_neighbors.

Referenced by voronoi2dimpl< C, V >::run(), voronoi2d< C, V >::run(), semialgebraic2d< C, V >::run(), and arrangement2d< C, V >::run().

00423                       {
00424 
00425     if (this->s_neighbors.size()==0 &&
00426         this->e_neighbors.size()==0  )
00427         return true;
00428     else if (this->e_neighbors.size()==0 &&
00429              this->n_neighbors.size()==0 )
00430         return true;
00431     else if (this->n_neighbors.size()==0 &&
00432              this->w_neighbors.size()==0  )
00433         return true;
00434     else if (this->w_neighbors.size()==0 &&
00435              this->s_neighbors.size()==0 )
00436         return true;
00437     
00438     return false;
00439 }

bool is_intersected ( void   )  [inline, virtual]

Implements bcell< C, REF_OF(V) >.

Definition at line 678 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::m_intersected, bcell2d_voronoi_impl_diagram< C, V >::m_objects, bcell2d< C, V >::m_singular, and Seq< C, R >::size().

Referenced by bcell2d_voronoi_impl_diagram< C, V >::pair(), and bcell2d_voronoi_impl_diagram< C, V >::process_singular().

00678                      {
00679   
00680   if(this->m_objects.size() >1 && !m_intersected) {
00681 //      std::cout<<"Intersecting inside box "<< this <<std::endl;
00682       for(unsigned i=0; i<this->m_objects.size();i++)
00683           for(unsigned j=i+1; j<this->m_objects.size(); j++)
00684             Intersection2dFactory::instance()->compute(this->m_singular, (Shape*)this->m_objects[i], (Shape*)this->m_objects[j], (BoundingBox)*this);
00685       m_intersected = true;      
00686   }
00687   
00688   if (this->m_singular.size() > 0) return true;
00689   return false;
00690 }

bool is_regular ( void   )  [inline, virtual]

Implements cell< C, V >.

Definition at line 664 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::m_objects.

00665 {
00666   //std::cout<<"bisector? "<< this->is_bisector()<<std::endl;
00667   if ( this->is_bisector() ) 
00668   {
00669     return (this->m_objects[0])->is_regular();
00670   }
00671   else
00672   {
00673     return false;
00674   }
00675 }

virtual bool is_touching ( void   )  [inline, virtual]

Definition at line 83 of file bcell2d_voronoi_impl_diagram.hpp.

00083 {return true; };

void join0 ( bcell2d< C, V > *  b  )  [inline, inherited]

Definition at line 259 of file bcell2d.hpp.

References bcell2d< C, V >::e_neighbors.

00260 {
00261     this->e_neighbors << b; 
00262     b->w_neighbors << this; 
00263 }

void join1 ( bcell2d< C, V > *  b  )  [inline, inherited]

Definition at line 266 of file bcell2d.hpp.

References bcell2d< C, V >::n_neighbors.

00267 {
00268     b->s_neighbors << this;
00269     this->n_neighbors << b;
00270 }

unsigned nb_intersect ( void   )  const [inline, virtual]

Reimplemented from bcell2d< C, V >.

Definition at line 1053 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell2d, Cell3d, bcell2d_voronoi_impl_diagram< C, V >::m_objects, and sum().

Referenced by bcell2d_voronoi_impl_diagram< C, V >::insert_regular().

01053                              {
01054     unsigned sum(0);
01055     Cell2d* c;
01056     foreach (Cell3d* m, this->m_objects)
01057     { 
01058         c = dynamic_cast<Cell2d*>(m);
01059         sum+= c->nb_intersect();
01060     }
01061     return sum;
01062   }

bcell2d< C, V > * neighbor ( Point p  )  [inline, virtual]

Reimplemented from bcell2d< C, V >.

Definition at line 1154 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell2d, bcell2d< C, V >::e_neighbors, bcell2d< C, V >::n_neighbors, bcell2d< C, V >::s_neighbors, and bcell2d< C, V >::w_neighbors.

01155 {
01156   foreach( Cell2d *c, this->s_neighbors     )
01157     if ( c->intersections(2).member(p) )
01158 //    foreach( Point* q, c->intersections(2) )
01159 //    if ( abs(p->x()-q->x())<EPSILON && abs(p->y()-q->y())<EPSILON )
01160       return c;
01161 
01162   foreach( Cell2d *c, this->e_neighbors     )
01163     if ( c->intersections(3).member(p) )
01164 //    foreach( Point* q, c->intersections(3) )
01165 //    if ( abs(p->x()-q->x())<EPSILON && abs(p->y()-q->y())<EPSILON )
01166       return c;
01167 
01168   foreach( Cell2d *c, this->n_neighbors     )
01169     if ( c->intersections(0).member(p) )
01170 //    foreach( Point* q, c->intersections(0) )
01171 //    if ( abs(p->x()-q->x())<EPSILON && abs(p->y()-q->y())<EPSILON )
01172       return c;
01173 
01174   foreach( Cell2d *c, this->w_neighbors     )
01175     if ( c->intersections(1).member(p) )
01176 //    foreach( Point* q, c->intersections(1) )
01177 //    if ( abs(p->x()-q->x())<EPSILON && abs(p->y()-q->y())<EPSILON )
01178       return c;
01179   
01180 /*
01181 
01182   std::cout<<"Point "<<"("<<*p<<") not found in neighbs of "<< *this<<"( #neibs="<<this->neighbors().size() <<")"<<std::endl;
01183 
01184       foreach( Cell2d* c, this->neighbors() )
01185       {
01186         std::cout<< *c <<" ints:"<< ((SELF*)c)->intersections().size()  <<std::endl;
01187         foreach(Point* q, c->intersections() )
01188           std::cout<<"Point "<<q<<" ("<<*q<<")"<<std::endl;
01189       }
01190 */
01191 
01192     return NULL;
01193 }

virtual Seq<bcell2d *> neighbors (  )  [inline, virtual, inherited]

Definition at line 154 of file bcell2d.hpp.

Referenced by voronoi2dimpl< C, V >::run(), voronoi2d< C, V >::run(), semialgebraic2d< C, V >::run(), and arrangement2d< C, V >::run().

00154                                         {
00155       Seq<bcell2d *> r;
00156       r<< this->s_neighbors; 
00157       r<< this->e_neighbors; 
00158       r<< this->n_neighbors; 
00159       r<< this->w_neighbors;
00160   return ( r ); }

double & operator() ( unsigned  v,
unsigned  s 
) [inline, inherited]

Definition at line 356 of file bounding_box.hpp.

References bounding_box< C, V >::m_xmax, bounding_box< C, V >::m_xmin, bounding_box< C, V >::m_ymax, bounding_box< C, V >::m_ymin, bounding_box< C, V >::m_zmax, and bounding_box< C, V >::m_zmin.

00356                                        {
00357     switch(v) {
00358     case 0:
00359         if(s==0) return m_xmin; else return m_xmax;
00360     case 1:
00361         if(s==0) return m_ymin; else return m_ymax;
00362     default:
00363         if(s==0) return m_zmin; else return m_zmax;
00364     }
00365 
00366 }

double operator() ( unsigned  v,
unsigned  s 
) const [inline, inherited]

Definition at line 343 of file bounding_box.hpp.

References bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), bounding_box< C, V >::ymin(), bounding_box< C, V >::zmax(), and bounding_box< C, V >::zmin().

00343                                              {
00344     switch(v) {
00345     case 0:
00346         if(s==0) return xmin(); else return xmax();
00347     case 1:
00348         if(s==0) return ymin(); else return ymax();
00349     default:
00350         if(s==0) return zmin(); else return zmax();
00351     }
00352 
00353 }

bounding_box<C,V>* operator* ( const bounding_box< C, V > &  other  )  [inline, inherited]

Definition at line 103 of file bounding_box.hpp.

00103 { return intersect(other) ; }

bounding_box<C,V>* operator+ ( const bounding_box< C, V > &  other  )  [inline, inherited]

Definition at line 104 of file bounding_box.hpp.

00104 { return     unite(other) ; }

bcell2d_voronoi_impl_diagram< C, V >::Point * pair ( Point p,
int &  sgn 
) [inline, virtual]

Implements bcell2d< C, V >.

Definition at line 1066 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell2d, Cell3d, bcell2d_voronoi_impl_diagram< C, V >::is_intersected(), bcell2d_voronoi_impl_diagram< C, V >::m_objects, bcell2d_voronoi_impl_diagram< C, V >::signof(), bcell2d_voronoi_impl_diagram< C, V >::site(), and VSite.

01067 {
01068 
01069 //  std::cout<<(sgn>0?"+": "-")<<" pair of "<< *this<<"("<< p->x()<<","<<p->y()<<")"<<std::endl;
01070 
01071   if ( this->is_intersected() )  
01072   {
01073     //std::cout<<"Reached Vertex bcell "<< *this << " ("<<sgn<<")"<<std::endl;
01074     //std::cout<<"sites are "<< this->m_sites <<std::endl;
01075     //foreach( Point* q, this->intersections() )
01076     //std::cout<< *q<<std::endl; 
01077   
01078     //Find bisector containing p
01079     
01080     unsigned st, cnt(0);
01081     foreach (Cell3d* mm, this->m_objects)
01082     { 
01083       Cell2d* m = dynamic_cast<Cell2d*>(mm);
01084 
01085       if ( m->intersections().member(p) )
01086 //      foreach( Point* q, m->intersections() )
01087 //        if ( abs(p->x()-q->x())<EPSILON && abs(p->y()-q->y())<EPSILON )
01088         { 
01089           // p found in bisector m.
01090           //std::cout<< "Current bisector: "<< cnt <<std::endl;
01091           // deduce site from sgn
01092           st=this->site(sgn,cnt);
01093           //std::cout<< "Site is: "<< st <<std::endl;
01094           // jump to a different bisector containing st
01095           unsigned cnt2(0);
01096           foreach (Cell3d* cc, this->m_objects)
01097           { 
01098             Cell2d* c = dynamic_cast<Cell2d*>(cc);
01099             if ( c!=m                   &&
01100                (st==this->site(1,cnt2)  ||
01101                 st==this->site(-1,cnt2) ))
01102             {
01103               sgn= this->signof(st,cnt2);
01104 //              std::cout<< "New bisector: "<< cnt2 <<std::endl;
01105 //              std::cout<< "New sign: "<< sgn <<std::endl;
01106 //              std::cout<< "start="<< *(c->starting_point(sgn))<<std::endl;
01107 //              std::cout<< "end  ="<< *(c->pair(c->starting_point(sgn), sgn )) <<std::endl;
01108 
01109               return c->pair(c->starting_point(sgn), sgn );
01110             } 
01111             cnt2++;
01112           }
01113         }
01114       cnt++;
01115     }
01116 
01117   } else {
01118     
01119     VSite* c;
01120     foreach (Cell3d* m, m_objects)
01121     { 
01122       c = dynamic_cast<VSite*>(m);
01123       if ( c->intersections().member(p) )
01124 //    foreach( Point* q, c->intersections() )
01125 //      if ( abs(p->x()-q->x())<EPSILON && abs(p->y()-q->y())<EPSILON )
01126       { 
01127         //return c->pair(q,sgn);
01128         return c->pair(p,sgn);
01129       }
01130     }
01131   }
01132   std::cout<<"... Cell list pair trouble"<<std::endl;
01133   return NULL;
01134 } 

bool process_singular (  )  [inline, virtual]

Definition at line 860 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell3dImplicitCurve, Seq< C, R >::clear(), bcell2d_voronoi_impl_diagram< C, V >::is_intersected(), bcell2d_voronoi_impl_diagram< C, V >::m_bisector, bcell2d_voronoi_impl_diagram< C, V >::m_objects, Seq< C, R >::push_back(), Seq< C, R >::size(), and VSite.

00860                        {
00861 
00862 //  std::cout<<"VD, Inserting singular"<<*this<<std::endl;  
00863 //  ((voronoi2d<C,V>*)s)->m_singular_cells<< this; // does not work with forward declaration of voronoi2d
00864  
00865 //  foreach( Point* q, this->intersections() )
00866 //    std::cout<< *q<<"   adr  "<<q<<std::endl; 
00867 
00868 
00869      //CellList* l= new CellList( (BoundingBox)(*this) );
00870      Seq<Cell3dImplicitCurve*> l;
00871      Cell3dImplicitCurve* cc;
00872 
00873      //std::cout<<"compute arrangement of bisectors"<<std::endl;
00874      //More than one bisector in the bcell: Compute arrangement
00875      Seq<Polynomial> pl;
00876      for ( unsigned i=0; i< this->m_objects.size(); i++ )
00877        for ( unsigned j=i+1; j< this->m_objects.size(); j++ )
00878        {
00879          pl.push_back(  ((VSite*)(this->m_objects[i]))->m_polynomial );
00880          pl.push_back(  ((VSite*)(this->m_objects[j]))->m_polynomial );
00881          
00882 //       cc= new Cell3dImplicitCurve( p,  (BoundingBox)(*this), false  );
00883          cc= new Cell3dImplicitCurve( pl,  (BoundingBox)(*this)  );
00884 
00885 
00886          //if ( cc->is_active() ) //commented:Put all curves, even inactive!
00887            l<< cc;
00888            pl.clear();
00889        }
00890 
00891      this->m_objects.clear();
00892      this->m_objects<< l;
00893      this->is_intersected();
00894 //     foreach(Cell * m, this->m_objects) m->insert_singular(s);
00895 
00896      return true;
00897 
00898      this->m_bisector=true;// .. 
00899 
00900      //foreach(Cell * m, l ) m->insert_singular(s);
00901 
00902      //if (this->m_singular.size()>0 ) 
00903      //  std::cout<<"VORONOI VERTEX COMPUTED in"<< *this <<std::endl;
00904    
00905 }

void push_back ( bcell3d< C, V > *  cv,
unsigned  k 
) [inline]

Definition at line 110 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::m_objects, bcell2d_voronoi_impl_diagram< C, V >::m_sites, and Seq< C, R >::push_back().

00110                                              {
00111        m_sites << k ; //object cv corresponds to site labeled k
00112        m_objects.push_back(cv); 
00113      }; 

void push_back ( bcell3d< C, V > *  cv  )  [inline]
void push_bisector ( bcell3d< C, V > *  cv,
Seq< unsigned >  k 
) [inline]
void set_xmax ( double  x  )  [inline, inherited]

Definition at line 74 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersected(), and bounding_box< C, V >::united().

00074 { this->m_xmax = x ; }

void set_xmin ( double  x  )  [inline, inherited]

Definition at line 73 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersected(), and bounding_box< C, V >::united().

00073 { this->m_xmin = x ; }

void set_ymax ( double  y  )  [inline, inherited]

Definition at line 76 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersected(), and bounding_box< C, V >::united().

00076 { this->m_ymax = y ; }

void set_ymin ( double  y  )  [inline, inherited]

Definition at line 75 of file bounding_box.hpp.

Referenced by bounding_box< C, V >::intersected(), and bounding_box< C, V >::united().

00075 { this->m_ymin = y ; }

void set_zmax ( double  z  )  [inline, inherited]
void set_zmin ( double  z  )  [inline, inherited]
int side ( Point p  )  [inline, inherited]

Definition at line 132 of file bcell2d.hpp.

00132                        {
00133       Seq<Point*> all;
00134       int s,i,a;
00135       s   = s_intersections.size();
00136       all = this->intersections();
00137       a   = all.size();
00138       i   = all.search(p);
00139       if (i==-1) return (-1);
00140       else return
00141          ( i<s                             ? 0 :
00142          ( i<s+(int)e_intersections.size() ? 1 :
00143          ( i<a-(int)w_intersections.size() ? 2 :
00144                                       3 )));
00145   }

int signature ( int &  i,
int &  j 
) [inline]

Definition at line 126 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::m_sites, and Seq< C, R >::size().

00126                                             {
00127        int c(0);
00128        for ( int u=0; u<i; u++)
00129          for ( int v=u+1; v<m_sites.size(); v++)
00130            c++;
00131        return c + j-i-1; }

int signof ( unsigned  st,
unsigned  bs = 0 
) [inline]

Definition at line 147 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::count(), bcell2d_voronoi_impl_diagram< C, V >::m_objects, bcell2d_voronoi_impl_diagram< C, V >::m_sites, and Seq< C, R >::size().

Referenced by bcell2d_voronoi_impl_diagram< C, V >::pair().

00147                                             {
00148 
00149        if (this->m_objects.size()==1 )
00150          return ( st==m_sites[0]? -1 :1 ); 
00151 
00152        //std::cout<<"Sgnof " <<st<<"(bs="<<bs<<") on "<< *this<<"objs="<<this->m_objects.size()<<std::endl;
00153 
00154        unsigned n=this->count() - 1;
00155        unsigned i,j(0),k(0);
00156 
00157        for (i=0;i<=bs;i++)
00158          if ( k<n )
00159            k++ ;
00160          else
00161            j++ ;
00162 
00163        if (st==this->m_sites[j])   return (-1);
00164        if (st==this->m_sites[k])   return (1);
00165 
00166        std::cout<<"problem at \"signof\" "<<i <<", "<< *this <<"sites= "<<m_sites<<std::endl;
00167        return 0;
00168      };

unsigned site ( int  sgn,
unsigned  bs = 0 
) [inline]

Definition at line 133 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::count(), and bcell2d_voronoi_impl_diagram< C, V >::m_sites.

Referenced by bcell2d_voronoi_impl_diagram< C, V >::pair().

00133                                            { 
00134        unsigned n=this->count();
00135        unsigned i,k(bs+1);
00136        
00137        for (i=1;i<n;i++)
00138          if ( k>n-i )
00139            k-= n-i;
00140          else
00141            break;
00142        
00143        //return( sgn>0 ? m_sites[i-1+k]: m_sites[i-1])  ; 
00144        return ( m_sites[i-1 + (sgn>0?k:0)] )  ; 
00145      }

Seq<unsigned> sites (  )  const [inline]

Definition at line 170 of file bcell2d_voronoi_impl_diagram.hpp.

References bcell2d_voronoi_impl_diagram< C, V >::m_sites.

00170 { return m_sites;};

double size ( void   )  [inline, inherited]

Definition at line 199 of file bounding_box.hpp.

References bounding_box< C, V >::m_xmax, bounding_box< C, V >::m_xmin, bounding_box< C, V >::m_ymax, bounding_box< C, V >::m_ymin, bounding_box< C, V >::m_zmax, bounding_box< C, V >::m_zmin, and mmx::max().

Referenced by voronoi2dimpl< C, V >::run(), voronoi2d< C, V >::run(), mesher3d_shape< C, V >::run(), mesher3d_algebraic_curve< C, V >::run(), and mesher2d< C, V >::run().

00200 {
00201     //std::cout<<"Size "<<m_xmax<< " "<< m_xmin<<" "<< m_ymax<<" "<< m_ymin<<" "<< m_zmax<< " "<<m_zmin<<std::endl;
00202     return std::max(m_xmax-m_xmin, std::max(m_ymax-m_ymin, m_zmax-m_zmin)) ;
00203 }

void split_position ( int &  v,
double &  t 
) [inline, virtual]

Reimplemented from bcell2d< C, V >.

Definition at line 908 of file bcell2d_voronoi_impl_diagram.hpp.

References bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), and bounding_box< C, V >::ymin().

00908                                       {
00909   double sx = (this->xmax()-this->xmin());
00910   double sy = (this->ymax()-this->ymin());
00911   if(sx<sy) {
00912     v=1;
00913     s=(this->ymax()+this->ymin())/2;
00914   } else {
00915     v=0;
00916     s=(this->xmax()+this->xmin())/2;
00917   }
00918 }

bcell2d_voronoi_impl_diagram< C, V >::Point * starting_point ( int  sgn  )  [inline, virtual]

Implements bcell2d< C, V >.

Definition at line 1137 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell2d, Cell3d, bcell2d_voronoi_impl_diagram< C, V >::m_objects, and VSite.

01138 {
01139 //  std::cout<<"starting point(voronoi diagram)"<<std::endl;
01140 
01141    Cell2d* c;
01142    foreach (Cell3d* m, m_objects)
01143     { 
01144         if ( m->is_active() )
01145         {
01146             c = dynamic_cast<Cell2d*>(m);           
01147             return ((VSite*)c)->starting_point(sgn);
01148         }
01149     }
01150     return NULL; 
01151 }

virtual void subdivide ( bcell< C , REF_OF(V) > *&  left,
bcell< C , REF_OF(V) > *&  right,
int  v,
double  s 
) [pure virtual, inherited]
virtual int subdivide ( bcell< C , REF_OF(V) > *&  left,
bcell< C , REF_OF(V) > *&  right 
) [virtual, inherited]
void subdivide ( bcell< C, V > *&  left,
bcell< C, V > *&  right,
int  v,
double  s 
) [inline, virtual]

Definition at line 921 of file bcell2d_voronoi_impl_diagram.hpp.

References Cell3d, Cell3dImplicitCurve, bcell2d< C, V >::connect0(), bcell2d< C, V >::connect1(), bcell2d< C, V >::disconnect(), bcell2d_voronoi_impl_diagram< C, V >::m_intersected, bcell2d_voronoi_impl_diagram< C, V >::m_objects, bcell2d< C, V >::m_singular, bcell2d_voronoi_impl_diagram< C, V >::m_sites, Seq< C, R >::min(), SELF, mmx::shape::upper(), VSite, point< C, N, V >::x(), bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), point< C, N, V >::y(), bounding_box< C, V >::ymax(), and bounding_box< C, V >::ymin().

00921                                                              {
00922 
00923   //std::cout<<"Subdividing "<< this << "sites="<<this->m_sites <<std::endl;
00924 
00925   typedef SELF Cell_t;
00926 
00927   if(v==1) {
00928     left =(Cell*)new Cell_t(this->xmin(), this->xmax(), this->ymin(), c, m_intersected) ;
00929     right=(Cell*)new Cell_t(this->xmin(), this->xmax(), c, this->ymax(), m_intersected) ;
00930     
00931     foreach(Point * p, this->m_singular) {
00932       if(p->y() <=  c) 
00933         ((Cell_t*) left)->m_singular << p ;
00934       else
00935         ((Cell_t*)right)->m_singular << p ;
00936     }
00937 
00938     /*  Update neighbors  */
00939     this->connect1( (Cell_t*)left, (Cell_t*)right);
00940     ((Cell_t*)left)->join1((Cell_t*)right);
00941 
00942   } else {//v==0
00943     left = (Cell*)new Cell_t(this->xmin(), c, this->ymin(), this->ymax(), m_intersected) ;
00944     right= (Cell*)new Cell_t(c, this->xmax(), this->ymin(), this->ymax(), m_intersected) ;
00945 
00946     foreach(Point * p, this->m_singular) {
00947       if(p->x() <= c ) 
00948         ((Cell_t*)left)->m_singular << p ;
00949       else
00950         ((Cell_t*)right)->m_singular << p ;
00951     }
00952 
00953     /*  Update neighbors  */
00954     this->connect0((Cell_t*)left, (Cell_t*)right);
00955     ((Cell_t*)left)->join0((Cell_t*)right);
00956 
00957   }
00958 
00959   /* disconnect parent */
00960   this->disconnect( );
00961 
00962   if (!this->is_bisector() ) 
00963   {
00964 
00965   Seq<VSite*> ll, rr;
00966   Cell3d * cv_left, * cv_right;
00967 
00968   foreach(Cell3d* cv, this->m_objects) {
00969     cv->subdivide( cv_left, cv_right);
00970       ll<< (VSite*)cv_left;
00971       rr<< (VSite*)cv_right;
00972   }
00973 
00974   /* Filtering sites that are "far away" */
00975   //1. find minimum upper bound 
00976   //2. remove all bcells whose lower bound is bigger than that
00977   //std::cout<<"Filtering Cells "<< cv_left<<" , "<<cv_right<<std::endl;
00978 
00979   /* Left bcell */
00980   double mm;
00981   unsigned cnt;
00982   mm=  ( (VSite*)ll.min(this->comp_up) )->upper();
00983   
00984   cnt=0;
00985   foreach(VSite* vs, ll)
00986   {
00987     //std::cout<<"check "<< m_sites[cnt]<<std::endl;
00988     if ( !this->over(vs,mm) )
00989     {
00990       ((Cell_t*)left)->push_back( vs, m_sites[cnt] );
00991       //std::cout<<"added "<< m_sites[cnt]<<std::endl;
00992     }
00993     cnt++;
00994     //else
00995     //{
00996     //delete vs;
00997     //ll.erase( ll.search(vs) ) ;
00998     //}
00999   }
01000 
01001   /* Right bcell */
01002   mm=  ( (VSite*)rr.min(this->comp_up) )->upper();
01003   
01004   cnt=0;
01005   foreach(VSite* vs, rr)
01006   {
01007     if ( !this->over(vs,mm) )
01008     {
01009       ((Cell_t*)right)->push_back( vs, m_sites[cnt] );
01010       //((Cell_t*)right)->m_objects<< (Cell*)vs;
01011     }
01012     //else
01013     //{
01014     //delete vs;
01015     //ll.erase( ll.search(vs) ) ;
01016     //}
01017     cnt++;
01018   }
01019   }
01020   else
01021   {//bisector box
01022 
01023     Cell3d * cv_left, * cv_right;
01024     //std::cout<<"bisector subdiv " <<std::endl;
01025     this->m_objects[0]->subdivide( cv_left, cv_right);
01026     ((Cell_t*)left)->push_bisector( (Cell3dImplicitCurve*)cv_left,  m_sites );
01027     ((Cell_t*)right)->push_bisector((Cell3dImplicitCurve*)cv_right, m_sites );
01028 
01029     ((Cell_t*)left)->m_bisector=true;
01030     ((Cell_t*)right)->m_bisector=true;
01031     
01032   }
01033 
01034 //    std::cout<<"ok " <<std::endl;  
01035 }

bounding_box< C, V > * unite ( bounding_box< C, V > *  other  )  [inline, inherited]

Definition at line 331 of file bounding_box.hpp.

References mmx::shape::mmxmax(), mmx::shape::mmxmin(), SELF, bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), bounding_box< C, V >::ymin(), bounding_box< C, V >::zmax(), and bounding_box< C, V >::zmin().

Referenced by bounding_box< double, V >::operator+().

00331                         {
00332     SELF * bcell = new SELF ;
00333     bcell->set_xmin(mmxmin(this->xmin(), other->xmin())) ;
00334     bcell->set_xmax(mmxmax(this->xmax(), other->xmax())) ;
00335     bcell->set_ymin(mmxmin(this->ymin(), other->ymin())) ;
00336     bcell->set_ymax(mmxmax(this->ymax(), other->ymax())) ;
00337     bcell->set_zmin(mmxmin(this->zmin(), other->zmin())) ;
00338     bcell->set_zmax(mmxmax(this->zmax(), other->zmax())) ;
00339     return bcell ;
00340 }

void united ( bounding_box< C, V > *  other  )  [inline, inherited]
bool unites ( bounding_box< C, V > *  other,
bool  strict = true 
) [inline, inherited]

Definition at line 269 of file bounding_box.hpp.

References bounding_box< C, V >::is0D(), bounding_box< C, V >::is1D(), bounding_box< C, V >::is2D(), bounding_box< C, V >::is3d(), mmx::shape::mmxmax(), mmx::shape::mmxmin(), bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), bounding_box< C, V >::ymin(), bounding_box< C, V >::zmax(), and bounding_box< C, V >::zmin().

00270 {
00271     if(this->is0D())
00272         return (this->xmin() == other->xmin()) ;
00273     else if(this->is1D()) {
00274         if(strict)
00275             return ((mmxmin(this->xmin(), other->xmin()) <  mmxmax(this->xmax(), other->xmax()))) ;
00276         else
00277             return ((mmxmin(this->xmin(), other->xmin()) <= mmxmax(this->xmax(), other->xmax()))) ;
00278     } else if(this->is2D()) {
00279         if(strict)
00280             return ((mmxmin(this->xmin(), other->xmin()) <  mmxmax(this->xmax(), other->xmax())) &&
00281                     (mmxmin(this->ymin(), other->ymin()) <  mmxmax(this->ymax(), other->ymax()))) ;
00282         else
00283             return ((mmxmin(this->xmin(), other->xmin()) <= mmxmax(this->xmax(), other->xmax())) &&
00284                     (mmxmin(this->ymin(), other->ymin()) <= mmxmax(this->ymax(), other->ymax()))) ;
00285     } else if(this->is3d()) {
00286         if(strict)
00287             return ((mmxmin(this->xmin(), other->xmin()) <  mmxmax(this->xmax(), other->xmax())) &&
00288                     (mmxmin(this->ymin(), other->ymin()) <  mmxmax(this->ymax(), other->ymax())) &&
00289                     (mmxmin(this->zmin(), other->zmin()) <  mmxmax(this->zmax(), other->zmax()))) ;
00290         else
00291             return ((mmxmin(this->xmin(), other->xmin()) <= mmxmax(this->xmax(), other->xmax())) &&
00292                     (mmxmin(this->ymin(), other->ymin()) <= mmxmax(this->ymax(), other->ymax())) &&
00293                     (mmxmin(this->zmin(), other->zmin()) <= mmxmax(this->zmax(), other->zmax()))) ;
00294     }
00295     return false ;
00296 }

double xmax ( void   )  const [inline, inherited]

Definition at line 63 of file bounding_box.hpp.

00063 { return m_xmax ; }

double xmax ( void   )  [inline, inherited]

Definition at line 56 of file bounding_box.hpp.

Referenced by bcell2d_algebraic_curve< C, V >::bcell2d_algebraic_curve(), bcell3d_algebraic_curve< C, V >::bcell3d_algebraic_curve(), bcell3d_algebraic_surface< C, V >::bcell3d_algebraic_surface(), cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve(), cell3d_algebraic_surface< C, V >::cell3d_algebraic_surface(), cell3d< C, V >::center(), cell2d< C, REF_OF(V) >::center(), bcell3d_algebraic_surface< C, V >::center(), bcell3d< C, V >::center(), bcell2d_voronoi_impl_diagram< C, V >::compute_boundary(), bcell2d_voronoi_diagram< C, V >::compute_boundary(), EdgeListBuilder< node_t >::computeCommonFace(), solver_implicit< C, V >::extremal(), cell2d_algebraic_curve< C, V >::gradient(), bcell2d_voronoi_site2d< C, V >::gradient(), bcell2d_voronoi_impl2d< C, V >::gradient(), bcell2d_algebraic_curve< C, V >::gradient(), topology< C, V >::insert(), mesher3d_algebraic_curve< C, V >::insert(), bcell2d_voronoi_impl_diagram< C, V >::insert_regular(), bcell2d_voronoi_diagram< C, V >::insert_regular(), bounding_box< C, V >::intersect(), bounding_box< C, V >::intersected(), solver_implicit< C, V >::intersection(), bounding_box< C, V >::intersects(), cell3d< C, V >::is_adjacent(), cell2d< C, V >::is_adjacent(), bounding_box< C, V >::operator()(), cell3d_algebraic_surface< C, V >::point(), solver_implicit< C, V >::singular(), cell3d_algebraic_surface< C, V >::split(), bcell3d_algebraic_surface< C, V >::split(), cell3d< C, V >::split_position(), cell2d_algebraic_curve< C, V >::split_position(), bcell3d_list< C, V >::split_position(), bcell3d< C, V >::split_position(), bcell2d_voronoi_impl_diagram< C, V >::split_position(), bcell2d_voronoi_diagram< C, V >::split_position(), bcell2d_list< C, V >::split_position(), bcell2d_intersection< C, V >::split_position(), bcell2d< C, V >::split_position(), bcell3d_algebraic_curve< C, V >::subdivide(), bcell2d_voronoi_impl_diagram< C, V >::subdivide(), bcell2d_voronoi_diagram< C, V >::subdivide(), bcell2d_list< C, V >::subdivide(), bcell2d_intersection< C, V >::subdivide(), bcell3d_algebraic_surface< C, V >::topology_regular(), bounding_box< C, V >::unite(), bounding_box< C, V >::united(), bounding_box< C, V >::unites(), voronoi_site2d< C, V >::upper_bound(), cell3d_algebraic_surface< C, V >::value(), and EdgeListBuilder< node_t >::verifyFaceList().

00056 { return m_xmax ; }

double xmin ( void   )  const [inline, inherited]

Definition at line 62 of file bounding_box.hpp.

00062 { return m_xmin ; }

double xmin ( void   )  [inline, inherited]

Definition at line 55 of file bounding_box.hpp.

Referenced by bcell2d_algebraic_curve< C, V >::bcell2d_algebraic_curve(), bcell3d_algebraic_curve< C, V >::bcell3d_algebraic_curve(), bcell3d_algebraic_surface< C, V >::bcell3d_algebraic_surface(), cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve(), cell3d_algebraic_surface< C, V >::cell3d_algebraic_surface(), cell3d< C, V >::center(), cell2d< C, REF_OF(V) >::center(), bcell3d_algebraic_surface< C, V >::center(), bcell3d< C, V >::center(), bcell2d_voronoi_impl_diagram< C, V >::compute_boundary(), bcell2d_voronoi_diagram< C, V >::compute_boundary(), EdgeListBuilder< node_t >::computeCommonFace(), solver_implicit< C, V >::extremal(), cell2d_algebraic_curve< C, V >::gradient(), bcell2d_voronoi_site2d< C, V >::gradient(), bcell2d_voronoi_impl2d< C, V >::gradient(), bcell2d_algebraic_curve< C, V >::gradient(), topology< C, V >::insert(), mesher3d_algebraic_curve< C, V >::insert(), bcell2d_voronoi_impl_diagram< C, V >::insert_regular(), bcell2d_voronoi_diagram< C, V >::insert_regular(), bounding_box< C, V >::intersect(), bounding_box< C, V >::intersected(), solver_implicit< C, V >::intersection(), bounding_box< C, V >::intersects(), cell3d< C, V >::is_adjacent(), cell2d< C, V >::is_adjacent(), bounding_box< C, V >::operator()(), mmx::shape::operator<<(), cell3d_algebraic_surface< C, V >::point(), solver_implicit< C, V >::singular(), cell3d_algebraic_surface< C, V >::split(), bcell3d_algebraic_surface< C, V >::split(), cell3d< C, V >::split_position(), cell2d_algebraic_curve< C, V >::split_position(), bcell3d_list< C, V >::split_position(), bcell3d< C, V >::split_position(), bcell2d_voronoi_impl_diagram< C, V >::split_position(), bcell2d_voronoi_diagram< C, V >::split_position(), bcell2d_list< C, V >::split_position(), bcell2d_intersection< C, V >::split_position(), bcell2d< C, V >::split_position(), bcell3d_algebraic_curve< C, V >::subdivide(), bcell2d_voronoi_impl_diagram< C, V >::subdivide(), bcell2d_voronoi_diagram< C, V >::subdivide(), bcell2d_list< C, V >::subdivide(), bcell2d_intersection< C, V >::subdivide(), bcell3d_algebraic_surface< C, V >::topology_regular(), bounding_box< C, V >::unite(), bounding_box< C, V >::united(), bounding_box< C, V >::unites(), voronoi_site2d< C, V >::upper_bound(), cell3d_algebraic_surface< C, V >::value(), and EdgeListBuilder< node_t >::verifyFaceList().

00055 { return m_xmin ; }

double xsize ( void   )  const [inline, inherited]

Definition at line 69 of file bounding_box.hpp.

00069 { return m_xmax-m_xmin ; }

double ymax ( void   )  const [inline, inherited]

Definition at line 65 of file bounding_box.hpp.

00065 { return m_ymax ; }

double ymax ( void   )  [inline, inherited]

Definition at line 58 of file bounding_box.hpp.

Referenced by bcell2d_algebraic_curve< C, V >::bcell2d_algebraic_curve(), bcell3d_algebraic_curve< C, V >::bcell3d_algebraic_curve(), bcell3d_algebraic_surface< C, V >::bcell3d_algebraic_surface(), cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve(), cell3d_algebraic_surface< C, V >::cell3d_algebraic_surface(), cell3d< C, V >::center(), cell2d< C, REF_OF(V) >::center(), bcell3d_algebraic_surface< C, V >::center(), bcell3d< C, V >::center(), bcell2d_voronoi_impl_diagram< C, V >::compute_boundary(), bcell2d_voronoi_diagram< C, V >::compute_boundary(), EdgeListBuilder< node_t >::computeCommonFace(), solver_implicit< C, V >::extremal(), cell2d_algebraic_curve< C, V >::gradient(), bcell2d_voronoi_site2d< C, V >::gradient(), bcell2d_voronoi_impl2d< C, V >::gradient(), bcell2d_algebraic_curve< C, V >::gradient(), topology< C, V >::insert(), mesher3d_algebraic_curve< C, V >::insert(), bcell2d_voronoi_impl_diagram< C, V >::insert_regular(), bcell2d_voronoi_diagram< C, V >::insert_regular(), bounding_box< C, V >::intersect(), bounding_box< C, V >::intersected(), solver_implicit< C, V >::intersection(), bounding_box< C, V >::intersects(), cell3d< C, V >::is_adjacent(), cell2d< C, V >::is_adjacent(), bounding_box< C, V >::operator()(), cell3d_algebraic_surface< C, V >::point(), solver_implicit< C, V >::singular(), cell3d_algebraic_surface< C, V >::split(), bcell3d_algebraic_surface< C, V >::split(), cell3d< C, V >::split_position(), cell2d_algebraic_curve< C, V >::split_position(), bcell3d_list< C, V >::split_position(), bcell3d< C, V >::split_position(), bcell2d_voronoi_impl_diagram< C, V >::split_position(), bcell2d_voronoi_diagram< C, V >::split_position(), bcell2d_list< C, V >::split_position(), bcell2d_intersection< C, V >::split_position(), bcell2d< C, V >::split_position(), bcell3d_algebraic_curve< C, V >::subdivide(), bcell2d_voronoi_impl_diagram< C, V >::subdivide(), bcell2d_voronoi_diagram< C, V >::subdivide(), bcell2d_list< C, V >::subdivide(), bcell2d_intersection< C, V >::subdivide(), bcell3d_algebraic_surface< C, V >::topology_regular(), bounding_box< C, V >::unite(), bounding_box< C, V >::united(), bounding_box< C, V >::unites(), voronoi_site2d< C, V >::upper_bound(), cell3d_algebraic_surface< C, V >::value(), and EdgeListBuilder< node_t >::verifyFaceList().

00058 { return m_ymax ; }

double ymin ( void   )  const [inline, inherited]

Definition at line 64 of file bounding_box.hpp.

00064 { return m_ymin ; }

double ymin ( void   )  [inline, inherited]

Definition at line 57 of file bounding_box.hpp.

Referenced by bcell2d_algebraic_curve< C, V >::bcell2d_algebraic_curve(), bcell3d_algebraic_curve< C, V >::bcell3d_algebraic_curve(), bcell3d_algebraic_surface< C, V >::bcell3d_algebraic_surface(), cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve(), cell3d_algebraic_surface< C, V >::cell3d_algebraic_surface(), cell3d< C, V >::center(), cell2d< C, REF_OF(V) >::center(), bcell3d_algebraic_surface< C, V >::center(), bcell3d< C, V >::center(), bcell2d_voronoi_impl_diagram< C, V >::compute_boundary(), bcell2d_voronoi_diagram< C, V >::compute_boundary(), EdgeListBuilder< node_t >::computeCommonFace(), solver_implicit< C, V >::extremal(), cell2d_algebraic_curve< C, V >::gradient(), bcell2d_voronoi_site2d< C, V >::gradient(), bcell2d_voronoi_impl2d< C, V >::gradient(), bcell2d_algebraic_curve< C, V >::gradient(), topology< C, V >::insert(), mesher3d_algebraic_curve< C, V >::insert(), bcell2d_voronoi_impl_diagram< C, V >::insert_regular(), bcell2d_voronoi_diagram< C, V >::insert_regular(), bounding_box< C, V >::intersect(), bounding_box< C, V >::intersected(), solver_implicit< C, V >::intersection(), bounding_box< C, V >::intersects(), cell3d< C, V >::is_adjacent(), cell2d< C, V >::is_adjacent(), bounding_box< C, V >::operator()(), cell3d_algebraic_surface< C, V >::point(), solver_implicit< C, V >::singular(), cell3d_algebraic_surface< C, V >::split(), bcell3d_algebraic_surface< C, V >::split(), cell3d< C, V >::split_position(), cell2d_algebraic_curve< C, V >::split_position(), bcell3d_list< C, V >::split_position(), bcell3d< C, V >::split_position(), bcell2d_voronoi_impl_diagram< C, V >::split_position(), bcell2d_voronoi_diagram< C, V >::split_position(), bcell2d_list< C, V >::split_position(), bcell2d_intersection< C, V >::split_position(), bcell2d< C, V >::split_position(), bcell3d_algebraic_curve< C, V >::subdivide(), bcell2d_voronoi_impl_diagram< C, V >::subdivide(), bcell2d_voronoi_diagram< C, V >::subdivide(), bcell2d_list< C, V >::subdivide(), bcell2d_intersection< C, V >::subdivide(), bcell3d_algebraic_surface< C, V >::topology_regular(), bounding_box< C, V >::unite(), bounding_box< C, V >::united(), bounding_box< C, V >::unites(), voronoi_site2d< C, V >::upper_bound(), cell3d_algebraic_surface< C, V >::value(), and EdgeListBuilder< node_t >::verifyFaceList().

00057 { return m_ymin ; }

double ysize ( void   )  const [inline, inherited]

Definition at line 70 of file bounding_box.hpp.

00070 { return m_ymax-m_ymin ; }

double zmax ( void   )  const [inline, inherited]

Definition at line 67 of file bounding_box.hpp.

00067 { return m_zmax ; }

double zmax ( void   )  [inline, inherited]
double zmin ( void   )  const [inline, inherited]

Definition at line 66 of file bounding_box.hpp.

00066 { return m_zmin ; }

double zmin ( void   )  [inline, inherited]
double zsize ( void   )  const [inline, inherited]

Definition at line 71 of file bounding_box.hpp.

00071 { return m_zmax-m_zmin ; }


Member Data Documentation

Seq<Point *> e_intersections [inherited]
Seq<bcell2d *> e_neighbors [inherited]
bool m_bisector [protected]
gNode<bcell2d*>* m_gnode [inherited]
bool m_intersected [protected]
Seq< bcell3d<C,V> *> m_objects
Seq<Point *> m_singular [inherited]
Seq<unsigned> m_sites [protected]
bool m_treated [protected]
double m_xmax [protected, inherited]
double m_xmin [protected, inherited]
double m_ymax [protected, inherited]
double m_ymin [protected, inherited]
double m_zmax [protected, inherited]
double m_zmin [protected, inherited]
Seq<Point *> n_intersections [inherited]
Seq<bcell2d *> n_neighbors [inherited]
Seq<Point *> s_intersections [inherited]
Seq<bcell2d *> s_neighbors [inherited]
Seq<Point *> w_intersections [inherited]
Seq<bcell2d *> w_neighbors [inherited]

The documentation for this class was generated from the following file:

Generated on 6 Dec 2012 for shape by  doxygen 1.6.1