You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
3.8 KiB
150 lines
3.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef BOX3D_H |
|
#define BOX3D_H |
|
#pragma once |
|
|
|
|
|
#include "Tool3D.h" |
|
#include "BoundBox.h" |
|
|
|
|
|
class CMapView2D; |
|
class CRender3D; |
|
|
|
|
|
// |
|
// Formats for displaying world units. |
|
// |
|
enum WorldUnits_t |
|
{ |
|
Units_None, |
|
Units_Inches, |
|
Units_Feet_Inches, |
|
}; |
|
|
|
|
|
class Box3D : public Tool3D, public BoundBox |
|
{ |
|
|
|
public: |
|
|
|
Box3D(void); |
|
|
|
static inline void SetWorldUnits(WorldUnits_t eWorldUnits); |
|
static inline WorldUnits_t GetWorldUnits(void); |
|
|
|
// |
|
// CBaseTool implementation. |
|
// |
|
virtual void SetEmpty(); |
|
virtual void RenderTool2D(CRender2D *pRender); |
|
virtual void RenderTool3D(CRender3D *pRender); |
|
|
|
virtual void UpdateStatusBar(); |
|
|
|
protected: |
|
|
|
enum |
|
{ |
|
expandbox = 0x01, |
|
thicklines = 0x04, |
|
boundstext = 0x08, |
|
}; |
|
|
|
enum TransformMode_t |
|
{ |
|
modeNone = 0, |
|
modeMove, |
|
modeScale, |
|
modeRotate, |
|
modeShear, |
|
modeLast, |
|
}; |
|
|
|
void StartNew( CMapView *pView, const Vector2D &vPoint, const Vector &vecStart, const Vector &vecSize); |
|
|
|
inline int GetTranslateMode() { return m_TranslateMode; } |
|
|
|
virtual void ToggleTranslateMode(void); |
|
void EnableHandles(bool bEnable); |
|
|
|
void SetDrawFlags(DWORD dwFlags); |
|
DWORD GetDrawFlags() { return m_dwDrawFlags; } |
|
void SetDrawColors(COLORREF dwHandleColor, COLORREF dwBoxColor); |
|
|
|
virtual void GetStatusString(char *pszBuf); |
|
unsigned long UpdateCursor(CMapView *pView, const Vector &vHandleHit, TransformMode_t eTransformMode); |
|
|
|
void HandleToWorld( Vector &vWorld, const Vector &vHandle, const Vector *pCustomHandleBox = NULL); |
|
const Vector NearestCorner(const Vector2D &vPoint, CMapView *pView, const Vector *pCustomHandleBox = NULL); |
|
int GetVisibleHandles( Vector *handles, CMapView *, int nMode ); |
|
|
|
void RenderHandles2D(CRender2D *pRender, const Vector &mins, const Vector &maxs ); |
|
void RenderHandles3D(CRender3D *pRender, const Vector &mins, const Vector &maxs); |
|
|
|
|
|
// |
|
// Tool3D implementation. |
|
// |
|
|
|
public: |
|
virtual int HitTest(CMapView *pView, const Vector2D &ptClient, bool bTestHandles = false); |
|
|
|
// If pCustomHandleBox is non-null, it points at an array 2 vectors (min and max), and |
|
// it will use those bounds to figure out the corners that it will align to the grid. |
|
virtual void StartTranslation( CMapView *pView, const Vector2D &vPoint, const Vector &vHandleOrigin, const Vector *pRefPoint = NULL, const Vector *pCustomHandleBox = NULL ); |
|
|
|
virtual bool UpdateTranslation(const Vector &vUpdate, UINT uConstraints); |
|
virtual void FinishTranslation(bool bSave); |
|
virtual void TranslatePoint(Vector& pt); |
|
void TranslateBox(Vector& mins, Vector& maxs); |
|
virtual const VMatrix& GetTransformMatrix(); |
|
|
|
protected: |
|
|
|
void UpdateTransformMatrix(); |
|
|
|
static WorldUnits_t m_eWorldUnits; |
|
|
|
COLORREF m_clrHandle; |
|
COLORREF m_clrBox; |
|
|
|
TransformMode_t m_TranslateMode; // current translation mode |
|
Vector m_TranslateHandle; // current translation handle/corner |
|
Vector m_vTranslationFixPoint; // fix point, meaning it remains unchanged by translation, eg rotation center etc. |
|
VMatrix m_TransformMatrix; |
|
|
|
bool m_bEnableHandles; // check/show handles yes/no |
|
Vector m_LastHitTestHandle; // handle hit by last HitTest call |
|
TransformMode_t m_LastTranslateMode; // last translate mode |
|
|
|
bool m_bPreventOverlap; |
|
DWORD m_dwDrawFlags; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
WorldUnits_t Box3D::GetWorldUnits(void) |
|
{ |
|
return(m_eWorldUnits); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void Box3D::SetWorldUnits(WorldUnits_t eWorldUnits) |
|
{ |
|
m_eWorldUnits = eWorldUnits; |
|
} |
|
|
|
|
|
#endif // BOX3D_H
|
|
|