Orfeo Toolbox  3.16
itkAutomaticTopologyMeshSource.txx
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Insight Segmentation & Registration Toolkit
4  Module: $RCSfile: itkAutomaticTopologyMeshSource.txx,v $
5  Language: C++
6  Date: $Date: 2007-04-14 11:54:33 $
7  Version: $Revision: 1.20 $
8 
9  Copyright (c) Insight Software Consortium. All rights reserved.
10  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
11 
12  This software is distributed WITHOUT ANY WARRANTY; without even
13  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14  PURPOSE. See the above copyright notices for more information.
15 
16 =========================================================================*/
17 #ifndef __itkAutomaticTopologyMeshSource_txx
18 #define __itkAutomaticTopologyMeshSource_txx
19 
20 // For debugging.
21 #include <iostream>
22 #include <algorithm>
23 
25 #include "itkNumericTraits.h"
26 
27 namespace itk
28 {
29 
30 
31 template<class TOutputMesh>
34 {
35  m_OutputMesh = TOutputMesh::New();
36 
38  this->ProcessObject::SetNthOutput(0, m_OutputMesh.GetPointer());
39 
40  this->ReleaseDataBeforeUpdateFlagOff(); // Prevents destruction of the current mesh output
41 }
42 
43 template<class TOutputMesh>
46 {
47 }
48 
49 template<class TOutputMesh>
52 ::AddPoint( const PointType& p0 )
53 {
54  IdentifierType nextNewPointID = m_OutputMesh->GetNumberOfPoints();
55  IdentifierType& pointIDPlusOne = m_PointsHashTable[ p0 ];
56  IdentifierType pointID;
57  if( pointIDPlusOne != 0 )
58  {
59  pointID = pointIDPlusOne - 1;
60  }
61  else
62  {
63  pointID = nextNewPointID;
64  pointIDPlusOne = pointID + 1;
65  m_OutputMesh->SetPoint( pointID, p0 );
66  }
67  return pointID;
68 }
69 
70 template<class TOutputMesh>
74 {
75  PointType newPoint;
76  unsigned int i;
77  for( i = 0; i < PointDimension; i++ )
78  {
79  newPoint[ i ] = p0[ i ];
80  }
81  return AddPoint( newPoint );
82 }
83 
84 template<class TOutputMesh>
89 {
90  CoordinateType p0[] = { x0, x1, x2, x3, x4, x5 };
91  PointType newPoint;
92  unsigned int i;
93  unsigned int end = ( PointDimension < 6 ? PointDimension : 6 );
94  for( i = 0; i < end; i++ )
95  {
96  newPoint[ i ] = p0[ i ];
97  }
98  for(; i < PointDimension; i++ )
99  {
100  newPoint[ i ] = 0;
101  }
102  return AddPoint( newPoint );
103 }
104 
105 template<class TOutputMesh>
109 {
110  // pointIDs is an array with one element; this is for consistency.
111 
112  // m_PointsHashTable[ foo ] is set to 0 if foo is not found, but I
113  // want the initial identifier to be 0.
114  IdentifierType* cellIDPlusOne = &m_CellsHashTable[ pointIDs ];
115  IdentifierType cellID;
116 
117  if( *cellIDPlusOne != 0 )
118  {
119  cellID = *cellIDPlusOne - 1;
120  }
121  else
122  {
123 
124  // Choose the ID and store it in its hash location (cellIDPlusOne)
125  cellID = m_OutputMesh->GetNumberOfCells();
126  *cellIDPlusOne = cellID + 1;
127 
128  // Construct the cell.
129  CellAutoPointer newCell(new VertexCell, true);
130  newCell->SetPointId( 0, pointIDs[0] );
131 
132  // Add the cell to the mesh.
133  m_OutputMesh->SetCell( cellID, newCell );
134 
135  m_OutputMesh->SetBoundaryAssignment( 0, cellID, 0, cellID );
136 
137  }
138  return cellID;
139 }
140 
141 template<class TOutputMesh>
144 ::AddLine( const IdentifierArrayType& pointIDs )
145 {
146 
147  // Check to see if the cell is already referenced in the hash table.
148  IdentifierType* cellIDPlusOne = &m_CellsHashTable[ pointIDs ];
149  IdentifierType cellID;
150 
151  if( *cellIDPlusOne != 0 )
152  {
153  cellID = *cellIDPlusOne - 1;
154  }
155  else
156  {
157  const IdentifierType pointIdsEnd = 2;
158 
159  // Construct the cell.
160  CellAutoPointer newCell(new LineCell, true);
161 
162  // Add the points and vertices, keeping track of the vertex IDs.
163  IdentifierArrayType vertexArray( pointIdsEnd );
164  IdentifierType i;
165  for( i = 0; i < pointIdsEnd; i++ )
166  {
167  IdentifierType pointID = pointIDs[i];
168  vertexArray[i] = AddVertex( pointID );
169  newCell->SetPointId( i, pointID );
170  }
171 
172  // Choose the ID and store it in its hash location (cellIDPlusOne)
173  cellID = m_OutputMesh->GetNumberOfCells();
174  *cellIDPlusOne = cellID + 1;
175 
176  // Add the cell to the mesh.
177  m_OutputMesh->SetCell( cellID, newCell );
178 
179  // Set the boundaries for the new cell.
180 
181  for( i = 0; i < pointIdsEnd; i++ )
182  {
183  IdentifierType boundaryID = vertexArray[i];
184  m_OutputMesh->SetBoundaryAssignment( 0, cellID, i, boundaryID );
185  }
186 
187  }
188 
189  return cellID;
190 }
191 
192 template<class TOutputMesh>
196 {
197 
198  // Check to see if the cell is already referenced in the hash table.
199  IdentifierType* cellIDPlusOne = &m_CellsHashTable[ pointIDs ];
200  IdentifierType cellID;
201 
202  if( *cellIDPlusOne != 0 )
203  {
204  cellID = *cellIDPlusOne - 1;
205  }
206  else
207  {
208 
209  // Create and add a new cell.
210 
211  const IdentifierType pointIdsEnd = 3;
212  const IdentifierType lineIdsEnd = 3;
213  IdentifierType i;
214 
215  // Construct the cell.
216  CellAutoPointer newCell(new TriangleCell, true);
217 
218  // Add the points and vertices, keeping track of the vertex IDs.
219  IdentifierArrayType vertexArray( pointIdsEnd );
220  for( i = 0; i < pointIdsEnd; i++ )
221  {
222  IdentifierType pointID = pointIDs[i];
223  vertexArray[i] = AddVertex( pointID );
224  newCell->SetPointId( i, pointID );
225  }
226 
227  // Add the edges, keeping track of edge IDs.
228  IdentifierArrayType lineArray( lineIdsEnd );
229  for( i = 0; i < lineIdsEnd; i++ )
230  {
231  lineArray[i] = AddLine( pointIDs[i], pointIDs[ (i+1) % pointIdsEnd ] );
232  }
233 
234  // Choose the ID and store it in its hash location (cellIDPlusOne)
235  cellID = m_OutputMesh->GetNumberOfCells();
236  *cellIDPlusOne = cellID + 1;
237 
238  // Add the cell to the mesh.
239  m_OutputMesh->SetCell( cellID, newCell );
240 
241  // Set the boundaries for the new cell.
242 
243  for( i = 0; i < pointIdsEnd; i++ )
244  {
245  m_OutputMesh->SetBoundaryAssignment( 0, cellID, i, vertexArray[i] );
246  }
247 
248  for( i = 0; i < lineIdsEnd; i++ )
249  {
250  m_OutputMesh->SetBoundaryAssignment( 1, cellID, i, lineArray[i] );
251  }
252 
253  }
254 
255  return cellID;
256 }
257 
258 template<class TOutputMesh>
262 {
263 
264  // Check to see if the cell is already referenced in the hash table.
265  IdentifierType* cellIDPlusOne = &m_CellsHashTable[ pointIDs ];
266  IdentifierType cellID;
267 
268  if( *cellIDPlusOne != 0 )
269  {
270  cellID = *cellIDPlusOne - 1;
271  }
272  else
273  {
274 
275  // Create and add a new cell.
276 
277  const IdentifierType pointIdsEnd = 4;
278  const IdentifierType lineIdsEnd = 4;
279  IdentifierType i;
280 
281  // Construct the cell.
282  CellAutoPointer newCell(new QuadrilateralCell, true);
283 
284  // Add the points and vertices, keeping track of the vertex IDs.
285  IdentifierArrayType vertexArray( pointIdsEnd );
286  for( i = 0; i < pointIdsEnd; i++ )
287  {
288  IdentifierType pointID = pointIDs[i];
289  vertexArray[i] = AddVertex( pointID );
290  newCell->SetPointId( i, pointID );
291  }
292 
293  // Add the edges, keeping track of edge IDs.
294  IdentifierArrayType lineArray( lineIdsEnd );
295  lineArray[0] = AddLine( pointIDs[0], pointIDs[1] );
296  lineArray[1] = AddLine( pointIDs[2], pointIDs[3] );
297  lineArray[2] = AddLine( pointIDs[0], pointIDs[2] );
298  lineArray[3] = AddLine( pointIDs[1], pointIDs[3] );
299 
300  // Choose the ID and store it in its hash location (cellIDPlusOne)
301  cellID = m_OutputMesh->GetNumberOfCells();
302  *cellIDPlusOne = cellID + 1;
303 
304  // Add the cell to the mesh.
305  m_OutputMesh->SetCell( cellID, newCell );
306 
307  // Set the boundaries for the new cell.
308 
309  for( i = 0; i < pointIdsEnd; i++ )
310  {
311  m_OutputMesh->SetBoundaryAssignment( 0, cellID, i, vertexArray[i] );
312  }
313 
314  for( i = 0; i < lineIdsEnd; i++ )
315  {
316  m_OutputMesh->SetBoundaryAssignment( 1, cellID, i, lineArray[i] );
317  }
318 
319  }
320  return cellID;
321 }
322 
323 template<class TOutputMesh>
327 {
328 
329  // Check to see if the cell is already referenced in the hash table.
330  IdentifierType* cellIDPlusOne = &m_CellsHashTable[ pointIDs ];
331  IdentifierType cellID;
332 
333  if( *cellIDPlusOne != 0 )
334  {
335  cellID = *cellIDPlusOne - 1;
336  }
337  else
338  {
339 
340  // Create and add a new cell.
341 
342  const IdentifierType pointIdsEnd = 4;
343  const IdentifierType lineIdsEnd = 6;
344  const IdentifierType faceIdsEnd = 4;
345  IdentifierType i;
346 
347  // Construct the cell.
348  CellAutoPointer newCell(new TetrahedronCell, true);
349 
350  // Add the points and vertices, keeping track of the vertex IDs.
351  IdentifierArrayType vertexArray( pointIdsEnd );
352  for( i = 0; i < pointIdsEnd; i++ )
353  {
354  IdentifierType pointID = pointIDs[i];
355  vertexArray[i] = AddVertex( pointID );
356  newCell->SetPointId( i, pointID );
357  }
358 
359  // Add the edges, keeping track of edge IDs.
360  IdentifierArrayType lineArray( lineIdsEnd );
361  lineArray[0] = AddLine( pointIDs[0], pointIDs[1] );
362  lineArray[1] = AddLine( pointIDs[0], pointIDs[2] );
363  lineArray[2] = AddLine( pointIDs[0], pointIDs[3] );
364  lineArray[3] = AddLine( pointIDs[1], pointIDs[2] );
365  lineArray[4] = AddLine( pointIDs[1], pointIDs[3] );
366  lineArray[5] = AddLine( pointIDs[2], pointIDs[3] );
367 
368  // Add the faces, keeping track of face IDs.
369  IdentifierArrayType faceArray( faceIdsEnd );
370  faceArray[0] = AddTriangle( pointIDs[0], pointIDs[1], pointIDs[2] );
371  faceArray[1] = AddTriangle( pointIDs[0], pointIDs[1], pointIDs[3] );
372  faceArray[2] = AddTriangle( pointIDs[0], pointIDs[2], pointIDs[3] );
373  faceArray[3] = AddTriangle( pointIDs[1], pointIDs[2], pointIDs[3] );
374 
375  // Choose the ID and store it in its hash location (cellIDPlusOne)
376  cellID = m_OutputMesh->GetNumberOfCells();
377  *cellIDPlusOne = cellID + 1;
378 
379  // Add the cell to the mesh.
380  m_OutputMesh->SetCell( cellID, newCell );
381 
382  // Set the boundaries for the new cell.
383 
384  for( i = 0; i < pointIdsEnd; i++ )
385  {
386  m_OutputMesh->SetBoundaryAssignment( 0, cellID, i, vertexArray[i] );
387  }
388 
389  for( i = 0; i < lineIdsEnd; i++ )
390  {
391  m_OutputMesh->SetBoundaryAssignment( 1, cellID, i, lineArray[i] );
392  }
393 
394  for( i = 0; i < faceIdsEnd; i++ )
395  {
396  m_OutputMesh->SetBoundaryAssignment( 2, cellID, i, faceArray[i] );
397  }
398 
399  }
400 
401  return cellID;
402 }
403 
404 template<class TOutputMesh>
408 {
409 
410  // Check to see if the cell is already referenced in the hash table.
411  IdentifierType* cellIDPlusOne = &m_CellsHashTable[ pointIDs ];
412  IdentifierType cellID;
413 
414  if( *cellIDPlusOne != 0 )
415  {
416  cellID = *cellIDPlusOne - 1;
417  }
418  else
419  {
420 
421  // Create and add a new cell.
422 
423  const IdentifierType pointIdsEnd = 8;
424  const IdentifierType lineIdsEnd = 12;
425  const IdentifierType faceIdsEnd = 6;
426  IdentifierType i;
427 
428  // Construct the cell.
429  CellAutoPointer newCell(new HexahedronCell, true);
430 
431  // Add the points and vertices, keeping track of the vertex IDs.
432  IdentifierArrayType vertexArray( pointIdsEnd );
433  for( i = 0; i < pointIdsEnd; i++ )
434  {
435  IdentifierType pointID = pointIDs[i];
436  vertexArray[i] = AddVertex( pointID );
437  newCell->SetPointId( i, pointID );
438  }
439 
440  // Add the edges, keeping track of edge IDs.
441  IdentifierArrayType lineArray( lineIdsEnd );
442  lineArray[0] = AddLine( pointIDs[0], pointIDs[1] );
443  lineArray[1] = AddLine( pointIDs[2], pointIDs[3] );
444  lineArray[2] = AddLine( pointIDs[4], pointIDs[5] );
445  lineArray[3] = AddLine( pointIDs[6], pointIDs[7] );
446  lineArray[4] = AddLine( pointIDs[0], pointIDs[2] );
447  lineArray[5] = AddLine( pointIDs[1], pointIDs[3] );
448  lineArray[6] = AddLine( pointIDs[4], pointIDs[6] );
449  lineArray[7] = AddLine( pointIDs[5], pointIDs[7] );
450  lineArray[8] = AddLine( pointIDs[0], pointIDs[4] );
451  lineArray[9] = AddLine( pointIDs[1], pointIDs[5] );
452  lineArray[10] = AddLine( pointIDs[2], pointIDs[6] );
453  lineArray[11] = AddLine( pointIDs[3], pointIDs[7] );
454 
455  // Add the faces, keeping track of face IDs.
456  IdentifierArrayType faceArray( faceIdsEnd );
457  faceArray[0] = AddQuadrilateral( pointIDs[0], pointIDs[1], pointIDs[2], pointIDs[3] );
458  faceArray[1] = AddQuadrilateral( pointIDs[4], pointIDs[5], pointIDs[6], pointIDs[7] );
459  faceArray[2] = AddQuadrilateral( pointIDs[0], pointIDs[1], pointIDs[4], pointIDs[5] );
460  faceArray[3] = AddQuadrilateral( pointIDs[2], pointIDs[3], pointIDs[6], pointIDs[7] );
461  faceArray[4] = AddQuadrilateral( pointIDs[0], pointIDs[2], pointIDs[4], pointIDs[6] );
462  faceArray[5] = AddQuadrilateral( pointIDs[1], pointIDs[3], pointIDs[5], pointIDs[7] );
463 
464  // Choose the ID and store it in its hash location (cellIDPlusOne)
465  cellID = m_OutputMesh->GetNumberOfCells();
466  *cellIDPlusOne = cellID + 1;
467 
468  // Add the cell to the mesh.
469  m_OutputMesh->SetCell( cellID, newCell );
470 
471  // Set the boundaries for the new cell.
472 
473  for( i = 0; i < pointIdsEnd; i++ )
474  {
475  m_OutputMesh->SetBoundaryAssignment( 0, cellID, i, vertexArray[i] );
476  }
477 
478  for( i = 0; i < lineIdsEnd; i++ )
479  {
480  m_OutputMesh->SetBoundaryAssignment( 1, cellID, i, lineArray[i] );
481  }
482 
483  for( i = 0; i < faceIdsEnd; i++ )
484  {
485  m_OutputMesh->SetBoundaryAssignment( 2, cellID, i, faceArray[i] );
486  }
487 
488  }
489 
490  return cellID;
491 }
492 
493 template<class TOutputMesh>
497 {
498  Array<IdentifierType> pointIDs( 1 );
499  pointIDs[ 0 ] = pointId0;
500  return AddVertex( pointIDs );
501 }
502 
503 template<class TOutputMesh>
507 {
508  Array<IdentifierType> pointIDs( 2 );
509  pointIDs[ 0 ] = pointId0;
510  pointIDs[ 1 ] = pointId1;
511  return AddLine( pointIDs );
512 }
513 
514 template<class TOutputMesh>
518  IdentifierType pointId2 )
519 {
520  Array<IdentifierType> pointIDs( 3 );
521  pointIDs[ 0 ] = pointId0;
522  pointIDs[ 1 ] = pointId1;
523  pointIDs[ 2 ] = pointId2;
524  return AddTriangle( pointIDs );
525 }
526 
527 template<class TOutputMesh>
531  IdentifierType pointId2, IdentifierType pointId3 )
532 {
533  Array<IdentifierType> pointIDs( 4 );
534  pointIDs[ 0 ] = pointId0;
535  pointIDs[ 1 ] = pointId1;
536  pointIDs[ 2 ] = pointId2;
537  pointIDs[ 3 ] = pointId3;
538  return AddQuadrilateral( pointIDs );
539 }
540 
541 template<class TOutputMesh>
545  IdentifierType pointId2, IdentifierType pointId3 )
546 {
547  Array<IdentifierType> pointIDs( 4 );
548  pointIDs[ 0 ] = pointId0;
549  pointIDs[ 1 ] = pointId1;
550  pointIDs[ 2 ] = pointId2;
551  pointIDs[ 3 ] = pointId3;
552  return AddTetrahedron( pointIDs );
553 }
554 
555 template<class TOutputMesh>
559  IdentifierType pointId2, IdentifierType pointId3,
560  IdentifierType pointId4, IdentifierType pointId5,
561  IdentifierType pointId6, IdentifierType pointId7 )
562 {
563  Array<IdentifierType> pointIDs( 8 );
564  pointIDs[ 0 ] = pointId0;
565  pointIDs[ 1 ] = pointId1;
566  pointIDs[ 2 ] = pointId2;
567  pointIDs[ 3 ] = pointId3;
568  pointIDs[ 4 ] = pointId4;
569  pointIDs[ 5 ] = pointId5;
570  pointIDs[ 6 ] = pointId6;
571  pointIDs[ 7 ] = pointId7;
572  return AddHexahedron( pointIDs );
573 }
574 
575 template<class TOutputMesh>
578 ::AddVertex( const PointType& p0 )
579 {
580  IdentifierType pointId = AddPoint( p0 );
581  return AddVertex( pointId );
582 }
583 
584 template<class TOutputMesh>
587 ::AddLine( const PointType& p0, const PointType& p1 )
588 {
589  Array<IdentifierType> pointIDs( 2 );
590  pointIDs[ 0 ] = AddPoint( p0 );
591  pointIDs[ 1 ] = AddPoint( p1 );
592  return AddLine( pointIDs );
593 }
594 
595 template<class TOutputMesh>
598 ::AddTriangle( const PointType& p0, const PointType& p1,
599  const PointType& p2 )
600 {
601  Array<IdentifierType> pointIDs( 3 );
602  pointIDs[ 0 ] = AddPoint( p0 );
603  pointIDs[ 1 ] = AddPoint( p1 );
604  pointIDs[ 2 ] = AddPoint( p2 );
605  return AddTriangle( pointIDs );
606 }
607 
608 template<class TOutputMesh>
611 ::AddQuadrilateral( const PointType& p0, const PointType& p1,
612  const PointType& p2, const PointType& p3 )
613 {
614  Array<IdentifierType> pointIDs( 4 );
615  pointIDs[ 0 ] = AddPoint( p0 );
616  pointIDs[ 1 ] = AddPoint( p1 );
617  pointIDs[ 2 ] = AddPoint( p2 );
618  pointIDs[ 3 ] = AddPoint( p3 );
619  return AddQuadrilateral( pointIDs );
620 }
621 
622 template<class TOutputMesh>
625 ::AddTetrahedron( const PointType& p0, const PointType& p1,
626  const PointType& p2, const PointType& p3 )
627 {
628  Array<IdentifierType> pointIDs( 4 );
629  pointIDs[ 0 ] = AddPoint( p0 );
630  pointIDs[ 1 ] = AddPoint( p1 );
631  pointIDs[ 2 ] = AddPoint( p2 );
632  pointIDs[ 3 ] = AddPoint( p3 );
633  return AddTetrahedron( pointIDs );
634 }
635 
636 template<class TOutputMesh>
640  const PointType& p0, const PointType& p1, const PointType& p2,
641  const PointType& p3, const PointType& p4, const PointType& p5,
642  const PointType& p6, const PointType& p7 )
643 {
644  Array<IdentifierType> pointIDs( 8 );
645  pointIDs[ 0 ] = AddPoint( p0 );
646  pointIDs[ 1 ] = AddPoint( p1 );
647  pointIDs[ 2 ] = AddPoint( p2 );
648  pointIDs[ 3 ] = AddPoint( p3 );
649  pointIDs[ 4 ] = AddPoint( p4 );
650  pointIDs[ 5 ] = AddPoint( p5 );
651  pointIDs[ 6 ] = AddPoint( p6 );
652  pointIDs[ 7 ] = AddPoint( p7 );
653  return AddHexahedron( pointIDs );
654 }
655 
656 template<class TOutputMesh>
660 {
661  Array<IdentifierType> pointIDs( 1 );
662  pointIDs[ 0 ] = AddPoint( p0 );
663  return AddVertex( pointIDs );
664 }
665 
666 template<class TOutputMesh>
670  const CoordinateType* p1)
671 {
672  Array<IdentifierType> pointIDs( 2 );
673  pointIDs[ 0 ] = AddPoint( p0 );
674  pointIDs[ 1 ] = AddPoint( p1 );
675  return AddLine( pointIDs );
676 }
677 
678 template<class TOutputMesh>
682  const CoordinateType* p1,
683  const CoordinateType* p2 )
684 {
685  Array<IdentifierType> pointIDs( 3 );
686  pointIDs[ 0 ] = AddPoint( p0 );
687  pointIDs[ 1 ] = AddPoint( p1 );
688  pointIDs[ 2 ] = AddPoint( p2 );
689  return AddTriangle( pointIDs );
690 }
691 
692 template<class TOutputMesh>
696  const CoordinateType* p1,
697  const CoordinateType* p2,
698  const CoordinateType* p3 )
699 {
700  Array<IdentifierType> pointIDs( 4 );
701  pointIDs[ 0 ] = AddPoint( p0 );
702  pointIDs[ 1 ] = AddPoint( p1 );
703  pointIDs[ 2 ] = AddPoint( p2 );
704  pointIDs[ 3 ] = AddPoint( p3 );
705  return AddQuadrilateral( pointIDs );
706 }
707 
708 template<class TOutputMesh>
712  const CoordinateType* p1,
713  const CoordinateType* p2,
714  const CoordinateType* p3 )
715 {
716  Array<IdentifierType> pointIDs( 4 );
717  pointIDs[ 0 ] = AddPoint( p0 );
718  pointIDs[ 1 ] = AddPoint( p1 );
719  pointIDs[ 2 ] = AddPoint( p2 );
720  pointIDs[ 3 ] = AddPoint( p3 );
721  return AddTetrahedron( pointIDs );
722 }
723 
724 template<class TOutputMesh>
728  const CoordinateType* p1,
729  const CoordinateType* p2,
730  const CoordinateType* p3,
731  const CoordinateType* p4,
732  const CoordinateType* p5,
733  const CoordinateType* p6,
734  const CoordinateType* p7)
735 {
736  Array<IdentifierType> pointIDs( 8 );
737  pointIDs[ 0 ] = AddPoint( p0 );
738  pointIDs[ 1 ] = AddPoint( p1 );
739  pointIDs[ 2 ] = AddPoint( p2 );
740  pointIDs[ 3 ] = AddPoint( p3 );
741  pointIDs[ 4 ] = AddPoint( p4 );
742  pointIDs[ 5 ] = AddPoint( p5 );
743  pointIDs[ 6 ] = AddPoint( p6 );
744  pointIDs[ 7 ] = AddPoint( p7 );
745  return AddHexahedron( pointIDs );
746 }
747 
748 }
750 #endif

Generated at Sat Feb 2 2013 23:24:50 for Orfeo Toolbox with doxygen 1.8.1.1