//----------------------------------------------------------------------------- // BSPLIB MODULE: ObjectBspFormat.cpp // // Copyright (c) 1996-1997 by Markus Hadwiger // All Rights Reserved. //----------------------------------------------------------------------------- // bsplib header files #include "BspLibDefs.h" #include "ObjectBspFormat.h" BSPLIB_NAMESPACE_BEGIN // write list of vertices ----------------------------------------------------- // int ObjectBspFormat::WriteVertexList( FileAccess& output ) { if ( numvertices > 0 ) { output.WriteLine( "; list of all vertices comprising the object -----------------------------\n" ); output.WriteLine( "; numbering starts with 1\n" ); sprintf( line, "%s\n", _vertices_str ); output.WriteLine( line ); for ( int i = 0; i < numvertices; i++ ) { sprintf( line, "%f,\t%f,\t%f\t; %d\n", vertexlist[ i ].getX(), vertexlist[ i ].getY(), vertexlist[ i ].getZ(), i + 1 ); output.WriteLine( line ); } output.WriteLine( "\n" ); } return output.Status(); } // write list of polygons ----------------------------------------------------- // int ObjectBspFormat::WritePolygonList( FileAccess& output ) { if ( numbsppolygons > 0 ) { output.WriteLine( "; list of all polygons (faces split into pieces by bsp compiler) ---------\n" ); output.WriteLine( "; numbering starts with 1\n" ); sprintf( line, "%s\n", _polygons_str ); output.WriteLine( line ); int i = 0; Polygon *poly; while ( !bsptree.TreeEmpty() && ( ( poly = bsptree->FetchBSPPolygon( i ) ) != NULL ) ) { poly->WriteVertexList( output, FALSE ); sprintf( line, "\t\t; %d\n", ++i ); output.WriteLine( line ); } output.WriteLine( "\n" ); if ( i < numpolygons_before_bsp ) ErrorMessage( "***ERROR*** Polygon missing in BSP tree (ObjectBspFormat::WritePolygonList())." ); } return output.Status(); } // write list of faces (each face consists of one to many polygons) ----------- // int ObjectBspFormat::WriteFaceList( FileAccess& output ) { if ( numfaces > 0 ) { output.WriteLine( "; list of polygons comprising each face ----------------------------------\n" ); output.WriteLine( "; numbering starts with 1\n" ); sprintf( line, "%s\n", _faces_str ); output.WriteLine( line ); for ( int i = 0; i < numfaces; i++ ) { PolygonList facepolylist( this ); if ( !bsptree.TreeEmpty() ) bsptree->FetchFacePolygons( i, facepolylist ); facepolylist.WritePolyList( output, i + 1 ); } output.WriteLine( "\n" ); } return output.Status(); } // write surface properties of faces ------------------------------------------ // int ObjectBspFormat::WriteFaceProperties( FileAccess& output ) { if ( numfaces > 0 ) { output.WriteLine( "; face material properties (color, texture, etc.) ------------------------\n" ); sprintf( line, "%s\n", _faceproperties_str ); output.WriteLine( line ); for ( int i = 0; i < numfaces; i++ ) facelist[ i ].WriteFaceInfo( output ); output.WriteLine( "\n" ); } return output.Status(); } // write face normals --------------------------------------------------------- // int ObjectBspFormat::WriteNormals( FileAccess& output ) { if ( numnormals > 0 ) { output.WriteLine( "; face normals -----------------------------------------------------------\n" ); sprintf( line, "%s\n", _facenormals_str ); output.WriteLine( line ); for ( int i = 0; i < numfaces /*numnormals*/; i++ ) facelist[ i ].WriteNormalInfo( output ); output.WriteLine( "\n" ); } return output.Status(); } // write list of textures ----------------------------------------------------- // int ObjectBspFormat::WriteTextureList( FileAccess& output ) { if ( numtextures > 0 ) { output.WriteLine( "; texture definitions (sizes and filenames) ------------------------------\n" ); sprintf( line, "%s\n", _textures_str ); output.WriteLine( line ); for ( int i = 0; i < numtextures; i++ ) texturelist[ i ].WriteInfo( output ); } return output.Status(); } // write list of mapping coordinates (correspondences) ------------------------ // int ObjectBspFormat::WriteMappingList( FileAccess& output ) { if ( numtexmappedfaces > 0 ) { output.WriteLine( "; mapping parameters for textured faces ----------------------------------\n" ); sprintf( line, "%s\n", _correspondences_str ); output.WriteLine( line ); output.WriteLine( "\n" ); int curfaceno = 0; for ( int i = 0; i < numtexmappedfaces; i++, curfaceno++ ) { while ( !facelist[ curfaceno ].FaceTexMapped() ) curfaceno++; sprintf( line, "; correspondence %d (face %d)\n", i + 1, curfaceno + 1 ); output.WriteLine( line ); facelist[ curfaceno ].WriteMappingInfo( output ); } } return output.Status(); } // write textual representation of bsp tree to output file -------------------- // int ObjectBspFormat::WriteBSPTree( FileAccess& output ) { if ( !bsptree.TreeEmpty() ) { output.WriteLine( "; polygon bsp tree -------------------------------------------------------\n" ); sprintf( line, "%s\n", _bsptree_str ); output.WriteLine( line ); bsptree->WriteBSPTree( output ); output.WriteLine( "\n" ); } return output.Status(); } // string scratchpad ---------------------------------------------------------- // char ObjectBspFormat::line[ 1024 ] = ""; BSPLIB_NAMESPACE_END //-----------------------------------------------------------------------------