Show
Ignore:
Timestamp:
03/22/10 15:55:52 (4 years ago)
Author:
paulmartz
Message:

2.8 branch: Hm, mysteriously, the ply plugin seems to be missing changes that were previously merged. This commit brings them up to date with svn trunk as of r11237.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/branches/OpenSceneGraph-2.8/src/osgPlugins/ply/vertexData.cpp

    r10012 r11274  
    1010 
    1111#include "typedefs.h" 
    12  
    1312#include "vertexData.h" 
    1413#include "ply.h" 
     14 
    1515#include <cstdlib> 
    1616#include <algorithm> 
     
    127127     
    128128    // read in the faces, asserting that they are only triangles 
    129     uint8_t ind1 = _invertFaces ? 2 : 0; 
    130     uint8_t ind3 = _invertFaces ? 0 : 2; 
     129    int ind1 = _invertFaces ? 2 : 0; 
     130    int ind3 = _invertFaces ? 0 : 2; 
    131131    for( int i = 0; i < nFaces; ++i ) 
    132132    { 
     
    158158    float   version; 
    159159    bool    result = false; 
    160     int        nComments; 
    161     char**    comments; 
    162      
    163     PlyFile* file = ply_open_for_reading( const_cast< char* >( filename ),  
     160    int     nComments; 
     161    char**  comments; 
     162     
     163    PlyFile* file = NULL; 
     164 
     165    // Try to open ply file as for reading 
     166    try{ 
     167            file  = ply_open_for_reading( const_cast< char* >( filename ),  
    164168                                          &nPlyElems, &elemNames,  
    165169                                          &fileType, &version ); 
     170    } 
     171    // Catch the if any exception thrown 
     172    catch( exception& e ) 
     173    { 
     174        MESHERROR << "Unable to read PLY file, an exception occured:  "  
     175                    << e.what() << endl; 
     176    } 
    166177 
    167178    if( !file ) 
     
    173184 
    174185    MESHASSERT( elemNames != 0 ); 
     186     
    175187 
    176188    nComments = file->num_comments; 
     
    196208        int nProps; 
    197209         
    198         PlyProperty** props = ply_get_element_description( file, elemNames[i],  
    199                                                            &nElems, &nProps ); 
     210        PlyProperty** props = NULL; 
     211        try{ 
     212                props = ply_get_element_description( file, elemNames[i],  
     213                                                     &nElems, &nProps ); 
     214        } 
     215        catch( exception& e ) 
     216        { 
     217            MESHERROR << "Unable to get PLY file description, an exception occured:  "  
     218                        << e.what() << endl; 
     219        } 
    200220        MESHASSERT( props != 0 ); 
    201221         
     
    222242            if( ignoreColors ) 
    223243                MESHINFO << "Colors in PLY file ignored per request." << endl; 
    224              
    225             // Read vertices and store in a std::vector array 
    226             readVertices( file, nElems, hasColors && !ignoreColors ); 
    227             // Check whether all vertices are loaded or not 
    228             MESHASSERT( _vertices->size() == static_cast< size_t >( nElems ) ); 
    229             // Check all color elements read or not 
    230             if( hasColors && !ignoreColors ) 
    231                 MESHASSERT( _colors->size() == static_cast< size_t >( nElems ) ); 
     244          
     245            try {    
     246                // Read vertices and store in a std::vector array 
     247                readVertices( file, nElems, hasColors && !ignoreColors ); 
     248                // Check whether all vertices are loaded or not 
     249                MESHASSERT( _vertices->size() == static_cast< size_t >( nElems ) ); 
     250                // Check all color elements read or not 
     251                if( hasColors && !ignoreColors ) 
     252                { 
     253                    MESHASSERT( _colors->size() == static_cast< size_t >( nElems ) ); 
     254                } 
     255 
     256                result = true; 
     257            } 
     258            catch( exception& e ) 
     259            { 
     260                MESHERROR << "Unable to read vertex in PLY file, an exception occured:  "  
     261                            << e.what() << endl; 
     262                // stop for loop by setting the loop variable to break condition 
     263                // this way resources still get released even on error cases 
     264                i = nPlyElems; 
     265                 
     266            } 
    232267        } 
    233268        // If the string is face means triangle info started 
     
    273308 
    274309        // If the normals are not calculated calculate the normals for faces 
    275         if(!_normals.valid()) 
    276             _calculateNormals(); 
    277  
    278          
    279         // set the normals 
    280         geom->setNormalArray(_normals.get()); 
    281         geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); 
     310        if(_triangles.valid()) 
     311        { 
     312            if(!_normals.valid()) 
     313                _calculateNormals(); 
     314 
     315            // set the normals 
     316            geom->setNormalArray(_normals.get()); 
     317            geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); 
     318        } 
    282319         
    283320        // Add the premetive set 
    284         geom->addPrimitiveSet(_triangles.get()); 
     321        if (_triangles.valid() && _triangles->size() > 0 ) 
     322            geom->addPrimitiveSet(_triangles.get()); 
     323        else 
     324            geom->addPrimitiveSet(new osg::DrawArrays(GL_POINTS, 0, _vertices->size())); 
    285325 
    286326        // if color info is given set the color array