202        wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [INFO] corrupt data; missing left bracket at " 
  204                    __FILE__, __FUNCTION__, __LINE__,
 
  205                    static_cast<int>( aFile.tellg() ) );
 
  213    while( 
']' != schar && aFile.good() )
 
  215        name.push_back( schar );
 
  221        wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [INFO] corrupt data; could not find right " 
  223                    __FILE__, __FUNCTION__, __LINE__ );
 
  229    size_t upos = 
name.find( 
'_' );
 
  231    if( std::string::npos == upos )
 
  233        wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [INFO] corrupt data; no underscore in name '%s'" ),
 
  234                    __FILE__, __FUNCTION__, __LINE__,
 
  259    wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [INFO] corrupt data; no node type matching '%s'" ),
 
  260                __FILE__, __FUNCTION__, __LINE__,
 
 
  314    dx = pts[1].x - pts[0].x;
 
  315    dy = pts[1].y - pts[0].y;
 
  316    dz = pts[1].z - pts[0].z;
 
  318    if( ( dx*dx + dy*dy + dz*dz ) < 1e-15 )
 
  321    dx = pts[2].x - pts[0].x;
 
  322    dy = pts[2].y - pts[0].y;
 
  323    dz = pts[2].z - pts[0].z;
 
  325    if( ( dx*dx + dy*dy + dz*dz ) < 1e-15 )
 
  328    dx = pts[2].x - pts[1].x;
 
  329    dy = pts[2].y - pts[1].y;
 
  330    dz = pts[2].z - pts[1].z;
 
  332    if( ( dx*dx + dy*dy + dz*dz ) < 1e-15 )
 
 
  354                               std::vector< SGVECTOR >& norms )
 
  356    size_t vsize = coords.size();
 
  360        wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [INFO] invalid vertex set (fewer than 3 " 
  362                    __FILE__, __FUNCTION__, __LINE__ );
 
  367    size_t isize = index.size();
 
  369    if( 0 != isize % 3 || index.empty() )
 
  371        wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [INFO] invalid index set (not multiple of 3)" ),
 
  372                    __FILE__, __FUNCTION__, __LINE__ );
 
  379        wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [INFO] normals set is not empty" ),
 
  380                    __FILE__, __FUNCTION__, __LINE__ );
 
  385    std::map< int, std::list< glm::dvec3 > >vmap;
 
  390    for( 
size_t i = 0; i < isize; )
 
  396        if( p1 < 0 || p1 >= (
int)vsize || p2 < 0 || p2 >= (
int)vsize || p3 < 0 || p3 >= (
int)vsize )
 
  399            std::ostringstream ostr;
 
  400            ostr << __FILE__ << 
": " << __FUNCTION__ << 
": " << __LINE__ << 
"\n";
 
  401            ostr << 
" * [INFO] invalid index set; index out of bounds";
 
  402            wxLogTrace( MASK_3D_SG, wxT( 
"%s\n" ), ostr.str().c_str() );
 
  410        trip[0] = glm::dvec3( coords[p1].x, coords[p1].y, coords[p1].z );
 
  411        trip[1] = glm::dvec3( coords[p2].x, coords[p2].y, coords[p2].z );
 
  412        trip[2] = glm::dvec3( coords[p3].x, coords[p3].y, coords[p3].z );
 
  415        std::map< int, std::list< glm::dvec3 > >::iterator ip = vmap.find( p1 );
 
  417        if( ip != vmap.end() )
 
  419            ip->second.push_back( tri );
 
  423            vmap.emplace( p1, std::list < glm::dvec3 >( 1, tri ) );
 
  426        ip = vmap.find( p2 );
 
  428        if( ip != vmap.end() )
 
  430            ip->second.push_back( tri );
 
  434            vmap.emplace( p2, std::list < glm::dvec3 >( 1, tri ) );
 
  437        ip = vmap.find( p3 );
 
  439        if( ip != vmap.end() )
 
  441            ip->second.push_back( tri );
 
  445            vmap.emplace( p3, std::list < glm::dvec3 >( 1, tri ) );
 
  449    std::map< int, std::list< glm::dvec3 > >::iterator sM = vmap.begin();
 
  450    std::map< int, std::list< glm::dvec3 > >::iterator eM = vmap.end();
 
  455        size_t item = sM->first;
 
  460            norms.emplace_back( 0, 0, 1 );
 
  464        std::list< glm::dvec3 >::iterator sT = sM->second.begin();
 
  465        std::list< glm::dvec3 >::iterator eT = sM->second.end();
 
  466        glm::dvec3 norm( 0.0, 0.0, 0.0 );
 
  474        norms.emplace_back( norm.x, norm.y, norm.z );
 
  480    if( norms.size() != coords.size() )
 
  482        wxLogTrace( MASK_3D_SG, wxT( 
"%s:%s:%d * [BUG] number of normals does not equal number " 
  484                    __FILE__, __FUNCTION__, __LINE__ );
 
 
wxString result
Test unit parsing edge cases and error handling.