// TextureMappingPaletteRecord.h #ifndef __FLT_TEXTURE_MAPPING_PALETTE_RECORD_H #define __FLT_TEXTURE_MAPPING_PALETTE_RECORD_H #include "opcodes.h" #include "Record.h" #include "RecordVisitor.h" namespace flt { struct STextureMapping { SRecHeader RecHeader; float32 reserved; // Reserved int32 diIndex; // Texture mapping index char szName[20]; // Texture mapping name int32 diType; // Texture mapping type // 0 = None // 1 = Put // 2 = 4 Point Put // 3 = Reserved // 4 = Spherical Project // 5 = Radial Project // 6 = Reserved int32 diWarpFlag; // Warped flag; if TRUE, 8 point warp applied float64 dfMat[4][4]; // Transformation matrix (valid only for Types 1 & 2) // Variable Variable; // Parameters (see below for parameters for each mapping type) }; // Parameters for Put Texture Mapping (Type 1) struct SPutTextureMapping { uint32 dwState; // State of Put Texture tool // 0 = Start state - no points entered // 1 = One point entered // 2 = Two points entered // 3 = Three points entered int32 active; // Active geometry point // 1 = Origin point // 2 = Alignment point // 3 = Shear point float64x3 lower_left; // lower-left corner of bounding box float64x3 upper_right; // upper-right corner of bounding box int32 sizeFlags[3]; // Use real world size flags for each of the three put points float64x3 dfTxtOrigin; // Texture origin point float64x3 dfTxtAlignment; // Texture alignment point float64x3 dfTxtShear; // Texture shear point float64x3 dfGeoOrigin; // Geometry origin point float64x3 dfGeoAlignment; // Geometry alignment point float64x3 dfGeoShear; // Geometry shear point int32 TxtActive; // Active texture point // 1 = Origin point // 2 = Alignment point // 3 = Shear point int32 Reserved; // should always be set to 1 }; //Parameters for 4 Point Put Texture Mapping (Type 2) struct SPointPutTextureMapping { int32 state; // State of Put Texture tool // 0 = Start state - no points entered // 1 = One point entered // 2 = Two points entered // 3 = Three points entered // 4 = Four points entered int32 active; // Active geometry point // 1 = Origin point // 2 = Alignment point // 3 = Shear point // 4 = Perspective point float64x3 lower_left; // lower-left corner of bounding box float64x3 upper_right; // upper-right corner of bounding box int32 sizeFlags[4]; // Use real world size flags for each of the four put points float64x3 dfTxtOrigin; // Texture origin point float64x3 dfTxtAlignment; // Texture alignment point float64x3 dfTxtShear; // Texture shear point float64x3 dfTxtPerspective; // Texture perspective point float64x3 dfGeoOrigin; // Geometry origin point float64x3 dfGeoAlignment; // Geometry alignment point float64x3 dfGeoShear; // Geometry shear point float64x3 dfGeoPerspective; // Geometry perspective point int32 TxtActive; // Active texture point // 1 = Origin point // 2 = Alignment point // 3 = Shear point // 4 = Perspective point int32 Reserved; // should always be set to 1 float32 sfScale; // Depth scale factor float64 dfMat[4][4]; // Transformation matrix for the 4 point projection plane }; // Parameters for Spherical Project Mapping (Type 4) struct SSphericalTextureMapping { float32 sfScale; // Scale float64x3 Center; // Center of the projection sphere float32 sfMaxScale; // Scale / (maximum dimension of the mapped geometry // bounding box) float32 sfMaxDimension; // Maximum dimension of the mapped geometry // bounding box }; // Parameters for Radial Project Mapping (Type 5) struct SRadialTextureMapping { int32 active; // Active geometry point // 1 = End point 1 of cylinder center line // 2 = End point 2 of cylinder center line int32 reserved; // Reserved float32 sfRadialScale; // Radial scale float32 sfLengthScale; // Scale along length of cylinder float64 dfMat[4][4]; // Trackplane to XY plane transformation matrix float64x3 endpoint1; // End point 1 of cylinder center line float64x3 endpoint2; // End point 2 of cylinder center line }; // Parameters for Warped Mapping (Warped Flag Set) struct SWarpedTextureMapping { int32 active; // Active geometry point // 0 = First warp FROM point // 1 = Second warp FROM point // 2 =Third warp FROM point // 3 = Fourth warp FROM point // 4 = Fifth warp FROM point // 5 = Sixth warp FROM point // 6 = Seventh warp FROM point // 7 = Eighth warp FROM point // 8 = First warp TO point // 9 = Second warp TO point // 10 = Third warp TO point // 11 = Fourth warp TO point // 12 = Fifth warp TO point // 13 = Sixth warp TO point // 14 = Seventh warp TO point // 15 = Eighth warp TO point int32 warpState; // Warp tool state // 0 = Start state - no points entered // 1 = One FROM point entered // 2 = Two FROM point entered // 3 = Three FROM point entered // 4 = Four FROM point entered // 5 = Five FROM point entered // 6 = Six FROM point entered // 7 = Seven FROM point entered // 8 = All FROM point entered float64 dfMat[4][4]; // Trackplane to XY plane transformation matrix /* Double 16*2 x, y of the first FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the second FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the third FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the fourth FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the fifth FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the sixth FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the seventh FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the eighth FROM point transformed to the XY plane by the above matrix Double 16*2 x, y of the first TO point transformed to the XY plane by the above matrix Double 16*2 x, y of the second TO point transformed to the XY plane by the above matrix Double 16*2 x, y of the third TO point transformed to the XY plane by the above matrix Double 16*2 x, y of the fourth TO point transformed to the XY plane by the above matrix Double 16*2 x, y of the fifth TO point transformed to the XY plane by the above matrix Double 16*2 x, y of the sixth TO point transformed to the XY plane by the above matrix Double 16*2 x, y of the seventh TO point transformed to the XY plane by the above matrix Double 16*2 x, y of the eighth TO point transformed to the XY plane by the above matrix */ }; class TextureMappingPaletteRecord : public AncillaryRecord { public: TextureMappingPaletteRecord(); virtual Record* clone() const { return new TextureMappingPaletteRecord(); } virtual const char* className() const { return "TextureMappingPaletteRecord"; } virtual int classOpcode() const { return TEXTURE_MAPPING_PALETTE_OP; } virtual size_t sizeofData() const { return sizeof(STextureMapping); } virtual void accept(RecordVisitor& rv) { rv.apply(*this); } // virtual void traverse(RecordVisitor& rv); protected: virtual ~TextureMappingPaletteRecord(); virtual void endian(); // virtual bool readLocalData(Input& fr); // virtual bool writeLocalData(Output& fw); }; }; // end namespace flt #endif