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.
116 lines
3.4 KiB
116 lines
3.4 KiB
//========= 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
|