// writes out the vertex list for a planar feature bool VRML_LAYER::WriteVertices( double aZcoord, std::ofstream& aOutFile, int aPrecision ) { if( ordmap.size() < 3 ) { error = "WriteVertices(): not enough vertices"; return false; } if( aPrecision < 4 ) aPrecision = 4; int i, j; VERTEX_3D* vp = getVertexByIndex( ordmap[0], pholes ); if( !vp ) return false; std::string strx, stry, strz; FormatDoublet( vp->x + offsetX, vp->y + offsetY, aPrecision, strx, stry ); FormatSinglet( aZcoord, aPrecision, strz ); aOutFile << strx << " " << stry << " " << strz; for( i = 1, j = ordmap.size(); i < j; ++i ) { vp = getVertexByIndex( ordmap[i], pholes ); if( !vp ) return false; FormatDoublet( vp->x + offsetX, vp->y + offsetY, aPrecision, strx, stry ); if( i & 1 ) aOutFile << ", " << strx << " " << stry << " " << strz; else aOutFile << ",\n" << strx << " " << stry << " " << strz; } return !aOutFile.fail(); }
// writes out the vertex list for a 3D feature; top and bottom are the // Z values for the top and bottom; top must be > bottom bool VRML_LAYER::Write3DVertices( double aTopZ, double aBottomZ, std::ofstream& aOutFile, int aPrecision ) { if( ordmap.size() < 3 ) { error = "Write3DVertices(): insufficient vertices"; return false; } if( aPrecision < 4 ) aPrecision = 4; if( aTopZ <= aBottomZ ) { error = "Write3DVertices(): top <= bottom"; return false; } int i, j; VERTEX_3D* vp = getVertexByIndex( ordmap[0], pholes ); if( !vp ) return false; std::string strx, stry, strz; FormatDoublet( vp->x + offsetX, vp->y + offsetY, aPrecision, strx, stry ); FormatSinglet( aTopZ, aPrecision, strz ); aOutFile << strx << " " << stry << " " << strz; for( i = 1, j = ordmap.size(); i < j; ++i ) { vp = getVertexByIndex( ordmap[i], pholes ); if( !vp ) return false; FormatDoublet( vp->x + offsetX, vp->y + offsetY, aPrecision, strx, stry ); if( i & 1 ) aOutFile << ", " << strx << " " << stry << " " << strz; else aOutFile << ",\n" << strx << " " << stry << " " << strz; } // repeat for the bottom layer vp = getVertexByIndex( ordmap[0], pholes ); FormatDoublet( vp->x + offsetX, vp->y + offsetY, aPrecision, strx, stry ); FormatSinglet( aBottomZ, aPrecision, strz ); bool endl; if( i & 1 ) { aOutFile << ", " << strx << " " << stry << " " << strz; endl = false; } else { aOutFile << ",\n" << strx << " " << stry << " " << strz; endl = true; } for( i = 1, j = ordmap.size(); i < j; ++i ) { vp = getVertexByIndex( ordmap[i], pholes ); FormatDoublet( vp->x + offsetX, vp->y + offsetY, aPrecision, strx, stry ); if( endl ) { aOutFile << ", " << strx << " " << stry << " " << strz; endl = false; } else { aOutFile << ",\n" << strx << " " << stry << " " << strz; endl = true; } } return !aOutFile.fail(); }
// writes out the vertex list for a 3D feature; top and bottom are the // Z values for the top and bottom; top must be > bottom bool VRML_LAYER::Write3DVertices( double top, double bottom, FILE* fp ) { if( !fp ) { error = "Write3DVertices(): NULL file pointer"; return false; } if( ordmap.size() < 3 ) { error = "Write3DVertices(): insufficient vertices"; return false; } if( top <= bottom ) { error = "Write3DVertices(): top <= bottom"; return false; } int i, j; VERTEX_3D* vp = getVertexByIndex( ordmap[0], pholes ); if( !vp ) return false; std::string strx, stry, strz; FormatDoublet( vp->x, vp->y, 6, strx, stry ); FormatSinglet( top, 6, strz ); fprintf( fp, "%s %s %s", strx.c_str(), stry.c_str(), strz.c_str() ); for( i = 1, j = ordmap.size(); i < j; ++i ) { vp = getVertexByIndex( ordmap[i], pholes ); if( !vp ) return false; FormatDoublet( vp->x, vp->y, 6, strx, stry ); if( i & 1 ) fprintf( fp, ", %s %s %s", strx.c_str(), stry.c_str(), strz.c_str() ); else fprintf( fp, ",\n%s %s %s", strx.c_str(), stry.c_str(), strz.c_str() ); } // repeat for the bottom layer vp = getVertexByIndex( ordmap[0], pholes ); FormatDoublet( vp->x, vp->y, 6, strx, stry ); FormatSinglet( bottom, 6, strz ); bool endl; if( i & 1 ) { fprintf( fp, ", %s %s %s", strx.c_str(), stry.c_str(), strz.c_str() ); endl = false; } else { fprintf( fp, ",\n%s %s %s", strx.c_str(), stry.c_str(), strz.c_str() ); endl = true; } for( i = 1, j = ordmap.size(); i < j; ++i ) { vp = getVertexByIndex( ordmap[i], pholes ); FormatDoublet( vp->x, vp->y, 6, strx, stry ); if( endl ) { fprintf( fp, ", %s %s %s", strx.c_str(), stry.c_str(), strz.c_str() ); endl = false; } else { fprintf( fp, ",\n%s %s %s", strx.c_str(), stry.c_str(), strz.c_str() ); endl = true; } } return true; }