summaryrefslogtreecommitdiff
path: root/hammer/ToolMorph.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/ToolMorph.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/ToolMorph.h')
-rw-r--r--hammer/ToolMorph.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/hammer/ToolMorph.h b/hammer/ToolMorph.h
new file mode 100644
index 0000000..8894f86
--- /dev/null
+++ b/hammer/ToolMorph.h
@@ -0,0 +1,202 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef MORPH3D_H
+#define MORPH3D_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "MapClass.h" // dvs: For CMapObjectList
+#include "Box3D.h"
+#include "SSolid.h"
+#include "Resource.h"
+#include "ScaleVerticesDlg.h"
+#include "ToolInterface.h"
+#include "mathlib/vector.h"
+
+
+class IMesh;
+class Morph3D;
+class CRender2D;
+class CRender3D;
+
+
+const SSHANDLE SSH_SCALEORIGIN = 0xffff0L;
+
+
+typedef struct
+{
+ CMapSolid *pMapSolid;
+ CSSolid *pStrucSolid;
+ SSHANDLE ssh;
+} MORPHHANDLE;
+
+
+class Morph3D : public Box3D
+{
+public:
+
+ Morph3D();
+ virtual ~Morph3D();
+
+ BOOL IsMorphing(CMapSolid *pSolid, CSSolid **pStrucSolidRvl = NULL);
+
+ bool SplitFace();
+ bool CanSplitFace();
+
+ void SelectHandle(MORPHHANDLE *pInfo, UINT cmd = scSelect);
+ void SelectHandle2D( CMapView2D *pView, MORPHHANDLE *pInfo, UINT cmd = scSelect);
+ void DeselectHandle(MORPHHANDLE *pInfo);
+
+ void MoveSelectedHandles(const Vector &Delta);
+ int GetSelectedHandleCount(void) { return m_SelectedHandles.Count(); }
+ void GetSelectedCenter(Vector& pt);
+ SSHANDLETYPE GetSelectedType() { return m_SelectedType; }
+ bool IsSelected(MORPHHANDLE &mh);
+
+ void SelectObject(CMapSolid *pSolid, UINT cmd = scSelect);
+ bool SelectAt( CMapView *pView, UINT nFlags, const Vector2D &vPoint );
+
+ void GetMorphBounds(Vector &mins, Vector &maxs, bool bReset);
+
+ void SnapSelectedToGrid( int nGridSpacing );
+
+ // Toggle mode - vertex & edge, vertex, edge.
+ void ToggleMode();
+
+ void OnScaleCmd(BOOL bReInit = FALSE);
+ void UpdateScale();
+ BOOL IsScaling() { return m_bScaling; }
+
+ void GetMorphingObjects(CUtlVector<CMapClass *> &List);
+
+ inline int GetObjectCount(void);
+ inline CSSolid *GetObject(int pos);
+
+ //
+ // Tool3D implementation.
+ //
+ virtual bool IsEmpty() { return !m_StrucSolids.Count() && !m_bBoxSelecting; }
+ virtual void SetEmpty();
+ virtual void FinishTranslation(bool bSave);
+ virtual unsigned int GetConstraints(unsigned int nKeyFlags);
+
+ //
+ // CBaseTool implementation.
+ //
+ virtual void OnActivate();
+ virtual void OnDeactivate();
+ virtual ToolID_t GetToolID(void) { return TOOL_MORPH; }
+
+ virtual bool CanDeactivate( void );
+
+ virtual bool OnKeyDown2D(CMapView2D *pView, UINT nChar, UINT nRepCnt, UINT nFlags);
+ virtual bool OnChar2D(CMapView2D *pView, UINT nChar, UINT nRepCnt, UINT nFlags);
+ virtual bool OnLMouseDown2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint);
+ virtual bool OnLMouseUp2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint);
+ virtual bool OnMouseMove2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint);
+
+ virtual bool OnLMouseDown3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint);
+ virtual bool OnLMouseUp3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint);
+ virtual bool OnKeyDown3D(CMapView3D *pView, UINT nChar, UINT nRepCnt, UINT nFlags);
+ virtual bool OnMouseMove3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint);
+
+ virtual void RenderTool2D(CRender2D *pRender);
+ virtual void RenderTool3D(CRender3D *pRender);
+
+private:
+
+ void OnEscape(void);
+ bool NudgeHandles(CMapView *pView, UINT nChar, bool bSnap);
+
+ bool MorphHitTest(CMapView *pView, const Vector2D &vPoint, MORPHHANDLE *pInfo);
+
+ void GetHandlePos(MORPHHANDLE *pInfo, Vector& pt);
+
+ SSHANDLE Get2DMatches(CMapView2D *pView, CSSolid *pStrucSolid, SSHANDLEINFO &hi, CUtlVector<SSHANDLE>*pSimilarList = NULL);
+
+ void StartTranslation(CMapView *pView, const Vector2D &vPoint, MORPHHANDLE *pInfo );
+
+ void RenderSolid3D(CRender3D *pRender, CSSolid *pSolid);
+
+ //
+ // Tool3D implementations.
+ //
+ int HitTest(CMapView *pView, const Vector2D &ptClient, bool bTestHandles = false);
+
+ virtual bool UpdateTranslation( const Vector &pos, UINT uFlags );
+
+ bool StartBoxSelection( CMapView *pView, const Vector2D &vPoint, const Vector &vStart);
+ void SelectInBox();
+ void EndBoxSelection();
+ bool IsBoxSelecting() { return m_bBoxSelecting; }
+
+ bool CanDeselectList( void );
+
+ // list of active Structured Solids:
+ CUtlVector<CSSolid*> m_StrucSolids;
+
+ // list of selected nodes:
+ CUtlVector<MORPHHANDLE> m_SelectedHandles;
+
+ // type of selected handles:
+ SSHANDLETYPE m_SelectedType;
+
+ // main morph handle:
+ MORPHHANDLE m_MorphHandle;
+ Vector m_OrigHandlePos;
+
+ // morph bounds:
+ BoundBox m_MorphBounds;
+
+ // handle mode:
+ enum
+ {
+ hmBoth = 0x01 | 0x02,
+ hmVertex = 0x01,
+ hmEdge = 0x02
+ };
+
+ bool m_bLButtonDownControlState;
+ Vector2D m_vLastMouseMovement;
+
+ bool m_bHit;
+
+ MORPHHANDLE m_DragHandle; // The morph handle that we are dragging.
+
+ bool m_bMorphing;
+ bool m_bMovingSelected; // not moving them yet - might just select this
+
+ int m_HandleMode;
+ bool m_bBoxSelecting;
+ bool m_bScaling;
+ bool m_bUpdateOrg;
+ CScaleVerticesDlg m_ScaleDlg;
+ Vector *m_pOrigPosList;
+ Vector m_ScaleOrg;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Returns the number of solids selected for morphing.
+//-----------------------------------------------------------------------------
+inline int Morph3D::GetObjectCount(void)
+{
+ return(m_StrucSolids.Count());
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Iterates the selected solids.
+//-----------------------------------------------------------------------------
+inline CSSolid *Morph3D::GetObject(int pos)
+{
+ return(m_StrucSolids.Element(pos));
+}
+
+#endif // MORPH3D_H