diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/sculptoptions.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/sculptoptions.h')
| -rw-r--r-- | hammer/sculptoptions.h | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/hammer/sculptoptions.h b/hammer/sculptoptions.h new file mode 100644 index 0000000..b945dd0 --- /dev/null +++ b/hammer/sculptoptions.h @@ -0,0 +1,383 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef SCULPTOPTIONS_H +#define SCULPTOPTIONS_H +#ifdef _WIN32 +#pragma once +#endif + +#include "disppaint.h" +#include "afxwin.h" + +class CMapView3D; +class CPaintSculptDlg; + +class CSculptTool +{ +public: + CSculptTool(); + ~CSculptTool(); + + void SetPaintOwner( CPaintSculptDlg *pOwner ) { m_PaintOwner = pOwner; } + + virtual bool BeginPaint( CMapView3D *pView, const Vector2D &vPoint ); + virtual bool Paint( CMapView3D *pView, const Vector2D &vPoint, SpatialPaintData_t &SpatialData ); + virtual void RenderTool3D(CRender3D *pRender) = 0; + virtual bool OnLMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnLMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnRMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnRMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnMouseMove3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnLButtonUpDialog(UINT nFlags, CPoint point) { return false; } + virtual bool OnLButtonDownDialog(UINT nFlags, CPoint point) { return false; } + virtual bool OnMouseMoveDialog(UINT nFlags, CPoint point) { return false; } + +protected: + + // Painting. + virtual bool PrePaint( CMapView3D *pView, const Vector2D &vPoint ); + virtual bool PostPaint( bool bAutoSew ); + virtual bool DoPaint( CMapView3D *pView, const Vector2D &vPoint ); + virtual void DoPaintOperation( CMapView3D *pView, const Vector2D &vPoint, CMapDisp *pDisp, CMapDisp *pOrigDisp ) = 0; + + bool GetStartingSpot( CMapView3D *pView, const Vector2D &vPoint ); + + bool IsPointInScreenCircle( CMapView3D *pView, CMapDisp *pDisp, CMapDisp *pOrigDisp, int nVertIndex, bool bUseOrigDisplacement = true, bool bUseCurrentPosition = false, float *pflLengthPercent = NULL ); + + void DoPaintSmooth( CMapView3D *pView, const Vector2D &vPoint, CMapDisp *pDisp, CMapDisp *pOrigDisp ); + 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 Vector &vPoint ); + bool DoPaintSmoothOneOverExp( const Vector &vNewCenter, Vector &vPaintPos ); + + void AddToUndo( CMapDisp **pDisp ); + + void DrawDirection( CRender3D *pRender, Vector vDirection, Color Towards, Color Away ); + void DuplicateSelectedDisp( ); + void PrepareDispForPainting( ); + bool FindCollisionIntercept( CCamera *pCamera, const Vector2D &vPoint, bool bUseOrigPosition, Vector &vCollisionPoint, Vector &vCollisionNormal, float &vCollisionIntercept ); + +private: + void DetermineKeysDown(); + +protected: + static bool MapDispLessFunc( EditDispHandle_t const &a, EditDispHandle_t const &b ) + { + return a < b; + } + + static CUtlMap<EditDispHandle_t, CMapDisp *> m_OrigMapDisp; + + Vector m_StartingCollisionPoint, m_StartingCollisionNormal, m_OriginalCollisionPoint, m_OriginalCollisionNormal, m_CurrentCollisionPoint, m_CurrentCollisionNormal; + float m_StartingCollisionIntercept, m_OriginalCollisionIntercept, m_CurrentCollisionIntercept; + float m_StartingProjectedRadius, m_OriginalProjectedRadius, m_CurrentProjectedRadius; + bool m_OriginalCollisionValid, m_CurrentCollisionValid; + + Vector2D m_MousePoint; + bool m_bLMBDown; // left mouse button state + bool m_bRMBDown; // right mouse button state + bool m_bAltDown, m_bCtrlDown, m_bShiftDown; + + bool m_ValidPaintingSpot; + + float m_BrushSize; + + CPaintSculptDlg *m_PaintOwner; + + SpatialPaintData_t m_SpatialData; +}; + +class CSculptPainter : public CSculptTool +{ +public: + CSculptPainter(); + ~CSculptPainter(); + + virtual bool BeginPaint( CMapView3D *pView, const Vector2D &vPoint ); + virtual bool Paint( CMapView3D *pView, const Vector2D &vPoint, SpatialPaintData_t &spatialData ); + virtual bool OnLMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnLMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnRMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnRMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnMouseMove3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + +protected: + virtual bool DoSizing( const Vector2D &vPoint ); + + bool m_InPaintingMode; + bool m_InSizingMode; + Vector2D m_StartSizingPoint; + float m_OrigBrushSize; +}; + +class CSculptPushOptions : public CDialog, public CSculptPainter +{ + DECLARE_DYNAMIC(CSculptPushOptions) + +public: + CSculptPushOptions(CWnd* pParent = NULL); // standard constructor + virtual ~CSculptPushOptions(); + + virtual BOOL OnInitDialog( void ); + virtual void OnOK(); + virtual void OnCancel(); + +// Dialog Data + enum { IDD = IDD_DISP_SCULPT_PUSH_OPTIONS }; + + typedef enum + { + OFFSET_MODE_ADAPTIVE, + OFFSET_MODE_ABSOLUTE + } OffsetMode; + + typedef enum + { + NORMAL_MODE_BRUSH_CENTER, + NORMAL_MODE_SCREEN, + NORMAL_MODE_SCREEN_XY, + NORMAL_MODE_X, + NORMAL_MODE_Y, + NORMAL_MODE_Z, + NORMAL_MODE_SELECTED + } NormalMode; + + typedef enum + { + DENSITY_MODE_ADDITIVE, + DENSITY_MODE_ATTENUATED, + } DensityMode; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() + +public: + afx_msg void OnCbnSelchangeIdcSculptPushOptionNormalMode(); + CComboBox m_OffsetModeControl; + CEdit m_OffsetDistanceControl; + CEdit m_OffsetAmountControl; + CEdit m_SmoothAmountControl; + CEdit m_FalloffPositionControl; + CEdit m_FalloffFinalControl; + CComboBox m_DensityModeControl; + CComboBox m_NormalModeControl; + afx_msg void OnCbnSelchangeSculptPushOptionOffsetMode(); + +private: + OffsetMode m_OffsetMode; + float m_OffsetDistance, m_OffsetAmount; + NormalMode m_NormalMode; + DensityMode m_DensityMode; + float m_Direction; + float m_SmoothAmount; + Vector m_SelectedNormal; + float m_flFalloffSpot; + float m_flFalloffEndingValue; + + void GetPaintAxis( CCamera *pCamera, const Vector2D &vPoint, Vector &vPaintAxis ); + +public: + virtual bool BeginPaint( CMapView3D *pView, const Vector2D &vPoint ); + virtual void RenderTool3D(CRender3D *pRender); + virtual bool OnRMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + +protected: + virtual void DoPaintOperation( CMapView3D *pView, const Vector2D &vPoint, CMapDisp *pDisp, CMapDisp *pOrigDisp ); + void DoSmoothOperation( CMapView3D *pView, const Vector2D &vPoint, CMapDisp *pDisp, CMapDisp *pOrigDisp ); + +public: + afx_msg void OnEnChangeSculptPushOptionOffsetDistance(); + afx_msg void OnCbnSelchangeSculptPushOptionDensityMode(); + afx_msg void OnEnKillfocusSculptPushOptionSmoothAmount(); + afx_msg void OnEnKillfocusSculptPushOptionOffsetAmount(); + afx_msg void OnEnKillfocusSculptPushOptionFalloffPosition(); + afx_msg void OnEnKillfocusSculptPushOptionFalloffFinal(); +}; + + +class CSculptCarveOptions : public CDialog, public CSculptPainter +{ + DECLARE_DYNAMIC(CSculptCarveOptions) + +public: + CSculptCarveOptions(CWnd* pParent = NULL); // standard constructor + virtual ~CSculptCarveOptions(); + + virtual BOOL OnInitDialog( void ); + virtual void OnOK(); + virtual void OnCancel(); + +// Dialog Data + enum { IDD = IDD_DISP_SCULPT_CARVE_OPTIONS }; + + typedef enum + { + OFFSET_MODE_ADAPTIVE, + OFFSET_MODE_ABSOLUTE + } OffsetMode; + + typedef enum + { + NORMAL_MODE_BRUSH_CENTER, + NORMAL_MODE_SCREEN, + NORMAL_MODE_SCREEN_XY, + NORMAL_MODE_X, + NORMAL_MODE_Y, + NORMAL_MODE_Z, + NORMAL_MODE_SELECTED + } NormalMode; + + typedef enum + { + DENSITY_MODE_ADDITIVE, + DENSITY_MODE_ATTENUATED, + } DensityMode; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() + +public: + CComboBox m_OffsetModeControl; + CEdit m_OffsetDistanceControl; + CEdit m_OffsetAmountControl; + CEdit m_SmoothAmountControl; + CComboBox m_DensityModeControl; + CComboBox m_NormalModeControl; + CStatic m_CarveBrushControl; + +private: + const static int MAX_SCULPT_SIZE = 100; + const static int MAX_QUEUE_SIZE = 20; + + OffsetMode m_OffsetMode; + float m_OffsetDistance, m_OffsetAmount; + NormalMode m_NormalMode; + DensityMode m_DensityMode; + float m_Direction; + float m_SmoothAmount; + Vector m_SelectedNormal; + float m_BrushPoints[ MAX_SCULPT_SIZE ]; + int m_BrushLocation; + Vector2D m_StartLine, m_EndLine; + CUtlVector< Vector2D > m_DrawPoints; + CUtlVector< Vector2D > m_DrawNormal; + + CUtlVector< Vector2D > m_PointQueue; + + + void GetPaintAxis( CCamera *pCamera, const Vector2D &vPoint, Vector &vPaintAxis ); + void AdjustBrush( int x, int y ); + void AdjustBrushCursor( int x, int y ); + bool CalculatePointNormal( int PointIndex, Vector2D &vNormal ); + bool CalculateQueuePoint( Vector2D &vPoint, Vector2D &vNormal ); + void AddQueuePoint( const Vector2D &vPoint, bool bDrawIt ); + +public: + virtual bool BeginPaint( CMapView3D *pView, const Vector2D &vPoint ); +// virtual bool Paint( CMapView3D *pView, const Vector2D &vPoint, SpatialPaintData_t &spatialData ); + virtual void RenderTool3D(CRender3D *pRender); + virtual bool OnLMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnLMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnRMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnMouseMove3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + +protected: + bool IsPointAffected( CMapView3D *pView, CMapDisp *pDisp, CMapDisp *pOrigDisp, int nVertIndex, int nBrushPoint, Vector2D &vViewVert, bool bUseOrigDisplacement = true, bool bUseCurrentPosition = false ); + virtual void DoPaintOperation( CMapView3D *pView, const Vector2D &vPoint, CMapDisp *pDisp, CMapDisp *pOrigDisp ); + +public: + afx_msg void OnPaint(); + afx_msg void OnEnChangeSculptPushOptionOffsetDistance(); + afx_msg void OnCbnSelchangeSculptPushOptionDensityMode(); + afx_msg void OnEnKillfocusSculptPushOptionSmoothAmount(); + afx_msg void OnEnKillfocusSculptPushOptionOffsetAmount(); + afx_msg void OnCbnSelchangeIdcSculptPushOptionNormalMode(); + afx_msg void OnCbnSelchangeSculptPushOptionOffsetMode(); + afx_msg void OnLButtonDown(UINT nFlags, CPoint point); + afx_msg void OnLButtonUp(UINT nFlags, CPoint point); + afx_msg void OnMouseMove(UINT nFlags, CPoint point); + virtual BOOL PreTranslateMessage( MSG* pMsg ); +}; + +#if 0 + +class ITextureInternal; + +// CSculptProjectOptions dialog + +class CSculptProjectOptions : public CDialog, public CSculptTool +{ + DECLARE_DYNAMIC(CSculptProjectOptions) + +public: + CSculptProjectOptions(CWnd* pParent = NULL); // standard constructor + virtual ~CSculptProjectOptions(); + + // Dialog Data + enum { IDD = IDD_DISP_SCULPT_PROJECT_OPTIONS }; + +public: + virtual bool Paint( CMapView3D *pView, const Vector2D &vPoint, SpatialPaintData_t &spatialData ); + virtual void RenderTool3D(CRender3D *pRender); + virtual bool OnLMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnLMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnRMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnRMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + virtual bool OnMouseMove3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ); + +protected: + typedef enum + { + PROJECT_MODE_NONE, + PROJECT_MODE_SIZE, + PROJECT_MODE_POSITION, + PROJECT_MODE_TILE, + } ToolMode; + + CFileDialog *m_FileDialog; + unsigned char *m_ImagePixels; + int m_Width, m_Height; + ITextureInternal *m_pTexture; + IMaterial *m_pMaterial; + + Vector m_ProjectLocation, m_ProjectSize; + Vector m_OriginalProjectLocation, m_OriginalProjectSize; + int m_ProjectX, m_ProjectY, m_ProjectWidth, m_ProjectHeight; + float m_TileWidth, m_TileHeight; + float m_OriginalTileWidth, m_OriginalTileHeight; + ToolMode m_ToolMode; + Vector2D m_StartSizingPoint; + +protected: + virtual void DoPaintOperation( CMapView3D *pView, const Vector2D &vPoint, CMapDisp *pDisp, CMapDisp *pOrigDisp ); + virtual bool DoSizing( const Vector2D &vPoint ); + virtual bool DoPosition( const Vector2D &vPoint ); + virtual bool DoTiling( const Vector2D &vPoint ); + bool ReadImage( CString &FileName ); + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedLoadImage(); +public: + CSliderCtrl m_ProjectSizeControl; +public: + afx_msg void OnNMCustomdrawProjectSize(NMHDR *pNMHDR, LRESULT *pResult); +public: + virtual BOOL OnInitDialog(); +public: + CStatic m_ProjectSizeNumControl; +}; +#endif + +#endif // SCULPTOPTIONS_H |