1 // This is prip/vpyr/vpyr_2_tpyramid.hxx
2 #ifndef vpyr_2_tpyramid_hxx_
3 #define vpyr_2_tpyramid_hxx_
4
5 #include <iostream>
6 #include "vpyr_2_tpyramid.h"
7 #include <vmap/vbl_controlled_partition.h>
8 #ifdef _MSC_VER
9 # include <vcl_msvc_warnings.h>
10 #endif
11
12 template <class TLevel>
13 vpyr_2_tpyramid<TLevel>::vpyr_2_tpyramid() = default;
14
15 #if 0
16 template <class TLevel>
17 vpyr_2_tpyramid<TLevel>::vpyr_2_tpyramid(const self_type &pyr)
18 {
19 operator=(pyr) ;
20 }
21 #endif // 0
22
23 template <class TLevel>
24 vpyr_2_tpyramid<TLevel>::~vpyr_2_tpyramid() = default;
25
26 #if 0
27 template <class TLevel>
28 vpyr_2_tpyramid<TLevel> & vpyr_2_tpyramid<TLevel>::operator=(const self_type &pyr)
29 {
30 if (this!=&rigth)
31 {
32 Base_::operator=(pyr) ;
33 vertex_sequence_iterator first_vertex=this->base_map().begin_vertex_sequence(),
34 last_vertex=this->base_map().end_vertex_sequence();
35 edge_sequence_iterator firstEdge=this->base_map().begin_edge_sequence(),
36 lastEdge=this->base_map().end_edge_sequence();
37 face_sequence_iterator firstFace=this->base_map().begin_face_sequence(),
38 lastFace=this->base_map().end_face_sequence();
39 for (int i=0; i<level_.size(); ++i)
40 {
41 #if 0
42 first_vertex=&this->base_map().vertex((*pyr.level_[i].begin_base_vertex())->index()) ;
43 #endif // 0
44 last_vertex=this->base_map().begin_vertex_sequence()+(pyr.level(i).end_base_vertex()-pyr.base_map().begin_vertex_sequence()) ;
45 level(i).set_vertex_sequence(first_vertex,last_vertex) ;
46 #if 0
47 firstEdge=&this->base_map().edge((*pyr.level_[i].beginbase_edge())->index()) ;
48 #endif // 0
49 lastEdge=this->base_map().begin_edge_sequence()+(pyr.level(i).endbase_edge()-pyr.base_map().begin_edge_sequence()) ;
50 level(i).set_edge_sequence(firstEdge,lastEdge) ;
51 #if 0
52 firstFace=&this->base_map().face((*pyr.level_[i].beginbase_type())->index()) ;
53 #endif // 0
54 lastFace=this->base_map().begin_face_sequence()+(pyr.level(i).endbase_type()-pyr.base_map().begin_face_sequence()) ;
55 level(i).set_face_sequence(firstFace,lastFace) ;
56 }
57 }
58 return *this ;
59 }
60 #endif // 0
61
62 template <class TLevel>
valid()63 bool vpyr_2_tpyramid<TLevel>::valid()
64 {
65 return false;
66 }
67
68 template <class TLevel>
clear()69 void vpyr_2_tpyramid<TLevel>::clear()
70 {
71 Base_::clear();
72 }
73
74 template <class TLevel>
read_structure(std::istream &)75 void vpyr_2_tpyramid<TLevel>::read_structure(std::istream &)
76 {
77 std::cerr << "vpyr_2_tpyramid<TLevel>::read_structure NYI\n";
78 }
79
80 template <class TLevel>
write_structure(std::ostream &) const81 void vpyr_2_tpyramid<TLevel>::write_structure(std::ostream &) const
82 {
83 std::cerr << "vpyr_2_tpyramid<TLevel>::write_structure NYI\n";
84 }
85
86 template <class TLevel>
down_projection_vertices(vmap_level_index arg_level,std::vector<vmap_vertex_index> & res) const87 void vpyr_2_tpyramid<TLevel>::down_projection_vertices(vmap_level_index arg_level,std::vector<vmap_vertex_index> & res) const
88 {
89 vbl_controlled_partition h ;
90 vmap_vertex_index v ;
91 h.initialise(this->base_map().nb_vertices()) ;
92 res.resize(this->base_map().nb_vertices()) ;
93 for (v=0; v<this->base_map().nb_vertices(); v++)
94 {
95 const base_vertex_type & rv=this->base_map().vertex(v) ;
96 if (rv.last_level()<arg_level)
97 {
98 vmap_2_map_dart_base_iterator d=rv.begin(), end=d ;
99 do
100 {
101 vmap_level_index l=d->last_level() ;
102 if (l<arg_level && vmap_is_contraction_type(l) && d->modified_at_last_level())
103 {
104 vmap_2_map_dart_base_iterator ad=d ; ad.alpha() ;
105 vmap_vertex_index av=h.representative(ad->vertex().sequence_index()),
106 representativev=h.representative(v) ;
107 if (this->base_map().vertex(representativev).last_level()>this->base_map().vertex(av).last_level())
108 {
109 h.union_of(representativev,av) ;
110 }
111 else
112 {
113 h.union_of(av,representativev) ;
114 }
115 }
116 d.sigma() ;
117 } while (d!=end) ;
118 }
119 }
120 for (v=0; v<this->base_map().nb_vertices(); v++)
121 {
122 res[v]=h.representative(v) ;
123 }
124 }
125
126 template <class TLevel>
down_projection_faces(vmap_level_index arg_level,std::vector<vmap_face_index> & res) const127 void vpyr_2_tpyramid<TLevel>::down_projection_faces(vmap_level_index arg_level,std::vector<vmap_face_index> & res) const
128 {
129 vbl_controlled_partition h ;
130 vmap_face_index v ;
131 h.initialise(this->base_map().nb_faces()) ;
132 res.resize(this->base_map().nb_faces()) ;
133 for (v=0; v<this->base_map().nb_faces(); v++)
134 {
135 const base_face_type & rv=this->base_map().face(v) ;
136 if (rv.last_level()<arg_level)
137 {
138 vmap_2_map_dart_base_iterator d=rv.begin(), end=d ;
139 do
140 {
141 vmap_level_index l=d->last_level() ;
142 if (l<arg_level && vmap_is_removal_type(l) && d->modified_at_last_level())
143 {
144 vmap_2_map_dart_base_iterator ad=d ; ad.alpha() ;
145 vmap_face_index av=h.representative(ad->face().sequence_index()),
146 representativev=h.representative(v) ;
147 if (this->base_map().face(representativev).last_level()>this->base_map().face(av).last_level())
148 {
149 h.union_of(representativev,av) ;
150 }
151 else
152 {
153 h.union_of(av,representativev) ;
154 }
155 }
156 d.phi() ;
157 } while (d!=end) ;
158 }
159 }
160 for (v=0; v<this->base_map().nb_faces(); v++)
161 {
162 res[v]=h.representative(v) ;
163 }
164 }
165
166 #endif // vpyr_2_tpyramid_hxx_
167