43 template <
typename TKSpace>
50 template <
typename TKSpace>
52 : myKPtr( new
KSpace() ), myFlagIsOwned( true )
56 template <
typename TKSpace>
58 : myKPtr( &aKSpace ), myFlagIsOwned(
false )
62 template <
typename TKSpace>
64 : myFlagIsOwned( aOther.myFlagIsOwned ), mySCells( aOther.mySCells )
72 template <
typename TKSpace>
76 if (
this != &aOther )
93 template <
typename TKSpace>
98 return ( (myKPtr != NULL)
99 && ( mySCells.size() > 0 ) );
106 template <
typename TKSpace>
111 ASSERT( (aVector.norm(Vector::L_1) == 1) );
113 SCell pointel( myKPtr->sPointel(aPoint,myKPtr->NEG) );
115 typename KSpace::Space::Dimension d = 0;
116 while ( aVector[d] == 0 ) ++d;
117 return myKPtr->sIncident( pointel,d,(aVector[d]>0)?myKPtr->POS:myKPtr->NEG );
120 template <
typename TKSpace>
126 for (
Dimension k = 0; ( (k < KSpace::dimension)&&(flag) ); ++k)
128 flag = myKPtr->sIsInside( aSCell, k );
136 template <
typename TKSpace>
141 return initFromPointsVector( aVectorOfPoints );
144 template <
typename TKSpace>
150 return initFromPointsRange( aVectorOfPoints.begin(), aVectorOfPoints.end() );
160 template <
typename TKSpace>
161 template <
typename TIterator>
173 for ( ; j != ite; ++i, ++j) {
178 if (v.norm(Vector::L_1) != 1) {
181 SCell s = PointVectorTo1SCell(p,v);
182 if ( ! isInside( s ) ) {
185 mySCells.push_back( s );
193 if (v.norm(Vector::L_1) == 1) {
194 SCell s = PointVectorTo1SCell(last,v);
195 ASSERT( isInside( s ) );
196 mySCells.push_back( PointVectorTo1SCell(last,v) );
203 template <
typename TKSpace>
209 return initFromSCellsRange( aVectorOfSCells.begin(), aVectorOfSCells.end() );
219 template <
typename TKSpace>
220 template <
typename TIterator>
232 SCell currentSCell = *it;
236 for (++it; it != ite; ++it)
239 SCell expectedS( myKPtr->sDirectIncident( currentSCell, *myKPtr->sDirs( currentSCell ) ) );
241 SCell s( myKPtr->sIndirectIncident( currentSCell, *myKPtr->sDirs( currentSCell ) ) );
243 if ( myKPtr->sKCoords(s) != myKPtr->sKCoords(expectedS) )
247 if ( ! isInside( currentSCell ) )
251 mySCells.push_back( currentSCell );
261 template <
typename TKSpace>
273 return initFromPointsVector(v);
283 template <
typename TKSpace>
293 for (
unsigned int k = 0; k < Point::dimension; ++k) {
302 template <
typename TKSpace>
308 SCell last = *mySCells.rbegin();
309 SCell nextLast( myKPtr->sDirectIncident( last , *myKPtr->sDirs( last ) ) );
310 SCell previousFirst( myKPtr->sIndirectIncident( first, *myKPtr->sDirs( first ) ) );
311 return ( myKPtr->sKCoords(nextLast) == myKPtr->sKCoords(previousFirst) );
314 template <
typename TKSpace>
319 return (! isClosed() );
323 template <
typename TKSpace>
328 return mySCells.
begin();
331 template <
typename TKSpace>
336 return mySCells.
end();
339 template <
typename TKSpace>
347 template <
typename TKSpace>
352 return mySCells.
rend();
355 template <
typename TKSpace>
360 return mySCells.
back();
363 template <
typename TKSpace>
371 template <
typename TKSpace>
379 template <
typename TKSpace>
384 return mySCells.
size();
389 template <
typename TKSpace>
394 out <<
"[" << className() <<
"]" << std::endl;
395 for(
unsigned int i=0; i< mySCells.size(); i++){
396 out << mySCells.at(i) <<
" ";
402 template <
typename TKSpace>
420 template <
typename TKSpace>