source-engine/hammer/Selection.h

116 lines
3.4 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: The document. Exposes functions for object creation, deletion, and
// manipulation. Holds the current tool. Handles GUI messages that are
// view-independent.
//
//=============================================================================//
#ifndef SELECTIONMANAGER_H
#define SELECTIONMANAGER_H
#ifdef _WIN32
#pragma once
#endif
#include "mapclass.h"
class CMapDoc;
enum
{
hitFirst = 0,
hitNext = -1,
hitPrev = -2
};
// SelectObject/SelectFace parameters:
typedef enum
{
scToggle = 0x01, // toogle selection state of this object
scSelect = 0x02, // select this object
scUnselect = 0x04, // unselect this object
scClear = 0x10, // Clear current before selecting
scNoLift = 0x20, // Don't lift face attributes into Face Properties dialog dvs: lame!
scNoApply = 0x40, // Don't apply face attributes from Face Properties dialog to selected face dvs: lame!
scCascading = 0x80, // Select all entities attached to outputs of this entity
scCascadingRecursive = 0x100, // Select all entities attached to outputs of this entity, recursively
scSelectAll = 0x200,
scSaveChanges = 0x400, // changing the selection causes changes made in the properties dialog be saved
};
class CSelection
{
public:
CSelection(void);
virtual ~CSelection(void);
void Init(CMapDoc *pDocument);
bool SelectObject(CMapClass *pobj, int cmd = scSelect);
void SelectObjectList(const CMapObjectList *pList, int cmd = (scClear|scSelect|scSaveChanges) );
bool RemoveAll(); // true if any elements were removed
bool RemoveInvisibles(); // true if any elements were removed
bool RemoveDead(); // true if any elements were removed
int GetCount();
bool IsEmpty();
bool IsSelected(CMapClass *pObject);
bool IsAnEntitySelected();
bool IsEditable();
bool IsCopyable();
const CMapObjectList* GetList(void);
CMapDoc *GetMapDoc() { return m_pDocument; }
// HitList feature
const CMapObjectList* GetHitList(void);
void ClearHitList();
void AddHit(CMapClass *pObject);
void SetCurrentHit(int iIndex, bool bCascading = false);
SelectMode_t GetMode(void);
void SetMode(SelectMode_t eSelectMode);
void SetSelectionState(SelectionState_t eSelectionState);
bool GetBounds(Vector &vecMins, Vector &vecMaxs);
// Used for translations. Uses entity origins and brush bounds. That way, when moving stuff,
// the entity origins will stay on the grid.
void GetBoundsForTranslation( Vector &vecMins, Vector &vecMaxs );
bool GetBoundsCenter(Vector &vecCenter);
void GetLastValidBounds(Vector &vecMins, Vector &vecMaxs);
bool GetLogicalBounds(Vector2D &vecMins, Vector2D &vecMaxs);
bool GetLogicalBoundsCenter( Vector2D &vecCenter );
void SetBoundsDirty() {m_bBoundsDirty = true;}
protected:
void UpdateSelectionBounds();
CMapDoc *m_pDocument; // document this selection set belongs to
SelectMode_t m_eSelectMode; // Controls what gets selected based on what the user clicked on.
CMapObjectList m_SelectionList; // The list of selected objects.
bool m_bBoundsDirty; // recalc bounds box with next query
BoundBox m_Bounds; // current bounds
BoundBox m_LastValidBounds; // last valid selection bounds
Vector2D m_vecLogicalMins; // Selection bounds in "logical" space
Vector2D m_vecLogicalMaxs;
// Hit selection.
CMapObjectList m_HitList; // list of 'hit' object (potential selected object)
int m_iCurHit; // current hit or -1
};
#endif // SELECTIONMANAGER_H