1698 lines
62 KiB
C++
1698 lines
62 KiB
C++
//#################################################################################
|
|
//
|
|
// BASE CLASS OF YOUR DLL interface
|
|
//
|
|
//#################################################################################
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "ACP_Base.h"
|
|
#define HieFriend
|
|
#define D_ObjsTbls_Define
|
|
#include "TFA.h"
|
|
#include "incGam.h"
|
|
#include "Itf.h"
|
|
#include "Tot.h"
|
|
#undef D_ObjsTbls_Define
|
|
|
|
#include "DlgVwCt.h"
|
|
#include "T3DFRMBs.hpp"
|
|
|
|
//Stefan Dumitrean 26-05-98
|
|
#include "oac.h"
|
|
#include "T3DFrame.hpp"
|
|
#define T3DFamilyName "Families"
|
|
//End Stefan Dumitrean 26-05-98
|
|
|
|
#include "T3Dinterf.hpp"
|
|
#include "T3DWorld.hpp"
|
|
#include "CPA_Grid.hpp"
|
|
#include "AnimView.h"
|
|
|
|
//#include "gli.h"
|
|
|
|
#include "X:\Cpa\Main\inc\_EditID.h"
|
|
|
|
// infos
|
|
static CString g_csT3DName = "Tool3D / Viewer";
|
|
static CString g_csT3DAuthor = "Marc Trabucato";
|
|
static CString g_csT3DVersion = "V 6.0.3 18/03/99";
|
|
static CString g_csT3DFrenchHelpFile = "T3D.hlp";
|
|
static CString g_csT3DEnglishHelpFile = "";
|
|
|
|
BOOL g_bTipGridFirstTime = TRUE;
|
|
BOOL g_bTipAnimFirstTime = TRUE;
|
|
BOOL g_bTipToolFirstTime = TRUE;
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// MACROS
|
|
//--------------------------------------------------------------------------------
|
|
|
|
#define M_GetNbObjects() ( m_oListOfVWObjInfo . GetCount() )
|
|
#define M_DeviceCamera(p_oDevice) ( ( (DEV_ViewPort3D*) p_oDevice -> GetViewPort() ) ->GetCamera() )
|
|
#define M_DeviceCameraSO(p_oDevice) ( ( (DEV_ViewPort3D*) p_oDevice -> GetViewPort() ) ->GetCameraSO() )
|
|
#define M_RedrawAll() ( GetInterface()->fn_vUpdateAll(E_mc_JustDraw) )
|
|
#define M_ContactGrid() ( (CPA_Grid*)m_p_Tool3DContact )
|
|
// ALX
|
|
#define M_GetLSTViewPort() ((DEV_ViewPort3D*)GetInterface()->GetMultiDevice()->GetFocusDevice()->GetViewPort())
|
|
#define M_GetLSTCameraInterface() (M_GetLSTViewPort()->GetCameraInterface())
|
|
// End ALX
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// CONSTANTS
|
|
//--------------------------------------------------------------------------------
|
|
|
|
// Menu Entry ID
|
|
#define C_uiMenuNone 10
|
|
#define C_uiMenuChar 11
|
|
#define C_uiMenuMod 12
|
|
#define C_uiMenuGeom 13
|
|
#define C_uiMenuViewer 14
|
|
#define C_uiMenuViewerCt 15
|
|
#define C_uiMenuTable 16
|
|
#define C_uiMenuAnim 17
|
|
|
|
#define C_uiMenuShowGrid 20
|
|
#define C_uiMenuShowSelection 21
|
|
#define C_uiMenuAddToViewer 22
|
|
#define C_uiMenuResetViewer 23
|
|
#define C_uiMenuOpenTable 30
|
|
#define C_uiMenuViewerTarget 60 // must be the greatest
|
|
|
|
#define C_xCameraDist MTH_M_xFloatToReal( 3.5 )
|
|
|
|
// keyboard
|
|
static tdstKeyboardActionDef g_T3DKeyboardAction[] =
|
|
{
|
|
// navigation
|
|
{ "navigation mode", KA_ID_NAVMODE },
|
|
{ "left case", KA_ID_LEFT },
|
|
{ "right case", KA_ID_RIGHT },
|
|
{ "up case", KA_ID_UP },
|
|
{ "down case", KA_ID_DOWN },
|
|
// end of list
|
|
{ NULL, 0 }
|
|
};
|
|
|
|
|
|
// the DLL global definition
|
|
tdstDLLIdentity g_stTool3DIdentity;
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// CONSTRUCTOR.
|
|
// You must put here all your DLL interface definitions.
|
|
//--------------------------------------------------------------------------------
|
|
Tool3D_Interface::Tool3D_Interface(void)
|
|
{
|
|
// ************************** private internal
|
|
m_p_stDLLIdentity = &g_stTool3DIdentity;
|
|
|
|
// Does your DLL can output in main game view ?
|
|
m_stBaseDLLDefinition.bCanOutputIn3DView = TRUE;
|
|
|
|
// Does your DLL can be refresh by engine ?
|
|
m_stBaseDLLDefinition.bCanBeRefreshedByEngine = TRUE;
|
|
|
|
// TODO : Add your own code here
|
|
SetEditorInfo(g_csT3DName, g_csT3DAuthor, g_csT3DVersion, g_csT3DFrenchHelpFile, g_csT3DEnglishHelpFile);
|
|
|
|
m_wTypeOfTool = C_wTool3D_None;
|
|
m_p_PreviousFRMBase = NULL;
|
|
m_p_FRMBase = NULL;
|
|
m_p_Tool3DMultiDevice = NULL;
|
|
m_p_PreviousMultiDevice = NULL;
|
|
m_p_InitialRoot = NULL;
|
|
m_p_Tool3DWorld = NULL;
|
|
m_p_Tool3DContact = NULL;
|
|
m_p_oSprObjActor = NULL;
|
|
//Stefan Dumitrean 2-06-98
|
|
m_bAnimPlayerInvoked = FALSE;
|
|
//End Stefan Dumitrean 2-06-98
|
|
|
|
m_oListOfVWObjInfo . RemoveAll();
|
|
|
|
m_p_oKeyboard = new CPA_KeyActionConfiguration("Tools\\T3D\\T3DKeys.ini", g_T3DKeyboardAction);
|
|
m_p_oKeyboard->mfn_vSetObjectName("Tool3D Editor");
|
|
|
|
}
|
|
|
|
///////////////////////
|
|
// Begin/End methods //
|
|
///////////////////////
|
|
|
|
void Tool3D_Interface::fn_vConstruct(void)
|
|
{
|
|
POS_tdstCompletePosition stMatrix;
|
|
MTH3D_tdstVector st3DX, st3DY, st3DZ;
|
|
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
m_p_PreviousFRMBase = NULL;
|
|
// light Up
|
|
GLI_xCreateLight( &m_hLightUp, GLI_C_lParallelLight );
|
|
GLI_xSetLightState( m_hLightUp, 1 );
|
|
// light Down
|
|
GLI_xCreateLight( &m_hLightDown, GLI_C_lParallelLight );
|
|
GLI_xSetLightState( m_hLightDown, 1 );
|
|
GLI_xGetLightMatrix( m_hLightDown, &stMatrix );
|
|
POS_fn_vGetRotationMatrix( &stMatrix, &st3DX, &st3DY, &st3DZ );
|
|
MTH3D_M_vMulScalarVector( &st3DZ, -1, &st3DZ );
|
|
POS_fn_vSetRotationMatrix( &stMatrix, &st3DX, &st3DY, &st3DZ );
|
|
POS_fn_vNormalizeMatrix( &stMatrix );
|
|
GLI_xSetLightMatrix( m_hLightDown, &stMatrix );
|
|
//
|
|
/*
|
|
* create bottom frame
|
|
*/
|
|
//Stefan Dumitrean 26-05-98
|
|
// m_p_oAnimFrame = new FRMBase();
|
|
m_p_oAnimFrame = new Tool3D_Frame();
|
|
//End Stefan Dumitrean 26-05-98
|
|
|
|
m_p_oAnimFrame->CreateBase( "Anim viewer", 2, 3, GetMainWorld() );
|
|
m_p_oAnimFrame->m_iInitHeight = 200 ;
|
|
m_p_oAnimFrame->mfn_vEnableCaption( FALSE );
|
|
|
|
HINSTANCE hOldInst = AfxGetResourceHandle();
|
|
AfxSetResourceHandle( m_p_stDLLIdentity->hModule );
|
|
|
|
/*
|
|
* create view
|
|
*/
|
|
//Stefan Dumitrean 26-05-98
|
|
// M_FRMAssociateView( m_p_oAnimFrame, CAnimationView );
|
|
// m_p_oAnimView = (CAnimationView *) m_p_oAnimFrame->GetActiveView();
|
|
m_p_oAnimView = (CAnimationView *) m_p_oAnimFrame->m_fn_p_oGetPane(1);
|
|
//End Stefan Dumitrean 26-05-98
|
|
|
|
m_p_oAnimView -> mfn_vSetEditor( this );
|
|
m_p_oAnimView -> OnInitialUpdate();
|
|
|
|
AfxSetResourceHandle( hOldInst );
|
|
}
|
|
|
|
void Tool3D_Interface::fn_vBeforeEditor(void)
|
|
{
|
|
if(!m_p_Tool3DWorld)
|
|
{
|
|
// create world
|
|
m_p_Tool3DWorld = new Tool3D_World( GetMainWorld() );
|
|
|
|
// Frame
|
|
m_p_FRMBase = new Tool3D_FRMBaseMenu;
|
|
m_p_FRMBase->CreateBase("3DTool",GetMainWorld());
|
|
|
|
m_p_FRMBase->mfn_vSetTool3D(this);
|
|
|
|
m_p_Tool3DMultiDevice = (DEV_MultiDevice3D *) m_p_FRMBase -> m_oSplitter . GetPane (0 , 0);
|
|
m_p_Tool3DMultiDevice->SetInterface(NULL);
|
|
m_p_Tool3DMultiDevice->SetContact(NULL);
|
|
|
|
m_p_Tool3DWorld -> SetMultiDevice ( m_p_Tool3DMultiDevice );
|
|
|
|
m_p_oAnimView -> mfn_vSetWorld( m_p_Tool3DWorld );
|
|
}
|
|
}
|
|
|
|
|
|
////
|
|
void Tool3D_Interface::fn_vJustBeforeClosing(void)
|
|
{
|
|
delete m_p_Tool3DWorld;
|
|
m_p_Tool3DWorld = NULL;
|
|
delete m_p_Tool3DMultiDevice;
|
|
m_p_Tool3DMultiDevice = NULL;
|
|
delete m_p_FRMBase;
|
|
m_p_FRMBase = NULL;
|
|
//
|
|
mfn_vResetViewerContent();
|
|
}
|
|
|
|
////////////////////
|
|
// Editor Methods //
|
|
////////////////////
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description :
|
|
*---------------------------------------------------------------------------*/
|
|
tdePermission Tool3D_Interface::fn_eAcceptNewEditor(CPA_EditorBase *pNewEditor)
|
|
{
|
|
/* if( pNewEditor -> GetCurrentEditorName() == C_szDLLActorName )
|
|
return C_Deny;
|
|
else
|
|
*/ return C_CloseBefore;
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description :
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL Tool3D_Interface::fn_bCanActivateEditor(CPA_List<CPA_BaseObject> *pParams)
|
|
{
|
|
BOOL bCanOpen = ( ! fn_bIsCurrentEditor() &&
|
|
( fn_bToolActive(C_wTool3D_Char) || ( fn_bToolActive(C_wTool3D_None) && ( /*Stefan Dumitrean 3-06-98 */m_bAnimPlayerInvoked ||/*End*/ fn_bCanOpenTool(C_wTool3D_Char) ) ) )
|
|
);
|
|
if( bCanOpen && ! fn_bToolActive(C_wTool3D_Char) )
|
|
m_p_oSprObjActor = M_GetWorld()->GetSingleSelection();
|
|
|
|
return bCanOpen;
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description :
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL Tool3D_Interface::fn_bCanCloseEditor(void)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description :
|
|
*---------------------------------------------------------------------------*/
|
|
void Tool3D_Interface::fn_vOnActivateEditor(CPA_List<CPA_BaseObject> *pParams, BOOL bBackActivated /*=FALSE*/)
|
|
{
|
|
CPA_Family *p_oFamily1 = NULL;
|
|
CPA_Family *p_oFamily = NULL;
|
|
CPA_Animation *p_oAnimation1 = NULL;
|
|
CPA_Animation *p_oAnimation = NULL;
|
|
unsigned short uwFrame1 = 0;
|
|
unsigned short uwFrame = 0;
|
|
|
|
CPA_List<CPA_BaseObject> clObjectsList;
|
|
CPA_SuperObject *p_clSuperObject;
|
|
|
|
POSITION pos;
|
|
|
|
//Stefan Dumitrean 3-06-98
|
|
//to treat the case when we invoke the Anim Player without an instance selected
|
|
if( m_bAnimPlayerInvoked && (!m_p_oSprObjActor || m_p_oSprObjActor->GetRealTypeName() != C_szActorInstanceTypeName) )
|
|
{
|
|
m_p_oSprObjActor = NULL;
|
|
fn_vOnActivateEditorAnim();
|
|
// tip of day
|
|
GetInterface()->fn_vDisplayTipOfDay("Anim Player", "TAN", g_bTipAnimFirstTime);
|
|
g_bTipAnimFirstTime = FALSE;
|
|
return;
|
|
}
|
|
//End Stefan Dumitrean 3-06-98
|
|
|
|
ASSERT( m_p_oSprObjActor );
|
|
|
|
if (mfn_bFindInfoAboutActor( m_p_oSprObjActor, &p_oFamily, &p_oAnimation, NULL, &uwFrame))
|
|
{
|
|
// Shaitan -> for actors without POs
|
|
if (m_p_oSprObjActor->GetCount() == 0)
|
|
{
|
|
m_p_oSprObjActor = NULL;
|
|
|
|
GetMainWorld()->fn_lFindObjects( &clObjectsList, "", C_szActorInstanceTypeName );
|
|
pos = clObjectsList.GetHeadPosition();
|
|
|
|
while (pos && !m_p_oSprObjActor)
|
|
{
|
|
p_clSuperObject = ((CPA_Actor *)clObjectsList.GetNext(pos))->m_pub_fn_pclGetSuperObject();
|
|
if (mfn_bFindInfoAboutActor(p_clSuperObject, &p_oFamily1, &p_oAnimation1, NULL, &uwFrame1))
|
|
{
|
|
if ((p_oFamily1 == p_oFamily) && (p_clSuperObject->GetCount() > 0))
|
|
m_p_oSprObjActor = p_clSuperObject;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!m_p_oSprObjActor)
|
|
{
|
|
fn_vOnActivateEditorAnim();
|
|
// tip of day
|
|
GetInterface()->fn_vDisplayTipOfDay("Anim Player", "TAN", g_bTipAnimFirstTime);
|
|
g_bTipAnimFirstTime = FALSE;
|
|
return;
|
|
}
|
|
// End Shaitan
|
|
|
|
if( ! fn_bToolActive(C_wTool3D_Char) )
|
|
{
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Char,(LPARAM)m_p_oSprObjActor);
|
|
}
|
|
|
|
// can open editor
|
|
g_oFrameGest.mfn_vSetRefresh( FALSE );
|
|
g_oFrameGest.mfn_vActivateWindow ( m_p_FRMBase ) ;
|
|
g_oFrameGest.mfn_vActivateWindow( m_p_oAnimFrame );
|
|
g_oFrameGest.mfn_vSetRefresh( TRUE );
|
|
m_p_oAnimView -> mfn_vInitDialog( p_oFamily, p_oAnimation, uwFrame );
|
|
//Stefan Dumitrean 27-05-98
|
|
m_p_oAnimView->mfn_vSetFamilySelDialog( m_p_oAnimFrame->m_p_clDialogList );
|
|
|
|
m_p_oAnimFrame->m_p_clDialogList->fn_vInitAllLists();
|
|
m_p_oAnimFrame->m_p_clDialogList->fn_vReinitDialog();
|
|
m_p_CurrentFamily = p_oFamily;
|
|
m_p_oAnimFrame->m_p_clDialogList->fn_vUpdateSelection( E_lrm_ChangeSelection );
|
|
//End Stefan Dumitrean 27-05-98
|
|
// tip of day
|
|
GetInterface()->fn_vDisplayTipOfDay("Anim Player", "TAN", g_bTipAnimFirstTime);
|
|
g_bTipAnimFirstTime = FALSE;
|
|
|
|
}
|
|
else
|
|
{
|
|
m_p_oSprObjActor = NULL;
|
|
fn_vOnActivateEditorAnim();
|
|
// tip of day
|
|
GetInterface()->fn_vDisplayTipOfDay("Anim Player", "TAN", g_bTipAnimFirstTime);
|
|
g_bTipAnimFirstTime = FALSE;
|
|
return;
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description :
|
|
*---------------------------------------------------------------------------*/
|
|
void Tool3D_Interface::fn_vOnCloseEditor(void)
|
|
{
|
|
m_p_oAnimView -> m_fn_vStopAnim();
|
|
}
|
|
|
|
BOOL Tool3D_Interface::_OnMouseMove(UINT nFlags, tdstMousePos *p_stPos, MTH3D_tdstVector *p_stVect)
|
|
{
|
|
if( fn_bIsCurrentEditor() && m_p_oAnimView -> m_bPlay )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
BOOL Tool3D_Interface::_OnLButtonDblClk(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo)
|
|
{
|
|
if( fn_bIsCurrentEditor() && m_p_oAnimView -> m_bPlay )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
BOOL Tool3D_Interface::_OnRButtonDblClk(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo)
|
|
{
|
|
if( fn_bIsCurrentEditor() && m_p_oAnimView -> m_bPlay )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
BOOL Tool3D_Interface::_OnLButtonDown(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo)
|
|
{
|
|
if( fn_bIsCurrentEditor() && m_p_oAnimView -> m_bPlay )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
BOOL Tool3D_Interface::_OnRButtonDown(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo)
|
|
{
|
|
if( fn_bIsCurrentEditor() && m_p_oAnimView -> m_bPlay )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
BOOL Tool3D_Interface::_OnLButtonUp(UINT nFlags, tdstMousePos *p_stPos)
|
|
{
|
|
if( fn_bIsCurrentEditor() && m_p_oAnimView -> m_bPlay )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
BOOL Tool3D_Interface::_OnRButtonUp(UINT nFlags, tdstMousePos *p_stPos)
|
|
{
|
|
if( fn_bIsCurrentEditor() && m_p_oAnimView -> m_bPlay )
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
//////////////////
|
|
// Menu Methods //
|
|
//////////////////
|
|
|
|
BOOL Tool3D_Interface::fn_bDefineSubMenu(EDT_SubMenu *_p_oEDTSubMenu)
|
|
{
|
|
//ANNECY MT NewInterface 26/03/98 {
|
|
if(_p_oEDTSubMenu->GetSubMenuType() == C_SubMenuTool)
|
|
{
|
|
// Animation view
|
|
//Stefan Dumitrean 3-06-98
|
|
//this item is never gray ( from now on )
|
|
// _p_oEDTSubMenu->AddAnEntry(this,"Anim Player",C_uiMenuAnim,fn_bIsCurrentEditor(),fn_bIsCurrentEditor()||fn_bCanOpenTool(C_wTool3D_Char)||fn_bToolActive(C_wTool3D_Char));
|
|
_p_oEDTSubMenu->AddAnEntry(this,"Anim Player",C_uiMenuAnim,fn_bIsCurrentEditor(),TRUE );
|
|
//End Stefan Dumitrean 3-06-98
|
|
return TRUE;
|
|
}
|
|
else
|
|
//ENDANNECY MT NewInterface }
|
|
//ANNECY Shaitan NewInterface 24/03/98 {
|
|
if(_p_oEDTSubMenu->GetSubMenuType() == C_SubMenu3DView)
|
|
//ENDANNECY Shaitan NewInterface }
|
|
{
|
|
// world view
|
|
_p_oEDTSubMenu->AddAnEntry(this,"World view",C_uiMenuNone,fn_bToolActive(C_wTool3D_None),fn_bToolActive(C_wTool3D_None)?FALSE:TRUE);
|
|
_p_oEDTSubMenu->AddASeparator();
|
|
// character view
|
|
_p_oEDTSubMenu->AddAnEntry(this,"Character view",C_uiMenuChar,fn_bToolActive(C_wTool3D_Char),fn_bToolActive(C_wTool3D_Char)||fn_bCanOpenTool(C_wTool3D_Char));
|
|
// table view
|
|
_p_oEDTSubMenu->AddAnEntry(this,"Character Objects Table view",C_uiMenuTable,fn_bToolActive(C_wTool3D_Table),fn_bToolActive(C_wTool3D_Table)||fn_bCanOpenTool(C_wTool3D_Table));
|
|
// grid view
|
|
if(fn_bToolActive(C_wTool3D_Mod_Object))
|
|
{
|
|
EDT_SubMenu *p_oSubMenu = _p_oEDTSubMenu -> fn_p_oGetNewSubMenu("Modules grid view");
|
|
if( M_ContactGrid()->m_fn_bIsGridShowed() )
|
|
p_oSubMenu -> AddAnEntry(this,"Hide Grid",C_uiMenuShowGrid);
|
|
else
|
|
p_oSubMenu -> AddAnEntry(this,"Show Grid",C_uiMenuShowGrid);
|
|
if( M_ContactGrid()->m_fn_bIsSelectionShowed() )
|
|
p_oSubMenu -> AddAnEntry(this,"Hide Selection",C_uiMenuShowSelection);
|
|
else
|
|
p_oSubMenu -> AddAnEntry(this,"Show Selection",C_uiMenuShowSelection);
|
|
p_oSubMenu -> AddAnEntry(this, "Close", C_uiMenuMod);
|
|
_p_oEDTSubMenu -> AddASubMenu( p_oSubMenu );
|
|
}
|
|
else
|
|
{
|
|
_p_oEDTSubMenu->AddAnEntry(this,"Modules grid view",C_uiMenuMod,FALSE,fn_bCanOpenTool(C_wTool3D_Mod_Object));
|
|
}
|
|
// single module view
|
|
_p_oEDTSubMenu->AddAnEntry(this,"Single module view",C_uiMenuGeom,fn_bToolActive(C_wTool3D_Object),fn_bToolActive(C_wTool3D_Object)||fn_bCanOpenTool(C_wTool3D_Object));
|
|
|
|
// viewer
|
|
_p_oEDTSubMenu->AddASeparator();
|
|
EDT_SubMenu *p_oSubMenu = _p_oEDTSubMenu -> fn_p_oGetNewSubMenu("Viewer");
|
|
if(fn_bToolActive(C_wTool3D_Viewer))
|
|
p_oSubMenu -> AddAnEntry(this, "Close", C_uiMenuViewer);
|
|
else
|
|
p_oSubMenu -> AddAnEntry(this, "Open", C_uiMenuViewer, FALSE, fn_bCanOpenTool(C_wTool3D_Viewer));
|
|
p_oSubMenu -> AddAnEntry(this, "Edit Content" , C_uiMenuViewerCt , FALSE, fn_bToolActive(C_wTool3D_None) ) ;
|
|
p_oSubMenu -> AddAnEntry(this, "Reset Content", C_uiMenuResetViewer, FALSE, M_GetNbObjects());
|
|
p_oSubMenu -> AddASeparator();
|
|
POSITION stPos = m_oListOfVWObjInfo . GetHeadPosition();
|
|
int i = 0;
|
|
while( stPos )
|
|
{
|
|
tdst_VW_ObjInfo *p_stVWOI = m_oListOfVWObjInfo . GetNext( stPos );
|
|
if( p_stVWOI -> m_p_oSuperObject )
|
|
p_oSubMenu -> AddAnEntry(this, (char*)(LPCTSTR)p_stVWOI -> m_p_oSuperObject -> GetObject() -> GetName(), C_uiMenuViewerTarget+i, FALSE,
|
|
fn_bToolActive(C_wTool3D_Viewer) || fn_bToolActive(C_wTool3D_None) );
|
|
i++;
|
|
}
|
|
_p_oEDTSubMenu -> AddASubMenu( p_oSubMenu );
|
|
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void Tool3D_Interface::_OnSubMenuCommand(EDT_SubMenu *_p_oEDTSubMenu,UINT uiMsgID)
|
|
{
|
|
//ANNECY MT NewInterface 26/03/98 {
|
|
if(_p_oEDTSubMenu->GetSubMenuType() == C_SubMenuTool)
|
|
{
|
|
switch (uiMsgID)
|
|
{
|
|
case C_uiMenuAnim: // Animation view
|
|
if( fn_bIsCurrentEditor() )
|
|
{
|
|
GetMainWorld() -> fn_bCloseEditor(this);
|
|
if(fn_bToolActive(C_wTool3D_Char))
|
|
OnQueryClose(NULL, 0, 0);
|
|
}
|
|
else
|
|
{
|
|
//Stefan Dumitrean 3-06-98
|
|
m_bAnimPlayerInvoked = TRUE;
|
|
//End Stefan Dumitrean 3-06-98
|
|
GetMainWorld() -> fn_bActivateEditor( this, NULL );
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
//ENDANNECY MT NewInterface }
|
|
//ANNECY Shaitan NewInterface 24/03/98 {
|
|
if(_p_oEDTSubMenu->GetSubMenuType() == C_SubMenu3DView)
|
|
//ENDANNECY Shaitan NewInterface }
|
|
{
|
|
switch (uiMsgID)
|
|
{
|
|
case C_uiMenuChar:
|
|
if(fn_bToolActive(C_wTool3D_Char))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Char,(LPARAM)M_GetWorld()->GetSingleSelection());
|
|
break;
|
|
case C_uiMenuTable:
|
|
if(fn_bToolActive(C_wTool3D_Table))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
{
|
|
EditorObjectTable *p_oObjectTable = NULL;
|
|
|
|
if( mfn_bFindInfoAboutActor( M_GetWorld() ->GetSingleSelection(), NULL, NULL, & p_oObjectTable, NULL ) )
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Table,(LPARAM)p_oObjectTable);
|
|
}
|
|
break;
|
|
case C_uiMenuMod:
|
|
if(fn_bToolActive(C_wTool3D_Mod_Object))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Mod_Object,(LPARAM)M_GetWorld()->GetSingleSelection());
|
|
break;
|
|
case C_uiMenuGeom:
|
|
if(fn_bToolActive(C_wTool3D_Object))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Object,(LPARAM)M_GetWorld()->GetSingleSelection()->GetObject());
|
|
break;
|
|
case C_uiMenuViewer:
|
|
if(fn_bToolActive(C_wTool3D_Viewer))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
OnQueryOpen(NULL, (WPARAM)C_wTool3D_Viewer, 0);
|
|
break;
|
|
case C_uiMenuViewerCt:
|
|
mfn_vEditViewerContent();
|
|
break;
|
|
case C_uiMenuResetViewer:
|
|
mfn_vResetViewerContent();
|
|
break;
|
|
case C_uiMenuNone:
|
|
if(!fn_bToolActive(C_wTool3D_None))
|
|
OnQueryClose(NULL, 0, 0);
|
|
break;
|
|
case C_uiMenuShowGrid:
|
|
if(M_ContactGrid()->m_fn_bIsGridShowed())
|
|
OnQueryAction(NULL, C_wTool3D_QA_HideGrid, 0);
|
|
else
|
|
OnQueryAction(NULL, C_wTool3D_QA_ShowGrid, 0);
|
|
break;
|
|
case C_uiMenuShowSelection:
|
|
if(M_ContactGrid()->m_fn_bIsSelectionShowed())
|
|
OnQueryAction(NULL, C_wTool3D_QA_HideSelect, 0);
|
|
else
|
|
OnQueryAction(NULL, C_wTool3D_QA_ShowSelect, 0);
|
|
break;
|
|
default:
|
|
int iTarget = uiMsgID - C_uiMenuViewerTarget;
|
|
if( ( iTarget >= 0 ) && ( iTarget < M_GetNbObjects() ) )
|
|
mfn_vRestoreCameraOnTarget( iTarget );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description
|
|
//--------------------------------------------------------------------------------
|
|
BOOL Tool3D_Interface::fn_bDefinePopupMenu(EDT_PopUpMenu *pPopup, CPA_List<CPA_SuperObject> *pSelection, BOOL bIsAlone)
|
|
{
|
|
ASSERT( pPopup -> GetSubMenuType() == C_PopupMenu ) ;
|
|
EDT_SubMenu *p_oSubMenu;
|
|
BOOL bResult = FALSE;
|
|
|
|
// Module Grid View
|
|
switch( m_wTypeOfTool )
|
|
{
|
|
case C_wTool3D_Mod_Object:
|
|
|
|
p_oSubMenu = pPopup -> fn_p_oGetNewSubMenu("Modules grid view");
|
|
p_oSubMenu -> AddAnEntry(this,"Close",C_uiMenuMod);
|
|
p_oSubMenu -> AddASeparator();
|
|
if( M_ContactGrid()->m_fn_bIsGridShowed() )
|
|
p_oSubMenu -> AddAnEntry(this,"Hide Grid",C_uiMenuShowGrid);
|
|
else
|
|
p_oSubMenu -> AddAnEntry(this,"Show Grid",C_uiMenuShowGrid);
|
|
if( M_ContactGrid()->m_fn_bIsSelectionShowed() )
|
|
p_oSubMenu -> AddAnEntry(this,"Hide Selection",C_uiMenuShowSelection);
|
|
else
|
|
p_oSubMenu -> AddAnEntry(this,"Show Selection",C_uiMenuShowSelection);
|
|
pPopup -> AddASubMenu( p_oSubMenu );
|
|
bResult = TRUE;
|
|
break;
|
|
case C_wTool3D_Char:
|
|
pPopup -> AddAnEntry(this,"Close Character View", C_uiMenuChar);
|
|
bResult = TRUE;
|
|
break;
|
|
case C_wTool3D_Geom_Object:
|
|
pPopup -> AddAnEntry(this,"Close Single Module View", C_uiMenuGeom);
|
|
bResult = TRUE;
|
|
break;
|
|
}
|
|
// viewer
|
|
if( fn_bToolActive(C_wTool3D_None) && ( pSelection != NULL ) && ( pSelection -> GetCount() ) )
|
|
{
|
|
pPopup -> AddAnEntry(this, "Add selected objet(s) on Viewer", C_uiMenuAddToViewer );
|
|
bResult = TRUE;
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description
|
|
//--------------------------------------------------------------------------------
|
|
void Tool3D_Interface::_OnPopUpMenuCommand(UINT m_IDCmdMsg)
|
|
{
|
|
switch ( m_IDCmdMsg )
|
|
{
|
|
case C_uiMenuChar:
|
|
if(fn_bToolActive(C_wTool3D_Char))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Char,(LPARAM)M_GetWorld()->GetSingleSelection());
|
|
break;
|
|
case C_uiMenuMod:
|
|
if(fn_bToolActive(C_wTool3D_Mod_Object))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Mod_Object,(LPARAM)M_GetWorld()->GetSingleSelection());
|
|
break;
|
|
case C_uiMenuGeom:
|
|
if(fn_bToolActive(C_wTool3D_Geom_Object))
|
|
OnQueryClose(NULL, 0, 0);
|
|
else
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Geom_Object,(LPARAM)M_GetWorld()->GetSingleSelection());
|
|
break;
|
|
case C_uiMenuAddToViewer:
|
|
if( M_GetWorld() -> GetCountSelected() == 1)
|
|
mfn_vAddAnObject( M_GetWorld()->GetSingleSelection(), TRUE );
|
|
else if( M_GetWorld() -> GetCountSelected() > 1)
|
|
mfn_vAddAListOfSuperObject( M_GetWorld() -> GetListSelected(), TRUE );
|
|
break;
|
|
case C_uiMenuShowGrid:
|
|
if(M_ContactGrid()->m_fn_bIsGridShowed())
|
|
OnQueryAction(NULL, C_wTool3D_QA_HideGrid, 0);
|
|
else
|
|
OnQueryAction(NULL, C_wTool3D_QA_ShowGrid, 0);
|
|
break;
|
|
case C_uiMenuShowSelection:
|
|
if(M_ContactGrid()->m_fn_bIsSelectionShowed())
|
|
OnQueryAction(NULL, C_wTool3D_QA_HideSelect, 0);
|
|
else
|
|
OnQueryAction(NULL, C_wTool3D_QA_ShowSelect, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
///////////////////
|
|
// Query methods //
|
|
///////////////////
|
|
////
|
|
long Tool3D_Interface::OnQueryOpen(CPA_EditorBase* pCallingDLL, WPARAM _wParam, LPARAM _lParam)
|
|
{
|
|
// if editors are in fullscreen, send a window message
|
|
// if (M_bFullScreenEditor())
|
|
// M_GetMainWnd()->SendMessage(WM_COMMAND,CPA_IDCB_FULLSCREEN);
|
|
|
|
// WPARAM = type of tool opened
|
|
if( !fn_bTypeOfToolOK( _wParam ) )
|
|
return ( (long) FALSE );
|
|
|
|
// LPARAM = object used
|
|
if( !fn_bCanUseObject( (long)_wParam, (long)_lParam ) )
|
|
return ( (long) FALSE );
|
|
|
|
// if tool is already opened with the right mode, do nothing
|
|
if (m_wTypeOfTool == _wParam)
|
|
return ((long) TRUE);
|
|
|
|
// if tool already opened, close it
|
|
if(m_wTypeOfTool != C_wTool3D_None)
|
|
OnQueryClose(pCallingDLL,0,0);
|
|
|
|
// M_GetMainApp()->m_bViewerOpened = TRUE;
|
|
// light
|
|
GetMainWorld() -> m_a_tdxhArrayOfLocalLights[ GetMainWorld() -> m_lNbLocalLights++ ] = m_hLightDown;
|
|
GetMainWorld() -> m_a_tdxhArrayOfLocalLights[ GetMainWorld() -> m_lNbLocalLights++ ] = m_hLightDown;
|
|
GetMainWorld() -> m_a_tdxhArrayOfLocalLights[ GetMainWorld() -> m_lNbLocalLights++ ] = m_hLightUp;
|
|
GetMainWorld() -> m_a_tdxhArrayOfLocalLights[ GetMainWorld() -> m_lNbLocalLights++ ] = m_hLightUp;
|
|
|
|
m_wTypeOfTool = _wParam;
|
|
m_p_oSprObjActor = NULL;
|
|
|
|
m_p_PreviousMultiDevice = GetInterface()->GetMultiDevice();
|
|
// create contact
|
|
switch (m_wTypeOfTool)
|
|
{
|
|
case C_wTool3D_Mod_Object:
|
|
case C_wTool3D_Mod_List:
|
|
case C_wTool3D_Table:
|
|
m_p_Tool3DContact = new CPA_Grid(m_p_oKeyboard, m_p_Tool3DMultiDevice);
|
|
break;
|
|
case C_wTool3D_Char:
|
|
case C_wTool3D_Geom_Object:
|
|
case C_wTool3D_Viewer:
|
|
case C_wTool3D_Object:
|
|
m_p_Tool3DContact = new CPA_Contact(m_p_Tool3DMultiDevice);
|
|
break;
|
|
}
|
|
m_p_Tool3DMultiDevice -> SetContact ( m_p_Tool3DContact ) ;
|
|
m_p_Tool3DMultiDevice -> SetWorld ( m_p_Tool3DWorld ) ;
|
|
m_p_Tool3DMultiDevice -> SetInterface ( GetInterface() ) ;
|
|
//chbani GetInterface()->SetMultiDevice(m_p_Tool3DMultiDevice);
|
|
m_csLastSelectMode = GetInterface()-> GetSelectMode();
|
|
GetInterface()-> SetSelectMode("All Types");
|
|
// create camera for main device (if there is none!)
|
|
if (((DEV_ViewPort3D*)(m_p_Tool3DMultiDevice->GetDevice(0)->GetViewPort()))->GetCamera() == NULL)
|
|
{
|
|
CPA_CameraDLLBase *p_oCamDLL;
|
|
CPA_SuperObject *p_oCameraSO;
|
|
|
|
p_oCamDLL = (CPA_CameraDLLBase*) GetMainWorld()->GetObjectDLLWithName(C_szDLLCameraName);
|
|
ASSERT(p_oCamDLL != NULL);
|
|
|
|
p_oCameraSO = p_oCamDLL->CreateDefaultCamera();
|
|
ASSERT(p_oCameraSO != NULL);
|
|
|
|
((DEV_ViewPort3D*)(m_p_Tool3DMultiDevice->GetDevice(0)->GetViewPort()))->ChangeCamera(p_oCameraSO);
|
|
}
|
|
|
|
GetInterface()->SetMultiDevice(m_p_Tool3DMultiDevice); //chbani
|
|
// create world
|
|
switch (m_wTypeOfTool)
|
|
{
|
|
// char
|
|
case C_wTool3D_Char:
|
|
//m_p_oSprObjActor = (CPA_SuperObject*)_lParam;
|
|
//m_p_Tool3DWorld -> mfn_vCreateHierarchyFromActor( (CPA_SuperObject*)_lParam) ;
|
|
mfn_vOpenAnim( (CPA_SuperObject*)_lParam ) ;
|
|
break;
|
|
// mod
|
|
case C_wTool3D_Mod_Object:
|
|
m_p_Tool3DWorld -> mfn_vCreateGridHierarchyFromActor((CPA_SuperObject*)_lParam);
|
|
break;
|
|
case C_wTool3D_Mod_List:
|
|
m_p_Tool3DWorld -> mfn_vCreateGridHierarchyFromList((CPA_List<CPA_BaseObject>*)_lParam,GetMainWorld());
|
|
break;
|
|
case C_wTool3D_Table:
|
|
m_p_Tool3DWorld -> mfn_vCreateGridHierarchyFromTable((CPA_BaseObject*)_lParam,GetMainWorld());
|
|
break;
|
|
// geom
|
|
case C_wTool3D_Geom_Object:
|
|
m_p_Tool3DWorld -> mfn_vCreateHierarchyFromSuperObject( (CPA_SuperObject*)_lParam) ;
|
|
break;
|
|
case C_wTool3D_Viewer:
|
|
m_p_Tool3DWorld -> mfn_vCreateViewerHierarchyFromVWOIList(&m_oListOfVWObjInfo,GetMainWorld());
|
|
break;
|
|
case C_wTool3D_Object:
|
|
m_p_Tool3DWorld -> mfn_vCreateHierarchyFromObject((CPA_BaseObject*)_lParam);
|
|
break;
|
|
}
|
|
m_p_Tool3DMultiDevice->SetFocusDevice(0);
|
|
|
|
// activate Frame
|
|
m_p_PreviousFRMBase = (FRMBaseMenu*)g_oFrameGest.ma_p_oWinArray[2][2];
|
|
m_p_FRMBase->fn_vShowGeneralInterface(TRUE);
|
|
g_oFrameGest.mfn_vSetRefresh(FALSE);
|
|
g_oFrameGest.mfn_vActivateWindow (m_p_FRMBase) ;
|
|
g_oFrameGest.mfn_vSetRefresh(TRUE);
|
|
// m_p_FRMBase->m_dwCaptionStyle = WS_CAPTION|WS_MINIMIZEBOX;
|
|
// m_p_FRMBase->mfn_vEnableCaption(TRUE);
|
|
// special init
|
|
switch (m_wTypeOfTool)
|
|
{
|
|
case C_wTool3D_Char:
|
|
mfn_vCenterCamera( m_p_Tool3DMultiDevice -> GetFocusDevice() , m_p_Tool3DWorld -> GetRoot() -> GetSuperObjectFirstChild() );
|
|
m_p_FRMBase -> SetWindowText( "Tool3D : Character View" );
|
|
break;
|
|
case C_wTool3D_Mod_Object:
|
|
case C_wTool3D_Mod_List:
|
|
case C_wTool3D_Table:
|
|
// positione super-object on a grid
|
|
M_ContactGrid()->m_fn_vPositionWorldOnGrid();
|
|
M_ContactGrid()->m_fn_vShowGrid();
|
|
M_ContactGrid()->m_fn_vShowSelection();
|
|
m_p_FRMBase -> SetWindowText( "Tool3D : Modules Grid View" );
|
|
break;
|
|
case C_wTool3D_Geom_Object:
|
|
mfn_vCenterCamera( m_p_Tool3DMultiDevice -> GetFocusDevice() , m_p_Tool3DWorld -> GetRoot() -> GetSuperObjectFirstChild() );
|
|
m_p_FRMBase -> SetWindowText( "Tool3D : Single Module View" );
|
|
break;
|
|
case C_wTool3D_Viewer:
|
|
mfn_vRestoreCameraOnTarget( 0 );
|
|
m_p_FRMBase -> SetWindowText( "Tool3D : Viewer" );
|
|
break;
|
|
case C_wTool3D_Object:
|
|
mfn_vCenterCamera( m_p_Tool3DMultiDevice -> GetFocusDevice() , m_p_Tool3DWorld -> GetRoot() -> GetSuperObjectFirstChild() );
|
|
m_p_FRMBase -> SetWindowText( "Tool3D : Single Module View" );
|
|
break;
|
|
}
|
|
//
|
|
m_p_Tool3DMultiDevice -> SetFocusDevice( 0 );
|
|
//
|
|
GetInterface() -> fn_vChangeWorld();
|
|
|
|
// call Zone DLL
|
|
CPA_DLLBase *p_oDLLZone = GetMainWorld() -> GetObjectDLLWithName( C_szDLLZDxName );
|
|
if( p_oDLLZone )
|
|
p_oDLLZone -> OnQueryInfos( pCallingDLL, C_uiQueryInfoT3DStateChange, m_wTypeOfTool);
|
|
|
|
// redraw the world
|
|
M_RedrawAll();
|
|
|
|
// display Tip of the Day
|
|
switch (m_wTypeOfTool)
|
|
{
|
|
case C_wTool3D_Char:
|
|
GetInterface()->fn_vDisplayTipOfDay("Tool 3D", "T3D", g_bTipToolFirstTime);
|
|
g_bTipToolFirstTime = FALSE;
|
|
break;
|
|
case C_wTool3D_Mod_Object:
|
|
case C_wTool3D_Mod_List:
|
|
case C_wTool3D_Table:
|
|
GetInterface()->fn_vDisplayTipOfDay("Grid View", "T3G", g_bTipGridFirstTime);
|
|
g_bTipGridFirstTime = FALSE;
|
|
break;
|
|
case C_wTool3D_Geom_Object:
|
|
GetInterface()->fn_vDisplayTipOfDay("Tool 3D", "T3D", g_bTipToolFirstTime);
|
|
g_bTipToolFirstTime = FALSE;
|
|
break;
|
|
case C_wTool3D_Viewer:
|
|
GetInterface()->fn_vDisplayTipOfDay("Anim Player", "TAN", g_bTipAnimFirstTime);
|
|
g_bTipAnimFirstTime = FALSE;
|
|
break;
|
|
case C_wTool3D_Object:
|
|
GetInterface()->fn_vDisplayTipOfDay("Tool 3D", "T3D", g_bTipToolFirstTime);
|
|
g_bTipToolFirstTime = FALSE;
|
|
break;
|
|
}
|
|
|
|
// update buttons
|
|
m_p_FRMBase->m_oGeneralDialogBar.ShowWindow(TRUE);
|
|
|
|
return ((long)TRUE);
|
|
}
|
|
|
|
long Tool3D_Interface::OnQueryAction(CPA_EditorBase*, WPARAM _wParam, LPARAM _lParam)
|
|
{
|
|
long lResult = (long)TRUE;
|
|
// WPARAM = type of action
|
|
// LPARAM = data action
|
|
switch (_wParam)
|
|
{
|
|
// C_3DCharTool
|
|
// C_3DModTool
|
|
case C_wTool3D_QA_ShowGrid:
|
|
if( (m_wTypeOfTool==C_wTool3D_Mod_Object) || (m_wTypeOfTool==C_wTool3D_Mod_List) || (m_wTypeOfTool==C_wTool3D_Table))
|
|
{
|
|
M_ContactGrid()->m_fn_vShowGrid();
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
case C_wTool3D_QA_HideGrid:
|
|
if( (m_wTypeOfTool==C_wTool3D_Mod_Object) || (m_wTypeOfTool==C_wTool3D_Mod_List) || (m_wTypeOfTool==C_wTool3D_Table) )
|
|
{
|
|
M_ContactGrid()->m_fn_vHideGrid();
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
case C_wTool3D_QA_ShowSelect:
|
|
if( (m_wTypeOfTool==C_wTool3D_Mod_Object) || (m_wTypeOfTool==C_wTool3D_Mod_List) || (m_wTypeOfTool==C_wTool3D_Table) )
|
|
{
|
|
M_ContactGrid()->m_fn_vShowSelection();
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
case C_wTool3D_QA_HideSelect:
|
|
if( (m_wTypeOfTool==C_wTool3D_Mod_Object) || (m_wTypeOfTool==C_wTool3D_Mod_List) || (m_wTypeOfTool==C_wTool3D_Table) )
|
|
{
|
|
M_ContactGrid()->m_fn_vHideSelection();
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
case C_wTool3D_QA_NewChar:
|
|
if( (m_wTypeOfTool==C_wTool3D_Char) && fn_bCanUseObject(C_wTool3D_Char,_lParam) )
|
|
{
|
|
m_p_Tool3DWorld -> mfn_vResetWorld();
|
|
//m_p_Tool3DWorld -> mfn_vCreateHierarchyFromActor( (CPA_SuperObject*)_lParam);
|
|
mfn_vOpenAnim( (CPA_SuperObject*)_lParam);
|
|
mfn_vCenterCamera( m_p_Tool3DMultiDevice -> GetFocusDevice() , m_p_Tool3DWorld -> GetRoot() -> GetSuperObjectFirstChild() );
|
|
m_p_Tool3DMultiDevice -> SetFocusDevice( 0 );
|
|
//
|
|
GetInterface() -> fn_vChangeWorld();
|
|
// redraw the world
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
case C_wTool3D_QA_NewSuperObject:
|
|
if( (m_wTypeOfTool==C_wTool3D_Geom_Object) && fn_bCanUseObject(C_wTool3D_Geom_Object,_lParam) )
|
|
{
|
|
m_p_Tool3DWorld -> mfn_vResetWorld();
|
|
m_p_Tool3DWorld -> mfn_vCreateHierarchyFromSuperObject( (CPA_SuperObject*)_lParam);
|
|
mfn_vCenterCamera( m_p_Tool3DMultiDevice -> GetFocusDevice() , m_p_Tool3DWorld -> GetRoot() -> GetSuperObjectFirstChild() );
|
|
m_p_Tool3DMultiDevice -> SetFocusDevice( 0 );
|
|
//
|
|
GetInterface() -> fn_vChangeWorld();
|
|
// redraw the world
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
case C_wTool3D_QA_NewTable:
|
|
if( (m_wTypeOfTool==C_wTool3D_Table) && fn_bCanUseObject(C_wTool3D_Table,_lParam) )
|
|
{
|
|
m_p_Tool3DWorld -> mfn_vResetWorld();
|
|
m_p_Tool3DWorld -> mfn_vCreateGridHierarchyFromTable( (CPA_BaseObject*)_lParam, GetMainWorld());
|
|
// positione super-object on a grid
|
|
M_ContactGrid()->m_fn_vPositionWorldOnGrid();
|
|
M_ContactGrid()->m_fn_vShowGrid();
|
|
M_ContactGrid()->m_fn_vShowSelection();
|
|
m_p_Tool3DMultiDevice -> SetFocusDevice( 0 );
|
|
//
|
|
GetInterface() -> fn_vChangeWorld();
|
|
// redraw the world
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
case C_wTool3D_QA_NewObject:
|
|
if( (m_wTypeOfTool==C_wTool3D_Object) && fn_bCanUseObject(C_wTool3D_Object,_lParam) )
|
|
{
|
|
m_p_Tool3DWorld -> mfn_vResetWorld();
|
|
m_p_Tool3DWorld -> mfn_vCreateHierarchyFromObject( (CPA_BaseObject*)_lParam);
|
|
mfn_vCenterCamera( m_p_Tool3DMultiDevice -> GetFocusDevice() , m_p_Tool3DWorld -> GetRoot() -> GetSuperObjectFirstChild() );
|
|
m_p_Tool3DMultiDevice -> SetFocusDevice( 0 );
|
|
//
|
|
GetInterface() -> fn_vChangeWorld();
|
|
// redraw the world
|
|
M_RedrawAll();
|
|
}
|
|
break;
|
|
// C_3DGeomTool
|
|
default:
|
|
lResult = (long)FALSE;
|
|
}
|
|
return lResult;
|
|
}
|
|
|
|
long Tool3D_Interface::OnQueryInfos(CPA_EditorBase*, WPARAM _wParam, LPARAM _lParam)
|
|
{
|
|
long lResult = (long)FALSE;
|
|
//_wParam = Request
|
|
// return ptr on object according to WPARAM
|
|
switch(_wParam)
|
|
{
|
|
case C_wTool3D_QI_CanOpenChar:
|
|
// only if current selection is a character
|
|
lResult = (long) fn_bCanOpenTool(C_wTool3D_Char);
|
|
break;
|
|
case C_wTool3D_QI_CanOpenMod:
|
|
// only if current selection is a character
|
|
lResult = (long) fn_bCanOpenTool(C_wTool3D_Mod_Object);
|
|
break;
|
|
case C_wTool3D_QI_CanOpenGeom:
|
|
// only if current selection is a geometric object
|
|
lResult = (long) fn_bCanOpenTool(C_wTool3D_Geom_Object);
|
|
break;
|
|
case C_wTool3D_QI_CanOpenViewer:
|
|
// only if viewer contents isn't empty
|
|
lResult = (long) ( (CPA_List<CPA_BaseObject>*)_lParam ) -> GetCount();
|
|
break;
|
|
case C_wTool3D_QI_CanOpenTable:
|
|
// only if viewer contents isn't empty
|
|
lResult = (long) fn_bCanOpenTool(C_wTool3D_Geom_Object);
|
|
break;
|
|
case C_wTool3D_Object:
|
|
// only if current selection is an object
|
|
lResult = (long) fn_bCanOpenTool(C_wTool3D_Object);
|
|
break;
|
|
case C_wTool3D_QI_GetState:
|
|
lResult = (long) m_wTypeOfTool;
|
|
break;
|
|
case C_wTool3D_QI_GetWorld:
|
|
lResult = (long) m_p_Tool3DWorld;
|
|
break;
|
|
case C_wTool3D_QI_GetSOOnGrid:
|
|
if ( (m_wTypeOfTool==C_wTool3D_Mod_Object) || (m_wTypeOfTool==C_wTool3D_Mod_List) || (m_wTypeOfTool==C_wTool3D_Table))
|
|
lResult = (long) M_ContactGrid() -> m_fn_p_oGetSuperObjectFromPos( (tdstMousePos*) _lParam );
|
|
break;
|
|
}
|
|
return lResult;
|
|
}
|
|
|
|
long Tool3D_Interface::OnQueryClose(CPA_EditorBase* pCallingDLL, WPARAM, LPARAM)
|
|
{
|
|
long lResult = (long)TRUE;
|
|
|
|
if( fn_bIsCurrentEditor() )
|
|
GetMainWorld() -> fn_bCloseEditor(this);
|
|
|
|
switch (m_wTypeOfTool)
|
|
{
|
|
case C_wTool3D_Viewer:
|
|
case C_wTool3D_Char:
|
|
case C_wTool3D_Mod_Object:
|
|
case C_wTool3D_Mod_List:
|
|
case C_wTool3D_Geom_Object:
|
|
case C_wTool3D_Object:
|
|
case C_wTool3D_Table:
|
|
// activate previous frame
|
|
g_oFrameGest.mfn_vSetRefresh(FALSE);
|
|
g_oFrameGest.mfn_vActivateWindow (m_p_PreviousFRMBase) ;
|
|
g_oFrameGest.mfn_vSetRefresh(TRUE);
|
|
M_GetMainWnd()->SendMessage(WM_SYSCOMMAND,SC_RESTORE);
|
|
// delete hierarchy
|
|
m_p_Tool3DWorld -> mfn_vResetWorld();
|
|
delete m_p_Tool3DContact;
|
|
// restore previous multidevice
|
|
GetInterface()->SetMultiDevice(m_p_PreviousMultiDevice);
|
|
GetInterface()->SetSelectMode(m_csLastSelectMode);
|
|
|
|
m_p_Tool3DMultiDevice->SetInterface(NULL);
|
|
m_p_Tool3DMultiDevice->SetContact(NULL);
|
|
// light
|
|
GetMainWorld() -> m_lNbLocalLights -= 4;
|
|
// restore buttons
|
|
m_p_PreviousFRMBase->m_oGeneralDialogBar.ShowWindow(TRUE);
|
|
|
|
break;
|
|
default:
|
|
lResult = (long)FALSE;
|
|
}
|
|
m_wTypeOfTool = C_wTool3D_None;
|
|
|
|
// call Zone DLL
|
|
CPA_DLLBase *p_oDLLZone = GetMainWorld() -> GetObjectDLLWithName( C_szDLLZDxName );
|
|
if( p_oDLLZone )
|
|
p_oDLLZone -> OnQueryInfos( pCallingDLL, C_uiQueryInfoT3DStateChange, m_wTypeOfTool);
|
|
|
|
// M_GetMainApp()->m_bViewerOpened = FALSE;
|
|
return lResult;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description :
|
|
//--------------------------------------------------------------------------------
|
|
BOOL Tool3D_Interface::fn_bTypeOfToolOK(long _wType)
|
|
{
|
|
return ( (_wType==C_wTool3D_Char) ||
|
|
(_wType==C_wTool3D_Mod_Object) || (_wType==C_wTool3D_Mod_List) ||
|
|
(_wType==C_wTool3D_Geom_Object) || (_wType==C_wTool3D_Viewer) ||
|
|
(_wType==C_wTool3D_Table) || (_wType==C_wTool3D_Object)
|
|
);
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description :
|
|
//--------------------------------------------------------------------------------
|
|
BOOL Tool3D_Interface::fn_bCanUseObject(long _wType, long _lParam)
|
|
{
|
|
CPA_BaseObject *p_oObject = NULL;
|
|
CPA_BaseObject *p_oReaObj = NULL;
|
|
|
|
switch (_wType)
|
|
{
|
|
case C_wTool3D_Char:
|
|
case C_wTool3D_Mod_Object:
|
|
p_oReaObj = (CPA_BaseObject*)_lParam;
|
|
if( p_oReaObj -> fn_bIsOfType( C_szSuperObjectTypeName ) )
|
|
{
|
|
p_oObject = ((CPA_SuperObject*)p_oReaObj) -> GetObject();
|
|
return ( p_oObject &&
|
|
p_oObject -> fn_bIsOfType( C_szActorInstanceTypeName ) &&
|
|
(((CPA_SuperObject*)p_oReaObj) -> GetCount() > 0)
|
|
);
|
|
}
|
|
return FALSE;
|
|
break;
|
|
case C_wTool3D_Geom_Object:
|
|
p_oReaObj = (CPA_BaseObject*)_lParam;
|
|
if( p_oReaObj -> fn_bIsOfType( C_szSuperObjectTypeName ) )
|
|
{
|
|
p_oObject = ((CPA_SuperObject*)p_oReaObj) -> GetObject();
|
|
return ( p_oObject &&
|
|
( p_oObject -> fn_bIsOfType( C_szGeometricObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szPhysicalObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szInstanciatedPhysicalObjectTypeName )
|
|
)
|
|
);
|
|
}
|
|
return FALSE;
|
|
break;
|
|
case C_wTool3D_None:
|
|
return TRUE;
|
|
break;
|
|
case C_wTool3D_Mod_List:
|
|
return ( _lParam && ((CPA_List<CPA_BaseObject>*)_lParam) -> GetCount() );
|
|
case C_wTool3D_Viewer:
|
|
return ( (BOOL) m_oListOfVWObjInfo . GetCount() );
|
|
break;
|
|
case C_wTool3D_Table:
|
|
p_oReaObj = (CPA_BaseObject*)_lParam;
|
|
return ( p_oReaObj && p_oReaObj -> fn_bIsOfType( C_szDLLObjectTableName ) );
|
|
break;
|
|
case C_wTool3D_Object:
|
|
p_oObject = (CPA_BaseObject*)_lParam;
|
|
return ( p_oObject &&
|
|
( p_oObject -> fn_bIsOfType( C_szGeometricObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szPhysicalObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szInstanciatedPhysicalObjectTypeName )
|
|
)
|
|
);
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description :
|
|
//--------------------------------------------------------------------------------
|
|
BOOL Tool3D_Interface::fn_bCanOpenTool(long _wType)
|
|
{
|
|
BOOL bResult = FALSE;
|
|
CPA_SuperObject *p_oSprObj = NULL;
|
|
CPA_BaseObject *p_oObject = NULL;
|
|
|
|
switch (_wType)
|
|
{
|
|
case C_wTool3D_Char:
|
|
case C_wTool3D_Mod_Object:
|
|
case C_wTool3D_Mod_List:
|
|
case C_wTool3D_Table:
|
|
if( M_GetWorld()->GetCountSelected() == 1 )
|
|
{
|
|
CPA_Family *p_oFamily = NULL;
|
|
CPA_Animation *p_oAnimation = NULL;
|
|
EditorObjectTable *p_oObjectTable = NULL;
|
|
unsigned short uwFrame = 0;
|
|
|
|
p_oSprObj = M_GetWorld()->GetSingleSelection();
|
|
p_oObject = p_oSprObj -> GetObject();
|
|
bResult = ( p_oObject &&
|
|
p_oObject -> fn_bIsOfType( C_szActorInstanceTypeName ) &&
|
|
( p_oSprObj -> GetCount() > 0) &&
|
|
mfn_bFindInfoAboutActor( p_oSprObj, &p_oFamily, &p_oAnimation, &p_oObjectTable, &uwFrame )
|
|
);
|
|
}
|
|
break;
|
|
case C_wTool3D_Geom_Object:
|
|
if( M_GetWorld()->GetCountSelected() == 1 )
|
|
{
|
|
p_oSprObj = M_GetWorld()->GetSingleSelection();
|
|
p_oObject = p_oSprObj -> GetObject();
|
|
bResult = ( p_oObject &&
|
|
( p_oObject -> fn_bIsOfType( C_szGeometricObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szPhysicalObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szInstanciatedPhysicalObjectTypeName )
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case C_wTool3D_None:
|
|
bResult = TRUE;
|
|
break;
|
|
case C_wTool3D_Viewer:
|
|
bResult = (fn_bToolActive(C_wTool3D_None) && m_oListOfVWObjInfo . GetCount());
|
|
break;
|
|
case C_wTool3D_Object:
|
|
if( M_GetWorld()->GetCountSelected() == 1 )
|
|
{
|
|
p_oObject = M_GetWorld()->GetSingleSelection() -> GetObject();
|
|
bResult = ( p_oObject &&
|
|
( p_oObject -> fn_bIsOfType( C_szGeometricObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szPhysicalObjectTypeName ) ||
|
|
p_oObject -> fn_bIsOfType( C_szInstanciatedPhysicalObjectTypeName )
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description :
|
|
//--------------------------------------------------------------------------------
|
|
BOOL Tool3D_Interface::fn_bToolActive(long _wType)
|
|
{
|
|
BOOL bResult = FALSE;
|
|
|
|
switch(_wType)
|
|
{
|
|
case C_wTool3D_Mod_Object:
|
|
case C_wTool3D_Mod_List:
|
|
bResult = ( (m_wTypeOfTool==C_wTool3D_Mod_Object) || (m_wTypeOfTool==C_wTool3D_Mod_List) );
|
|
break;
|
|
case C_wTool3D_Geom_Object:
|
|
bResult = (m_wTypeOfTool==C_wTool3D_Geom_Object);
|
|
break;
|
|
case C_wTool3D_Char:
|
|
case C_wTool3D_None:
|
|
case C_wTool3D_Viewer:
|
|
case C_wTool3D_Table:
|
|
case C_wTool3D_Object:
|
|
bResult = (m_wTypeOfTool==_wType);
|
|
break;
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description : add a new object to list
|
|
//--------------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vAddAnObject(CPA_SuperObject *_p_oSprObj, BOOL _bUseCameraPos /*=TRUE*/)
|
|
{
|
|
tdst_VW_ObjInfo *p_stObjInfo = NULL;
|
|
|
|
// object already targeted ?
|
|
POSITION stPos = m_oListOfVWObjInfo . GetHeadPosition();
|
|
while( stPos )
|
|
{
|
|
tdst_VW_ObjInfo *p_stVWOI = m_oListOfVWObjInfo . GetNext( stPos );
|
|
if( p_stVWOI -> m_p_oSuperObject == _p_oSprObj )
|
|
{
|
|
p_stObjInfo = p_stVWOI;
|
|
break;
|
|
}
|
|
}
|
|
// if not found, create one
|
|
if( p_stObjInfo == NULL )
|
|
{
|
|
p_stObjInfo = (tdst_VW_ObjInfo*) malloc( sizeof (tdst_VW_ObjInfo ) );
|
|
m_oListOfVWObjInfo . AddHead( p_stObjInfo );
|
|
}
|
|
|
|
// fill tdst_VW_ObjInfo
|
|
p_stObjInfo -> m_p_oSuperObject = _p_oSprObj;
|
|
p_stObjInfo -> m_bUsePos = _bUseCameraPos;
|
|
POS_fn_vSetIdentityMatrix(&p_stObjInfo -> stMatrix);
|
|
if(p_stObjInfo -> m_bUsePos)
|
|
{
|
|
CPA_CameraDLLBase *p_oCameraInterface = M_GetLSTCameraInterface ();
|
|
CPA_BaseObject *p_oCamera = M_DeviceCamera( M_GetMultiDevice3D()->GetFocusDevice() );
|
|
POS_tdxHandleToPosition p_stMatrix = HIE_fn_hGetSuperObjectMatrix( _p_oSprObj->GetStruct() );
|
|
POS_tdstCompletePosition stCameraMatrix , stInvMatrix;
|
|
|
|
POS_fn_vSetIdentityMatrix(&stCameraMatrix);
|
|
POS_fn_vSetIdentityMatrix(&stInvMatrix);
|
|
|
|
p_oCameraInterface -> GetMatrix( p_oCamera, &stCameraMatrix );
|
|
POS_fn_vInvertMatrix( &stInvMatrix, p_stMatrix );
|
|
POS_fn_vMulMatrixMatrix( & p_stObjInfo -> stMatrix, &stInvMatrix, & stCameraMatrix );
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description : add a list of objects to list
|
|
//--------------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vAddAListOfSuperObject(CPA_List<CPA_SuperObject> *_p_oList, BOOL _bUseCameraPos /*=TRUE*/)
|
|
{
|
|
// add superobject to list
|
|
POSITION stPos = _p_oList -> GetHeadPosition ();
|
|
while ( stPos )
|
|
{
|
|
CPA_SuperObject *p_oSprObj = _p_oList -> GetNext( stPos );
|
|
if( p_oSprObj && p_oSprObj -> GetObject() )
|
|
mfn_vAddAnObject( p_oSprObj , _bUseCameraPos );
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description : Set camera to see target
|
|
//--------------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vCenterCamera(DEV_Device *p_oDevice, CPA_SuperObject *_p_oSprObj)
|
|
{
|
|
CPA_CameraDLLBase *p_oCameraInterface = M_GetLSTCameraInterface ();
|
|
CPA_BaseObject *p_oCamera = M_DeviceCamera( p_oDevice );
|
|
MTH3D_tdstVector stObjPos;
|
|
MTH_tdxReal xRadius;
|
|
|
|
|
|
// get Object Position
|
|
if( m_p_Tool3DWorld -> mfn_bComputeCenterAndRadiusBoundingBox( _p_oSprObj, &stObjPos, &xRadius ) )
|
|
{
|
|
MTH_tdxReal xAlphaX,xRatio;
|
|
CPA_CameraCoords CameraCoords;
|
|
|
|
GLI_xGetCameraAspectAndRatio((GLI_tdxHandleToCamera)p_oCamera->GetData(),&xAlphaX,&xRatio);
|
|
|
|
/*
|
|
float fD1 = MTH_M_xRealToFloat(MTH_M_xDiv(xRadius, MTH_M_xTan(MTH_M_xDiv(xAlphaX,2))));
|
|
float fD2 = MTH_M_xRealToFloat(MTH_M_xDiv(xRadius, MTH_M_xTan(MTH_M_xDiv(MTH_M_xMul(xAlphaX,xRatio),2))));
|
|
xRadius = ((fD1 > fD2)? fD1 : fD2);
|
|
*/
|
|
CameraCoords . SetXYZ (MTH_M_xRealToFloat( MTH3D_M_xGetXofVector( &stObjPos ) ),
|
|
MTH_M_xRealToFloat( MTH3D_M_xGetYofVector( &stObjPos ) ),
|
|
MTH_M_xRealToFloat( MTH3D_M_xGetZofVector( &stObjPos ) ) );
|
|
CameraCoords . SetAxisSystem (WorldCoordinates);
|
|
p_oCameraInterface -> SetTargetPoint( p_oCamera, & CameraCoords);
|
|
p_oCameraInterface -> SetTargetType (p_oCamera , tPoint);
|
|
// set position camera
|
|
CameraCoords . SetXYZ (MTH_M_xRealToFloat( MTH3D_M_xGetXofVector( &stObjPos )),
|
|
MTH_M_xRealToFloat( MTH3D_M_xGetYofVector( &stObjPos ) + MTH_M_xNeg( xRadius )),
|
|
MTH_M_xRealToFloat( MTH3D_M_xGetZofVector( &stObjPos )));
|
|
CameraCoords . SetAxisSystem (WorldCoordinates);
|
|
p_oCameraInterface -> SetPosition (p_oCamera , & CameraCoords);
|
|
|
|
// Free camera
|
|
p_oCameraInterface -> SetTargetType (p_oCamera , tNone);
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
// Description : Set camera to see target (NEW)
|
|
//--------------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vCenterCameraOnTarget(tdst_VW_ObjInfo *_p_stObjInfo)
|
|
{
|
|
CPA_CameraDLLBase *p_oCameraInterface = M_GetLSTCameraInterface ();
|
|
CPA_BaseObject *p_oCamera = M_GetLSTViewPort() -> GetCamera();
|
|
MTH3D_tdstVector stObjPos;
|
|
MTH_tdxReal xRadius;
|
|
CPA_SuperObject *p_oSprObj = _p_stObjInfo -> m_p_oSuperObject;
|
|
CPA_CameraCoords CameraCoords;
|
|
|
|
MTH3D_M_vNullVector( &stObjPos );
|
|
xRadius = 0;
|
|
|
|
// set target
|
|
p_oCameraInterface -> SetTargetSuperObject( p_oCamera, p_oSprObj );
|
|
p_oCameraInterface -> SetTargetType (p_oCamera , tSuperObject);
|
|
// set camera pos
|
|
if( _p_stObjInfo -> m_bUsePos )
|
|
{
|
|
POS_tdxHandleToPosition hMatrix = HIE_fn_hGetSuperObjectMatrix( p_oSprObj -> GetStruct() );
|
|
POS_tdstCompletePosition stCameraMatrix;
|
|
|
|
POS_fn_vSetIdentityMatrix(&stCameraMatrix);
|
|
POS_fn_vMulMatrixMatrix( & stCameraMatrix, hMatrix, & _p_stObjInfo -> stMatrix );
|
|
|
|
p_oCameraInterface -> SetMatrix( p_oCamera, & stCameraMatrix );
|
|
}
|
|
else
|
|
{
|
|
m_p_Tool3DWorld -> mfn_bComputeCenterAndRadiusBoundingBox( p_oSprObj, &stObjPos, &xRadius );
|
|
xRadius = (float) MTH_M_xMul( xRadius ? xRadius : 1 , C_xCameraDist );
|
|
// set position camera
|
|
CameraCoords . SetXYZ ( MTH_M_xRealToFloat( MTH3D_M_xGetXofVector( &stObjPos ) ),
|
|
MTH_M_xRealToFloat( MTH3D_M_xGetYofVector( &stObjPos ) + MTH_M_xNeg( xRadius ) ),
|
|
MTH_M_xRealToFloat( MTH3D_M_xGetZofVector( &stObjPos ) ) );
|
|
CameraCoords . SetAxisSystem (WorldCoordinates);
|
|
p_oCameraInterface -> SetPosition (p_oCamera , & CameraCoords);
|
|
}
|
|
|
|
// Free camera
|
|
p_oCameraInterface -> SetTargetType (p_oCamera , tNone);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : Open Viewer Content Dialog
|
|
// ----------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vEditViewerContent()
|
|
{
|
|
HINSTANCE hOldInst = AfxGetResourceHandle();
|
|
AfxSetResourceHandle( m_p_stDLLIdentity->hModule );
|
|
|
|
CDlgViewerContent *p_oDlg = new CDlgViewerContent(GetMainWorld(),&m_oListOfVWObjInfo);
|
|
int iResult = p_oDlg -> DoModal();
|
|
|
|
if( iResult == C_OPENVIEWER )
|
|
OnQueryOpen(NULL, (WPARAM)C_wTool3D_Viewer, 0);
|
|
|
|
delete p_oDlg;
|
|
|
|
AfxSetResourceHandle( hOldInst );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : Restore camera on saved target (NEW)
|
|
// ----------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vRestoreCameraOnTarget( int _iTarget )
|
|
{
|
|
ASSERT( ( _iTarget >= 0 ) && ( _iTarget<= M_GetNbObjects() ) );
|
|
POSITION stPos = m_oListOfVWObjInfo . FindIndex( _iTarget );
|
|
if ( stPos )
|
|
{
|
|
mfn_vCenterCameraOnTarget( m_oListOfVWObjInfo . GetAt( stPos ) );
|
|
M_RedrawAll();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : Restore camera on saved target (NEW)
|
|
// ----------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vResetViewerContent()
|
|
{
|
|
while( ! m_oListOfVWObjInfo . IsEmpty() )
|
|
free( m_oListOfVWObjInfo . RemoveHead() );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void Tool3D_Interface::mfn_vOpenAnim(CPA_SuperObject *_p_oSprObjActor)
|
|
{
|
|
m_p_oSprObjActor = m_p_Tool3DWorld -> mfn_p_oCreateHierarchyFromAnim(_p_oSprObjActor);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
BOOL Tool3D_Interface::mfn_bFindInfoAboutActor(CPA_SuperObject *_p_oSprObj, CPA_Family **_p_p_oFamily,
|
|
CPA_Animation **_p_p_oAnim, EditorObjectTable **_p_p_oObjectTable,
|
|
unsigned short *_p_uwFrame)
|
|
{
|
|
BOOL bResult = TRUE;
|
|
CPA_Family *p_oFamily = NULL;
|
|
|
|
// init
|
|
if( _p_p_oFamily ) *_p_p_oFamily = NULL;
|
|
if( _p_p_oAnim ) *_p_p_oAnim = NULL;
|
|
if( _p_p_oObjectTable ) *_p_p_oObjectTable = NULL;
|
|
if( _p_uwFrame ) *_p_uwFrame = 0;
|
|
//
|
|
HIE_tdxHandleToSuperObject hSO = _p_oSprObj -> GetStruct();
|
|
MS_tdxHandleTo3dData h3dData = M_GetMSHandle( hSO, 3dData );
|
|
|
|
if( h3dData == NULL ) return FALSE;
|
|
|
|
tdxHandleToState hState = fn_h3dDataGetCurrentState( h3dData ) ? fn_h3dDataGetCurrentState( h3dData )
|
|
: fn_h3dDataGetInitialState( h3dData );
|
|
struct tdstAnim3d_ *p_stAnim = hState ? fn_p_stGetAnimInState( hState ) : NULL;
|
|
unsigned short uwFrame = fn_uw3dDataGetCurrentFrame( h3dData );
|
|
tdxHandleToObjectsTablesList hObjectTable = fn_h3dDataGetCurrentObjectsTable( h3dData );
|
|
|
|
p_oFamily = (CPA_Family*) _p_oSprObj -> GetObject() -> GetOwner() -> GetOwner();
|
|
|
|
if( _p_p_oFamily )
|
|
{
|
|
*_p_p_oFamily = p_oFamily;
|
|
bResult = ( *_p_p_oFamily != NULL );
|
|
}
|
|
|
|
if( _p_p_oAnim )
|
|
{
|
|
*_p_p_oAnim = p_stAnim ? (CPA_Animation*)GetMainWorld() -> fn_p_oFindObjectWithEngine( p_stAnim, C_szAnimationTypeName, p_oFamily ) : NULL;
|
|
bResult &= ( ( *_p_p_oAnim != NULL ) && ( (*_p_p_oAnim) -> fn_bIsAvailable() ) );
|
|
}
|
|
|
|
if( _p_uwFrame )
|
|
{
|
|
*_p_uwFrame = uwFrame;
|
|
}
|
|
|
|
if( _p_p_oObjectTable )
|
|
{
|
|
*_p_p_oObjectTable = hObjectTable ? (EditorObjectTable*)GetMainWorld() -> fn_p_oFindObjectWithEngine( hObjectTable, C_szObjectTableTypeName, p_oFamily ) : NULL;
|
|
bResult &= ( ( *_p_p_oObjectTable != NULL ) && ( (*_p_p_oObjectTable) -> fn_bIsAvailable() ) );
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
|
|
//Stefan Dumitrean 28-05-98
|
|
void Tool3D_Interface::GetListsForDialog(CPA_DialogList * pDialog)
|
|
{
|
|
|
|
CPA_List<CPA_BaseObject> clObjectsList;
|
|
if( GetMainWorld()->fn_lFindObjects( &clObjectsList, "", C_szFamilyTypeName ) )
|
|
{
|
|
POSITION pos;
|
|
m_p_oAnimFrame->m_p_clBaseObjectList->DeleteAllElements();
|
|
pos = clObjectsList.GetHeadPosition();
|
|
while( pos )
|
|
m_p_oAnimFrame->m_p_clBaseObjectList->fn_bAddObject( clObjectsList.GetNext( pos ) );
|
|
m_p_oAnimFrame->m_p_clDialogList->fn_vReinitDialog();
|
|
}
|
|
pDialog->fn_vAddANewList( T3DFamilyName, m_p_oAnimFrame->m_p_clBaseObjectList );
|
|
}
|
|
|
|
void Tool3D_Interface::fn_vInitDefaultParameters(CPA_DialogList *pDialog)
|
|
{
|
|
// pDialog->SetDefaultDisplay( m_p_oAnimFrame->m_bDisplayAllFam );
|
|
pDialog->SetDefaultDisplay( FALSE );
|
|
|
|
pDialog->SetDefaultButtonState( FALSE );
|
|
|
|
// pDialog->SetDefaultTestName( "Show Loaded Families" );
|
|
pDialog->SetDefaultTestName( "" );
|
|
|
|
pDialog->SetDefaultTypeName( T3DFamilyName );
|
|
}
|
|
|
|
BOOL Tool3D_Interface::fn_bOnButtonTest(CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDraw )
|
|
{
|
|
m_p_oAnimFrame->m_bDisplayAllFam = !m_p_oAnimFrame->m_bDisplayAllFam;
|
|
pDialog->SetDefaultDisplay( m_p_oAnimFrame->m_bDisplayAllFam );
|
|
if( m_p_oAnimFrame->m_bDisplayAllFam )
|
|
pDialog->fn_vInitButtonTest("Show Loaded Families", TRUE, FALSE );
|
|
else
|
|
pDialog->fn_vInitButtonTest("Show All Families", TRUE, FALSE );
|
|
pDialog->fn_vUpdateSelection( E_lrm_ReinitList );
|
|
pDialog->fn_vUpdateSelection( E_lrm_ChangeSelection );
|
|
return TRUE;
|
|
}
|
|
|
|
CPA_BaseObject* Tool3D_Interface::GetDialogSelection (CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDrawMode)
|
|
{
|
|
return (CPA_BaseObject*)m_p_CurrentFamily;
|
|
}
|
|
|
|
BOOL Tool3D_Interface::fn_bOnSelChangeListObjects(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject, BOOL bUnselect)
|
|
{
|
|
CPA_List<CPA_BaseObject> clObjectsList;
|
|
CPA_Actor *pInstance = NULL;
|
|
CPA_Actor *p_clActor;
|
|
CPA_Family *pOldFamily = m_p_CurrentFamily;
|
|
CPA_Family *p_oFamily1 = NULL;
|
|
CPA_Animation *p_oAnimation1 = NULL;
|
|
unsigned short uwFrame1 = 0;
|
|
|
|
|
|
if (!bUnselect && pSelectedObject)
|
|
{
|
|
m_p_CurrentFamily = (CPA_Family *) pSelectedObject;
|
|
|
|
if (GetMainWorld()->fn_lFindObjects(&clObjectsList, "", C_szActorInstanceTypeName))
|
|
{
|
|
//find the first instance of family m_p_CurrentFamily
|
|
POSITION pos = clObjectsList.GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
p_clActor = (CPA_Actor*)clObjectsList.GetNext(pos);
|
|
if (p_clActor && p_clActor->GetOwner() && p_clActor->GetOwner()->GetOwner())
|
|
{
|
|
if (p_clActor->GetOwner()->GetOwner()->GetName() == m_p_CurrentFamily->GetName())
|
|
{
|
|
if (mfn_bFindInfoAboutActor(p_clActor->m_pub_fn_pclGetSuperObject(), &p_oFamily1, &p_oAnimation1, NULL, &uwFrame1))
|
|
{
|
|
pInstance = p_clActor;
|
|
m_p_Tool3DWorld->mfn_vResetWorld();
|
|
m_p_Tool3DWorld->mfn_p_oCreateHierarchyFromAnim( p_clActor->m_pub_fn_pclGetSuperObject() );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!pInstance)
|
|
{
|
|
CPA_DLLBase *pclActorDLL = (CPA_DLLBase *) GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName);
|
|
CPA_SuperObject * pSupObj = (CPA_SuperObject *) pclActorDLL->OnQueryAction(this, C_uiActor_GetAnActorInstance, (LPARAM)m_p_CurrentFamily);
|
|
if (pSupObj && mfn_bFindInfoAboutActor(pSupObj, &p_oFamily1, &p_oAnimation1, NULL, &uwFrame1))
|
|
{
|
|
m_p_Tool3DWorld->mfn_vResetWorld();
|
|
m_p_Tool3DWorld->mfn_p_oCreateHierarchyFromAnim(pSupObj);
|
|
}
|
|
else
|
|
{
|
|
m_p_CurrentFamily = pOldFamily;
|
|
pDialog->fn_vUpdateSelection( E_lrm_ChangeSelection );
|
|
m_p_oAnimView->mfn_vInitDialog( m_p_CurrentFamily );
|
|
return TRUE;
|
|
}
|
|
}
|
|
m_p_oAnimView->mfn_vInitDialog( m_p_CurrentFamily );
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL Tool3D_Interface::fn_bOnDblClkListObjects(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject)
|
|
{
|
|
HCURSOR hWaitCursor;
|
|
HCURSOR hOldCursor;
|
|
CPA_Family *p_clFamily = (CPA_Family*)pSelectedObject;
|
|
|
|
hWaitCursor = AfxGetApp()->LoadStandardCursor( IDC_WAIT );
|
|
hOldCursor = SetCursor( hWaitCursor );
|
|
|
|
if( p_clFamily->GetEditor()->fn_bLoadBaseObject( p_clFamily ) )
|
|
fn_bOnSelChangeListObjects( pDialog, csTypeName, pSelectedObject, FALSE );
|
|
|
|
SetCursor( hOldCursor );
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void Tool3D_Interface::fn_vOnActivateEditorAnim()
|
|
{
|
|
CPA_Family *p_oFamily = NULL;
|
|
CPA_Animation *p_oAnimation = NULL;
|
|
CPA_Family *p_oFamily1 = NULL;
|
|
CPA_Animation *p_oAnimation1 = NULL;
|
|
|
|
CPA_List<CPA_BaseObject> clObjectsList;
|
|
CPA_SuperObject *p_clSuperObject;
|
|
|
|
POSITION pos;
|
|
|
|
unsigned short uwFrame = 0;
|
|
unsigned short uwFrame1 = 0;
|
|
|
|
GetMainWorld()->fn_lFindObjects( &clObjectsList, "", C_szActorInstanceTypeName );
|
|
pos = clObjectsList.GetHeadPosition();
|
|
|
|
while (pos)
|
|
{
|
|
p_clSuperObject = ((CPA_Actor *)clObjectsList.GetNext(pos))->m_pub_fn_pclGetSuperObject();
|
|
if (mfn_bFindInfoAboutActor( p_clSuperObject, &p_oFamily1, &p_oAnimation1, NULL, &uwFrame1) &&
|
|
p_clSuperObject->GetCount() > 0)
|
|
{
|
|
if (m_p_oSprObjActor)
|
|
{
|
|
if (p_oFamily1->GetName() < p_oFamily->GetName())
|
|
{
|
|
m_p_oSprObjActor = p_clSuperObject;
|
|
p_oFamily = p_oFamily1;
|
|
p_oAnimation = p_oAnimation1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_p_oSprObjActor = p_clSuperObject;
|
|
p_oFamily = p_oFamily1;
|
|
p_oAnimation = p_oAnimation1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (m_p_oSprObjActor)
|
|
{
|
|
if( ! fn_bToolActive(C_wTool3D_Char) )
|
|
{
|
|
OnQueryOpen(NULL,(WPARAM)C_wTool3D_Char,(LPARAM)m_p_oSprObjActor);
|
|
}
|
|
|
|
// can open editor
|
|
g_oFrameGest.mfn_vSetRefresh( FALSE );
|
|
g_oFrameGest.mfn_vActivateWindow ( m_p_FRMBase ) ;
|
|
g_oFrameGest.mfn_vActivateWindow( m_p_oAnimFrame );
|
|
g_oFrameGest.mfn_vSetRefresh( TRUE );
|
|
m_p_oAnimView -> mfn_vInitDialog( p_oFamily, p_oAnimation, uwFrame );
|
|
//Stefan Dumitrean 27-05-98
|
|
m_p_oAnimView->mfn_vSetFamilySelDialog( m_p_oAnimFrame->m_p_clDialogList );
|
|
|
|
m_p_oAnimFrame->m_p_clDialogList->fn_vInitAllLists();
|
|
m_p_oAnimFrame->m_p_clDialogList->fn_vReinitDialog();
|
|
m_p_CurrentFamily = p_oFamily;
|
|
m_p_oAnimFrame->m_p_clDialogList->fn_vUpdateSelection( E_lrm_ChangeSelection );
|
|
|
|
return;
|
|
//End Stefan Dumitrean 27-05-98
|
|
|
|
}
|
|
// can't open editor
|
|
GetMainWorld() -> fn_bCloseEditor(this);
|
|
}
|
|
|
|
#endif //ACTIVE_EDITOR
|