Changeset 10040
- Timestamp:
- 04/13/09 11:35:52 (4 years ago)
- Location:
- OpenSceneGraph/trunk/src/osgPlugins/ply
- Files:
-
- 3 modified
-
plyfile.cpp (modified) (24 diffs)
-
typedefs.h (modified) (1 diff)
-
vertexData.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/src/osgPlugins/ply/plyfile.cpp
r10014 r10040 40 40 41 41 #include "ply.h" 42 #include"typedefs.h" 43 42 44 #include <stdio.h> 43 45 #include <stdlib.h> 44 46 #include <math.h> 45 47 #include <string.h> 48 49 46 50 47 51 #ifdef WIN32 … … 316 320 317 321 plyfile = ply_write (fp, nelems, elem_names, file_type); 322 323 // If the plyfile could not load return NULL 318 324 if (plyfile == NULL) 319 325 return (NULL); … … 354 360 elem = find_element (plyfile, elem_name); 355 361 if (elem == NULL) { 356 fprintf(stderr,"ply_describe_element: can't find element '%s'\n",elem_name); 357 exit (-1); 362 char error[100]; 363 sprintf (error, "ply_describe_element: can't find element '%s'\n",elem_name); 364 throw ply::MeshException( error ); 358 365 } 359 366 … … 501 508 elem = find_element (plyfile, elem_name); 502 509 if (elem == NULL) { 503 fprintf(stderr,"ply_element_count: can't find element '%s'\n",elem_name); 504 exit (-1); 510 char error[100]; 511 sprintf (error, "ply_element_count: can't find element '%s'\n",elem_name); 512 throw ply::MeshException( error ); 505 513 } 506 514 … … 537 545 break; 538 546 default: 539 fprintf (stderr, "ply_header_complete: bad file type = %d\n", 547 char error[100]; 548 sprintf (error, "ply_header_complete: bad file type = %d\n", 540 549 plyfile->file_type); 541 exit (-1);550 throw ply::MeshException( error ); 542 551 } 543 552 … … 596 605 elem = find_element (plyfile, elem_name); 597 606 if (elem == NULL) { 598 fprintf(stderr, "ply_elements_setup: can't find element '%s'\n", elem_name); 599 exit (-1); 607 char error[100]; 608 sprintf (error, "ply_elements_setup: can't find element '%s'\n", elem_name); 609 throw ply::MeshException( error ); 600 610 } 601 611 … … 941 951 plyfile = ply_read (fp, nelems, elem_names); 942 952 953 if(!plyfile) 954 { 955 std::cout<<"Ply File Error : Could not read file"<<std::endl; 956 return NULL; 957 } 958 943 959 /* determine the file type and version */ 944 960 … … 1331 1347 elem = find_element (plyfile, elem_name); 1332 1348 if (elem == NULL) { 1333 fprintf (stderr,1334 "ply_get_other_element: can't find element '%s'\n", elem_name);1335 exit (-1);1349 char error[100]; 1350 sprintf (error, "ply_get_other_element: can't find element '%s'\n", elem_name); 1351 throw ply::MeshException( error ); 1336 1352 } 1337 1353 … … 1651 1667 words = get_words (plyfile->fp, &nwords, &orig_line); 1652 1668 if (words == NULL) { 1653 fprintf (stderr, "ply_get_element: unexpected end of file\n"); 1654 exit (-1); 1669 char error[100]; 1670 sprintf (error, "ply_get_element: unexpected end of file\n"); 1671 throw ply::MeshException( error ); 1655 1672 } 1656 1673 … … 1848 1865 1849 1866 if (code <= PLY_START_TYPE || code >= PLY_END_TYPE) { 1850 fprintf (stderr, "write_scalar_type: bad data code = %d\n", code); 1851 exit (-1); 1867 char error[100]; 1868 sprintf (error, "write_scalar_type: bad data code = %d\n", code); 1869 throw ply::MeshException( error ); 1852 1870 } 1853 1871 … … 2119 2137 break; 2120 2138 default: 2121 fprintf (stderr, "write_binary_item: bad type = %d\n", type); 2122 exit (-1); 2139 char error[100]; 2140 sprintf (error, "write_binary_item: bad type = %d\n", type); 2141 throw ply::MeshException( error ); 2123 2142 } 2124 2143 } … … 2163 2182 break; 2164 2183 default: 2165 fprintf (stderr, "write_ascii_item: bad type = %d\n", type); 2166 exit (-1); 2184 char error[100]; 2185 sprintf (error, "write_ascii_item: bad type = %d\n", type); 2186 throw ply::MeshException( error ); 2167 2187 } 2168 2188 } … … 2235 2255 break; 2236 2256 default: 2237 fprintf (stderr, "get_stored_item: bad type = %d\n", type); 2238 exit (-1); 2257 char error[100]; 2258 sprintf (error, "get_stored_item: bad type = %d\n", type); 2259 throw ply::MeshException( error ); 2239 2260 } 2240 2261 } … … 2267 2288 2268 2289 ptr = (void *) c; 2290 size_t result = 0; 2269 2291 2270 2292 switch (type) { 2271 2293 case PLY_CHAR: 2272 fread (ptr, 1, 1, plyfile->fp); 2294 result = fread (ptr, 1, 1, plyfile->fp); 2295 if(result < 1) 2296 { 2297 throw ply::MeshException( "Error in reading PLY file." 2298 "fread not succeeded." ); 2299 } 2273 2300 *int_val = *((char *) ptr); 2274 2301 *uint_val = *int_val; … … 2277 2304 case PLY_UCHAR: 2278 2305 case PLY_UINT8: 2279 fread (ptr, 1, 1, plyfile->fp); 2306 result = fread (ptr, 1, 1, plyfile->fp); 2307 if(result < 1) 2308 { 2309 throw ply::MeshException( "Error in reading PLY file." 2310 "fread not succeeded." ); 2311 } 2280 2312 *uint_val = *((unsigned char *) ptr); 2281 2313 *int_val = *uint_val; … … 2283 2315 break; 2284 2316 case PLY_SHORT: 2285 fread (ptr, 2, 1, plyfile->fp); 2317 result = fread (ptr, 2, 1, plyfile->fp); 2318 if(result < 1 ) 2319 { 2320 throw ply::MeshException( "Error in reading PLY file." 2321 "fread not succeeded." ); 2322 } 2286 2323 if( plyfile->file_type == PLY_BINARY_BE ) 2287 2324 { … … 2297 2334 break; 2298 2335 case PLY_USHORT: 2299 fread (ptr, 2, 1, plyfile->fp); 2336 result = fread (ptr, 2, 1, plyfile->fp); 2337 if(result < 1) 2338 { 2339 throw ply::MeshException( "Error in reading PLY file." 2340 "fread not succeeded." ); 2341 } 2300 2342 if( plyfile->file_type == PLY_BINARY_BE ) 2301 2343 { … … 2312 2354 case PLY_INT: 2313 2355 case PLY_INT32: 2314 fread (ptr, 4, 1, plyfile->fp); 2356 result = fread (ptr, 4, 1, plyfile->fp); 2357 if(result < 1) 2358 { 2359 throw ply::MeshException( "Error in reading PLY file." 2360 "fread not succeeded." ); 2361 } 2315 2362 if( plyfile->file_type == PLY_BINARY_BE ) 2316 2363 { … … 2326 2373 break; 2327 2374 case PLY_UINT: 2328 fread (ptr, 4, 1, plyfile->fp); 2375 result = fread (ptr, 4, 1, plyfile->fp); 2376 if(result < 1) 2377 { 2378 throw ply::MeshException( "Error in reading PLY file." 2379 "fread not succeeded." ); 2380 } 2329 2381 if( plyfile->file_type == PLY_BINARY_BE ) 2330 2382 { … … 2341 2393 case PLY_FLOAT: 2342 2394 case PLY_FLOAT32: 2343 fread (ptr, 4, 1, plyfile->fp); 2395 result = fread (ptr, 4, 1, plyfile->fp); 2396 if(result < 1) 2397 { 2398 throw ply::MeshException( "Error in reading PLY file." 2399 "fread not succeeded." ); 2400 } 2344 2401 if( plyfile->file_type == PLY_BINARY_BE ) 2345 2402 { … … 2355 2412 break; 2356 2413 case PLY_DOUBLE: 2357 fread (ptr, 8, 1, plyfile->fp); 2414 result = fread (ptr, 8, 1, plyfile->fp); 2415 if(!result < 1) 2416 { 2417 throw ply::MeshException( "Error in reading PLY file." 2418 "fread not succeeded." ); 2419 } 2358 2420 if( plyfile->file_type == PLY_BINARY_BE ) 2359 2421 { … … 2369 2431 break; 2370 2432 default: 2371 fprintf (stderr, "get_binary_item: bad type = %d\n", type); 2372 exit (-1); 2433 char error[100]; 2434 sprintf (error, "get_binary_item: bad type = %d\n", type); 2435 throw ply::MeshException( error ); 2373 2436 } 2374 2437 } … … 2425 2488 2426 2489 default: 2427 fprintf (stderr, "get_ascii_item: bad type = %d\n", type); 2428 exit (-1); 2490 char error[100]; 2491 sprintf (error, "get_ascii_item: bad type = %d\n", type); 2492 throw ply::MeshException( error ); 2429 2493 } 2430 2494 } … … 2497 2561 break; 2498 2562 default: 2499 fprintf (stderr, "store_item: bad type = %d\n", type); 2500 exit (-1); 2563 char error[100]; 2564 sprintf (error, "store_item: bad type = %d\n", type); 2565 throw ply::MeshException( error ); 2501 2566 } 2502 2567 } -
OpenSceneGraph/trunk/src/osgPlugins/ply/typedefs.h
r10012 r10040 20 20 # include <osg/Notify> 21 21 # include <cassert> 22 # define MESHASSERT assert 22 23 #ifdef NDEBUG 24 # define MESHASSERT( x ) 25 #else 26 # define MESHASSERT(x) { if( !(x) ) \ 27 osg::notify(osg::WARN) << "Ply Loader ##### Assert: " << #x << " #####" << std::endl; } 28 #endif 29 23 30 # define MESHERROR osg::notify(osg::WARN) 24 31 # define MESHWARN osg::notify(osg::WARN) -
OpenSceneGraph/trunk/src/osgPlugins/ply/vertexData.cpp
r10012 r10040 158 158 float version; 159 159 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 ), 164 168 &nPlyElems, &elemNames, 165 169 &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 } 166 177 167 178 if( !file ) … … 173 184 174 185 MESHASSERT( elemNames != 0 ); 186 175 187 176 188 nComments = file->num_comments; … … 196 208 int nProps; 197 209 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 } 200 220 MESHASSERT( props != 0 ); 201 221 … … 222 242 if( ignoreColors ) 223 243 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 MESHASSERT( _colors->size() == static_cast< size_t >( nElems ) ); 253 } 254 catch( exception& e ) 255 { 256 MESHERROR << "Unable to read vertex in PLY file, an exception occured: " 257 << e.what() << endl; 258 // stop for loop by setting the loop variable to break condition 259 // this way resources still get released even on error cases 260 i = nPlyElems; 261 262 } 232 263 } 233 264 // If the string is face means triangle info started
