00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 # ifndef shape_dualize2d_hpp
00012 # define shape_dualize2d_hpp
00013
00014 # include <shape/list.hpp>
00015 # include <shape/kdtree_cell.hpp>
00016 # include <shape/dualize.hpp>
00017
00018 # define TMPL template<class C,class V, class Cell>
00019 # define TMPL1 template<class V>
00020 # define SELF dualize<C,V,Cell>
00021
00022 namespace mmx { namespace shape {
00023
00024
00025 struct default_2d {};
00026
00027 template<class C>
00028 struct use<dualize_def,C,default_2d> {
00029
00030 template<class Cell>
00031 struct graph {
00032
00033 typedef Cell value_type;
00034 typedef node<Cell*> Node;
00035
00036 public:
00037 Seq<Cell*> m_vertices;
00038 Seq<Cell*> m_edges;
00039 Seq<Cell*> m_faces;
00040 Seq<Cell*> m_cells;
00041 };
00042
00043 template <class Tree, class Node>
00044 static void insert_vertex(Tree* t, Node* n){
00045 t->get_output()->m_vertices<<n->get_cell();
00046 }
00047
00048 template <class Tree, class Node>
00049 static void insert_edge(Tree* t, Node* n1, Node* n2){
00050 t->get_output()->m_edges<<n1->get_cell()<<n2->get_cell();
00051 }
00052
00053 template <class Tree, class Node>
00054 static void insert_face(Tree* t, Node* n1, Node* n2, Node* n3, Node* n4){
00055 t->get_output()->m_faces<<n1->get_cell()<<n2->get_cell()<<n3->get_cell()<<n4->get_cell();
00056 }
00057
00058
00059 template <class Tree, class Node>
00060 static void insert_cell(Tree* t,
00061 Node* n1, Node* n2, Node* n3, Node* n4,
00062 Node* n5, Node* n6, Node* n7, Node* n8) {
00063
00064
00065 }
00066
00067 template <class Tree, class Node>
00068 static void dual_edge(Tree* t, Node* n1, Node* n2) {
00069 t->get_dual_edge(n1, n2);
00070 }
00071
00072 template <class Tree, class Node>
00073 static void dual_face(Tree* t, Node* n1, Node* n2, Node* n3, Node* n4) {
00074 if (is_adjacent(n1,n4) && is_adjacent(n2,n3))
00075 t->get_dual_face(n1, n2, n3, n4);
00076 }
00077
00078 template <class Tree, class Node>
00079 static void dual_cell(Tree* t,
00080 Node* n1, Node* n2, Node* n3, Node* n4,
00081 Node* n5, Node* n6, Node* n7, Node* n8) {
00082
00083 }
00084 };
00085
00086
00087
00088 } ;
00089 } ;
00090
00091 # undef TMPL
00092 # undef TMPL1
00093 # undef SELF
00094 # endif