#include <ssi_lsegment.hpp>
Definition at line 23 of file ssi_lsegment.hpp.
Definition at line 26 of file ssi_lsegment.hpp.
typedef sample<C,V>::ParametricSurface ParametricSurface |
Reimplemented from sample< C, V >.
Reimplemented in dsearch< C, V >, and qsegment< C, V >.
Definition at line 25 of file ssi_lsegment.hpp.
lsegment | ( | const ParametricSurface * | s, | |
unsigned | _w, | |||
unsigned | _h | |||
) | [inline] |
Definition at line 215 of file ssi_lsegment.hpp.
References lsegment< C, V >::_size, lsegment< C, V >::convert_regions(), lsegment< C, V >::find_regions(), lsegment< C, V >::grp, lsegment< C, V >::lines, lsegment< C, V >::lines_changes(), and lsegment< C, V >::marks.
00215 : sample<C,V>(s,_w,_h) 00216 { 00217 //_st = time(); 00218 _size = 0; 00219 lines_changes (); 00220 grp = new graph_t(); 00221 find_regions (); 00222 convert_regions(); 00223 delete[] marks; 00224 delete[] lines; 00225 // std::cout << "l = " << (time()-_st) << std::endl; 00226 };
~lsegment | ( | ) | [inline] |
Definition at line 229 of file ssi_lsegment.hpp.
References lsegment< C, V >::grp, lsegment< C, V >::regions, and lsegment< C, V >::rfree().
Definition at line 96 of file ssi_lsegment.hpp.
References igraph::add_link(), mark_t::code, coherent_code(), lsegment< C, V >::grp, and mark_t::head.
Referenced by lsegment< C, V >::find_regions().
00097 { 00098 if ( coherent_code( m0->code, m1->code ) ) 00099 { 00100 grp->add_link(m0->head,m1->head); 00101 grp->add_link(m1->head,m0->head); 00102 }; 00103 };
vector3* base | ( | ) | const [inline, inherited] |
Definition at line 25 of file ssi_sample.hpp.
References sample< C, V >::m_svals.
Referenced by qnode< C, V >::fill(), and lsegment< C, V >::lines_changes().
00025 { return m_svals; };
mark_t* begin | ( | unsigned | i | ) | [inline] |
Definition at line 64 of file ssi_lsegment.hpp.
References lsegment< C, V >::lines, and lsegment< C, V >::marks.
Referenced by lsegment< C, V >::find_regions().
void convert_regions | ( | ) | [inline] |
Definition at line 206 of file ssi_lsegment.hpp.
References lsegment< C, V >::promote(), and lsegment< C, V >::regions.
Referenced by lsegment< C, V >::lsegment().
mark_t* end | ( | unsigned | i | ) | [inline] |
Definition at line 65 of file ssi_lsegment.hpp.
Referenced by lsegment< C, V >::find_regions().
void find_regions | ( | ) | [inline] |
Definition at line 145 of file ssi_lsegment.hpp.
References mark_t::a(), lsegment< C, V >::addneighbors(), mark_t::b(), lsegment< C, V >::begin(), mark_t::code, mmx::ssi::down(), lsegment< C, V >::end(), mark_t::head, INTERVALTEST, sample< C, V >::ncols(), mark_t::next, sample< C, V >::nrows(), lsegment< C, V >::pushr(), lsegment< C, V >::regions, and mmx::ssi::up().
Referenced by lsegment< C, V >::lsegment().
00146 { 00147 mark_t * p; 00148 for ( p = begin(0); p != end(0); p++ ) 00149 pushr(0,p); 00150 for ( p = begin(0)+1; p != end(0); p++ ) 00151 addneighbors(p,p-1); 00152 00153 int ncolsTemp = this->ncols(); 00154 mark_t * neighbors[ncolsTemp]; 00155 unsigned n_neigh; 00156 coord_t i; 00157 #define INTERVALTEST ( std::abs(std::min(down->b(),up->b())-std::max(down->a(),up->a())) > 1 ) 00158 for ( i = 0; i < this->nrows()-2; i++ ) 00159 { 00160 mark_t * startup = begin(i); 00161 for ( mark_t * down = begin(i+1); down != end(i+1); down++ ) 00162 { 00163 while ( startup->b() <= down->a() ) startup++; 00164 mark_t * up = startup; 00165 n_neigh = 0; 00166 while( down->b() > up->a() ) 00167 if ( (up->next == 0) && ( up->code == down->code ) && INTERVALTEST) 00168 { 00169 regions[up->head]._umax++; 00170 up->next = down; 00171 down->head = up->head, up++; 00172 break; 00173 } 00174 else 00175 neighbors[n_neigh++] = up, up++; 00176 00177 if ( down->head == -1 ) pushr( i+1, down ); 00178 00179 for ( unsigned k = 0; k < n_neigh; k ++ ) addneighbors(down,neighbors[k]); 00180 while( down->b() > up->a() ) addneighbors(down,up), up++; 00181 }; 00182 }; 00183 };
void lines_changes | ( | ) | [inline] |
Definition at line 119 of file ssi_lsegment.hpp.
References sample< C, V >::base(), lsegment< C, V >::lines, lsegment< C, V >::marks, sample< C, V >::ncols(), lsegment< C, V >::nmarks(), sample< C, V >::nrows(), lsegment< C, V >::pushm(), realloc(), and vcode().
Referenced by lsegment< C, V >::lsegment().
00120 { 00121 int i,j; 00122 lines = (unsigned*)(malloc(sizeof(unsigned)*this->nrows())); 00123 unsigned max_marks = this->nrows()*this->ncols(); 00124 while ( !(marks = (mark_t*)(malloc(sizeof(mark_t)*max_marks))) ) max_marks >>= 1; 00125 vector3 * ptr = this->base(); 00126 for ( i = 0; i < this->nrows()-1; i++ ) 00127 { 00128 lines[i] = this->nmarks(); 00129 vcode_t code = vcode(*ptr,*(ptr+this->ncols()),*(ptr+1)); 00130 pushm(code,0); 00131 for ( j = 0; j < this->ncols()-1; j++, ptr++ ) 00132 { 00133 vcode_t tmp = vcode(*ptr,*(ptr+this->ncols()),*(ptr+1)); 00134 if ( tmp != code ) 00135 { code = tmp; this->pushm(code,j); }; 00136 }; 00137 pushm(code,this->ncols()-1); 00138 ptr++; 00139 }; 00140 lines[this->nrows()-1] = nmarks(); 00141 marks = (mark_t*)realloc(marks,sizeof(mark_t)*nmarks()); 00142 };
int ncols | ( | ) | const [inline, inherited] |
Definition at line 27 of file ssi_sample.hpp.
References sample< C, V >::m_ncols.
Referenced by lsegment< C, V >::find_regions(), and lsegment< C, V >::lines_changes().
00027 { return m_ncols; };
unsigned nmarks | ( | ) | const [inline] |
Definition at line 53 of file ssi_lsegment.hpp.
References lsegment< C, V >::_size.
Referenced by lsegment< C, V >::lines_changes().
00053 { return _size; };
int nrows | ( | ) | const [inline, inherited] |
Definition at line 26 of file ssi_sample.hpp.
References sample< C, V >::m_nrows.
Referenced by lsegment< C, V >::find_regions(), and lsegment< C, V >::lines_changes().
00026 { return m_nrows; };
region_t& operator[] | ( | unsigned | i | ) | [inline] |
Reimplemented in qsegment< C, V >.
Definition at line 80 of file ssi_lsegment.hpp.
References lsegment< C, V >::regions.
00080 { return regions[i]; };
void promote | ( | region_t & | r | ) | [inline] |
Definition at line 186 of file ssi_lsegment.hpp.
References region_t::_umax, region_t::_umin, mark_t::a(), mark_t::b(), region_t::data, and mark_t::next.
Referenced by lsegment< C, V >::convert_regions().
00187 { 00188 mark_t * mpointer; 00189 bounds_t * bpointer; 00190 mpointer = (mark_t*)(r.data); 00191 r.data = (void*)(malloc(sizeof(bounds_t)*(r._umax))); 00192 bpointer = (bounds_t*)(r.data); 00193 00194 for ( unsigned i = 0; i < r._umax; i++ ) 00195 { 00196 bpointer[i][0] = mpointer->a(); 00197 bpointer[i][1] = mpointer->b(); 00198 mpointer = mpointer->next; 00199 }; 00200 00201 r._umax += r._umin; 00202 r.data = (void*)(((bounds_t*)(r.data))-r._umin); 00203 };
Definition at line 86 of file ssi_lsegment.hpp.
References lsegment< C, V >::_size, mark_t::code, mark_t::head, mark_t::j, lsegment< C, V >::marks, and mark_t::next.
Referenced by lsegment< C, V >::lines_changes().
Definition at line 106 of file ssi_lsegment.hpp.
References region_t::_code, region_t::_umax, region_t::_umin, igraph::add_node(), mark_t::code, region_t::data, lsegment< C, V >::grp, mark_t::head, and lsegment< C, V >::regions.
Referenced by lsegment< C, V >::find_regions().
void rfree | ( | region_t & | r | ) | [inline] |
Definition at line 57 of file ssi_lsegment.hpp.
References region_t::_umin, and region_t::data.
Referenced by lsegment< C, V >::~lsegment().
00058 { 00059 free((void*)(((bounds_t*)(r.data)) + r._umin)); 00060 };
unsigned size | ( | void | ) | const [inline] |
Reimplemented in qsegment< C, V >.
Definition at line 79 of file ssi_lsegment.hpp.
References lsegment< C, V >::regions.
00079 { return regions.size(); };
const double& uvalue | ( | int | i | ) | const [inline, inherited] |
Definition at line 28 of file ssi_sample.hpp.
References sample< C, V >::m_uvals.
Referenced by qnode< C, V >::convert().
00028 { return m_uvals[i]; };
const double& vvalue | ( | int | i | ) | const [inline, inherited] |
Definition at line 29 of file ssi_sample.hpp.
References sample< C, V >::m_vvals.
Referenced by qnode< C, V >::convert().
00029 { return m_vvals[i]; };
double _lt |
Definition at line 76 of file ssi_lsegment.hpp.
unsigned _size |
Definition at line 49 of file ssi_lsegment.hpp.
Referenced by lsegment< C, V >::lsegment(), lsegment< C, V >::nmarks(), and lsegment< C, V >::pushm().
Definition at line 68 of file ssi_lsegment.hpp.
Referenced by lsegment< C, V >::addneighbors(), dsearch< C, V >::dsearch(), lsegment< C, V >::lsegment(), lsegment< C, V >::pushr(), and lsegment< C, V >::~lsegment().
unsigned* lines |
Definition at line 50 of file ssi_lsegment.hpp.
Referenced by lsegment< C, V >::begin(), lsegment< C, V >::lines_changes(), and lsegment< C, V >::lsegment().
Definition at line 21 of file ssi_sample.hpp.
Referenced by qnode< C, V >::fill(), sample< C, V >::ncols(), and sample< C, V >::sample().
Definition at line 20 of file ssi_sample.hpp.
Referenced by sample< C, V >::nrows(), and sample< C, V >::sample().
const ParametricSurface* m_psurf [inherited] |
Definition at line 17 of file ssi_sample.hpp.
Referenced by sample< C, V >::sample().
Definition at line 22 of file ssi_sample.hpp.
Referenced by sample< C, V >::base(), and sample< C, V >::sample().
double* m_uvals [inherited] |
Definition at line 18 of file ssi_sample.hpp.
Referenced by sample< C, V >::sample(), sample< C, V >::uvalue(), and sample< C, V >::~sample().
double* m_vvals [inherited] |
Definition at line 19 of file ssi_sample.hpp.
Referenced by sample< C, V >::sample(), and sample< C, V >::vvalue().
Definition at line 48 of file ssi_lsegment.hpp.
Referenced by lsegment< C, V >::begin(), lsegment< C, V >::lines_changes(), lsegment< C, V >::lsegment(), and lsegment< C, V >::pushm().
Definition at line 65 of file ssi_lsegment.hpp.
Referenced by dsearch< C, V >::branches(), lsegment< C, V >::convert_regions(), dsearch< C, V >::dsearch(), lsegment< C, V >::find_regions(), lsegment< C, V >::operator[](), lsegment< C, V >::pushr(), qsegment< C, V >::qsegment(), lsegment< C, V >::size(), and lsegment< C, V >::~lsegment().