aboutsummaryrefslogtreecommitdiff
path: root/tool_src/BspLib/ObjectBspFormat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tool_src/BspLib/ObjectBspFormat.cpp')
-rw-r--r--tool_src/BspLib/ObjectBspFormat.cpp213
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
+
+//-----------------------------------------------------------------------------