Converter< T > Class Template Reference

#include <TAPsConverter.hpp>

List of all members.

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)


Detailed Description

template<typename T>
class Converter< T >

Definition at line 29 of file TAPsConverter.hpp.


Member Function Documentation

template<typename T>
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 }

template<typename T>
void Converter< T >::deCasteljauBiLinear ( u,
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 }

template<typename T>
void Converter< T >::deCasteljauBiLinearRec ( u,
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 }

template<typename T>
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 }

template<typename T>
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 }

template<typename T>
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 }

template<typename T>
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 }

template<typename T>
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 }


The documentation for this class was generated from the following files:

Generated on Mon Oct 13 11:44:34 2008 for TAPs by  doxygen 1.5.6