⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itkquadedgemeshbasiclayertest.cxx

📁 DTMK软件开发包,此为开源软件,是一款很好的医学图像开发资源.
💻 CXX
字号:
/*=========================================================================

  Program:   Insight Segmentation & Registration Toolkit
  Module:    $RCSfile: itkQuadEdgeMeshBasicLayerTest.cxx,v $
  Language:  C++
  Date:      $Date: 2008-02-05 16:03:10 $
  Version:   $Revision: 1.7 $

  Copyright (c) Insight Software Consortium. All rights reserved.
  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even 
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif

// Program test for the basic QE layer.
#include <iostream>
#include "itkQuadEdgeMeshBaseIterator.h"
#include "itkGeometricalQuadEdge.h"

class itkQuadEdgeMeshBasicLayerTestHelper
{
public:
  typedef itk::GeometricalQuadEdge< int, int, bool, bool >  PrimalType;
  typedef PrimalType::DualType                              DualType;

  static PrimalType * MakeQuadEdges()
    {
    PrimalType * e1 = new PrimalType();
    DualType   * e2 = new DualType();
    PrimalType * e3 = new PrimalType();
    DualType   * e4 = new DualType();
    
    e1->SetRot( e2 );
    e2->SetRot( e3 );
    e3->SetRot( e4 );
    e4->SetRot( e1 );
    
    e1->SetOnext( e1 );
    e2->SetOnext( e4 );
    e3->SetOnext( e3 );
    e4->SetOnext( e4 );

    return e1;
    }
};

int itkQuadEdgeMeshBasicLayerTest( int , char* [] )
{
  typedef itkQuadEdgeMeshBasicLayerTestHelper::PrimalType  PrimalType;
  typedef itkQuadEdgeMeshBasicLayerTestHelper::DualType    DualType;
  
  PrimalType* e[5];

  //////////////////////////////////////////////////////////
  std::cout << "Creating edges" << std::endl;
  for(int i=0; i < 5; i++)
    {
    e[i] = new PrimalType;
    }
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout << "Testing MakeEdge" << std::endl;
  for( int i=0; i < 5; i++ )
    {
    e[i] = itkQuadEdgeMeshBasicLayerTestHelper::MakeQuadEdges();
    }
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout << "Testing ring for Origin() unset values" << std::endl;
  for(int i=0; i < 5; i++)
    {
    if( e[i]->IsOriginSet() )
      {
      std::cout << "IsOriginSet() should not be set for edge number " << i
                << ". Failed" << std::endl;
      return EXIT_FAILURE;
      }
    }

  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout  << "Setting Origin() and Destination() values... " << std::endl;
  int  org[5] = { 0, 1, 2, 3, 0};
  int dest[5] = { 1, 2, 3, 0, 2};

  for(int i=0; i < 5; i++ )
    {
    e[i]->SetOrigin( org[i] );
    e[i]->SetDestination( dest[i] );
    }
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout  << "Testing ring for Origin() set values... " << std::endl;
  for( int i=0; i < 5; i++ )
    {
    if ( ! e[i]->IsOriginSet() )
      {
      std::cout << "IsOriginSet() NULL value failed for edge number "
                << i << ". Failed" << std::endl;
      return EXIT_FAILURE;
      } //fi
    } // rof
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout  << "Splicing... " << std::endl;
  e[0]->Splice( e[4] );
  e[4]->Splice( e[3]->GetSym( ) );
  e[1]->Splice( e[0]->GetSym( ) );
  e[2]->Splice( e[4]->GetSym( ) );
  e[4]->GetSym( )->Splice( e[1]->GetSym( ) );
  e[3]->Splice( e[2]->GetSym( ) );
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout  << "Testing Origin() and Destination() adjacency... "
             << std::endl;
  for( int i=0; i < 5; i++ )
    {
    if ( e[i]->GetOrigin() != org[i] )
      {
      std::cout << std::endl 
                << "Erroneous GetOrigin() on edge number " << i
                << ". Was expecting " << org[i]
                << " but got " << e[i]->GetOrigin()
                << ". Failed" << std::endl;
      return EXIT_FAILURE;
      } //fi
    if ( e[i]->GetDestination() != dest[i] )
      {
      std::cout << std::endl 
                << "Erroneous GetDestination() on edge number " << i
                << ". Was expecting " << dest[i]
                << " but got " << e[i]->GetDestination()
                << ". Failed" << std::endl;
      return EXIT_FAILURE;
      } //fi
    } // rof
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout  << "Setting faces... " << std::endl;
  e[0]->SetLeft( 0 ); 
  e[1]->SetLeft( 0 );
  e[4]->SetRight( 0 );
  e[2]->SetLeft( 1 );
  e[3]->SetLeft( 1 );
  e[4]->SetLeft( 1 );
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  typedef PrimalType::IteratorGeom IteratorGeom;
  std::cout  << "Testing Onext iterators... " << std::endl;
  int onextDestination[5][3] = { { 1, 2, 3 },
                                 { 2, 0, 0 },  // Last 0 is a dummy
                                 { 3, 0, 1 },
                                 { 0, 2, 0 },  // Last 0 is a dummy
                                 { 2, 3, 1 } };
  for( int edge = 0; edge < 5; edge++ )
    {
    int test = 0;
    for( IteratorGeom itOnext = e[edge]->BeginGeomOnext( );
         itOnext != e[edge]->EndGeomOnext( );
         itOnext++, test++ )
      {
      if ( itOnext.Value( )->GetDestination( ) != onextDestination[edge][test] )
        {
        std::cout << std::endl 
                  << "Erroneous GetDestination() on edge number " << edge
                  << ". Was expecting " << onextDestination[edge][test]
                  << " but got " << itOnext.Value( )->GetDestination( )
                  << ". Failed" << std::endl;
        return EXIT_FAILURE;
        } 
      }
    }
  std::cout << "Passed" << std::endl;

  //////////////////////////////////////////////////////////
  std::cout  << "Testing Lnext iterators... " << std::endl;
  int lnextDestination[5][3] = { { 0, 1, 2 },
                                 { 1, 2, 0 },
                                 { 2, 3, 0 },
                                 { 3, 0, 2 },
                                 { 0, 2, 3 } };
  for( int edge = 0; edge < 5; edge++ )
    {
    int test = 0;
    for( IteratorGeom itLnext = e[edge]->BeginGeomLnext( );
         itLnext != e[edge]->EndGeomLnext( );
         itLnext++, test++ )
      {
      if ( *itLnext != lnextDestination[edge][test] )
        {
        std::cout << std::endl 
                  << "Erroneous GetDestination() on edge number " << edge
                  << ". Was expecting " << lnextDestination[edge][test]
                  << " but got " << *itLnext
                  << ". Failed" << std::endl;
        return EXIT_FAILURE;
        } 
      }
    }

  std::cout << "on Sym()... " << std::endl;
  int lnextDestinationOnSym[3] = { 2, 0, 1 };
  int test = 0;
  for( IteratorGeom itLnext = e[4]->GetSym()->BeginGeomLnext( );
       itLnext != e[4]->GetSym()->EndGeomLnext( );
       itLnext++, test++ )
    {
    if ( *itLnext != lnextDestinationOnSym[test] )
      {
      std::cout << std::endl
                << "Erroneous GetDestination() on edge number 4. "
                << "Was expecting " << lnextDestinationOnSym[test]
                << " but got " << *itLnext
                << ". Failed" << std::endl;
      return EXIT_FAILURE;
      }
    }
  std::cout << "Passed" << std::endl;


  //////////////////////////////////////////////////////////
  std::cout  << "Testing Sym iterators... " << std::endl;
  int symDestination[5][3] = { { 0, 1 },
                               { 1, 2 },
                               { 2, 3 },
                               { 3, 0 },
                               { 0, 2 } };
  for( int edge = 0; edge < 5; edge++ )
    {
    test = 0;
    for( IteratorGeom itSym = e[edge]->BeginGeomSym( );
         itSym != e[edge]->EndGeomSym( );
         itSym++, test++ )
      {
      if ( *itSym != symDestination[edge][test] )
        {
        std::cout << std::endl
                  << "Erroneous GetDestination() on edge number " << edge
                  << ". Was expecting " << symDestination[edge][test]
                  << " but got " << *itSym
                  << ". Failed" << std::endl;
        return EXIT_FAILURE;
        }
      }
    }
  std::cout << "Passed" << std::endl;

  return EXIT_SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -