diff options
Diffstat (limited to 'hammer/disppaint.h')
| -rw-r--r-- | hammer/disppaint.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/hammer/disppaint.h b/hammer/disppaint.h new file mode 100644 index 0000000..85b95c1 --- /dev/null +++ b/hammer/disppaint.h @@ -0,0 +1,79 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef DISPPAINT_H +#define DISPPAINT_H +#pragma once + +#include "mathlib/vector.h" +#include "utlvector.h" +#include "DispManager.h" + +class CMapDisp; + +struct SpatialPaintData_t +{ + int m_nEffect; + Vector m_vCenter; + float m_flRadius; + float m_flScalar; + Vector m_vPaintAxis; + unsigned int m_uiBrushType; + bool m_bNudge; + bool m_bNudgeInit; + + // Cache + float m_flRadius2; + float m_flOORadius2; +}; + +class CDispPaintMgr +{ +public: + + CDispPaintMgr(); + ~CDispPaintMgr(); + + bool Paint( SpatialPaintData_t &spatialData, bool bAutoSew ); + +protected: + + // Painting. + bool PrePaint( SpatialPaintData_t &spatialData ); + bool PostPaint( bool bAutoSew ); + bool DoPaint( SpatialPaintData_t &spatialData ); + void DoPaintAdd( SpatialPaintData_t &spatialData, CMapDisp *pDisp ); + void DoPaintEqual( SpatialPaintData_t &spatialData, CMapDisp *pDisp ); + void DoPaintSmooth( SpatialPaintData_t &spatialData, CMapDisp *pDisp ); + + void DoPaintOneOverR( const SpatialPaintData_t &spatialData, const Vector &vPos, float flDistance2, Vector &vNewPos ); + void DoPaintOne( const SpatialPaintData_t &spatialData, const Vector &vPos, Vector &vNewPos ); + bool DoPaintSmoothOneOverExp( const SpatialPaintData_t &spatialData, const Vector &vNewCenter, Vector &vPaintPos ); + + // Utility. + bool PaintSphereDispBBoxOverlap( const Vector &vCenter, float flRadius, const Vector &vBBoxMin, const Vector &vBBoxMax ); + bool IsInSphereRadius( const Vector &vCenter, float flRadius2, const Vector &vPos, float &flDistance2 ); + float CalcSmoothRadius2( const SpatialPaintData_t &spatialData, const Vector &vPoint ); + + void AddToUndo( CMapDisp **pDisp ); + + // Nudge + void NudgeAdd( CMapDisp *pDisp, int iVert ); + void DoNudgeAdd( SpatialPaintData_t &spatialData ); + +protected: + + struct DispVertPair_t + { + EditDispHandle_t m_hDisp; + int m_iVert; + }; + + CUtlVector<DispVertPair_t> m_aNudgeData; +}; + +#endif // DISPPAINT_H
\ No newline at end of file |