| 
    shape_doc 0.1 
   | 
 
#include <dualize.hpp>
Definition at line 35 of file dualize.hpp.
| typedef kdtree_cell<Shape,Cell> Input | 
Definition at line 39 of file dualize.hpp.
Definition at line 38 of file dualize.hpp.
| typedef graph_dual<Shape,Cell> Output | 
Definition at line 40 of file dualize.hpp.
| dualize | ( | void | ) | 
Definition at line 64 of file dualize.hpp.
                   {
  m_output = new Output;
}
| ~dualize | ( | void | ) | 
Definition at line 68 of file dualize.hpp.
                        {
  delete m_output;
}
| void clear | ( | void | ) | 
Definition at line 220 of file dualize.hpp.
                          {
  
}
Definition at line 83 of file dualize.hpp.
References node< _Object, _CELL >::get_cell(), mmx::shape::is_adjacentpl3d(), node< _Object, _CELL >::is_leaf(), node< _Object, _CELL >::left(), and node< _Object, _CELL >::right().
                                                {
  if(!n1->get_cell()->is_active()) return;
  if(!n2->get_cell()->is_active()) return;
  if(!is_adjacentpl3d(n1->get_cell(),n2->get_cell())) return;
  if(!n1->is_leaf()) { 
    get_dual_edge(n1->left(),  n2);
    get_dual_edge(n1->right(), n2);
    get_dual_face(n1->left(), n1->right(), n2);
    return;
  } 
  if(!n2->is_leaf()){
    get_dual_edge(n1,  n2->left());
    get_dual_edge(n1,  n2->right());
    get_dual_face(n1,  n2->left(), n2->right());
    return;
  }
  this->output()->m_edges<<n1<<n2;
  return;
}
Definition at line 177 of file dualize.hpp.
References node< _Object, _CELL >::get_cell(), mmx::shape::is_adjacentpl3d(), node< _Object, _CELL >::is_leaf(), node< _Object, _CELL >::left(), and node< _Object, _CELL >::right().
                                                                    {
  if(!n1->get_cell()->is_active()) return;
  if(!n2->get_cell()->is_active()) return;
  if(!n3->get_cell()->is_active()) return;
  if(!n4->get_cell()->is_active()) return;
  if(!is_adjacentpl3d(n1->get_cell(),n2->get_cell()) ||
     !is_adjacentpl3d(n2->get_cell(),n3->get_cell()) ||
     !is_adjacentpl3d(n3->get_cell(),n4->get_cell()) ||
     !is_adjacentpl3d(n4->get_cell(),n1->get_cell()) ) return;
  if(!n1->is_leaf()){
    get_dual_face(n1->left(), n2,n3,n4);
    get_dual_face(n1->right(),n2,n3,n4);
    return;
  }
  if(!n2->is_leaf()){
    get_dual_face(n1,n2->left(), n3,n4);
    get_dual_face(n1,n2->right(),n3,n4);
    return;
  }
  if(!n3->is_leaf()){
    get_dual_face(n1,n2,n3->left(), n4);
    get_dual_face(n1,n2,n3->right(),n4);
    return;
  }
  if(!n4->is_leaf()){
    get_dual_face(n1,n2,n3,n4->left());
    get_dual_face(n1,n2,n3,n4->right());
    return;
  }
        
  this->output()->m_faces<<n1<<n2<<n3;
  this->output()->m_faces<<n1<<n4<<n3;
  return;
}
Definition at line 107 of file dualize.hpp.
References node< _Object, _CELL >::get_cell(), mmx::shape::is_adjacentpl3d(), node< _Object, _CELL >::is_leaf(), node< _Object, _CELL >::left(), and node< _Object, _CELL >::right().
                                                          {
  if(!n1->get_cell()->is_active()) return;
  if(!n2->get_cell()->is_active()) return;
  if(!n3->get_cell()->is_active()) return;
  if(!is_adjacentpl3d(n1->get_cell(),n2->get_cell()) ||
     !is_adjacentpl3d(n2->get_cell(),n3->get_cell()) ||
     !is_adjacentpl3d(n3->get_cell(),n1->get_cell()) ) return;
  if(!n1->is_leaf()){
    if(is_adjacentpl3d(n1->left()->get_cell(),n2->get_cell())) {
      if(is_adjacentpl3d(n1->left()->get_cell(),n3->get_cell()))
        get_dual_face(n1->left(),n2,n3);
      else
      if(is_adjacentpl3d(n1->right()->get_cell(),n3->get_cell()))
        get_dual_face(n1->right(),n1->left(),n2,n3);
    } 
    if(is_adjacentpl3d(n1->right()->get_cell(),n2->get_cell())) {
      if(is_adjacentpl3d(n1->right()->get_cell(),n3->get_cell()))
        get_dual_face(n1->right(),n2,n3);
      else
      if(is_adjacentpl3d(n1->left()->get_cell(),n3->get_cell()))
        get_dual_face(n1->left(),n1->right(),n2,n3);
    }
    return;
  } 
  if(!n2->is_leaf()){
    if(is_adjacentpl3d(n2->left()->get_cell(),n3->get_cell())) {
      if(is_adjacentpl3d(n2->left()->get_cell(),n1->get_cell()))
        get_dual_face(n1, n2->left(),n3);
      else
      if(is_adjacentpl3d(n2->right()->get_cell(),n1->get_cell()))
        get_dual_face(n1, n2->right(),n2->left(),n3);
    } 
    if(is_adjacentpl3d(n2->right()->get_cell(),n3->get_cell())) {
      if(is_adjacentpl3d(n2->right()->get_cell(),n1->get_cell()))
        get_dual_face(n1, n2->right(),n3);
       else
      if(is_adjacentpl3d(n2->left()->get_cell(),n1->get_cell()))
        get_dual_face(n1,n2->left(),n2->right(),n3);
    }
    return;
  } 
  if(!n3->is_leaf()){
    if(is_adjacentpl3d(n3->left()->get_cell(),n1->get_cell())) {
      if(is_adjacentpl3d(n3->left()->get_cell(),n2->get_cell()))
        get_dual_face(n1,n2,n3->left());
      else
      if(is_adjacentpl3d(n3->right()->get_cell(),n2->get_cell()))
        get_dual_face(n1,n2,n3->right(),n3->left());
    } 
    if(is_adjacentpl3d(n3->right()->get_cell(),n1->get_cell())) {
      if(is_adjacentpl3d(n3->right()->get_cell(),n2->get_cell()))
        get_dual_face(n1,n2,n3->right());
      else
      if(is_adjacentpl3d(n3->left()->get_cell(),n2->get_cell()))
        get_dual_face(n1,n2,n3->left(),n3->right());
    }
    return;
  } 
  this->output()->m_faces<<n1<<n2<<n3;
  return;
}
| void get_dual_vertex | ( | Node * | n | ) | 
Definition at line 72 of file dualize.hpp.
References node< _Object, _CELL >::get_cell(), node< _Object, _CELL >::is_leaf(), node< _Object, _CELL >::left(), and node< _Object, _CELL >::right().
                                       {
  if(!n->get_cell()->is_active()) return;
  if(!n->is_leaf()) {
    this->get_dual_vertex(n->left()); 
    this->get_dual_vertex(n->right()); 
    this->get_dual_edge(n->left(),n->right()); 
  }
  return;
}
| Input* input | ( | void | ) |  [inline] | 
        
Definition at line 47 of file dualize.hpp.
{ return m_input; }
| Output* output | ( | void | ) |  [inline] | 
        
Definition at line 48 of file dualize.hpp.
{ return m_output; }
| void run | ( | void | ) | 
Definition at line 216 of file dualize.hpp.
                    {
  this->get_dual_vertex(m_input->root());
}
| void set_input | ( | Input * | i | ) |  [inline] | 
        
Definition at line 45 of file dualize.hpp.
Referenced by mesher3d_dual< C, V, Shape, Cell >::run().
{ m_input = i; }