Added modelviewer.

Added neural network code(turned off by default).
Lots of editor and rendering fixes.
This commit is contained in:
Justin Marshall
2026-05-17 22:09:25 -07:00
parent 079442e7ba
commit 76f642286e
74 changed files with 101444 additions and 2227 deletions
+61 -1
View File
@@ -32,6 +32,7 @@ If you have questions concerning this license or the applicable additional terms
#include "qe3.h"
#include "Radiant.h"
#include "XYWnd.h"
#include "ModelViewDock.h"
#include "ZWnd.h"
#include "DialogInfo.h"
#include "splines.h"
@@ -45,6 +46,7 @@ If you have questions concerning this license or the applicable additional terms
#define ID_XYDOCK_TABS 0x7A00
#define ID_XYDOCK_XYPAGE 0x7A03
#define ID_XYDOCK_GAMEPAGE 0x7A04
#define ID_XYDOCK_MODELVIEWPAGE 0x7A05
#define ID_GAME_HOST 0x7A30
#define ID_GAME_FILL_FIT 0x7A40
@@ -1604,6 +1606,9 @@ int CXYDockWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
item.pszText = "Game";
m_wndTabs.InsertItem(XYDOCK_TAB_GAME, &item);
item.pszText = "Model View";
m_wndTabs.InsertItem(XYDOCK_TAB_MODELVIEW, &item);
CString pageClass = AfxRegisterWndClass(
CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW),
@@ -1628,6 +1633,11 @@ int CXYDockWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
}
m_wndGamePage.ShowWindow(SW_HIDE);
if (!m_wndModelPage.Create(&m_wndTabs, ID_XYDOCK_MODELVIEWPAGE)) {
return -1;
}
m_wndModelPage.ShowWindow(SW_HIDE);
if (!m_wndMenuBar.Create(&m_wndXYPage, 0x7A01)) {
return -1;
}
@@ -1766,6 +1776,7 @@ int CXYDockWnd::GetZPercent() const {
void CXYDockWnd::ShowActiveTab() {
const BOOL xyActive = (m_nActiveTab == XYDOCK_TAB_XY);
const BOOL gameActive = (m_nActiveTab == XYDOCK_TAB_GAME);
const BOOL modelActive = (m_nActiveTab == XYDOCK_TAB_MODELVIEW);
if (m_wndXYPage.GetSafeHwnd()) {
m_wndXYPage.ShowWindow(xyActive ? SW_SHOW : SW_HIDE);
@@ -1783,10 +1794,19 @@ void CXYDockWnd::ShowActiveTab() {
}
m_wndGamePage.SetActive(gameActive);
}
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.ShowWindow(modelActive ? SW_SHOW : SW_HIDE);
if (modelActive) {
m_wndModelPage.SetWindowPos(&wndTop, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
m_wndModelPage.SetActive(modelActive);
}
}
void CXYDockWnd::SetActiveTab(int nTab) {
if (nTab != XYDOCK_TAB_XY && nTab != XYDOCK_TAB_GAME) {
if (nTab != XYDOCK_TAB_XY && nTab != XYDOCK_TAB_GAME && nTab != XYDOCK_TAB_MODELVIEW) {
nTab = XYDOCK_TAB_XY;
}
@@ -1812,9 +1832,29 @@ void CXYDockWnd::SetActiveTab(int nTab) {
if (m_wndGamePage.GetSafeHwnd()) {
m_wndGamePage.SetActive(TRUE);
}
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.SetActive(FALSE);
}
FocusGameWindow();
}
else if (m_nActiveTab == XYDOCK_TAB_MODELVIEW) {
//
// Model View tab selected:
// - game HWND is deactivated
// - editor/tool input stays active
// - focus moves to the model preview window
//
if (m_wndGamePage.GetSafeHwnd()) {
m_wndGamePage.SetActive(FALSE);
}
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.SetActive(TRUE);
}
common->ActivateTool(true);
FocusModelView();
}
else {
//
// XY tab selected:
@@ -1825,6 +1865,9 @@ void CXYDockWnd::SetActiveTab(int nTab) {
if (m_wndGamePage.GetSafeHwnd()) {
m_wndGamePage.SetActive(FALSE);
}
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.SetActive(FALSE);
}
common->ActivateTool(true);
FocusXYWindow();
@@ -1849,10 +1892,18 @@ void CXYDockWnd::SelectGameTab() {
SetActiveTab(XYDOCK_TAB_GAME);
}
void CXYDockWnd::SelectModelViewTab() {
SetActiveTab(XYDOCK_TAB_MODELVIEW);
}
BOOL CXYDockWnd::IsGameTabActive() const {
return (m_nActiveTab == XYDOCK_TAB_GAME) ? TRUE : FALSE;
}
BOOL CXYDockWnd::IsModelViewTabActive() const {
return (m_nActiveTab == XYDOCK_TAB_MODELVIEW) ? TRUE : FALSE;
}
void CXYDockWnd::AttachGameWindow(HWND hGameWnd) {
m_wndGamePage.AttachGameWindow(hGameWnd);
m_wndGamePage.SetActive(IsGameTabActive());
@@ -1874,6 +1925,10 @@ void CXYDockWnd::FocusGameWindow() {
m_wndGamePage.FocusGameWindow();
}
void CXYDockWnd::FocusModelView() {
m_wndModelPage.FocusModelView();
}
void CXYDockWnd::FocusXYWindow() {
m_wndMDIContainer.FocusXYWindow();
}
@@ -1916,6 +1971,11 @@ void CXYDockWnd::LayoutChildren() {
m_wndGamePage.LayoutChildren();
}
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.MoveWindow(pageRect, TRUE);
m_wndModelPage.LayoutChildren();
}
ShowActiveTab();
if (m_pToolBar && m_pToolBar->GetSafeHwnd() && m_wndXYPage.GetSafeHwnd()) {