#include <TAPsConverter.hpp>
Static Public Member Functions | |
| static Point3< T > * | ConvertABezierPatchToAQuadMesh (Point3< T > *bPts, int uDegree, int vDegree, int uSub, int vSub) |
| static Point3< T > * | ReadABezierPatchFromFile (char *inFileName, int &uDegree, int &vDegree) |
| static bool | SpecialFnToCreateA10FormatFileFromHegDataFile (int uSize, int vSize) |
| static bool | WriteGridPtsAsQuadMeshToA10FormatFile (Point3< T > *gridPts, int uSize, int vSize, char *outFileName) |
| static bool | WriteGridPtsAsTriMeshToA10FormatFile (Point3< T > *gridPts, int uSize, int vSize, char *outFileName) |
| static bool | WriteGridPtsAsTriMeshToA10FormatFile2 (Point3< T > *gridPts, int uSize, int vSize, char *outFileName) |
Static Private Member Functions | |
| static void | deCasteljauBiLinear (T u, T v, int U, int V, Point3< T > *bPts_ip, Point3< T > *bPts_op, Point3< T > *meshPt) |
| static void | deCasteljauBiLinearRec (T u, T v, int U, int V, Point3< T > *bPts_ip, Point3< T > *bPts_op, Point3< T > *meshPt) |
Definition at line 29 of file TAPsConverter.hpp.
| BEGIN_NAMESPACE_TAPs Point3< T > * Converter< T >::ConvertABezierPatchToAQuadMesh | ( | Point3< T > * | bPts, | |
| int | uDegree, | |||
| int | vDegree, | |||
| int | uSub, | |||
| int | vSub | |||
| ) | [inline, static] |
Definition at line 20 of file TAPsConverter.cpp.
00024 { 00025 //---------------------------------------------------------------- 00026 // Allocate memory for meshPts 00027 int mSize = ( uSub+1 ) * ( vSub+1 ); 00028 Point3<T> * meshPts = new Point3<T>[ mSize ]; 00029 if ( !meshPts ) return NULL; 00030 //---------------------------------------------------------------- 00031 // Allocate memory for bPts 00032 int bSize = (uDegree + 1) * (vDegree + 1); 00033 Point3<T> * bPts1 = new Point3<T>[ bSize ]; 00034 Point3<T> * bPts2 = new Point3<T>[ bSize ]; 00035 if ( !bPts1 || !bPts2 ) { 00036 delete [] bPts1; 00037 delete [] bPts2; 00038 return NULL; 00039 } 00040 //if ( !bPts ) return NULL; 00041 //---------------------------------------------------------------- 00042 T uStep = static_cast<T>(1.0) / static_cast<T>(uSub); 00043 T vStep = static_cast<T>(1.0) / static_cast<T>(vSub); 00044 T u = 0, v; 00045 for ( int i = 0; i <= uSub; ++i, u += uStep ) { 00046 v = 0; 00047 for ( int j = 0; j <= vSub; ++j, v += vStep ) { 00048 // Reset Bezier (control) points 00049 for ( int p = 0; p < bSize; ++p ) { 00050 bPts1[p] = bPts[p]; 00051 } 00052 deCasteljauBiLinear( u, v, uDegree, vDegree, 00053 bPts1, bPts2, &meshPts[i*(vSub+1) + j] ); 00054 } 00055 } 00056 delete [] bPts1; 00057 delete [] bPts2; 00058 return meshPts; 00059 }
| void Converter< T >::deCasteljauBiLinear | ( | T | u, | |
| T | v, | |||
| int | U, | |||
| int | V, | |||
| Point3< T > * | bPts_ip, | |||
| Point3< T > * | bPts_op, | |||
| Point3< T > * | meshPt | |||
| ) | [inline, static, private] |
Definition at line 62 of file TAPsConverter.cpp.
00067 { 00068 deCasteljauBiLinearRec( u, v, U, V, bPts_ip, bPts_op, meshPt ); 00069 }
| void Converter< T >::deCasteljauBiLinearRec | ( | T | u, | |
| T | v, | |||
| int | U, | |||
| int | V, | |||
| Point3< T > * | bPts_ip, | |||
| Point3< T > * | bPts_op, | |||
| Point3< T > * | meshPt | |||
| ) | [inline, static, private] |
Definition at line 72 of file TAPsConverter.cpp.
00077 { 00078 int inc = V + 1; 00079 T one = static_cast<T>( 1.0 ); 00080 for ( int i = 0; i < U; ++i ) { 00081 for ( int j = 0; j < V; ++j ) { 00082 for ( int d = 0; d < 3; ++d ) { 00083 bPts_op[i*V + j][d] = (one-v)*( (one-u)* bPts_ip[i*inc +j][d] 00084 + u * bPts_ip[(i+1)*inc +j][d] ) 00085 + v *( (one-u)* bPts_ip[i*inc +j+1][d] 00086 + u * bPts_ip[(i+1)*inc +j+1][d] ); 00087 } 00088 } 00089 } 00090 //---------------------------------------------------------------- 00091 if ( U == 1 && V == 1 ) { 00092 *meshPt = bPts_op[0]; 00093 } 00094 //else if ( U == 0 || V == 0 ) deCasteljauCurve 00095 else deCasteljauBiLinearRec( u, v, U-1, V-1, bPts_op, bPts_ip, meshPt ); // swap i/p and o/p 00096 }
| Point3< T > * Converter< T >::ReadABezierPatchFromFile | ( | char * | inFileName, | |
| int & | uDegree, | |||
| int & | vDegree | |||
| ) | [inline, static] |
Definition at line 250 of file TAPsConverter.cpp.
00253 { 00254 //---------------------------------------------------------------- 00255 // Open the input file 00256 std::ifstream inFile ( inFileName, ios::in ); 00257 if ( !inFile ) { 00258 std::cerr << inFileName << " could not be opened!" << std::endl; 00259 return NULL; 00260 } 00261 //---------------------------------------------------------------- 00262 int type; 00263 inFile >> type; 00264 if ( type != 5 ) { 00265 std::cerr << inFileName << " does not contain a Bezier patch!" << std::endl; 00266 } 00267 inFile >> uDeg >> vDeg; 00268 //---------------------------------------------------------------- 00269 Point3<T> * bPts = new Point3<T>[ (uDeg+1) * (vDeg+1) ]; 00270 if ( !bPts ) return NULL; 00271 int index = 0; 00272 for ( int u = 0; u <= uDeg; ++u ) { 00273 for ( int v = 0; v <= vDeg; ++v, ++index ) { 00274 inFile >> bPts[index][0] >> bPts[index][1] >> bPts[index][2]; 00275 } 00276 } 00277 inFile.close(); 00278 return bPts; 00279 }
| bool Converter< T >::SpecialFnToCreateA10FormatFileFromHegDataFile | ( | int | uSize, | |
| int | vSize | |||
| ) | [inline, static] |
Definition at line 294 of file TAPsConverter.cpp.
00295 { 00296 //---------------------------------------------------------------- 00297 // Open the input file 00298 std::ifstream inFile ( 00299 "D:/Shared/MyWorksIII/TAPs/Applications/Data/HexDeg3.txt", 00300 ios::in ); 00301 if ( !inFile ) { 00302 std::cerr << "Input file could not be opened!" << std::endl; 00303 return false; 00304 } 00305 //---------------------------------------------------------------- 00306 // Open the output file 00307 std::ofstream outFile ( 00308 "D:/Shared/MyWorksIII/TAPs/Applications/Data/HexDeg3Tri.10", 00309 ios::out ); 00310 if ( !outFile ) { 00311 std::cerr << "Output file could not be opened!" << std::endl; 00312 return false; 00313 } 00314 //---------------------------------------------------------------- 00315 int uDeg, vDeg; 00316 Point3<T> * bPts[6]; 00317 Point3<T> * mPts[6]; 00318 int type; 00319 //---------------------------------------------------------------- 00320 for ( int i = 0; i < 6; ++i ) { 00321 inFile >> type; 00322 if ( type != 5 ) { 00323 std::cerr << "Input file does not contain a Bezier patch!" << std::endl; 00324 } 00325 inFile >> uDeg >> vDeg; 00326 //-------------------------------------------------- 00327 bPts[i] = new Point3<T>[ (uDeg+1) * (vDeg+1) ]; 00328 //-------------------------------------------------- 00329 int index = 0; 00330 for ( int u = 0; u <= uDeg; ++u ) { 00331 for ( int v = 0; v <= vDeg; ++v, ++index ) { 00332 inFile >> bPts[i][index][0] >> bPts[i][index][1] >> bPts[i][index][2]; 00333 } 00334 } 00335 mPts[i] = ConvertABezierPatchToAQuadMesh( bPts[i], uDeg, vDeg, uSize-1, vSize-1 ); 00336 } 00337 inFile.close(); 00338 00339 00340 //---------------------------------------------------------------- 00341 // Write vertices 00342 int noOfVertices = uSize * vSize; // patch# 1 00343 noOfVertices += 2 * uSize * (vSize-1); // patch# 3 & 4 00344 noOfVertices += uSize * (vSize-2); // patch# 2 00345 noOfVertices += 2 * (uSize-2) * (vSize-2); // patch# 5 & 6 00346 int number = 0, number1 = 0; 00347 outFile << noOfVertices << "\n"; // write number of vertices 00348 //---------------------------------------------------------------- 00349 // Write each vertex of patch# 1 00350 for ( int u = 0; u < uSize; ++u ) { 00351 for ( int v = 0; v < vSize; ++v ) { 00352 outFile << setiosflags( ios::fixed | ios::showpoint ) 00353 << ++number << "\t" 00354 << mPts[0][ u*vSize + v ][0] << setprecision( 6 ) << " " 00355 << mPts[0][ u*vSize + v ][1] << " " 00356 << mPts[0][ u*vSize + v ][2] << "\n"; 00357 } 00358 } 00359 //---------------------------------------------------------------- 00360 // Write each vertex of patch# 3 00361 for ( int u = 0; u < uSize; ++u ) { 00362 for ( int v = 1; v < vSize; ++v ) { 00363 outFile << ++number << "\t" 00364 << mPts[2][ u*vSize + v ][0] << " " 00365 << mPts[2][ u*vSize + v ][1] << " " 00366 << mPts[2][ u*vSize + v ][2] << "\n"; 00367 } 00368 } 00369 //---------------------------------------------------------------- 00370 // Write each vertex of patch# 4 00371 for ( int u = 0; u < uSize; ++u ) { 00372 for ( int v = 1; v < vSize; ++v ) { 00373 outFile << ++number << "\t" 00374 << mPts[3][ u*vSize + v ][0] << " " 00375 << mPts[3][ u*vSize + v ][1] << " " 00376 << mPts[3][ u*vSize + v ][2] << "\n"; 00377 } 00378 } 00379 //---------------------------------------------------------------- 00380 // Write each vertex of patch# 2 00381 for ( int u = 0; u < uSize; ++u ) { 00382 for ( int v = 1; v < vSize-1; ++v ) { 00383 outFile << ++number << "\t" 00384 << mPts[1][ u*vSize + v ][0] << " " 00385 << mPts[1][ u*vSize + v ][1] << " " 00386 << mPts[1][ u*vSize + v ][2] << "\n"; 00387 } 00388 } 00389 //---------------------------------------------------------------- 00390 // Write each vertex of patch# 5 00391 for ( int u = 1; u < uSize-1; ++u ) { 00392 for ( int v = 1; v < vSize-1; ++v ) { 00393 outFile << ++number << "\t" 00394 << mPts[4][ u*vSize + v ][0] << " " 00395 << mPts[4][ u*vSize + v ][1] << " " 00396 << mPts[4][ u*vSize + v ][2] << "\n"; 00397 } 00398 } 00399 //---------------------------------------------------------------- 00400 // Write each vertex of patch# 6 00401 for ( int u = 1; u < uSize-1; ++u ) { 00402 for ( int v = 1; v < vSize-1; ++v ) { 00403 outFile << ++number << "\t" 00404 << mPts[5][ u*vSize + v ][0] << " " 00405 << mPts[5][ u*vSize + v ][1] << " " 00406 << mPts[5][ u*vSize + v ][2] << "\n"; 00407 } 00408 } 00409 //---------------------------------------------------------------- 00410 // Write triangle faces (patch# 1) 00411 int inc, inc1; 00412 int noOfFaces = 10 * (uSize-1) * (vSize-1); 00413 noOfFaces += 2 * (uSize-3) * (uSize-3); 00414 noOfFaces += 2 * (uSize-3); 00415 noOfFaces += 2 * (uSize-3); 00416 noOfFaces += 2 * (uSize-3); 00417 noOfFaces += 2 * (uSize-3); 00418 noOfFaces += 8; 00419 outFile << noOfFaces << "\n"; // write number of faces 00420 for ( int u = 0; u < uSize-1; ++u ) { // write each face 00421 for ( int v = 0; v < vSize-1; ++v ) { 00422 outFile << 3 << " " 00423 << u*vSize + v + 1 << " " 00424 << (u+1)*vSize + v + 1 << " " 00425 << (u+1)*vSize + v + 2 << "\n"; 00426 outFile << 3 << " " 00427 << (u+1)*vSize + v + 2 << " " 00428 << u*vSize + v + 2 << " " 00429 << u*vSize + v + 1 << "\n"; 00430 } 00431 } 00432 //---------------------------------------------------------------- 00433 // Write triangle faces (patch# 3) 00434 number = uSize * vSize; // after patch# 1 00435 inc = vSize - 1; 00436 // Write faces 00437 for ( int u = 0; u < uSize-1; ++u ) { 00438 outFile << 3 << "\t" 00439 << u*vSize + vSize << " " 00440 << (u+1)*vSize + vSize << " " 00441 << number + (u+1)*inc + 1 << "\n"; 00442 outFile << 3 << "\t" 00443 << number + (u+1)*inc + 1 << " " 00444 << number + u*inc + 1 << " " 00445 << u*vSize + vSize << "\n"; 00446 } 00447 // Write faces of patch#3 connected with patch#1 00448 for ( int u = 0; u < uSize-1; ++u ) { 00449 for ( int v = 1; v < inc; ++v ) { 00450 outFile << 3 << "\t" 00451 << number + u*inc + v << " " 00452 << number + (u+1)*inc + v << " " 00453 << number + (u+1)*inc + v + 1 << "\n"; 00454 outFile << 3 << "\t" 00455 << number + (u+1)*inc + v + 1 << " " 00456 << number + u*inc + v + 1 << " " 00457 << number + u*inc + v << "\n"; 00458 } 00459 } 00460 //---------------------------------------------------------------- 00461 // Write triangle faces (patch# 4) 00462 number = uSize * vSize; // after patch# 1 00463 number1 = number + uSize * (vSize-1); // after patch# 1 and 3 00464 inc = vSize - 1; 00465 // Write faces 00466 for ( int u = 0; u < uSize-1; ++u ) { 00467 outFile << 3 << "\t" 00468 << number + u*inc + inc << " " 00469 << number + (u+1)*inc + inc << " " 00470 << number1 + (u+1)*inc + 1 << "\n"; 00471 outFile << 3 << "\t" 00472 << number1 + (u+1)*inc + 1 << " " 00473 << number1 + u*inc + 1 << " " 00474 << number + u*inc + inc << "\n"; 00475 } 00476 // Write faces of patch#4 connected with patch#3 00477 for ( int u = 0; u < uSize-1; ++u ) { 00478 for ( int v = 1; v < inc; ++v ) { 00479 outFile << 3 << "\t" 00480 << number1 + u*inc + v << " " 00481 << number1 + (u+1)*inc + v << " " 00482 << number1 + (u+1)*inc + v + 1 << "\n"; 00483 outFile << 3 << "\t" 00484 << number1 + (u+1)*inc + v + 1 << " " 00485 << number1 + u*inc + v + 1 << " " 00486 << number1 + u*inc + v << "\n"; 00487 } 00488 } 00489 //---------------------------------------------------------------- 00490 // Write triangle faces (patch# 2) 00491 number = number1; // after patch# 1 and 3 00492 number1 = number + uSize * (vSize-1); // after patch# 1, 3, and 4 00493 inc = vSize - 1; 00494 inc1 = inc - 1; 00495 // Write faces 00496 for ( int u = 0; u < uSize-1; ++u ) { 00497 for ( int v = 1; v < inc1; ++v ) { 00498 outFile << 3 << "\t" 00499 << number1 + u*inc1 + v << " " 00500 << number1 + (u+1)*inc1 + v << " " 00501 << number1 + (u+1)*inc1 + v + 1 << "\n"; 00502 outFile << 3 << "\t" 00503 << number1 + (u+1)*inc1 + v + 1 << " " 00504 << number1 + u*inc1 + v + 1 << " " 00505 << number1 + u*inc1 + v << "\n"; 00506 } 00507 } 00508 // Write faces of patch#2 connected with patch#4 00509 for ( int u = 0; u < uSize-1; ++u ) { 00510 outFile << 3 << "\t" 00511 << number + u*inc + inc << " " 00512 << number + (u+1)*inc + inc << " " 00513 << number1 + (u+1)*inc1 + 1 << "\n"; 00514 outFile << 3 << "\t" 00515 << number1 + (u+1)*inc1 + 1 << " " 00516 << number1 + u*inc1 + 1 << " " 00517 << number + u*inc + inc << "\n"; 00518 } 00519 // Write faces of patch#2 connected with patch#1 00520 for ( int u = 0; u < uSize-1; ++u ) { 00521 outFile << 3 << "\t" 00522 << number1 + u*inc1 + inc1 << " " 00523 << number1 + (u+1)*inc1 + inc1 << " " 00524 << (u+1)*vSize + 1 << "\n"; 00525 outFile << 3 << "\t" 00526 << number1 + u*inc1 + inc1 << " " 00527 << (u+1)*vSize + 1 << " " 00528 << u*vSize + 1 << "\n"; 00529 } 00530 //---------------------------------------------------------------- 00531 // Write triangle faces (patch# 5) 00532 number = number1; // after patch# 1, 3, and 4 00533 number1 = number + uSize * (vSize-2); // after patch# 1, 3, 4, and 2 00534 inc = vSize - 1; 00535 inc1 = inc - 1; 00536 // Write faces 00537 for ( int u = 0; u < uSize-3; ++u ) { 00538 for ( int v = 1; v < inc1; ++v ) { 00539 outFile << 3 << "\t" 00540 << number1 + u*inc1 + v << " " 00541 << number1 + (u+1)*inc1 + v << " " 00542 << number1 + (u+1)*inc1 + v + 1 << "\n"; 00543 outFile << 3 << "\t" 00544 << number1 + (u+1)*inc1 + v + 1 << " " 00545 << number1 + u*inc1 + v + 1 << " " 00546 << number1 + u*inc1 + v << "\n"; 00547 } 00548 } 00549 // Write faces of patch#5 connected with patch#1 00550 --inc1; 00551 for ( int v = 1; v < vSize-2; ++v ) { 00552 outFile << 3 << "\t" 00553 << number1 + (uSize-2)*inc1 + v << " " 00554 << v + 1 << " " 00555 << v + 2 << "\n"; 00556 outFile << 3 << "\t" 00557 << v + 2 << " " 00558 << number1 + (uSize-2)*inc1 + v + 1 << " " 00559 << number1 + (uSize-2)*inc1 + v << "\n"; 00560 } 00561 // Write faces of patch#5 connected with patch#3 00562 number = uSize * vSize; // vertex after patch#1 00563 ++inc1; 00564 for ( int u = 0; u < uSize-3; ++u ) { 00565 int op = vSize - 3 - u; 00566 outFile << 3 << "\t" 00567 << number1 + (uSize-2)*u + inc1 << " " 00568 << number1 + (uSize-2)*(u+1) + inc1 << " " 00569 << number + op << "\n"; 00570 outFile << 3 << "\t" 00571 << number + op << " " 00572 << number + op + 1 << " " 00573 << number1 + (uSize-2)*u + inc1 << "\n"; 00574 } 00575 // Write faces of patch#5 connected with patch#4 00576 number = uSize * (vSize + (vSize-1)); // vertex after patch# 1 and 3 00577 for ( int v = 1; v < vSize-2; ++v ) { 00578 int op = vSize - 1 - v; 00579 outFile << 3 << "\t" 00580 << number + op << " " 00581 << number1 + v << " " 00582 << number1 + v + 1 << "\n"; 00583 outFile << 3 << "\t" 00584 << number1 + v + 1 << " " 00585 << number + op - 1 << " " 00586 << number + op << "\n"; 00587 } 00588 // Write faces of patch#5 connected with patch#2 00589 number = uSize * (vSize + (vSize-1)*2); // vertex after patch#1, 3, and 4 00590 for ( int u = 1; u < uSize-2; ++u ) { 00591 outFile << 3 << "\t" 00592 << number1 + (uSize-2)*u + 1 << " " 00593 << number + u << " " 00594 << number + u + 1 << "\n"; 00595 outFile << 3 << "\t" 00596 << number1 + (uSize-2)*u + 1 << " " 00597 << number1 + (uSize-2)*(u-1) + 1 << " " 00598 << number + u << "\n"; 00599 } 00600 // Write cornors of patch#5 00601 { 00602 //---------------------------------------- 00603 // Bottom left 00604 //number = uSize * (vSize + (vSize-1)*2); // vertex after patch#1, 3, and 4 00605 int v1 = number + vSize - 2; 00606 int v2 = 1; 00607 int v3 = 2; 00608 int v4 = number1 + (uSize-2)*(vSize-3) + 1; 00609 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00610 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00611 //---------------------------------------- 00612 // Bottom right 00613 v1 = number1 + (uSize-2)*(vSize-2); 00614 v2 = vSize - 1; 00615 v3 = vSize; 00616 v4 = uSize*vSize + 1; 00617 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00618 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00619 //---------------------------------------- 00620 // Top left 00621 v1 = uSize * (vSize + (vSize-1)) + vSize - 1; 00622 v2 = uSize * (vSize + (vSize-1)*2) + 1; 00623 v3 = number1 + 1; 00624 v4 = v1 - 1; 00625 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00626 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00627 //---------------------------------------- 00628 // Top right 00629 v1 = uSize * (vSize + (vSize-1)) + 1; 00630 v2 = number1 + vSize - 2; 00631 v3 = uSize*vSize + vSize - 2; 00632 v4 = uSize*vSize + vSize - 1; 00633 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00634 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00635 } 00636 //---------------------------------------------------------------- 00637 // Write triangle faces (patch# 6) 00638 number = uSize * (vSize + (vSize-1)*2 + (vSize-2)); // after patch# 1, 3, 4, and 2 00639 number1 = number + (uSize-2)*(vSize-2); // after patch# 1, 3, 4, 2, and 5 00640 inc = vSize - 1; 00641 inc1 = inc - 1; 00642 // Write faces 00643 for ( int u = 0; u < uSize-3; ++u ) { 00644 for ( int v = 1; v < inc1; ++v ) { 00645 outFile << 3 << "\t" 00646 << number1 + u*inc1 + v << " " 00647 << number1 + (u+1)*inc1 + v << " " 00648 << number1 + (u+1)*inc1 + v + 1 << "\n"; 00649 outFile << 3 << "\t" 00650 << number1 + (u+1)*inc1 + v + 1 << " " 00651 << number1 + u*inc1 + v + 1 << " " 00652 << number1 + u*inc1 + v << "\n"; 00653 } 00654 } 00655 // Write faces of patch#6 connected with patch#1 00656 for ( int v = 1; v < vSize-2; ++v ) { 00657 outFile << 3 << "\t" 00658 << uSize*(vSize-1) + v + 1 << " " 00659 << number1 + v << " " 00660 << number1 + v + 1 << "\n"; 00661 outFile << 3 << "\t" 00662 << number1 + v + 1 << " " 00663 << uSize*(vSize-1) + v + 2 << " " 00664 << uSize*(vSize-1) + v + 1 << "\n"; 00665 } 00666 // Write faces of patch#6 connected with patch#3 00667 number = uSize * vSize + (uSize-1)*(vSize-1) + 2; // vertex after patch#1 + some of patch#3 00668 for ( int u = 0; u < uSize-3; ++u ) { 00669 outFile << 3 << "\t" 00670 << number1 + (uSize-2)*u + inc1 << " " 00671 << number1 + (uSize-2)*(u+1) + inc1 << " " 00672 << number + u << "\n"; 00673 outFile << 3 << "\t" 00674 << number + u << " " 00675 << number + u - 1 << " " 00676 << number1 + (uSize-2)*u + inc1 << "\n"; 00677 } 00678 // Write faces of patch#6 connected with patch#4 00679 number = uSize * (vSize + (vSize-1)); // vertex after patch#1 and 3 00680 number += (uSize-1)*(vSize-1); // and some of patch#4 00681 for ( int v = 1; v < vSize-2; ++v ) { 00682 int op = vSize - v - 2; 00683 outFile << 3 << "\t" 00684 << number1 + (uSize-2)*(vSize-3) + v << " " 00685 << number + op + 1 << " " 00686 << number + op << "\n"; 00687 outFile << 3 << "\t" 00688 << number + op << " " 00689 << number1 + (uSize-2)*(vSize-3) + v + 1<< " " 00690 << number1 + (uSize-2)*(vSize-3) + v << "\n"; 00691 } 00692 // Write faces of patch#6 connected with patch#2 00693 number = uSize * (vSize + (vSize-1)*2); // vertex after patch#1, 3, and 4 00694 number += (uSize)*(vSize-3); // and some of patch#2 00695 for ( int u = 0; u < uSize-3; ++u ) { 00696 int op = vSize - u; 00697 outFile << 3 << "\t" 00698 << number + op << " " 00699 << number + op - 1 << " " 00700 << number1 + (u+1)*(vSize-2) + 1 << "\n"; 00701 outFile << 3 << "\t" 00702 << number1 + (u+1)*(vSize-2) + 1 << " " 00703 << number1 + (u)*(vSize-2) + 1 << " " 00704 << number + op << "\n"; 00705 } 00706 // Write cornors of patch#6 00707 { 00708 //---------------------------------------- 00709 // Top left 00710 number = (uSize-1) * (vSize); 00711 int v1 = number + 1; 00712 int v2 = uSize * (vSize + (vSize-1)*2) + uSize*(vSize-2); 00713 int v3 = number1 + 1; 00714 int v4 = number + 2; 00715 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00716 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00717 //---------------------------------------- 00718 // Top right 00719 number = (uSize) * (vSize); 00720 v1 = number - 1; 00721 v2 = number1 + vSize - 2; 00722 v3 = uSize*vSize + (uSize-1)*(vSize-1) + 1; 00723 v4 = uSize * vSize; 00724 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00725 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00726 //---------------------------------------- 00727 // Bottom left 00728 number = uSize * (vSize + (vSize-1)) + (uSize)*(vSize-1); 00729 v1 = uSize * (vSize + (vSize-1)*2) + (uSize-1)*(vSize-2) + 1; 00730 v2 = number; 00731 v3 = number - 1; 00732 v4 = number1 + (uSize-2)*(vSize-3) + 1; 00733 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00734 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00735 //---------------------------------------- 00736 // Bottom right 00737 number = uSize*vSize + (uSize)*(vSize-1); 00738 v1 = number1 + (uSize-2)*(vSize-2); 00739 v2 = uSize * (vSize + (vSize-1)) + (uSize-1)*(vSize-1) + 1; 00740 v3 = number; 00741 v4 = number - 1; 00742 outFile << 3 << "\t" << v1 << " " << v2 << " " << v3 << "\n"; 00743 outFile << 3 << "\t" << v3 << " " << v4 << " " << v1 << "\n"; 00744 } 00745 //---------------------------------------------------------------- 00746 for ( int i = 0; i < 6; ++i ) { 00747 delete [] bPts[i]; 00748 delete [] mPts[i]; 00749 } 00750 outFile.close(); 00751 return true; 00752 }
| bool Converter< T >::WriteGridPtsAsQuadMeshToA10FormatFile | ( | Point3< T > * | gridPts, | |
| int | uSize, | |||
| int | vSize, | |||
| char * | outFileName | |||
| ) | [inline, static] |
Definition at line 99 of file TAPsConverter.cpp.
00101 { 00102 //---------------------------------------------------------------- 00103 // Open the output file 00104 std::ofstream outFile ( outFileName, ios::out ); 00105 if ( !outFile ) { 00106 std::cerr << "File could not be opened" << std::endl; 00107 return false; 00108 } 00109 //---------------------------------------------------------------- 00110 // Write vertices 00111 outFile << uSize * vSize << "\n"; // write number of vertices 00112 int number = 0; 00113 for ( int u = 0; u < uSize; ++u ) { // write each vertex 00114 for ( int v = 0; v < vSize; ++v ) { 00115 outFile << ++number << "\t" 00116 << gridPts[ u*vSize + v ][0] << "\t" 00117 << gridPts[ u*vSize + v ][1] << "\t" 00118 << gridPts[ u*vSize + v ][2] << "\n"; 00119 } 00120 } 00121 //---------------------------------------------------------------- 00122 // Write quad faces 00123 int vDeg = vSize - 1; 00124 outFile << (uSize-1) * vDeg << "\n"; // write number of faces 00125 for ( int u = 0; u < uSize-1; ++u ) { // write each face 00126 for ( int v = 0; v < vSize-1; ++v ) { 00127 outFile << 4 << "\t" 00128 << u*vSize + v + 1 << " " 00129 << (u+1)*vSize + v + 1 << " " 00130 << (u+1)*vSize + v + 2 << " " 00131 << u*vSize + v + 2 << "\n"; 00132 } 00133 } 00134 outFile.close(); 00135 return true; 00136 }
| bool Converter< T >::WriteGridPtsAsTriMeshToA10FormatFile | ( | Point3< T > * | gridPts, | |
| int | uSize, | |||
| int | vSize, | |||
| char * | outFileName | |||
| ) | [inline, static] |
Definition at line 139 of file TAPsConverter.cpp.
00141 { 00142 std::ofstream outFile ( outFileName, ios::out ); 00143 if ( !outFile ) { 00144 std::cerr << outFileName << " could not be opened!" << std::endl; 00145 return false; 00146 } 00147 //---------------------------------------------------------------- 00148 // Write vertices 00149 outFile << uSize * vSize << "\n"; // write number of vertices 00150 int number = 0; 00151 for ( int u = 0; u < uSize; ++u ) { // write each vertex 00152 for ( int v = 0; v < vSize; ++v ) { 00153 outFile << ++number << "\t" 00154 << gridPts[ u*vSize + v ][0] << "\t" 00155 << gridPts[ u*vSize + v ][1] << "\t" 00156 << gridPts[ u*vSize + v ][2] << "\n"; 00157 } 00158 } 00159 //---------------------------------------------------------------- 00160 // Write triangle faces 00161 int vDeg = vSize - 1; 00162 outFile << (uSize-1) * vDeg * 2 << "\n"; // write number of faces 00163 for ( int u = 0; u < uSize-1; ++u ) { // write each face 00164 for ( int v = 0; v < vSize-1; ++v ) { 00165 outFile << 3 << "\t" 00166 << u*vSize + v + 1 << " " 00167 << (u+1)*vSize + v + 1 << " " 00168 << (u+1)*vSize + v + 2 << "\n"; 00169 outFile << 3 << "\t" 00170 << (u+1)*vSize + v + 2 << " " 00171 << u*vSize + v + 2 << " " 00172 << u*vSize + v + 1 << "\n"; 00173 } 00174 } 00175 outFile.close(); 00176 return true; 00177 }
| bool Converter< T >::WriteGridPtsAsTriMeshToA10FormatFile2 | ( | Point3< T > * | gridPts, | |
| int | uSize, | |||
| int | vSize, | |||
| char * | outFileName | |||
| ) | [inline, static] |
Definition at line 180 of file TAPsConverter.cpp.
00182 { 00183 //---------------------------------------------------------------- 00184 // Open the output file 00185 std::ofstream outFile ( outFileName, ios::out ); 00186 if ( !outFile ) { 00187 std::cerr << outFileName << " could not be opened!" << std::endl; 00188 return false; 00189 } 00190 //---------------------------------------------------------------- 00191 // Write vertices 00192 int vDeg = vSize - 1; 00193 int noOfExtraVertices = (uSize-1) * vDeg; 00194 // write number of vertices 00195 outFile << uSize * vSize + noOfExtraVertices << "\n"; 00196 int number = 0; 00197 // write each vertex 00198 for ( int u = 0; u < uSize; ++u ) { 00199 for ( int v = 0; v < vSize; ++v ) { 00200 outFile << ++number << "\t" 00201 << gridPts[ u*vSize + v ][0] << "\t" 00202 << gridPts[ u*vSize + v ][1] << "\t" 00203 << gridPts[ u*vSize + v ][2] << "\n"; 00204 } 00205 } 00206 // write each extra vertex 00207 for ( int u = 0; u < uSize-1; ++u ) { 00208 for ( int v = 0; v < vSize-1; ++v ) { 00209 Vector3<T> vertex = ( 00210 gridPts[ u*vSize + v ] + 00211 gridPts[ (u+1)*vSize + v ] + 00212 gridPts[ (u+1)*vSize + v + 1 ] + 00213 gridPts[ u*vSize + v + 1 ] 00214 ) / static_cast<T>(4); 00215 outFile << ++number << "\t" 00216 << vertex[0] << "\t" 00217 << vertex[1] << "\t" 00218 << vertex[2] << "\n"; 00219 } 00220 } 00221 //---------------------------------------------------------------- 00222 // Write triangle faces 00223 outFile << (uSize-1) * vDeg * 4 << "\n"; // write number of faces 00224 number = uSize*vSize + 1; 00225 for ( int u = 0; u < uSize-1; ++u ) { // write each face 00226 for ( int v = 0; v < vSize-1; ++v, ++number ) { 00227 outFile << 3 << "\t" 00228 << u*vSize + v + 1 << " " 00229 << (u+1)*vSize + v + 1 << " " 00230 << number << "\n"; 00231 outFile << 3 << "\t" 00232 << (u+1)*vSize + v + 1 << " " 00233 << (u+1)*vSize + v + 2 << " " 00234 << number << "\n"; 00235 outFile << 3 << "\t" 00236 << (u+1)*vSize + v + 2 << " " 00237 << u*vSize + v + 2 << " " 00238 << number << "\n"; 00239 outFile << 3 << "\t" 00240 << u*vSize + v + 2 << " " 00241 << u*vSize + v + 1 << " " 00242 << number << "\n"; 00243 } 00244 } 00245 outFile.close(); 00246 return true; 00247 }
1.5.6