117 lines
4.8 KiB
C++
117 lines
4.8 KiB
C++
// HeaderRecord.h
|
|
|
|
#ifndef __FLT_HEADER_RECORD_H
|
|
#define __FLT_HEADER_RECORD_H
|
|
|
|
#include "opcodes.h"
|
|
#include "Record.h"
|
|
#include "RecordVisitor.h"
|
|
|
|
namespace flt {
|
|
|
|
struct SHeader
|
|
{
|
|
SRecHeader RecHeader;
|
|
char szIdent[8]; // ID field (Not curr used)
|
|
int32 diFormatRevLev; // Format revision level
|
|
int32 diDatabaseRevLev; // Edit rev. level
|
|
char szDaTimLastRev[32]; // Date and time last rev.
|
|
int16 iNextGroup; // Next group ID number
|
|
int16 iNextLOD; // Next LOD ID number
|
|
int16 iNextObject; // Next object ID number
|
|
int16 iNextPolygon; // Next polygon ID number
|
|
int16 iMultDivUnit; // Unit multiplier/divisor, always = 1
|
|
uint8 swVertexCoordUnit; // Vertex coordinate units
|
|
// 0 = Meters
|
|
// 1 = Kilometers
|
|
// 4 = Feet
|
|
// 5 = Inches
|
|
// 8 = Nautical miles
|
|
uint8 swTexWhite; // if TRUE set texwhite on new polygons
|
|
uint32 dwFlags; // Flags (bits, from left to right)
|
|
// 0 = Save vertex normals
|
|
// 1 = Packed Color mode
|
|
// 2 = CAD View mode
|
|
// 3-31 = Spare
|
|
int32 diNotUsed_1[6]; // Not Used
|
|
int32 diProjection; // Projection Type
|
|
// 0 = Flat Earth
|
|
// 1 = Trapezoidal
|
|
// 2 = Round Earth
|
|
// 3 = Lambert
|
|
// 4 = UTM
|
|
// 5 = Geodetic
|
|
// 6 = Geocentric
|
|
int32 diNotUsed_2[7]; // Not Used
|
|
int16 iNextDegOfFreedom; // Next degree of freedom ID number
|
|
int16 iVertexStorage; // Vertex Storage Type
|
|
// 1 = Double Precision Float
|
|
int32 diDatabaseSource; // Database Source
|
|
// 100 = OpenFlight
|
|
// 200 = DIG I/DIG II
|
|
// 300 = Evans and Sutherland CT5A/CT6
|
|
// 400 = PSP DIG
|
|
// 600 = General Electric CIV/CV / PT2000
|
|
// 700 = Evans and Sutherland GDF
|
|
float64 dfSWDatabaseCoordX; // Southwest Database Coordinate (x,y)
|
|
float64 dfSWDatabaseCoordY;
|
|
float64 dfDatabaseOffsetX; // Delta (x,y) to Place Database
|
|
float64 dfDatabaseOffsetY;
|
|
int16 iNextSound; // Next Sound Bead Id
|
|
int16 iNextPath; // Next Path Bead ID
|
|
int32 diReserved_1[2]; // Reserved for MultiGen
|
|
int16 iNextClippingRegion;// Next Clipping Region Bead ID
|
|
int16 iNextText; // Next Text Bead ID
|
|
int16 iNextBSP; // Next BSP ID
|
|
int16 iNextSwitch; // Next Switch Bead ID
|
|
int32 diReserved_2; // Reserved
|
|
float64x2 SWCorner; // South West Corner Lat/Lon (NB: dec. degrees)
|
|
float64x2 NECorner; // North East Corner Lat/Lon (NB: dec. degrees)
|
|
float64x2 Origin; // Origin Lat/Lon (NB: dec. degrees, not radians)
|
|
float64 dfLambertUpperLat; // Lambert Upper Latitude
|
|
float64 dfLambertLowerLat; // Lambert Lower Latitude
|
|
int16 iNextLightSource; // Next Light Source ID Number
|
|
int16 iReserved_3; // Reserved
|
|
int16 iNextRoad; // Next road bead ID number
|
|
int16 iNextCat; // Next CAT bead ID number
|
|
int16 iReserved_4[4]; // Reserved
|
|
int32 diEllipsoid; // Earth ellipsoid model
|
|
// 0 - WGS 1984
|
|
// 1 - WGS 1972
|
|
// 2 - Bessel
|
|
// 3 - Clarke 1866
|
|
// 4 - NAD 1927
|
|
};
|
|
|
|
|
|
class HeaderRecord : public PrimNodeRecord
|
|
{
|
|
public:
|
|
|
|
HeaderRecord();
|
|
|
|
virtual Record* clone() const { return new HeaderRecord(); }
|
|
virtual const char* className() const { return "HeaderRecord"; }
|
|
virtual int classOpcode() const { return HEADER_OP; }
|
|
virtual int sizeofData() const { return sizeof(SHeader); }
|
|
virtual void accept(RecordVisitor& rv) { rv.apply(*this); }
|
|
|
|
SHeader* getData() const { return (SHeader*)_pData; }
|
|
virtual const std::string getName( void ) const { return std::string(getData()->szIdent); }
|
|
|
|
protected:
|
|
|
|
virtual ~HeaderRecord();
|
|
|
|
virtual void endian();
|
|
virtual void decode();
|
|
|
|
virtual bool readLocalData(Input& fr);
|
|
// virtual bool writeLocalData(Output& fw);
|
|
|
|
};
|
|
|
|
}; // end namespace flt
|
|
|
|
#endif
|