aboutsummaryrefslogtreecommitdiff
path: root/tool_src/BspLib/BspObject.h
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
committerFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
commitc068f22329d5cc722622a2183bbb22eef2093df7 (patch)
tree12d56c1aede67988a55e241364606bfbb4dba933 /tool_src/BspLib/BspObject.h
downloadopenparsec-c068f22329d5cc722622a2183bbb22eef2093df7.tar.xz
openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.zip
initial importHEADmain
Diffstat (limited to 'tool_src/BspLib/BspObject.h')
-rw-r--r--tool_src/BspLib/BspObject.h258
1 files changed, 258 insertions, 0 deletions
diff --git a/tool_src/BspLib/BspObject.h b/tool_src/BspLib/BspObject.h
new file mode 100644
index 0000000..c2dfdd8
--- /dev/null
+++ b/tool_src/BspLib/BspObject.h
@@ -0,0 +1,258 @@
+//-----------------------------------------------------------------------------
+// BSPLIB HEADER: BspObject.h
+//
+// Copyright (c) 1996-1998 by Markus Hadwiger
+// All Rights Reserved.
+//-----------------------------------------------------------------------------
+
+#ifndef _BSPOBJECT_H_
+#define _BSPOBJECT_H_
+
+// bsplib header files
+#include "BspLibDefs.h"
+#include "SystemIO.h"
+#include "Chunk.h"
+#include "Face.h"
+#include "Mapping.h"
+#include "PolygonList.h"
+#include "BSPTree.h"
+#include "Texture.h"
+#include "Transform3.h"
+#include "Vertex.h"
+
+
+BSPLIB_NAMESPACE_BEGIN
+
+
+class BoundingBox;
+
+
+// base class for BspObject providing data members ----------------------------
+//
+class BspObjectInfo {
+
+ friend class BspObject;
+
+private:
+ BspObjectInfo();
+ ~BspObjectInfo() { }
+
+public:
+ int getNumVertices() const { return numvertices; }
+ int getNumPolygons() const { return numpolygons; }
+ int getNumFaces() const { return numfaces; }
+
+ int getInputVertices() const { return numvertices_in; }
+ int getInputPolygons() const { return numpolygons_in; }
+ int getInputFaces() const { return numfaces_in; }
+
+ int getBspPolygons() const { return numbsppolygons; }
+ int getPreBspPolygons() const { return numpolygons_before_bsp; }
+
+ int getNumTextures() const { return numtextures; }
+ int getNumMappings() const { return numcorrespondences; }
+ int getNumNormals() const { return numnormals; }
+ int getNumTexturedFaces() const { return numtexmappedfaces; }
+
+ int getNumTraceVertices() const { return numtracevertices; }
+ int getNumMultiVertices() const { return nummultvertices; }
+ int getNumSplitQuads() const { return numsplitquadrilaterals; }
+
+protected:
+ int numvertices; // number of vertices in vertexlist
+ int numpolygons; // number of polygons in polygonlist
+ int numfaces; // number of faces in facelist
+ int numtextures; // number of textures in texturelist
+ int numcorrespondences; // number of correspondences in mappinglist
+
+ int numnormals; // number of faces with valid normals
+ int numtexmappedfaces; // number of texture mapped faces
+
+ int numvertices_in; // copy of numvertices directly after parse
+ int numpolygons_in; // copy of numpolygons directly after parse
+ int numfaces_in; // copy of numfaces directly after parse
+
+ int numbsppolygons; // number of polygons contained in bsp tree
+ int numpolygons_before_bsp; // copy of numpolygons before start of bsp compilation
+
+ int numtracevertices; // number of vertices for edge tracing
+ int nummultvertices; // number of multiply contained vertices
+ int numsplitquadrilaterals; // number of quadrilaterals split into triangles
+};
+
+
+// class describing a generic 3-D object in BspLib ----------------------------
+//
+class BspObject : public BspObjectInfo, public virtual SystemIO {
+
+ friend class BoundingBox;
+ friend class BspObjectListRep;
+ friend class Face;
+ friend class ObjectBSPNode;
+ friend class Polygon;
+
+ friend class VrmlFile;
+
+public:
+ BspObject();
+ ~BspObject() { delete objectname; delete next; }
+
+ BspObject( const BspObject& copyobj );
+ BspObject& operator =( const BspObject& copyobj );
+
+ // merge another BspObject into this object. this renumbers the other
+ // object's vertices, faces, polygons, and vertexindexes in polygons
+ void MergeObjects( BspObject *mergeobj );
+
+ void CollapseObjectList(); // collapse entire list into this object
+
+ BoundingBox* BuildBoundingBoxList(); // build a list of bounding boxes
+
+ BSPNode* BuildBSPTree(); // build bsp tree from polygon list
+ BSPNode* BuildBSPTreeFromFlat(); // build bsp tree from flat representation
+
+ int BspTreeAvailable(); // any bsp tree available?
+ int BSPTreeAvailable(); // linked bsp tree available?
+ int BSPTreeFlatAvailable(); // flat bsp tree available?
+
+ // processing functions (typically passed through to primitives)
+ void CalcBoundingBoxes(); // operates on bsp tree only
+ void CalcSeparatorPlanes(); // operates on bsp tree only
+ void CheckEdges(); // operates on bsp tree only
+ void CheckPolygonPlanes(); // operates on polygon list only
+ void CheckVertices( int verbose ); // scans entire vertex list
+ void CalcPlaneNormals(); // operates on polygon list only
+ void CheckParsedData(); // some consistency checks
+ void UpdateAttributeNumbers(); // calc length of lists
+
+ int ConvertColorIndexesToRGB( char *palette, int changemode );
+
+ // return bounding box extents for this object
+ void CalcBoundingBox( Vertex3& minvertex, Vertex3& maxvertex );
+
+ // display some object statistics
+ void DisplayStatistics();
+
+ // ASCII output functions that have to be implemented by
+ // derived ObjectXXXFormat classes.
+ // must not be pure virtual!
+ virtual int WriteVertexList( FileAccess& fp ) { return FALSE; }
+ virtual int WritePolygonList( FileAccess& fp ) { return FALSE; }
+ virtual int WriteFaceList( FileAccess& fp ) { return FALSE; }
+ virtual int WriteFaceProperties( FileAccess& fp ) { return FALSE; }
+ virtual int WriteTextureList( FileAccess& fp ) { return FALSE; }
+ virtual int WriteMappingList( FileAccess& fp ) { return FALSE; }
+ virtual int WriteNormals( FileAccess& fp ) { return FALSE; }
+ virtual int WriteBSPTree( FileAccess& fp ) { return FALSE; }
+
+ // return contained objects
+ VertexChunk& getVertexList() { return vertexlist; }
+ PolygonList& getPolygonList() { return polygonlist; }
+ FaceChunk& getFaceList() { return facelist; }
+ TextureChunk& getTextureList() { return texturelist; }
+ MappingChunk& getMappingList() { return mappinglist; }
+ BSPTree& getBSPTree() { return bsptree; }
+ BSPTreeFlat& getBSPTreeFlat() { return bsptreeflat; }
+
+ // get/set object's name-string
+ char* getObjectName() const { return objectname; }
+ void setObjectName( char *name );
+
+ // get/set object's local transformation
+ Vertex3 getCenterInWorldSpace() const { return objecttrafo.FetchTranslation(); }
+ Transform3 getObjectTransformation() const { return objecttrafo; }
+ void setObjectTransformation( const Transform3& ot ) { objecttrafo = ot; }
+
+ // scale entire object (all vertices)
+ void ApplyScale( double scalefac );
+
+ // apply translation to all coordinates and set center to (0,0,0)
+ void ApplyCenter();
+
+ // apply transformation matrix and set to identity afterwards
+ void ApplyTransformation();
+
+ // return next object in list
+ BspObject* getNext() const { return next; }
+
+private:
+ void InconsistencyError( const char *err );
+
+public:
+ static int getEliminateDoubletsOnMergeFlag() { return check_vertex_doublets_on_merge; }
+ static void setEliminateDoubletsOnMergeFlag( int flag ) { check_vertex_doublets_on_merge = flag; }
+
+private:
+ static int check_vertex_doublets_on_merge;
+
+protected:
+ // contained objects
+ VertexChunk vertexlist; // list of vertices
+ PolygonList polygonlist; // list of polygons
+ FaceChunk facelist; // list of faces
+ TextureChunk texturelist; // list of textures
+ MappingChunk mappinglist; // list of mappings
+ BSPTree bsptree; // linked bsp tree
+ BSPTreeFlat bsptreeflat; // flat bsp tree
+ Transform3 objecttrafo; // attached transformation
+
+ // object's name if any defined
+ char* objectname;
+
+ // pointer to next object in list
+ BspObject* next;
+};
+
+// copy constructor -----------------------------------------------------------
+inline BspObject::BspObject( const BspObject& copyobj ) :
+ BspObjectInfo( copyobj ),
+ vertexlist( copyobj.vertexlist ),
+ polygonlist( copyobj.polygonlist ),
+ facelist( copyobj.facelist ),
+ texturelist( copyobj.texturelist ),
+ mappinglist( copyobj.mappinglist ),
+ bsptree( copyobj.bsptree ),
+ bsptreeflat( copyobj.bsptreeflat ),
+ objecttrafo( copyobj.objecttrafo )
+{
+ // copy object's name
+ objectname = NULL;
+ setObjectName( copyobj.objectname );
+
+ // unlink tail of list
+ next = NULL;
+}
+
+// assignment operator --------------------------------------------------------
+inline BspObject& BspObject::operator =( const BspObject& copyobj )
+{
+ if ( &copyobj != this ) {
+
+ // copy info part
+ *(BspObjectInfo *)this = copyobj;
+
+ // copy contained objects
+ vertexlist = copyobj.vertexlist;
+ polygonlist = copyobj.polygonlist;
+ facelist = copyobj.facelist;
+ texturelist = copyobj.texturelist;
+ mappinglist = copyobj.mappinglist;
+ bsptree = copyobj.bsptree;
+ bsptreeflat = copyobj.bsptreeflat;
+ objecttrafo = copyobj.objecttrafo;
+
+ // copy object's name
+ setObjectName( copyobj.objectname );
+
+ // unlink tail of list
+ next = NULL;
+ }
+ return *this;
+}
+
+
+BSPLIB_NAMESPACE_END
+
+
+#endif // _BSPOBJECT_H_
+