shape_doc 0.1
dualize< C, V, Shape, Cell > Struct Template Reference

#include <dualize.hpp>

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class C, class V = default_env, class Shape = typename SHAPE_OF(V), class Cell = cell<C,V>>
struct mmx::shape::dualize< C, V, Shape, Cell >

Definition at line 35 of file dualize.hpp.


Member Typedef Documentation

typedef kdtree_cell<Shape,Cell> Input

Definition at line 39 of file dualize.hpp.

typedef node<Shape*,Cell*> Node

Definition at line 38 of file dualize.hpp.

typedef graph_dual<Shape,Cell> Output

Definition at line 40 of file dualize.hpp.


Constructor & Destructor Documentation

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;
}

Member Function Documentation

void clear ( void  )

Definition at line 220 of file dualize.hpp.

                          {
  
}
void get_dual_edge ( Node n1,
Node n2 
)

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;
}
void get_dual_face ( Node n1,
Node n2,
Node n3,
Node n4 
)

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;
}
void get_dual_face ( Node n1,
Node n2,
Node n3 
)

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; }

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