00001
00002
00008 #if !defined(__geom_mesh_simplicial_set_h__)
00009 #define __geom_mesh_simplicial_set_h__
00010
00011 #include "SimpMeshRed.h"
00012 #include "accessors.h"
00013
00014 BEGIN_NAMESPACE_GEOM
00015
00016
00018
00025 template<typename NodeInIter, class LSF, typename OutIter>
00026 void
00027 determineNodesOutside(NodeInIter begin, NodeInIter end,
00028 const LSF& f, OutIter iter);
00029
00030
00032
00043 template<int N, int M, typename T,
00044 template<class> class Node,
00045 template<class> class Cell,
00046 template<class,class> class Cont,
00047 class LSF, typename OutIter>
00048 inline
00049 void
00050 determineNodesOutside(const SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00051 const LSF& f, OutIter iter) {
00052 determineNodesOutside(mesh.getNodesBeginning(), mesh.getNodesEnd(), f, iter);
00053 }
00054
00055
00057
00068 template<int N, int M, typename T,
00069 template<class> class Node,
00070 template<class> class Cell,
00071 template<class,class> class Cont,
00072 class LSF, typename OutIter>
00073 inline
00074 void
00075 determineNodesOutside(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00076 const LSF& f, OutIter iter) {
00077 determineNodesOutside(mesh.getNodesBeginning(), mesh.getNodesEnd(), f, iter);
00078 }
00079
00080
00081
00082
00084
00094 template<typename CellInIter, class LSF, typename OutIter>
00095 void
00096 determineCellsOutside(CellInIter begin, CellInIter end,
00097 const LSF& f, OutIter iter);
00098
00099
00101
00112 template<int N, int M, typename T,
00113 template<class> class Node,
00114 template<class> class Cell,
00115 template<class,class> class Cont,
00116 class LSF, typename OutIter>
00117 inline
00118 void
00119 determineCellsOutside(const SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00120 const LSF& f, OutIter iter) {
00121 determineCellsOutside(mesh.getCellsBeginning(), mesh.getCellsEnd(), f, iter);
00122 }
00123
00124
00126
00137 template<int N, int M, typename T,
00138 template<class> class Node,
00139 template<class> class Cell,
00140 template<class,class> class Cont,
00141 class LSF, typename OutIter>
00142 inline
00143 void
00144 determineCellsOutside(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00145 const LSF& f, OutIter iter) {
00146 determineCellsOutside(mesh.getCellsBeginning(), mesh.getCellsEnd(), f, iter);
00147 }
00148
00149
00150
00151
00153
00158 template<typename NodeInIter, typename OutIter>
00159 void
00160 getNodes(NodeInIter begin, NodeInIter end, OutIter iter);
00161
00162
00164
00173 template<int N, int M, typename T,
00174 template<class> class Node,
00175 template<class> class Cell,
00176 template<class,class> class Cont,
00177 typename OutIter>
00178 inline
00179 void
00180 getNodes(const SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh, OutIter iter) {
00181 getNodes(mesh.getNodesBeginning(), mesh.getNodesEnd(), iter);
00182 }
00183
00184
00186
00195 template<int N, int M, typename T,
00196 template<class> class Node,
00197 template<class> class Cell,
00198 template<class,class> class Cont,
00199 typename OutIter>
00200 inline
00201 void
00202 getNodes(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh, OutIter iter) {
00203 getNodes(mesh.getNodesBeginning(), mesh.getNodesEnd(), iter);
00204 }
00205
00206
00207
00208
00210
00215 template<typename NodeInIter, typename OutIter>
00216 void
00217 determineInteriorNodes(NodeInIter begin, NodeInIter end, OutIter iter);
00218
00219
00221
00230 template<int N, int M, typename T,
00231 template<class> class Node,
00232 template<class> class Cell,
00233 template<class,class> class Cont,
00234 typename OutIter>
00235 inline
00236 void
00237 determineInteriorNodes(const SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00238 OutIter iter) {
00239 determineInteriorNodes(mesh.getNodesBeginning(), mesh.getNodesEnd(), iter);
00240 }
00241
00242
00244
00253 template<int N, int M, typename T,
00254 template<class> class Node,
00255 template<class> class Cell,
00256 template<class,class> class Cont,
00257 typename OutIter>
00258 inline
00259 void
00260 determineInteriorNodes(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00261 OutIter iter) {
00262 determineInteriorNodes(mesh.getNodesBeginning(), mesh.getNodesEnd(), iter);
00263 }
00264
00265
00266
00267
00269
00274 template<typename NodeInIter, typename OutIter>
00275 void
00276 determineBoundaryNodes(NodeInIter begin, NodeInIter end, OutIter iter);
00277
00278
00280
00289 template<int N, int M, typename T,
00290 template<class> class Node,
00291 template<class> class Cell,
00292 template<class,class> class Cont,
00293 typename OutIter>
00294 inline
00295 void
00296 determineBoundaryNodes(const SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00297 OutIter iter) {
00298 determineBoundaryNodes(mesh.getNodesBeginning(), mesh.getNodesEnd(), iter);
00299 }
00300
00301
00303
00312 template<int N, int M, typename T,
00313 template<class> class Node,
00314 template<class> class Cell,
00315 template<class,class> class Cont,
00316 typename OutIter>
00317 inline
00318 void
00319 determineBoundaryNodes(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00320 OutIter iter) {
00321 determineBoundaryNodes(mesh.getNodesBeginning(), mesh.getNodesEnd(), iter);
00322 }
00323
00324
00325
00326
00328
00334 template<typename CellInIter, typename OutIter>
00335 void
00336 determineCellsWithRequiredAdjacencies(CellInIter begin, CellInIter end,
00337 int minimumRequiredAdjacencies,
00338 OutIter iter);
00339
00340
00342
00352 template<int N, int M, typename T,
00353 template<class> class Node,
00354 template<class> class Cell,
00355 template<class,class> class Cont,
00356 typename OutIter>
00357 inline
00358 void
00359 determineCellsWithRequiredAdjacencies
00360 (const SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00361 const int minimumRequiredAdjacencies, OutIter iter) {
00362 determineCellsWithRequiredAdjacencies(mesh.getCellsBeginning(),
00363 mesh.getCellsEnd(),
00364 minimumRequiredAdjacencies, iter);
00365 }
00366
00367
00369
00380 template<int N, int M, typename T,
00381 template<class> class Node,
00382 template<class> class Cell,
00383 template<class,class> class Cont,
00384 typename OutIter>
00385 inline
00386 void
00387 determineCellsWithRequiredAdjacencies(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00388 const int minimumRequiredAdjacencies,
00389 OutIter iter)
00390 {
00391 determineCellsWithRequiredAdjacencies(mesh.getCellsBeginning(),
00392 mesh.getCellsEnd(),
00393 minimumRequiredAdjacencies, iter);
00394 }
00395
00396
00397
00398
00399
00401
00408 template<typename CellInIter, typename OutIter>
00409 void
00410 determineCellsWithLowAdjacencies(CellInIter begin, CellInIter end,
00411 const int minimumRequiredAdjacencies,
00412 OutIter iter);
00413
00414
00416
00426 template<int N, int M, typename T,
00427 template<class> class Node,
00428 template<class> class Cell,
00429 template<class,class> class Cont,
00430 typename OutIter>
00431 inline
00432 void
00433 determineCellsWithLowAdjacencies(const SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00434 const int minimumRequiredAdjacencies,
00435 OutIter iter) {
00436 determineCellsWithLowAdjacencies(mesh.getCellsBeginning(),
00437 mesh.getCellsEnd(),
00438 minimumRequiredAdjacencies, iter);
00439 }
00440
00441
00443
00453 template<int N, int M, typename T,
00454 template<class> class Node,
00455 template<class> class Cell,
00456 template<class,class> class Cont,
00457 typename OutIter>
00458 inline
00459 void
00460 determineCellsWithLowAdjacencies(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00461 const int minimumRequiredAdjacencies,
00462 OutIter iter) {
00463 determineCellsWithLowAdjacencies(mesh.getCellsBeginning(),
00464 mesh.getCellsEnd(),
00465 minimumRequiredAdjacencies, iter);
00466 }
00467
00468
00469
00470
00471
00473
00477 template<int N, int M, typename T,
00478 template<class> class Node,
00479 template<class> class Cell,
00480 template<class,class> class Cont>
00481 void
00482 determineNeighbors(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00483 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00484 NodeIterator node,
00485 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00486 NodeIteratorSet* neighbors);
00487
00488
00490
00494 template<int N, int M, typename T,
00495 template<class> class Node,
00496 template<class> class Cell,
00497 template<class,class> class Cont>
00498 void
00499 determineBoundaryNeighbors(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00500 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00501 NodeIterator node,
00502 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00503 NodeIteratorSet* neighbors);
00504
00505
00507
00510 template<int N, int M, typename T,
00511 template<class> class Node,
00512 template<class> class Cell,
00513 template<class,class> class Cont>
00514 void
00515 determineNeighbors(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00516 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00517 NodeIterator node,
00518 int radius,
00519 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00520 NodeIteratorSet* neighbors);
00521
00522
00523
00525 template<int N, int M, typename T,
00526 template<class> class Node,
00527 template<class> class Cell,
00528 template<class,class> class Cont>
00529 void
00530 determineFacesOfIncidentCells(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00531 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00532 NodeIterator node,
00533 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00534 FaceSet* faces);
00535
00536
00537
00539
00550 template<int N, int M, typename T,
00551 template<class> class Node,
00552 template<class> class Cell,
00553 template<class,class> class Cont,
00554 typename IntInIter>
00555 void
00556 convertIdentifiersToIterators(SimpMeshRed<N,M,T,Node,Cell,Cont>& mesh,
00557 IntInIter begin, IntInIter end,
00558 typename SimpMeshRed<N,M,T,Node,Cell,Cont>::
00559 CellIteratorSet* cells);
00560
00561 END_NAMESPACE_GEOM
00562
00563 #define __geom_mesh_simplicial_set_ipp__
00564 #include "set.ipp"
00565 #undef __geom_mesh_simplicial_set_ipp__
00566
00567 #endif