- Timestamp:
- 03/22/10 15:55:52 (3 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/branches/OpenSceneGraph-2.8/src/osgPlugins/ply/plyfile.cpp
r10012 r11274 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 #include <osg/Math> 50 51 #if defined(_MSC_VER) && defined(OSG_DISABLE_MSVC_WARNINGS) 52 #pragma warning( disable : 4996 ) 53 #endif 46 54 47 55 #ifdef WIN32 … … 316 324 317 325 plyfile = ply_write (fp, nelems, elem_names, file_type); 326 327 // If the plyfile could not load return NULL 318 328 if (plyfile == NULL) 319 329 return (NULL); … … 354 364 elem = find_element (plyfile, elem_name); 355 365 if (elem == NULL) { 356 fprintf(stderr,"ply_describe_element: can't find element '%s'\n",elem_name); 357 exit (-1); 366 char error[100]; 367 sprintf (error, "ply_describe_element: can't find element '%s'\n",elem_name); 368 throw ply::MeshException( error ); 358 369 } 359 370 … … 501 512 elem = find_element (plyfile, elem_name); 502 513 if (elem == NULL) { 503 fprintf(stderr,"ply_element_count: can't find element '%s'\n",elem_name); 504 exit (-1); 514 char error[100]; 515 sprintf (error, "ply_element_count: can't find element '%s'\n",elem_name); 516 throw ply::MeshException( error ); 505 517 } 506 518 … … 537 549 break; 538 550 default: 539 fprintf (stderr, "ply_header_complete: bad file type = %d\n", 551 char error[100]; 552 sprintf (error, "ply_header_complete: bad file type = %d\n", 540 553 plyfile->file_type); 541 exit (-1);554 throw ply::MeshException( error ); 542 555 } 543 556 … … 596 609 elem = find_element (plyfile, elem_name); 597 610 if (elem == NULL) { 598 fprintf(stderr, "ply_elements_setup: can't find element '%s'\n", elem_name); 599 exit (-1); 611 char error[100]; 612 sprintf (error, "ply_elements_setup: can't find element '%s'\n", elem_name); 613 throw ply::MeshException( error ); 600 614 } 601 615 … … 846 860 return (NULL); 847 861 } 848 plyfile->version = atof(words[2]);862 plyfile->version = osg::asciiToDouble (words[2]); 849 863 } 850 864 else if (equal_strings (words[0], "element")) … … 941 955 plyfile = ply_read (fp, nelems, elem_names); 942 956 957 if(!plyfile) 958 { 959 std::cout<<"Ply File Error : Could not read file"<<std::endl; 960 return NULL; 961 } 962 943 963 /* determine the file type and version */ 944 964 … … 1060 1080 void ply_get_property( 1061 1081 PlyFile *plyfile, 1062 c har *elem_name,1082 const char *elem_name, 1063 1083 PlyProperty *prop 1064 1084 ) … … 1331 1351 elem = find_element (plyfile, elem_name); 1332 1352 if (elem == NULL) { 1333 fprintf (stderr,1334 "ply_get_other_element: can't find element '%s'\n", elem_name);1335 exit (-1);1353 char error[100]; 1354 sprintf (error, "ply_get_other_element: can't find element '%s'\n", elem_name); 1355 throw ply::MeshException( error ); 1336 1356 } 1337 1357 … … 1651 1671 words = get_words (plyfile->fp, &nwords, &orig_line); 1652 1672 if (words == NULL) { 1653 fprintf (stderr, "ply_get_element: unexpected end of file\n"); 1654 exit (-1); 1673 char error[100]; 1674 sprintf (error, "ply_get_element: unexpected end of file\n"); 1675 throw ply::MeshException( error ); 1655 1676 } 1656 1677 … … 1848 1869 1849 1870 if (code <= PLY_START_TYPE || code >= PLY_END_TYPE) { 1850 fprintf (stderr, "write_scalar_type: bad data code = %d\n", code); 1851 exit (-1); 1871 char error[100]; 1872 sprintf (error, "write_scalar_type: bad data code = %d\n", code); 1873 throw ply::MeshException( error ); 1852 1874 } 1853 1875 … … 2119 2141 break; 2120 2142 default: 2121 fprintf (stderr, "write_binary_item: bad type = %d\n", type); 2122 exit (-1); 2143 char error[100]; 2144 sprintf (error, "write_binary_item: bad type = %d\n", type); 2145 throw ply::MeshException( error ); 2123 2146 } 2124 2147 } … … 2163 2186 break; 2164 2187 default: 2165 fprintf (stderr, "write_ascii_item: bad type = %d\n", type); 2166 exit (-1); 2188 char error[100]; 2189 sprintf (error, "write_ascii_item: bad type = %d\n", type); 2190 throw ply::MeshException( error ); 2167 2191 } 2168 2192 } … … 2235 2259 break; 2236 2260 default: 2237 fprintf (stderr, "get_stored_item: bad type = %d\n", type); 2238 exit (-1); 2261 char error[100]; 2262 sprintf (error, "get_stored_item: bad type = %d\n", type); 2263 throw ply::MeshException( error ); 2239 2264 } 2240 2265 } … … 2267 2292 2268 2293 ptr = (void *) c; 2294 size_t result = 0; 2269 2295 2270 2296 switch (type) { 2271 2297 case PLY_CHAR: 2272 fread (ptr, 1, 1, plyfile->fp); 2298 result = fread (ptr, 1, 1, plyfile->fp); 2299 if(result < 1) 2300 { 2301 throw ply::MeshException( "Error in reading PLY file." 2302 "fread not succeeded." ); 2303 } 2273 2304 *int_val = *((char *) ptr); 2274 2305 *uint_val = *int_val; … … 2277 2308 case PLY_UCHAR: 2278 2309 case PLY_UINT8: 2279 fread (ptr, 1, 1, plyfile->fp); 2310 result = fread (ptr, 1, 1, plyfile->fp); 2311 if(result < 1) 2312 { 2313 throw ply::MeshException( "Error in reading PLY file." 2314 "fread not succeeded." ); 2315 } 2280 2316 *uint_val = *((unsigned char *) ptr); 2281 2317 *int_val = *uint_val; … … 2283 2319 break; 2284 2320 case PLY_SHORT: 2285 fread (ptr, 2, 1, plyfile->fp); 2321 result = fread (ptr, 2, 1, plyfile->fp); 2322 if(result < 1 ) 2323 { 2324 throw ply::MeshException( "Error in reading PLY file." 2325 "fread not succeeded." ); 2326 } 2286 2327 if( plyfile->file_type == PLY_BINARY_BE ) 2287 2328 { … … 2297 2338 break; 2298 2339 case PLY_USHORT: 2299 fread (ptr, 2, 1, plyfile->fp); 2340 result = fread (ptr, 2, 1, plyfile->fp); 2341 if(result < 1) 2342 { 2343 throw ply::MeshException( "Error in reading PLY file." 2344 "fread not succeeded." ); 2345 } 2300 2346 if( plyfile->file_type == PLY_BINARY_BE ) 2301 2347 { … … 2312 2358 case PLY_INT: 2313 2359 case PLY_INT32: 2314 fread (ptr, 4, 1, plyfile->fp); 2360 result = fread (ptr, 4, 1, plyfile->fp); 2361 if(result < 1) 2362 { 2363 throw ply::MeshException( "Error in reading PLY file." 2364 "fread not succeeded." ); 2365 } 2315 2366 if( plyfile->file_type == PLY_BINARY_BE ) 2316 2367 { … … 2326 2377 break; 2327 2378 case PLY_UINT: 2328 fread (ptr, 4, 1, plyfile->fp); 2379 result = fread (ptr, 4, 1, plyfile->fp); 2380 if(result < 1) 2381 { 2382 throw ply::MeshException( "Error in reading PLY file." 2383 "fread not succeeded." ); 2384 } 2329 2385 if( plyfile->file_type == PLY_BINARY_BE ) 2330 2386 { … … 2341 2397 case PLY_FLOAT: 2342 2398 case PLY_FLOAT32: 2343 fread (ptr, 4, 1, plyfile->fp); 2399 result = fread (ptr, 4, 1, plyfile->fp); 2400 if(result < 1) 2401 { 2402 throw ply::MeshException( "Error in reading PLY file." 2403 "fread not succeeded." ); 2404 } 2344 2405 if( plyfile->file_type == PLY_BINARY_BE ) 2345 2406 { … … 2355 2416 break; 2356 2417 case PLY_DOUBLE: 2357 fread (ptr, 8, 1, plyfile->fp); 2358 if( plyfile->file_type == PLY_BINARY_BE ) 2359 { 2360 swap8BE(ptr); 2361 } 2362 else 2363 { 2364 swap8LE(ptr); 2365 } 2366 *double_val = *((double *) ptr); 2367 *int_val = (int) *double_val; 2368 *uint_val = (unsigned int) *double_val; 2369 break; 2418 result = fread (ptr, 8, 1, plyfile->fp); 2419 if(result < 1) 2420 { 2421 throw ply::MeshException( "Error in reading PLY file." 2422 "fread not succeeded." ); 2423 } 2424 if( plyfile->file_type == PLY_BINARY_BE ) 2425 { 2426 swap8BE(ptr); 2427 } 2428 else 2429 { 2430 swap8LE(ptr); 2431 } 2432 *double_val = *((double *) ptr); 2433 *int_val = (int) *double_val; 2434 *uint_val = (unsigned int) *double_val; 2435 break; 2370 2436 default: 2371 fprintf (stderr, "get_binary_item: bad type = %d\n", type); 2372 exit (-1); 2437 char error[100]; 2438 sprintf (error, "get_binary_item: bad type = %d\n", type); 2439 throw ply::MeshException( error ); 2373 2440 } 2374 2441 } … … 2419 2486 case PLY_FLOAT32: 2420 2487 case PLY_DOUBLE: 2421 *double_val = atof(word);2488 *double_val = osg::asciiToDouble(word); 2422 2489 *int_val = (int) *double_val; 2423 2490 *uint_val = (unsigned int) *double_val; … … 2425 2492 2426 2493 default: 2427 fprintf (stderr, "get_ascii_item: bad type = %d\n", type); 2428 exit (-1); 2494 char error[100]; 2495 sprintf (error, "get_ascii_item: bad type = %d\n", type); 2496 throw ply::MeshException( error ); 2429 2497 } 2430 2498 } … … 2497 2565 break; 2498 2566 default: 2499 fprintf (stderr, "store_item: bad type = %d\n", type); 2500 exit (-1); 2567 char error[100]; 2568 sprintf (error, "store_item: bad type = %d\n", type); 2569 throw ply::MeshException( error ); 2501 2570 } 2502 2571 }
