mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-07 17:29:36 +00:00
1
This commit is contained in:
+150
@@ -0,0 +1,150 @@
|
||||
//========= 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
|
||||
Reference in New Issue
Block a user