#if defined(JAMBUILD)
#include <Mudbox/mudbox.h>
#else
#include "../../include/Mudbox/mudbox.h"
#endif
using namespace mudbox;
struct VertexInfo
{
VertexInfo( void ) {};
VertexInfo( unsigned int iGlobalVertexIndex, unsigned int iVertexIndex, const Vector &vDisp, float fMask, unsigned int iFaceIndex, unsigned int iCornerIndex )
{
m_iGlobalVertexIndex = iGlobalVertexIndex;
m_iVertexIndex = iVertexIndex;
m_vDisplacement = vDisp;
m_fMask = fMask;
m_iCount = 1;
m_iFaceIndex = iFaceIndex;
m_iCornerIndex = iCornerIndex;
};
int operator -( const VertexInfo &v ) const { return m_iGlobalVertexIndex-v.m_iGlobalVertexIndex; };
void Refine( const Vector &vDisplacement, float fMask )
{
m_vDisplacement = (m_iCount*m_vDisplacement+vDisplacement)/(m_iCount+1);
m_fMask = (m_iCount*m_fMask+fMask)/(m_iCount+1);
m_iCount++;
};
unsigned int m_iVertexIndex;
unsigned int m_iGlobalVertexIndex;
unsigned int m_iFaceIndex;
unsigned int m_iCornerIndex;
float m_fMask;
Vector m_vDisplacement;
int m_iCount;
};
struct Tile
{
unsigned int m_iIndex;
bool m_bZero;
};
class DisplaceOperation : public TreeNode
{
Q_DECLARE_TR_FUNCTIONS(DisplaceOperation);
DECLARE_CLASS;
enum Space
{
spaceNormal,
spaceTangent,
spaceAbsoluteTangent,
spaceObject,
spaceWorld
};
QString GetFileName( const QString &sMask, unsigned int iTile, unsigned int iUPos, unsigned int iVPos ) const;
QString FilterFileName( const QString &sFileName ) const;
public:
DisplaceOperation( void );
void Do( void );
void Execute( void );
void OnNodeEvent( const Attribute &, NodeEventType eType );
void Serialize( Stream &cStream );
static void Initializer( void );
virtual QWidget* CreatePropertiesWindow( QWidget *pParent );
aptr<Geometry> m_pObject;
aint m_iSubdivisionLevel;
abool m_bSmoothTC;
aint m_iFinalFaceCount;
aenum m_eMapSpace;
afilename m_sDisplacementFileMask;
mutable afloat m_fMidvalue;
mutable afloat m_fMultiplier;
aenum m_iDisplacementChannel;
afilename m_sMaskFileMask;
aenum m_iMaskChannel;
aint m_iUDim;
aint m_iFirstTileIndex;
astring m_sTileRange;
aevent m_eExecute;
aevent m_eDelete;
astring m_sNextCommand;
unsigned int m_iVDim;
Store<Tile> m_aTiles;
bool m_bFloatMap;
int m_iBaseU, m_iBaseV;
};