diff options
Diffstat (limited to 'tool_src/BspLib/ObjectBspFormat.cpp')
| -rw-r--r-- | tool_src/BspLib/ObjectBspFormat.cpp | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/tool_src/BspLib/ObjectBspFormat.cpp b/tool_src/BspLib/ObjectBspFormat.cpp new file mode 100644 index 0000000..12082f0 --- /dev/null +++ b/tool_src/BspLib/ObjectBspFormat.cpp @@ -0,0 +1,213 @@ +//----------------------------------------------------------------------------- +// 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 + +//----------------------------------------------------------------------------- |
