/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /* $Header: /Commando/Code/Tools/ViewTrans/viewtrans.cpp 3 7/06/98 6:28p Greg_h $ */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Trnasformation Viewer Utility * * * * File Name : VIEWTRANS.CPP * * * * Programmer : Greg Hjelstrom * * * * Start Date : 02/24/97 * * * * Last Update : February 25, 1997 [GH] * * * *---------------------------------------------------------------------------------------------* * Functions: * * UtilityDlgProc -- Dialog Proc to handle all of the dialog's windows messages * * TVU::TransViewerUtility -- Constructor * * TVU::OnInitDialog -- Initializes the custom controls. * * TVU::BeginEditParams -- Adds the rollup to the control panel * * TVU::EndEditParams -- Removes the rollup from the panel * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include #include #include "viewtrans.h" #include "resource.h" /***************************************************************************** ** Globals */ HINSTANCE hInstance; TransViewerUtility TheUtility; UtilityClassDesc UtilityDesc; /*********************************************************************************************** * UtilityDlgProc -- Dialog Proc to handle all of the dialog's windows messages * * * * INPUT: * * * * OUTPUT: * * * * WARNINGS: * * * * HISTORY: * * 02/25/1997 GH : Created. * *=============================================================================================*/ BOOL CALLBACK UtilityDlgProc(HWND hDlg, UINT message, WPARAM wParam,LPARAM lParam) { TransViewerUtility *to = &TheUtility; // Respond to the message type... switch (message) { case WM_INITDIALOG: // Initialize all our Custom Controls TheUtility.OnInitDialog(hDlg, lParam); return TRUE; case WM_DESTROY: // Release all our Custom Controls return FALSE; case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MOUSEMOVE: // Pass these messages on to the RollupMouseMessage method // to allow 'hand cursor' scrolling with unused area of the // rollup page. to->ip->RollupMouseMessage(hDlg, message, wParam, lParam); break; case WM_MOUSEACTIVATE: to->ip->RealizeParamPanel(); return FALSE; default: break; } return FALSE; } /*********************************************************************************************** * TVU::TransViewerUtility -- Constructor * * * * INPUT: * * * * OUTPUT: * * * * WARNINGS: * * * * HISTORY: * * 02/25/1997 GH : Created. * *=============================================================================================*/ TransViewerUtility::TransViewerUtility(void) { iu = NULL; ip = NULL; hPanel = NULL; } /*********************************************************************************************** * TVU::BeginEditParams -- Adds the rollup to the control panel * * * * INPUT: * * * * OUTPUT: * * * * WARNINGS: * * * * HISTORY: * * 02/25/1997 GH : Created. * *=============================================================================================*/ void TransViewerUtility::BeginEditParams(Interface *ip, IUtil *iu) { this->iu = iu; this->ip = ip; // Add the rollup page to the command panel. hPanel = ip->AddRollupPage( hInstance, MAKEINTRESOURCE(IDD_VIEWTRANS), UtilityDlgProc, ROLLUP_PAGE_TITLE, (LPARAM)this); // update the display SelectionSetChanged(ip,iu); } /*********************************************************************************************** * TVU::EndEditParams -- Removes the rollup from the panel * * * * INPUT: * * * * OUTPUT: * * * * WARNINGS: * * * * HISTORY: * * 02/25/1997 GH : Created. * *=============================================================================================*/ void TransViewerUtility::EndEditParams(Interface *ip, IUtil *iu) { // Delete the rollup page ip->DeleteRollupPage(hPanel); // The panel index is only valid within BeginEditParams and // EndEditParams. Set it to null for safety. hPanel = NULL; } /*********************************************************************************************** * TVU::OnInitDialog -- Initializes the custom controls. * * * * INPUT: * * * * OUTPUT: * * * * WARNINGS: * * * * HISTORY: * * 02/25/1997 GH : Created. * *=============================================================================================*/ void TransViewerUtility::OnInitDialog(HWND hDlg, LPARAM lParam) { } void TransViewerUtility::SelectionSetChanged(Interface *ip,IUtil *iu) { // If there is not one and only one selected, clear // the display with zeros. if (ip->GetSelNodeCount() != 1) { Display_Data( Matrix3(1), Matrix3(1), Point3(0.0f,0.0f,0.0f), Quat(0.0f,0.0f,0.0f,0.0f), ScaleValue(Point3(1.0f,1.0f,1.0f)) ); return; } // Get all sorts of info about this node! INode * node = ip->GetSelNode(0); Matrix3 nodetm = node->GetNodeTM(ip->GetTime()); Matrix3 objtm = node->GetObjectTM(ip->GetTime()); Point3 objoffpos = node->GetObjOffsetPos(); Quat objoffrot = node->GetObjOffsetRot(); ScaleValue objoffscl = node->GetObjOffsetScale(); // display on the panel Display_Data(nodetm,objtm,objoffpos,objoffrot,objoffscl); } void TransViewerUtility::Display_Data ( Matrix3 &nodetm, Matrix3 &objtm, Point3 &objoffpos, Quat &objoffrot, ScaleValue &objoffscl ) { char string[256]; Point3 vect; ////////////////////////////////////////// // 3x3 sub-matrix of the ObjectTM ////////////////////////////////////////// vect = objtm.GetRow(0); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_0),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_1),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_2),string); vect = objtm.GetRow(1); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_3),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_4),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_5),string); vect = objtm.GetRow(2); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_6),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_7),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_8),string); /////////////////////////////////////////// // Translation portion of the ObjectTM /////////////////////////////////////////// vect = objtm.GetTrans(); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_9),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_10),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_OBJTM_11),string); /////////////////////////////////////////// // 3x3 sub-matrix of the NodeTM /////////////////////////////////////////// vect = objtm.GetRow(0); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_0),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_1),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_2),string); vect = objtm.GetRow(1); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_3),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_4),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_5),string); vect = objtm.GetRow(2); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_6),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_7),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_8),string); /////////////////////////////////////////// // Translation portion of the NodeTM /////////////////////////////////////////// vect = nodetm.GetTrans(); sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_9),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_10),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_NODETM_11),string); /////////////////////////////////////////// // Object-Offset translation: /////////////////////////////////////////// vect = objoffpos; sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_TRANS_X),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_TRANS_Y),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_TRANS_Z),string); /////////////////////////////////////////// // Object-Offset scaling: /////////////////////////////////////////// vect = objoffscl.s; sprintf(string,"%5.3f",vect.x); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_SCALE_X),string); sprintf(string,"%5.3f",vect.y); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_SCALE_Y),string); sprintf(string,"%5.3f",vect.z); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_SCALE_Z),string); /////////////////////////////////////////// // Object-Offset Quaternion: /////////////////////////////////////////// sprintf(string,"%5.3f",objoffrot[0]); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_ROT_X),string); sprintf(string,"%5.3f",objoffrot[1]); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_ROT_Y),string); sprintf(string,"%5.3f",objoffrot[2]); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_ROT_Z),string); sprintf(string,"%5.3f",objoffrot[3]); SetWindowText(GetDlgItem(hPanel, IDC_OBJOFF_ROT_W),string); }