mainfrm.cpp
来自「quake3工具源码。包括生成bsp文件」· C++ 代码 · 共 1,788 行 · 第 1/5 页
CPP
1,788 行
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "Radiant.h"
#include "qe3.h"
#include "ZWnd.h"
#include "CamWnd.h"
#include "TexWnd.h"
#include "EditWnd.h"
#include "entityw.h"
#include "PrefsDlg.h"
#include "MapInfo.h"
#include "MainFrm.h"
#include "RotateDlg.h"
#include "EntityListDlg.h"
#include "ScriptDlg.h"
#include "NewProjDlg.h"
#include "CommandsDlg.h"
#include "ScaleDialog.h"
#include "FindTextureDlg.h"
#include "SurfaceDlg.h"
#include "shlobj.h"
#include "DialogTextures.h"
#include "PatchDensityDlg.h"
#include "DialogThick.h"
#include "PatchDialog.h"
#include "Undo.h"
#include "NameDlg.h"
#include "../libs/pakstuff.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// globals
CString g_strAppPath; // holds the full path of the executable
CEdit* g_pEdit = NULL; // used originally to make qe4 work with mfc.. still used
CMainFrame* g_pParentWnd = NULL; // used to precast to CMainFrame
CPrefsDlg g_Preferences; // global prefs instance
CPrefsDlg& g_PrefsDlg = g_Preferences; // reference used throughout
int g_nUpdateBits = 0; // window update flags
bool g_bScreenUpdates = true; // whether window painting is active, used in a few places
// to disable updates for speed reasons
// both of the above should be made members of CMainFrame
//bool g_bSnapToGrid = true; // early use, no longer in use, clamping pref will be used
CString g_strProject; // holds the active project filename
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
// command mapping stuff
//
// m_strCommand is the command string
// m_nKey is the windows VK_??? equivelant
// m_nModifiers are key states as follows
// bit
// 0 - shift
// 1 - alt
// 2 - control
// 4 - press only
//
#define SPEED_MOVE 32
#define SPEED_TURN 22.5
SCommandInfo g_Commands[] =
{
{"ToggleOutlineDraw", 'J', 0x00, ID_SELECTION_NOOUTLINE},
{"CSGMerge", 'U', 0x04, ID_SELECTION_CSGMERGE},
{"CSGSubtract", 'U', 0x01, ID_SELECTION_CSGSUBTRACT},
{"ViewGroups", 'G', 0x00, ID_VIEW_GROUPS},
{"HideSelected", 'H', 0x00, ID_VIEW_HIDESHOW_HIDESELECTED},
{"ShowHidden", 'H', 0x01, ID_VIEW_HIDESHOW_SHOWHIDDEN},
{"BendMode", 'B', 0x00, ID_PATCH_BEND},
{"FitFace", 'B', 0x04, ID_FITFACE},
{"FitBrush", 'B', 0x01, ID_FITBRUSH},
{"FreezePatchVertices", 'F', 0x00, ID_CURVE_FREEZE},
{"UnFreezePatchVertices", 'F', 0x04, ID_CURVE_UNFREEZE},
{"UnFreezeAllPatchVertices", 'F', 0x05, ID_CURVE_UNFREEZEALL},
{"ViewTextures", 'T', 0, ID_VIEW_TEXTURE},
{"ThickenPatch", 'T', 0x04, ID_CURVE_THICKEN},
{"MakeOverlayPatch", 'Y', 0, ID_CURVE_OVERLAY_SET},
{"ClearPatchOverlays", 'Y', 0x02, ID_CURVE_OVERLAY_CLEAR},
{"SurfaceInspector", 'S', 0, ID_TEXTURES_INSPECTOR},
{"PatchInspector", 'S', 0x01, ID_PATCH_INSPECTOR},
{"ToggleShowPatches", 'P', 0x05, ID_CURVE_CYCLECAP},
{"ToggleShowPatches", 'P', 0x04, ID_VIEW_SHOWCURVES},
{"RedisperseRows", 'E', 0x04, ID_CURVE_REDISPERSE_ROWS},
{"RedisperseCols", 'E', 0x05, ID_CURVE_REDISPERSE_COLS},
{"InvertCurveTextureX", 'I', 0x05, ID_CURVE_NEGATIVETEXTUREY},
{"InvertCurveTextureY", 'I', 0x01, ID_CURVE_NEGATIVETEXTUREX},
{"InvertCurve", 'I', 0x04, ID_CURVE_NEGATIVE},
{"IncPatchColumn", VK_ADD, 0x05, ID_CURVE_INSERTCOLUMN},
{"IncPatchRow", VK_ADD, 0x04, ID_CURVE_INSERTROW},
{"DecPatchColumn", VK_SUBTRACT, 0x05, ID_CURVE_DELETECOLUMN},
{"DecPatchRow", VK_SUBTRACT, 0x04, ID_CURVE_DELETEROW},
{"Patch TAB", VK_TAB, 0x00, ID_PATCH_TAB},
{"Patch TAB", VK_TAB, 0x01, ID_PATCH_TAB},
{"SelectNudgeDown", VK_DOWN, 0x02, ID_SELECTION_SELECT_NUDGEDOWN},
{"EntityColor",'K', 0, ID_MISC_SELECTENTITYCOLOR},
{"CameraForward", VK_UP, 0, ID_CAMERA_FORWARD},
{"CameraBack", VK_DOWN, 0, ID_CAMERA_BACK},
{"CameraLeft", VK_LEFT, 0, ID_CAMERA_LEFT},
{"CameraRight", VK_RIGHT, 0, ID_CAMERA_RIGHT},
{"CameraUp", 'D', 0, ID_CAMERA_UP},
{"CameraDown", 'C', 0, ID_CAMERA_DOWN},
{"CameraAngleUp", 'A', 0, ID_CAMERA_ANGLEUP},
{"CameraAngleDown", 'Z', 0, ID_CAMERA_ANGLEDOWN},
{"CameraStrafeRight", VK_PERIOD, 0, ID_CAMERA_STRAFERIGHT},
{"CameraStrafeLeft", VK_COMMA, 0, ID_CAMERA_STRAFELEFT},
{"ToggleGrid", '0', 0, ID_GRID_TOGGLE},
{"SetGrid1", '1', 0, ID_GRID_1},
{"SetGrid2", '2', 0, ID_GRID_2},
{"SetGrid4", '3', 0, ID_GRID_4},
{"SetGrid8", '4', 0, ID_GRID_8},
{"SetGrid16", '5', 0, ID_GRID_16},
{"SetGrid32", '6', 0, ID_GRID_32},
{"SetGrid64", '7', 0, ID_GRID_64},
{"DragEdges", 'E', 0, ID_SELECTION_DRAGEDGES},
{"DragVertices", 'V', 0, ID_SELECTION_DRAGVERTECIES},
{"ViewEntityInfo", 'N', 0, ID_VIEW_ENTITY},
{"ViewConsole", 'O', 0, ID_VIEW_CONSOLE},
{"CloneSelection", VK_SPACE, 0, ID_SELECTION_CLONE},
{"DeleteSelection", VK_BACK, 0, ID_SELECTION_DELETE},
{"UnSelectSelection", VK_ESCAPE, 0, ID_SELECTION_DESELECT},
{"CenterView", VK_END, 0, ID_VIEW_CENTER},
{"ZoomOut", VK_INSERT, 0, ID_VIEW_ZOOMOUT},
{"ZoomIn", VK_DELETE, 0, ID_VIEW_ZOOMIN},
{"UpFloor", VK_PRIOR, 0, ID_VIEW_UPFLOOR},
{"DownFloor", VK_NEXT, 0, ID_VIEW_DOWNFLOOR},
{"ToggleClipper", 'X', 0, ID_VIEW_CLIPPER},
{"ToggleCrosshairs", 'X', 0x01, ID_VIEW_CROSSHAIR},
{"TogTexLock", 'T', 0x01, ID_TOGGLE_LOCK},
{"TogTexRotLock", 'R', 0x01, ID_TOGGLE_ROTATELOCK},
{"ToggleRealtime", 'R', 0x04, ID_VIEW_CAMERAUPDATE},
{"EntityList", 'L', 0, ID_EDIT_ENTITYINFO},
{"Preferences", 'P', 0, ID_PREFS},
{"ToggleCamera", 'C', 0x05, ID_TOGGLECAMERA},
{"ToggleConsole", 'O', 0, ID_TOGGLECONSOLE},
{"ToggleView", 'V', 0x05, ID_TOGGLEVIEW},
{"ToggleZ", 'Z', 0x05, ID_TOGGLEZ},
{"ConnectSelection", 'K', 0x04, ID_SELECTION_CONNECT},
{"Brush3Sided", '3', 0x04, ID_BRUSH_3SIDED},
{"Brush4Sided", '4', 0x04, ID_BRUSH_4SIDED},
{"Brush5Sided", '5', 0x04, ID_BRUSH_5SIDED},
{"Brush6Sided", '6', 0x04, ID_BRUSH_6SIDED},
{"Brush7Sided", '7', 0x04, ID_BRUSH_7SIDED},
{"Brush8Sided", '8', 0x04, ID_BRUSH_8SIDED},
{"Brush9Sided", '9', 0x04, ID_BRUSH_9SIDED},
{"ShowDetail", 'D', 0x04, ID_VIEW_SHOWDETAIL},
{"MakeDetail", 'M', 0x05, ID_CURVE_MATRIX_TRANSPOSE},
{"MakeDetail", 'M', 0x04, ID_SELECTION_MAKE_DETAIL},
{"MapInfo", 'M', 0, ID_EDIT_MAPINFO},
{"NextLeakSpot", 'K', 0x05, ID_MISC_NEXTLEAKSPOT},
{"PrevLeakSpot", 'L', 0x05, ID_MISC_PREVIOUSLEAKSPOT},
{"FileOpen", 'O', 0x04, ID_FILE_OPEN},
{"FileSave", 'S', 0x04, ID_FILE_SAVE},
{"Exit", 'X', 0x04, ID_FILE_EXIT},
{"NextView", VK_TAB, 0x04, ID_VIEW_NEXTVIEW},
{"ClipSelected", VK_RETURN, 0x00, ID_CLIP_SELECTED},
{"SplitSelected", VK_RETURN, 0x01, ID_SPLIT_SELECTED},
{"FlipClip", VK_RETURN, 0x04, ID_FLIP_CLIP},
{"MouseRotate", 'R', 0x00, ID_SELECT_MOUSEROTATE},
{"Copy", 'C', 0x04, ID_EDIT_COPYBRUSH},
{"Paste", 'V', 0x04, ID_EDIT_PASTEBRUSH},
{"Undo", 'Z', 0x04, ID_EDIT_UNDO},
{"Redo", 'Y', 0x04, ID_EDIT_REDO},
{"ZZoomOut", VK_INSERT, 0x04, ID_VIEW_ZZOOMOUT},
{"ZZoomIn", VK_DELETE, 0x04, ID_VIEW_ZZOOMIN},
{"TexDecrement", VK_SUBTRACT, 0x01, ID_SELECTION_TEXTURE_DEC},
{"TexIncrement", VK_ADD, 0x01, ID_SELECTION_TEXTURE_INC},
{"TextureFit", '5', 0x01, ID_SELECTION_TEXTURE_FIT},
{"TexRotateClock", VK_NEXT, 0x01, ID_SELECTION_TEXTURE_ROTATECLOCK},
{"TexRotateCounter", VK_PRIOR, 0x01, ID_SELECTION_TEXTURE_ROTATECOUNTER},
{"TexScaleUp", VK_UP, 0x04, ID_SELECTION_TEXTURE_SCALEUP},
{"TexScaleDown", VK_DOWN, 0x04, ID_SELECTION_TEXTURE_SCALEDOWN},
{"TexShiftLeft", VK_LEFT, 0x01, ID_SELECTION_TEXTURE_SHIFTLEFT},
{"TexShiftRight", VK_RIGHT, 0x01, ID_SELECTION_TEXTURE_SHIFTRIGHT},
{"TexShiftUp", VK_UP, 0x01, ID_SELECTION_TEXTURE_SHIFTUP},
{"TexShiftDown", VK_DOWN, 0x01, ID_SELECTION_TEXTURE_SHIFTDOWN},
{"GridDown", 219, 0x00, ID_GRID_PREV},
{"GridUp", 221, 0x00, ID_GRID_NEXT},
{"TexScaleLeft", VK_LEFT, 0x04, ID_SELECTION_TEXTURE_SCALELEFT},
{"TexScaleRight", VK_RIGHT, 0x04, ID_SELECTION_TEXTURE_SCALERIGHT},
{"CubicClipZoomOut", 219, 0x04, ID_VIEW_CUBEOUT},
{"CubicClipZoomIn", 221, 0x04, ID_VIEW_CUBEIN},
{"ToggleCubicClip", 220, 0x04, ID_VIEW_CUBICCLIPPING},
// {"ToggleCubicClip", '\\', 0x04, ID_VIEW_CUBICCLIPPING},
{"MoveSelectionDOWN", VK_SUBTRACT, 0x00, ID_SELECTION_MOVEDOWN},
{"MoveSelectionUP", VK_ADD, 0x00, ID_SELECTION_MOVEUP},
{"DumpSelectedBrush", 'D', 0x01, ID_SELECTION_PRINT},
{"ToggleSizePaint", 'Q', 0x08, ID_SELECTION_TOGGLESIZEPAINT},
{"SelectNudgeLeft", VK_LEFT, 0x02, ID_SELECTION_SELECT_NUDGELEFT},
{"SelectNudgeRight", VK_RIGHT, 0x02, ID_SELECTION_SELECT_NUDGERIGHT},
{"SelectNudgeUp", VK_UP, 0x02, ID_SELECTION_SELECT_NUDGEUP},
{"CycleCapTexturePatch", 'N', 0x05, ID_CURVE_CYCLECAP},
{"NaturalizePatch", 'N', 0x04, ID_PATCH_NATURALIZE},
{"SnapPatchToGrid", 'G', 0x04, ID_SELECT_SNAPTOGRID},
{"ShowAllTextures", 'A', 0x04, ID_TEXTURES_SHOWALL},
{"SelectAllOfType", 'A', 0x01, ID_SELECT_ALL},
{"CapCurrentCurve", 'C', 0x01, ID_CURVE_CAP},
{"MakeStructural", 'S', 0x05, ID_SELECTION_MAKE_STRUCTURAL}
//{"ForceCameraWalk", 'Q', 0x08, ID_CAMERA_ACTIVE}
};
int g_nCommandCount = sizeof(g_Commands) / sizeof(SCommandInfo);
SKeyInfo g_Keys[] =
{
{"Space", VK_SPACE},
{"Backspace", VK_BACK},
{"Escape", VK_ESCAPE},
{"End", VK_END},
{"Insert", VK_INSERT},
{"Delete", VK_DELETE},
{"PageUp", VK_PRIOR},
{"PageDown", VK_NEXT},
{"Up", VK_UP},
{"Down", VK_DOWN},
{"Left", VK_LEFT},
{"Right", VK_RIGHT},
{"F1", VK_F1},
{"F2", VK_F2},
{"F3", VK_F3},
{"F4", VK_F4},
{"F5", VK_F5},
{"F6", VK_F6},
{"F7", VK_F7},
{"F8", VK_F8},
{"F9", VK_F9},
{"F10", VK_F10},
{"F11", VK_F11},
{"F12", VK_F12},
{"Tab", VK_TAB},
{"Return", VK_RETURN},
{"Comma", VK_COMMA},
{"Period", VK_PERIOD},
{"Plus", VK_ADD},
{"Multiply", VK_MULTIPLY},
{"Subtract", VK_SUBTRACT},
{"NumPad0", VK_NUMPAD0},
{"NumPad1", VK_NUMPAD1},
{"NumPad2", VK_NUMPAD2},
{"NumPad3", VK_NUMPAD3},
{"NumPad4", VK_NUMPAD4},
{"NumPad5", VK_NUMPAD5},
{"NumPad6", VK_NUMPAD6},
{"NumPad7", VK_NUMPAD7},
{"NumPad8", VK_NUMPAD8},
{"NumPad9", VK_NUMPAD9},
{"[", 219},
{"]", 221},
{"\\", 220}
};
int g_nKeyCount = sizeof(g_Keys) / sizeof(SKeyInfo);
const int CMD_TEXTUREWAD_END = CMD_TEXTUREWAD + 127;
const int CMD_BSPCOMMAND_END = CMD_BSPCOMMAND + 127;
const int IDMRU_END = IDMRU+9;
const int g_msgBSPDone = RegisterWindowMessage("_BSPDone");
const int g_msgBSPStatus = RegisterWindowMessage("_BSPStatus");
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_PARENTNOTIFY()
ON_WM_CREATE()
ON_WM_TIMER()
ON_WM_DESTROY()
ON_WM_CLOSE()
ON_WM_KEYDOWN()
ON_WM_SIZE()
ON_COMMAND(ID_VIEW_CAMERATOGGLE, ToggleCamera)
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_COMMAND(ID_FILE_EXIT, OnFileExit)
ON_COMMAND(ID_FILE_LOADPROJECT, OnFileLoadproject)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_POINTFILE, OnFilePointfile)
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVEAS, OnFileSaveas)
ON_COMMAND(ID_VIEW_100, OnView100)
ON_COMMAND(ID_VIEW_CENTER, OnViewCenter)
ON_COMMAND(ID_VIEW_CONSOLE, OnViewConsole)
ON_COMMAND(ID_VIEW_DOWNFLOOR, OnViewDownfloor)
ON_COMMAND(ID_VIEW_ENTITY, OnViewEntity)
ON_COMMAND(ID_VIEW_FRONT, OnViewFront)
ON_COMMAND(ID_VIEW_SHOWBLOCKS, OnViewShowblocks)
ON_COMMAND(ID_VIEW_SHOWCLIP, OnViewShowclip)
ON_COMMAND(ID_VIEW_SHOWCOORDINATES, OnViewShowcoordinates)
ON_COMMAND(ID_VIEW_SHOWDETAIL, OnViewShowdetail)
ON_COMMAND(ID_VIEW_SHOWENT, OnViewShowent)
ON_COMMAND(ID_VIEW_SHOWLIGHTS, OnViewShowlights)
ON_COMMAND(ID_VIEW_SHOWNAMES, OnViewShownames)
ON_COMMAND(ID_VIEW_SHOWPATH, OnViewShowpath)
ON_COMMAND(ID_VIEW_SHOWWATER, OnViewShowwater)
ON_COMMAND(ID_VIEW_SHOWWORLD, OnViewShowworld)
ON_COMMAND(ID_VIEW_TEXTURE, OnViewTexture)
ON_COMMAND(ID_VIEW_UPFLOOR, OnViewUpfloor)
ON_COMMAND(ID_VIEW_XY, OnViewXy)
ON_COMMAND(ID_VIEW_Z100, OnViewZ100)
ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
ON_COMMAND(ID_VIEW_ZZOOMIN, OnViewZzoomin)
ON_COMMAND(ID_VIEW_ZZOOMOUT, OnViewZzoomout)
ON_COMMAND(ID_VIEW_SIDE, OnViewSide)
ON_COMMAND(ID_TEXTURES_SHOWINUSE, OnTexturesShowinuse)
ON_COMMAND(ID_TEXTURES_INSPECTOR, OnTexturesInspector)
ON_COMMAND(ID_MISC_BENCHMARK, OnMiscBenchmark)
ON_COMMAND(ID_MISC_FINDBRUSH, OnMiscFindbrush)
ON_COMMAND(ID_MISC_GAMMA, OnMiscGamma)
ON_COMMAND(ID_MISC_NEXTLEAKSPOT, OnMiscNextleakspot)
ON_COMMAND(ID_MISC_PREVIOUSLEAKSPOT, OnMiscPreviousleakspot)
ON_COMMAND(ID_MISC_PRINTXY, OnMiscPrintxy)
ON_COMMAND(ID_MISC_SELECTENTITYCOLOR, OnMiscSelectentitycolor)
ON_COMMAND(ID_TEXTUREBK, OnTexturebk)
ON_COMMAND(ID_COLORS_MAJOR, OnColorsMajor)
ON_COMMAND(ID_COLORS_MINOR, OnColorsMinor)
ON_COMMAND(ID_COLORS_XYBK, OnColorsXybk)
ON_COMMAND(ID_BRUSH_3SIDED, OnBrush3sided)
ON_COMMAND(ID_BRUSH_4SIDED, OnBrush4sided)
ON_COMMAND(ID_BRUSH_5SIDED, OnBrush5sided)
ON_COMMAND(ID_BRUSH_6SIDED, OnBrush6sided)
ON_COMMAND(ID_BRUSH_7SIDED, OnBrush7sided)
ON_COMMAND(ID_BRUSH_8SIDED, OnBrush8sided)
ON_COMMAND(ID_BRUSH_9SIDED, OnBrush9sided)
ON_COMMAND(ID_BRUSH_ARBITRARYSIDED, OnBrushArbitrarysided)
ON_COMMAND(ID_BRUSH_FLIPX, OnBrushFlipx)
ON_COMMAND(ID_BRUSH_FLIPY, OnBrushFlipy)
ON_COMMAND(ID_BRUSH_FLIPZ, OnBrushFlipz)
ON_COMMAND(ID_BRUSH_ROTATEX, OnBrushRotatex)
ON_COMMAND(ID_BRUSH_ROTATEY, OnBrushRotatey)
ON_COMMAND(ID_BRUSH_ROTATEZ, OnBrushRotatez)
ON_COMMAND(ID_REGION_OFF, OnRegionOff)
ON_COMMAND(ID_REGION_SETBRUSH, OnRegionSetbrush)
ON_COMMAND(ID_REGION_SETSELECTION, OnRegionSetselection)
ON_COMMAND(ID_REGION_SETTALLBRUSH, OnRegionSettallbrush)
ON_COMMAND(ID_REGION_SETXY, OnRegionSetxy)
ON_COMMAND(ID_SELECTION_ARBITRARYROTATION, OnSelectionArbitraryrotation)
ON_COMMAND(ID_SELECTION_CLONE, OnSelectionClone)
ON_COMMAND(ID_SELECTION_CONNECT, OnSelectionConnect)
ON_COMMAND(ID_SELECTION_CSGSUBTRACT, OnSelectionCsgsubtract)
ON_COMMAND(ID_SELECTION_CSGMERGE, OnSelectionCsgmerge)
ON_COMMAND(ID_SELECTION_NOOUTLINE, OnSelectionNoOutline)
ON_COMMAND(ID_SELECTION_DELETE, OnSelectionDelete)
ON_COMMAND(ID_SELECTION_DESELECT, OnSelectionDeselect)
ON_COMMAND(ID_SELECTION_DRAGEDGES, OnSelectionDragedges)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?