1345 lines
45 KiB
C++
1345 lines
45 KiB
C++
/*=========================================================================
|
|
*
|
|
* CPASObj.cpp - EDT_SuperObject : implementation
|
|
*
|
|
*
|
|
* Version 1.0
|
|
* Creation date 20.06.97
|
|
* Revision date
|
|
*
|
|
* Shaitan
|
|
*=======================================================================*/
|
|
#include "stdafx.h"
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
|
|
#include "acp_base.h"
|
|
|
|
#include "ITF.h"
|
|
#include "DPT.h"
|
|
|
|
#include "EDTModif.hpp"
|
|
|
|
#include "EDTSObj.hpp"
|
|
#include "EDTBase.hpp"
|
|
#include "EDTTemp.hpp"
|
|
#include "EDTModif.hpp"
|
|
|
|
#define HieFriend
|
|
#include "incSPO.h"
|
|
#undef HieFriend
|
|
|
|
#include "x:\cpa\Main\inc\_editid.h"
|
|
|
|
//DeclareTemplateStatic(HIE_tdxHandleToSuperObject);
|
|
|
|
BOOL fn_bHasChangedVector (MTH3D_tdstVector *pInitial, MTH3D_tdstVector *pFinal)
|
|
{
|
|
return ( (MTH3D_M_xGetXofVector(pInitial) != MTH3D_M_xGetXofVector(pFinal))
|
|
|| (MTH3D_M_xGetYofVector(pInitial) != MTH3D_M_xGetYofVector(pFinal))
|
|
|| (MTH3D_M_xGetZofVector(pInitial) != MTH3D_M_xGetZofVector(pFinal))
|
|
);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// INITS
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
EDT_SuperObject::EDT_SuperObject (EDT_HierarchyEditor *pEditor,
|
|
HIE_tdxHandleToSuperObject hEngineSO,
|
|
tdeSaveStatus eStatus, tdeTypeSO eTypeSO ,
|
|
CString csName, CString csEngineFileName)
|
|
: CPA_SuperObject(pEditor, hEngineSO, eStatus, eTypeSO)
|
|
{
|
|
// section object
|
|
SetSectionData(this);
|
|
SetDataPath(fn_szGetLevelsDataPath());
|
|
SetCallBackSave(EDT_SuperObject::CallBackSave);
|
|
fn_vInitSectionName(csEngineFileName);
|
|
// matrix
|
|
m_pMatrixSection = new CPA_SectionObject (GetMatrixSectionName(), fn_szGetLevelsDataPath(),
|
|
EDT_SuperObject::CallBackSaveMatrix, this,
|
|
fn_bSectionExists());
|
|
// temporary modif
|
|
m_pTempModif = NULL;
|
|
|
|
// name
|
|
if (CPA_SaveObject::fn_eRename(csName) != E_mc_None)
|
|
SetDefaultValidName();
|
|
// update section
|
|
fn_vUpdateSectionName();
|
|
|
|
// if necessary, notify
|
|
if (!fn_bSectionExists())
|
|
fn_vNotifySave();
|
|
}
|
|
|
|
/*===========================================================================
|
|
New Constructor
|
|
=========================================================================*/
|
|
EDT_SuperObject::EDT_SuperObject (EDT_HierarchyEditor *pEditor,
|
|
tdeSaveStatus eStatus, tdeTypeSO eTypeSO ,
|
|
CString csName, CString csEngineFileName)
|
|
: CPA_SuperObject(pEditor, eStatus, eTypeSO)
|
|
{
|
|
// section object
|
|
SetSectionData(this);
|
|
SetDataPath(fn_szGetLevelsDataPath());
|
|
SetCallBackSave(EDT_SuperObject::CallBackSave);
|
|
fn_vInitSectionName(csEngineFileName);
|
|
// matrix
|
|
m_pMatrixSection = new CPA_SectionObject (GetMatrixSectionName(), fn_szGetLevelsDataPath(),
|
|
EDT_SuperObject::CallBackSaveMatrix, this,
|
|
fn_bSectionExists());
|
|
// temporary modif
|
|
m_pTempModif = NULL;
|
|
|
|
// name
|
|
if (CPA_SaveObject::fn_eRename(csName) != E_mc_None)
|
|
SetDefaultValidName();
|
|
// update section
|
|
fn_vUpdateSectionName();
|
|
|
|
// if necessary, notify
|
|
if (!fn_bSectionExists())
|
|
fn_vNotifySave();
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Copy-Constructor
|
|
=========================================================================*/
|
|
EDT_SuperObject::EDT_SuperObject (EDT_SuperObject &r_oSource)
|
|
: CPA_SuperObject(r_oSource)
|
|
{
|
|
// section
|
|
SetSectionData(this);
|
|
// matrix
|
|
m_pMatrixSection = new CPA_SectionObject (GetMatrixSectionName(), fn_szGetLevelsDataPath(),
|
|
EDT_SuperObject::CallBackSaveMatrix, this, FALSE);
|
|
// temporary modif
|
|
m_pTempModif = NULL;
|
|
|
|
// rename
|
|
SetDefaultValidName();
|
|
fn_vUpdateSectionName();
|
|
|
|
// if necessary, notify
|
|
fn_vNotifySave();
|
|
}
|
|
|
|
/*===========================================================================
|
|
Destructor
|
|
=========================================================================*/
|
|
EDT_SuperObject::~EDT_SuperObject(void)
|
|
{
|
|
CPA_SuperObjectBase *p_oSuperObject;
|
|
POSITION pos;
|
|
|
|
for (p_oSuperObject = GetHeadElement(pos); p_oSuperObject;
|
|
p_oSuperObject = GetNextElement(pos))
|
|
{
|
|
delete ((EDT_SuperObject *) p_oSuperObject);
|
|
p_oSuperObject = NULL;
|
|
}
|
|
}
|
|
|
|
//#################################################################################
|
|
// SECTION NAME
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: Init Section Name
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vInitSectionName (const CString csEngineFileName)
|
|
{
|
|
CString csSectionName;
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
// responsibility level
|
|
if (!fn_bCanBeNotified())
|
|
return;
|
|
|
|
// check if engine section exists
|
|
csSectionName = GetSuperObjectEditor()->GetEngineSectionName(GetEngineStruct());
|
|
// if section exists, update corresponding parameters
|
|
if (!csSectionName.IsEmpty())
|
|
{
|
|
SetReferencedSectionName(csSectionName);
|
|
SetExistingSection(TRUE);
|
|
}
|
|
else
|
|
{
|
|
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, (char*)(LPCTSTR) csEngineFileName, "SuperObject", " ");
|
|
SetReferencedSectionName(szSectionName);
|
|
SetExistingSection(FALSE);
|
|
}
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: Update Section Name
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vUpdateSectionName (void)
|
|
{
|
|
// update main section
|
|
CPA_SaveObject::fn_vUpdateSectionName();
|
|
// update matrix section
|
|
m_pMatrixSection->SetReferencedSectionName(GetMatrixSectionName());
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
* Description: Matrix Section
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
CString EDT_SuperObject::GetMatrixSectionName (void)
|
|
{
|
|
CString csSectionName;
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szActionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
// compute section name
|
|
csSectionName = GetReferencedSectionName();
|
|
SCR_fn_v_RdL0_SplitSectionName((char*)(LPCTSTR)csSectionName, szFileName, szActionName, szName);
|
|
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, szFileName, "Matrix", (char*)(LPCTSTR) CPA_SaveObject::GetName());
|
|
csSectionName = szSectionName;
|
|
|
|
return csSectionName;
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// NOTIFICATIONS
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Save
|
|
=========================================================================*/
|
|
void EDT_SuperObject::fn_vNotifySave (void)
|
|
{
|
|
// check save status
|
|
if (!fn_bCanBeNotified())
|
|
return;
|
|
|
|
// main section
|
|
CPA_SaveObject::fn_vNotifySave();
|
|
// matrix section
|
|
m_pMatrixSection->fn_vWriteSection();
|
|
}
|
|
|
|
/*===========================================================================
|
|
UnSave
|
|
=========================================================================*/
|
|
void EDT_SuperObject::fn_vNotifyUnSave (void)
|
|
{
|
|
// check save status
|
|
if (!fn_bCanBeNotified())
|
|
return;
|
|
|
|
// main section
|
|
CPA_SaveObject::fn_vNotifyUnSave();
|
|
// matrix section
|
|
m_pMatrixSection->fn_vDeleteSection();
|
|
}
|
|
|
|
/*===========================================================================
|
|
Restore
|
|
=========================================================================*/
|
|
void EDT_SuperObject::fn_vNotifyRestore (void)
|
|
{
|
|
// check save status
|
|
if (!fn_bCanBeNotified())
|
|
return;
|
|
|
|
// main section
|
|
CPA_SaveObject::fn_vNotifyRestore();
|
|
// matrix section
|
|
m_pMatrixSection->fn_vRestoreSection();
|
|
}
|
|
|
|
/*===========================================================================
|
|
Renamed
|
|
=========================================================================*/
|
|
void EDT_SuperObject::fn_vNotifyRename (void)
|
|
{
|
|
// check save status
|
|
if (!fn_bCanBeNotified())
|
|
return;
|
|
|
|
// main section
|
|
CPA_SaveObject::fn_vNotifyRename();
|
|
// matrix section
|
|
m_pMatrixSection->fn_vRenameSection(GetMatrixSectionName());
|
|
}
|
|
|
|
/*===========================================================================
|
|
Permissions
|
|
=========================================================================*/
|
|
BOOL EDT_SuperObject::fn_bCanBeNotified (void)
|
|
{
|
|
return CPA_SaveObject::fn_bCanBeNotified();
|
|
}
|
|
|
|
//#################################################################################
|
|
// VALIDITY
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Valid Name
|
|
=========================================================================*/
|
|
tdeMissingCriteria EDT_SuperObject::fn_eCheckValidity (const CString csNewName)
|
|
{
|
|
return CPA_SaveObject::fn_eCheckValidity(csNewName);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// REFERENCES
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Update reference when object changes
|
|
=========================================================================*/
|
|
void EDT_SuperObject::fn_vUpdateReference (CPA_SaveObject *pReferencedObject)
|
|
{
|
|
CPA_SaveObject::fn_vUpdateReference(pReferencedObject);
|
|
}
|
|
|
|
/*===========================================================================
|
|
Find new referenced name
|
|
=========================================================================*/
|
|
CString EDT_SuperObject::fn_csComputeReferencedSectionName (const CString csNewName)
|
|
{
|
|
return CPA_SaveObject::fn_csComputeReferencedSectionName(csNewName);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// DIALOGS
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Name
|
|
=========================================================================*/
|
|
CString EDT_SuperObject::GetNameToDraw (void)
|
|
{
|
|
return ( (GetObject() != NULL) ? GetObject()->GetNameToDraw() : CPA_SaveObject::GetNameToDraw() );
|
|
}
|
|
|
|
/*===========================================================================
|
|
Type
|
|
=========================================================================*/
|
|
CString EDT_SuperObject::GetTypeToDraw (void)
|
|
{
|
|
return ( (GetObject() != NULL) ? GetObject()->GetTypeToDraw() : CPA_SaveObject::GetTypeToDraw() );
|
|
}
|
|
|
|
/*===========================================================================
|
|
Owner
|
|
=========================================================================*/
|
|
CString EDT_SuperObject::GetOwnerToDraw (void)
|
|
{
|
|
return ( (GetObject() != NULL) ? GetObject()->GetOwnerToDraw() : CPA_SaveObject::GetOwnerToDraw() );
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Super-Object Owner
|
|
=========================================================================*/
|
|
CString EDT_SuperObject::GetOwnerName (void)
|
|
{
|
|
return ( (GetSuperObjectOwner() != NULL) ? GetSuperObjectOwner()->GetName() : "" );
|
|
}
|
|
|
|
/*===========================================================================
|
|
Save Status
|
|
=========================================================================*/
|
|
CString EDT_SuperObject::GetLevelName (void)
|
|
{
|
|
CString csLevelName;
|
|
|
|
switch (GetSaveStatus())
|
|
{
|
|
case E_ss_Responsible:
|
|
csLevelName = "Responsible";
|
|
break;
|
|
case E_ss_Modify:
|
|
csLevelName = "Modify";
|
|
break;
|
|
case E_ss_NoSave:
|
|
csLevelName = "No Save";
|
|
break;
|
|
case E_ss_NoModif:
|
|
csLevelName = "No Modif";
|
|
break;
|
|
default:
|
|
csLevelName = "";
|
|
break;
|
|
}
|
|
return csLevelName;
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// ENGINE STRUCT
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Set engine struct and update data
|
|
=========================================================================*/
|
|
void EDT_SuperObject::SetEngineStruct (HIE_tdxHandleToSuperObject hEngineSO)
|
|
{
|
|
// set engine struct
|
|
CPA_SuperObject::SetSuperObjectStruct(hEngineSO);
|
|
// section
|
|
fn_vInitSectionName("");
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// COPY / PASTE
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: Copy linked object
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::MyObjectIsAlsoACopy(EDT_SuperObject *p_oSource)
|
|
{
|
|
CPA_BaseObject *p_oNewObject, *p_oOldObject;
|
|
|
|
p_oOldObject = GetObject();
|
|
// duplicate object, and eventually build corresponding protected childs
|
|
p_oNewObject = GetObjectDLL()->Duplicate(GetObject(), this);
|
|
ASSERT(p_oNewObject != NULL);
|
|
// put new object in this so
|
|
SetObject(p_oNewObject);
|
|
}
|
|
|
|
|
|
|
|
/*===========================================================================
|
|
* Description: set name for copy
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::SetNameForCopy(EDT_SuperObject *pDesc)
|
|
{
|
|
CString csName;
|
|
CString csCount;
|
|
long lCount = 1;
|
|
|
|
// change super-object name
|
|
csName = "CopyOf" + pDesc->GetName();
|
|
while (fn_eCheckValidity(csName) != E_mc_None)
|
|
{
|
|
csCount.Format("-%i",lCount++);
|
|
csName = "CopyOf" + pDesc->GetName() + csCount;
|
|
}
|
|
fn_eRename(csName);
|
|
|
|
// update object
|
|
if ((GetObject())&&(pDesc->GetObject())&&(pDesc->GetObject() != GetObject()))
|
|
{
|
|
// change object name
|
|
csName = "CopyOf" + pDesc->GetObject()->GetName();
|
|
while (GetObject()->fn_eCheckUnicity(csName) != E_mc_None)
|
|
{
|
|
csCount.Format("-%i",lCount++);
|
|
csName = "CopyOf" + pDesc->GetObject()->GetName() + csCount;
|
|
}
|
|
GetObject()->fn_eRename(csName);
|
|
}
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: set name for paste
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::SetNameForPaste(EDT_SuperObject *pDesc)
|
|
{
|
|
CString csName;
|
|
CString csCount;
|
|
long lCount;
|
|
|
|
// change super-object name
|
|
csName = pDesc->GetName();
|
|
lCount = 1;
|
|
while (fn_eCheckValidity(csName) != E_mc_None)
|
|
{
|
|
csCount.Format("-%i",lCount++);
|
|
csName = pDesc->GetName() + csCount;
|
|
}
|
|
fn_eRename(csName);
|
|
|
|
// update object
|
|
if ((GetObject())&&(pDesc->GetObject())&&(pDesc->GetObject() != GetObject()))
|
|
{
|
|
// change object name
|
|
csName = pDesc->GetObject()->GetName();
|
|
lCount = 1;
|
|
while (GetObject()->fn_eCheckUnicity(csName) != E_mc_None)
|
|
{
|
|
csCount.Format("-%i",lCount++);
|
|
csName = pDesc->GetObject()->GetName() + csCount;
|
|
}
|
|
GetObject()->fn_eRename(csName);
|
|
}
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// MODIFICATIONS
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Translation
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vTranslate (MTH3D_tdstVector *p_stVector, BOOL bAbsolute)
|
|
{
|
|
POS_tdstCompletePosition stMatrix,*p_stMatrix;
|
|
MTH3D_tdstVector stVector,stTemp;
|
|
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
// translation on OBJECT axis
|
|
if (!bAbsolute)
|
|
{
|
|
// update vector according to the rotation matrix of the object
|
|
stMatrix = *(HIE_fn_hGetSuperObjectMatrix(GetStruct()));
|
|
MTH3D_M_vNullVector(&stVector);
|
|
POS_fn_vSetTranslationVector(&stMatrix, &stVector);
|
|
POS_fn_vMulMatrixVertex(&stVector, &stMatrix, p_stVector);
|
|
}
|
|
// Translation on CAMERA's axis
|
|
else
|
|
{
|
|
// update vector according to object's position
|
|
POS_fn_vInvertMatrix(&stMatrix,HIE_fn_hGetSuperObjectGlobalMatrix(HIE_fn_hGetSuperObjectFather(GetStruct())));
|
|
MTH3D_M_vNullVector(&stVector);
|
|
POS_fn_vSetTranslationVector(&stMatrix, &stVector);
|
|
POS_fn_vMulMatrixVertex(&stVector, &stMatrix, p_stVector);
|
|
}
|
|
|
|
// update the translation vector of the object
|
|
p_stMatrix = HIE_fn_hGetSuperObjectMatrix(GetStruct());
|
|
POS_fn_vGetTranslationVector(p_stMatrix, &stTemp);
|
|
MTH3D_M_vAddVector(&stTemp, &stTemp, &stVector);
|
|
POS_fn_vSetTranslationVector(p_stMatrix, &stTemp);
|
|
// POS_fn_vNormalizeMatrix(p_stMatrix);
|
|
}
|
|
|
|
/*===========================================================================
|
|
Rotation
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vRotate (POS_tdstCompletePosition *p_stMatrix)
|
|
{
|
|
MTH3D_tdstVector stVectI,stVectJ,stVectK;
|
|
|
|
// Update the rotation matrix of object
|
|
POS_fn_vMulMatrixMatrix(HIE_fn_hGetSuperObjectMatrix(GetStruct()), HIE_fn_hGetSuperObjectMatrix(GetStruct()), p_stMatrix);
|
|
POS_fn_vGetScaleMatrix(HIE_fn_hGetSuperObjectMatrix(GetStruct()),&stVectI,&stVectJ,&stVectK);
|
|
POS_fn_vNormalizeMatrix(HIE_fn_hGetSuperObjectMatrix(GetStruct()));
|
|
POS_fn_vSetScaleMatrix(HIE_fn_hGetSuperObjectMatrix(GetStruct()),&stVectI,&stVectJ,&stVectK);
|
|
}
|
|
|
|
// Begin Silviu Simen 18 August 1998 Cut/Paste Mechanism
|
|
/*===========================================================================
|
|
Translation
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vSetOnlyPosition (MTH3D_tdstVector *pTransMatrix)
|
|
{
|
|
HIE_fn_hGetSuperObjectMatrix(GetStruct()) -> stTranslationVector.xX = pTransMatrix -> xX;
|
|
HIE_fn_hGetSuperObjectMatrix(GetStruct()) -> stTranslationVector.xY = pTransMatrix -> xY;
|
|
HIE_fn_hGetSuperObjectMatrix(GetStruct()) -> stTranslationVector.xZ = pTransMatrix -> xZ;
|
|
}
|
|
// End Silviu Simen 18 August 1998 Cut/Paste Mechanism
|
|
|
|
/*===========================================================================
|
|
Position
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vSetPosition (POS_tdstCompletePosition *pRefMatrix)
|
|
{
|
|
POS_tdstCompletePosition stMatrix;
|
|
|
|
POS_fn_vSetIdentityMatrix(&stMatrix);
|
|
// calculate the new matrix
|
|
POS_fn_vInvertMatrix(&stMatrix, pRefMatrix);
|
|
POS_fn_vMulMatrixMatrix(HIE_fn_hGetSuperObjectMatrix(GetStruct()), &stMatrix, HIE_fn_hGetSuperObjectGlobalMatrix(GetStruct()));
|
|
POS_fn_vNormalizeMatrix(HIE_fn_hGetSuperObjectMatrix(GetStruct()));
|
|
}
|
|
|
|
/*===========================================================================
|
|
Father
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vInsertUnderParent (EDT_SuperObject *pEdParent, EDT_SuperObject *pNextBrother, BOOL bUpdatePos, POS_tdstCompletePosition *pRefMatrix)
|
|
{
|
|
POSITION pos = NULL;
|
|
|
|
// isolate object from the hierarchy
|
|
IsolateChild();
|
|
// update the matrix to keep the current position
|
|
if (bUpdatePos)
|
|
{
|
|
if (!pRefMatrix)
|
|
pRefMatrix = HIE_fn_hGetSuperObjectGlobalMatrix(pEdParent->GetStruct());
|
|
fn_vSetPosition(pRefMatrix);
|
|
}
|
|
// find position
|
|
pEdParent->AddANewChild(this, TRUE, pNextBrother);
|
|
}
|
|
|
|
/*===========================================================================
|
|
Check parent
|
|
*=========================================================================*/
|
|
BOOL EDT_SuperObject::fn_bAcceptAsParent (EDT_SuperObject *pEdObj)
|
|
{
|
|
// ask the DLL
|
|
if (GetObjectDLL() != NULL)
|
|
return ( GetObjectDLL()->fn_bAcceptAsParent(GetObject(), pEdObj->GetObject()));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Check child
|
|
*=========================================================================*/
|
|
BOOL EDT_SuperObject::fn_bAcceptAsChild (EDT_SuperObject *pEdObj)
|
|
{
|
|
// ask the DLL
|
|
if (GetObjectDLL() != NULL)
|
|
return ( GetObjectDLL()->fn_bAcceptAsChild(GetObject(), pEdObj->GetObject()));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Protected childs
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vRemoveNonProtectedChilds (void)
|
|
{
|
|
CPA_List<EDT_SuperObject> stListProtected;
|
|
CPA_SuperObjectBase *pElem;
|
|
EDT_SuperObject *pChild;
|
|
POSITION pos;
|
|
|
|
// init list of protected childs
|
|
stListProtected.RemoveAll();
|
|
// update all protected childs
|
|
for (pElem = GetHeadElement(pos); pElem;
|
|
pElem = GetNextElement(pos))
|
|
{
|
|
pChild = (EDT_SuperObject *) pElem;
|
|
if (pChild->GetSuperObjectOwner())
|
|
{
|
|
// update the child
|
|
pChild->fn_vRemoveNonProtectedChilds();
|
|
// add it to the list of protected childs
|
|
stListProtected.AddTail(pChild);
|
|
}
|
|
}
|
|
// Isolate object from all its childs
|
|
RemoveAllChilds();
|
|
if (stListProtected.GetCount())
|
|
return;
|
|
// Reinsert all protected childs
|
|
for (pChild = stListProtected.GetHeadElement(pos); pChild;
|
|
pChild = stListProtected.GetNextElement(pos))
|
|
AddANewChild(pChild);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// COPY / PASTE
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: Temporary section
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
CString EDT_SuperObject::GetTempModifSectionName (void)
|
|
{
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
//CPA2 Stegaru Cristian 98-02
|
|
//if the super object has changed its name, the modif section name is stored separatelly
|
|
if (!m_csModifSectionName.IsEmpty ())
|
|
return m_csModifSectionName;
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
|
|
SCR_fn_v_RdL0_SplitSectionName((char*)(LPCSTR) GetReferencedSectionName(), szFileName, szSectionName, szName);
|
|
//CPA2 Stegaru Cristian 98-02
|
|
CString csFileName (szFileName);
|
|
int iPos = csFileName.ReverseFind ('.');
|
|
ASSERT (-1 != iPos);
|
|
csFileName = csFileName.Left (iPos) + szModifExt;
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, (char*)(LPCSTR)csFileName, "Modif-SuperObject", szName);
|
|
|
|
//CPA2 Stegaru Cristian 98-02
|
|
mfn_vSetTempModifSectionName (szSectionName);
|
|
|
|
return m_csModifSectionName;
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: set temporary objet
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::SetTemporaryModif (EDT_TempModif *pTempSO)
|
|
{
|
|
// init temporary SO
|
|
m_pTempModif = pTempSO;
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
* Description: create temporary objet
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
BOOL EDT_SuperObject::fn_bInitTemporarySO (void)
|
|
{
|
|
// check if modif must be registered
|
|
//CPA2 modified Stegaru Cristian 98-03
|
|
//I added E_ss_Responsible for objects that are imported from Max
|
|
tdeSaveStatus eSaveStatus = GetSaveStatus();
|
|
if (E_ss_Modify != eSaveStatus &&
|
|
E_ss_Responsible != eSaveStatus)
|
|
return FALSE;
|
|
|
|
// init temporary SO
|
|
if (!m_pTempModif)
|
|
{
|
|
// create temporary SO
|
|
m_pTempModif = new EDT_TempModif(this, FALSE);
|
|
// update list
|
|
GetSuperObjectEditor()->fn_vAddTemporaryModif(this);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: update temporary objet in temp manager
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vUpdateTemporaryModif (CString csTypeModif, BOOL bAddModif)
|
|
{
|
|
if (m_pTempModif)
|
|
{
|
|
// update temporary SO
|
|
m_pTempModif->fn_vUpdateModification(csTypeModif, bAddModif);
|
|
|
|
// check if object is still temporary
|
|
if ((!m_pTempModif->fn_bIsModified(""))&&(!m_pTempModif->fn_bWasLoaded()))
|
|
{
|
|
// delete corresponding section
|
|
m_pTempModif->fn_vNotifyUnsave();
|
|
// update list
|
|
GetSuperObjectEditor()->fn_vRemoveTemporaryModif(this);
|
|
// delete temporary SO
|
|
delete m_pTempModif;
|
|
m_pTempModif = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: set current modification state
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vSetOnState (const CString csModificationType, BOOL bOnInitialState)
|
|
{
|
|
EDT_HierarchyEditor *pEditor;
|
|
EDT_ModifState *pModif;
|
|
|
|
// no modif => no state change !
|
|
if (!m_pTempModif)
|
|
return;
|
|
|
|
// init modification
|
|
pEditor = GetSuperObjectEditor();
|
|
pModif = new EDT_ModifState (pEditor, this, csModificationType, bOnInitialState);
|
|
// do modif
|
|
pEditor->M_GetEditManager()->AskFor(pModif);
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: validate modification state
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vValidateState (const CString csModificationType, BOOL bInitialState)
|
|
{
|
|
EDT_HierarchyEditor *pEditor;
|
|
EDT_ModifValidate *pModif;
|
|
|
|
// validate only if permission
|
|
if (!fn_bCanBeValidated())
|
|
return;
|
|
|
|
// no temporary modif => nothing to validate
|
|
if (!m_pTempModif)
|
|
return;
|
|
// init modification
|
|
pEditor = GetSuperObjectEditor();
|
|
pModif = new EDT_ModifValidate (pEditor, this, csModificationType, bInitialState);
|
|
// do modif
|
|
pEditor->M_GetEditManager()->AskFor(pModif);
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: create temporary objet
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
BOOL EDT_SuperObject::fn_bCanBeValidated (void)
|
|
{
|
|
// check if modif must be registered
|
|
return (GetSaveStatus() == E_ss_Responsible);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// SAVE
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: Save main section
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::CallBackSave (SCR_tdst_File_Description *p_stFile, char *szSectionName, void *p_vData, SCR_tde_Ntfy_Action eAction)
|
|
{
|
|
EDT_SuperObject *pSupObj;
|
|
EDT_SuperObject *pChild;
|
|
CPA_SuperObject *pEdChild;
|
|
CString csObjectName;
|
|
CString csChildName;
|
|
char szNewSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szMatrixName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szChildName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
// get parameters
|
|
pSupObj = (EDT_SuperObject *) p_vData;
|
|
|
|
switch (eAction)
|
|
{
|
|
case SCR_EA_Ntfy_AddSection:
|
|
// go to end of file (we need all file directive to load this section)
|
|
SCR_fn_v_SvL1_ToEndSection(p_stFile);
|
|
SCR_M_SvL0_SaveBlankLine (p_stFile);
|
|
|
|
case SCR_EA_Ntfy_RebuildSection:
|
|
// save section name
|
|
strcpy(szName, pSupObj->GetName());
|
|
SCR_fn_v_RdL0_ComputeSectionName(szNewSectionName, NULL, "SuperObject", szName);
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile, szNewSectionName, SCR_CC_C_Cfg_EOL);
|
|
|
|
// save matrix
|
|
SCR_fn_v_RdL0_ComputeSectionName(szMatrixName, "*", "Matrix", szName);
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "PutMatrix", SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, szMatrixName);
|
|
|
|
// save linked object
|
|
if (pSupObj->GetObject())
|
|
{
|
|
ASSERT(pSupObj->GetObject()->fn_bCanBeSaved());
|
|
csObjectName = ((CPA_SaveObject *) pSupObj->GetObject())->GetReferencedSectionName();
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "LinkedObject", SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, (char *)(LPCSTR)csObjectName);
|
|
}
|
|
|
|
// save childs
|
|
for (pEdChild = pSupObj->GetSuperObjectFirstChild(); pEdChild;
|
|
pEdChild = pSupObj->GetSuperObjectNextChild(pEdChild))
|
|
{
|
|
pChild = (EDT_SuperObject *) pEdChild;
|
|
if (pChild->fn_bCanBeNotified())
|
|
{
|
|
// get section name
|
|
csChildName = pChild->GetReferencedSectionName();
|
|
SCR_fn_v_RdL0_SplitSectionName((char*)(LPCSTR)csChildName, NULL, szNewSectionName, szChildName);
|
|
SCR_fn_v_RdL0_ComputeSectionName(szNewSectionName, "*", "SuperObject", szChildName);
|
|
// save entry
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "AddChild", SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, szNewSectionName);
|
|
}
|
|
}
|
|
|
|
//ANNECY CO SPOFLAG 03/02/98
|
|
// save flags
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "Flags", SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 1, "%ld", pSupObj->GetFlags());
|
|
//ENDANNECY CO SPOFLAG
|
|
|
|
//ANNECY Shaitan Transparency (26/03/98) {
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "Transparency", SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 1, "%f", pSupObj->fn_fGetTransparencyLevel());
|
|
//ENDANNECY Shaitan Transparency }
|
|
|
|
// end section
|
|
SCR_M_SvL0_SaveEndSection (p_stFile, SCR_CC_C_Cfg_EOL);
|
|
if (eAction == SCR_EA_Ntfy_AddSection)
|
|
SCR_M_SvL0_SaveBlankLine (p_stFile);
|
|
|
|
// reinit existence
|
|
pSupObj->fn_vSectionSaved();
|
|
break;
|
|
|
|
case SCR_EA_Ntfy_DeleteSection:
|
|
// update existence
|
|
pSupObj->fn_vSectionDeleted();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: Save matrix section
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::CallBackSaveMatrix (SCR_tdst_File_Description *p_stFile, char *szSectionName, void *p_vData, SCR_tde_Ntfy_Action eAction)
|
|
{
|
|
GEO_tdxHandleToMatrix hMatrix;
|
|
EDT_SuperObject *pSupObj;
|
|
char szMatrixName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
|
|
// get parameters
|
|
pSupObj = (EDT_SuperObject *) p_vData;
|
|
|
|
switch (eAction)
|
|
{
|
|
case SCR_EA_Ntfy_AddSection:
|
|
// go to end of file (we need all file directive to load this section)
|
|
SCR_fn_v_SvL1_ToEndSection(p_stFile);
|
|
SCR_M_SvL0_SaveBlankLine (p_stFile);
|
|
|
|
case SCR_EA_Ntfy_RebuildSection:
|
|
// save matrix
|
|
hMatrix = HIE_fn_hGetSuperObjectMatrix(pSupObj->GetStruct());
|
|
SCR_fn_v_RdL0_SplitSectionName(szSectionName, NULL, szMatrixName, szName);
|
|
pSupObj->fn_vSaveMatrix(p_stFile, hMatrix, szName);
|
|
// save end section
|
|
if (eAction == SCR_EA_Ntfy_AddSection)
|
|
SCR_M_SvL0_SaveBlankLine (p_stFile);
|
|
|
|
// reinit existence
|
|
pSupObj->GetMatrixSection()->fn_vSectionSaved();
|
|
break;
|
|
|
|
case SCR_EA_Ntfy_DeleteSection:
|
|
// update existence
|
|
pSupObj->GetMatrixSection()->fn_vSectionDeleted();
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
* Description: Save matrix
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vSaveMatrix (SCR_tdst_File_Description *p_stFile, GEO_tdxHandleToMatrix hMatrix, CString csMatrixName)
|
|
{
|
|
MTH3D_tdstVector stVecI,stVecJ,stVecK;
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
double dUnit;
|
|
|
|
dUnit = GLI_dGetUnitInMeterInFile( NULL );
|
|
if (dUnit == 0)
|
|
dUnit = 1;
|
|
|
|
// save begin section
|
|
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, NULL, "Matrix", (char*)(LPCTSTR) csMatrixName);
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile, szSectionName, SCR_CC_C_Cfg_EOL);
|
|
|
|
// save translation
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "MatrixTranslation", SCR_CC_C_Cfg_NoChar);
|
|
POS_fn_vGetTranslationVector(hMatrix,&stVecI);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 1,
|
|
"%f,%f,%f",
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetXofVector(&stVecI)) / dUnit,
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetYofVector(&stVecI)) / dUnit,
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetZofVector(&stVecI)) / dUnit );
|
|
|
|
// save scale
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "MatrixScale", SCR_CC_C_Cfg_NoChar);
|
|
POS_fn_vGetScaleMatrix(hMatrix,&stVecI,&stVecJ,&stVecK);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 1,
|
|
"%f,%f,%f,%f,%f,%f,%f,%f,%f",
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetXofVector(&stVecI)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetYofVector(&stVecI)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetZofVector(&stVecI)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetXofVector(&stVecJ)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetYofVector(&stVecJ)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetZofVector(&stVecJ)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetXofVector(&stVecK)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetYofVector(&stVecK)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetZofVector(&stVecK)));
|
|
|
|
// save rotation
|
|
SCR_M_SvL0_SaveEntry(p_stFile, "MatrixRotation", SCR_CC_C_Cfg_NoChar);
|
|
|
|
POS_fn_vGetRotationMatrix (hMatrix,&stVecI,&stVecJ,&stVecK);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 1,
|
|
"%f,%f,%f,%f,%f,%f,%f,%f,%f",
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetXofVector(&stVecI)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetYofVector(&stVecI)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetZofVector(&stVecI)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetXofVector(&stVecJ)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetYofVector(&stVecJ)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetZofVector(&stVecJ)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetXofVector(&stVecK)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetYofVector(&stVecK)),
|
|
GLI_M_ValueToFloat(MTH3D_M_xGetZofVector(&stVecK)));
|
|
|
|
// save end section
|
|
SCR_M_SvL0_SaveEndSection (p_stFile, SCR_CC_C_Cfg_EOL);
|
|
}
|
|
|
|
|
|
|
|
|
|
//########################################################################################
|
|
// LOAD
|
|
//########################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: callback load modif
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
SCR_tde_Anl_ReturnValue EDT_SuperObject::CallBackLoadModif (SCR_tdst_File_Description *p_fFile, char *szName, char *szParams[], SCR_tde_Anl_Action eAction)
|
|
{
|
|
GEO_tdxHandleToMatrix hMatrix;
|
|
SCR_tdst_Cxt_Values *p_stValue;
|
|
EDT_HierarchyEditor *pEditor;
|
|
EDT_SuperObject *pSupObj;
|
|
EDT_SuperObject *pFather;
|
|
EDT_TempModif *pTempSO;
|
|
// CString csSectionName;
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szParentName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
//CPA2 Stegaru Cristian 98-02
|
|
CString csFileName;
|
|
int iPos = -1;
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
|
|
switch (eAction)
|
|
{
|
|
case SCR_EA_Anl_BeginSection:
|
|
// get corresponding super-object
|
|
SCR_M_RdL0_GetContextLong(0, 0, EDT_SuperObject *, pSupObj);
|
|
// create modif
|
|
pTempSO = new EDT_TempModif(pSupObj, TRUE);
|
|
SCR_M_RdL0_SetSectionLong(0, 0, (long) pTempSO);
|
|
break;
|
|
|
|
case SCR_EA_Anl_Entry:
|
|
// get temporary SO
|
|
SCR_M_RdL0_GetSectionLong(0, 0, EDT_TempModif *, pTempSO);
|
|
// set modification
|
|
if (strcmp(szName,"Created") == 0)
|
|
{
|
|
pTempSO->SetCreated(TRUE);
|
|
//CPA2 Stegaru Cristian 98-03
|
|
CString csInitialSPOName = szParams[0];
|
|
pTempSO->mfn_vSetInitialSPOName (csInitialSPOName);
|
|
//End CPA2 Stegaru Cristian 98-03
|
|
}
|
|
if (strcmp(szName, "Deleted") == 0)
|
|
pTempSO->SetDeleted(TRUE);
|
|
// register initial parent
|
|
if (strcmp(szName, "FinalParent") == 0)
|
|
{
|
|
// get section
|
|
//CPA2 Stegaru Cristian 98-02
|
|
SCR_fn_v_RdL0_SplitSectionName(szParams[0], szFileName, szSectionName, szParentName);
|
|
// BOOL bUseTheSameFile = (1 == strlen (szFileName) && '*' == szFileName [0]);
|
|
// if (bUseTheSameFile)
|
|
// strcpy (szFileName, SCR_M_RdL0_GetFileNameR(0));
|
|
// SCR_fn_v_RdL0_ComputeSectionName(szSectionName, szFileName, "SuperObject", szParentName);
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
// csSectionName = szSectionName;
|
|
//assume the final parent file is level\level.spo
|
|
strcpy (szFileName, SCR_M_RdL0_GetFileNameR(0));
|
|
CString csFileName (szFileName);
|
|
int iPos = csFileName.ReverseFind ('.');
|
|
ASSERT (-1 != iPos);
|
|
csFileName = csFileName.Left (iPos) + szStaticExt;
|
|
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, (char*)(LPCSTR)csFileName, "SuperObject", szParentName);
|
|
|
|
// get initial parent
|
|
pEditor = pTempSO->GetOriginalSO()->GetSuperObjectEditor();
|
|
pFather = (EDT_SuperObject *) pEditor->GetOrLoadSuperObject(szSectionName);
|
|
//CPA2 Stegaru Cristian 98-02
|
|
pTempSO->SetFinalFather(pFather);
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
}
|
|
// register initial position
|
|
//CPA2 Stegaru Cristian 98-02
|
|
if (strcmp(szName, "FinalMatrix") == 0)
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
{
|
|
p_stValue = SCR_fnp_st_RdL0_AnalyseSection(szParams[0], SCR_CDF_uw_Anl_Normal);
|
|
hMatrix = (GEO_tdxHandleToMatrix) SCR_M_ul_RdL0_ExtractLongValue(p_stValue,0);
|
|
//CPA2 Stegaru Cristian 98-02
|
|
pTempSO->SetFinalPosition(hMatrix);
|
|
//End CPA2 Stegaru Cristian 98-02
|
|
}
|
|
// register initial name
|
|
if (strcmp(szName, "FinalName") == 0)
|
|
{
|
|
pTempSO->SetFinalName(szParams[0]);
|
|
}
|
|
break;
|
|
|
|
case SCR_EA_Anl_EndSection:
|
|
break;
|
|
}
|
|
|
|
return SCR_ERV_Anl_NormalReturn;
|
|
}
|
|
|
|
//#################################################################################
|
|
// DRAWING
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: local flag
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::SetDrawingFlag (tdeDrawingFlag eNewFlag)
|
|
{
|
|
CPA_SuperObject *pChild;
|
|
EDT_SuperObject *pEdChild;
|
|
|
|
// set flag
|
|
CPA_SuperObjectBase::SetDrawingFlag(eNewFlag);
|
|
// warn editor
|
|
if (GetObject() != NULL)
|
|
GetObjectDLL()->fn_vOnModifDrawFlag(this);
|
|
// recursive function
|
|
for (pChild = GetSuperObjectFirstChild(); pChild;
|
|
pChild = GetSuperObjectNextChild(pChild))
|
|
{
|
|
pEdChild = (EDT_SuperObject *) pChild;
|
|
|
|
// edit-protected childs of super-object => same flag
|
|
if ((pEdChild->GetSuperObjectOwner() == this) && (pEdChild->fn_bIsEditProtected()))
|
|
pEdChild->SetDrawingFlag(eNewFlag);
|
|
}
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// MATRIX
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: compare two matrix
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
BOOL EDT_SuperObject::fn_bHasSamePosition (GEO_tdxHandleToMatrix hInitialMatrix, GEO_tdxHandleToMatrix hFinalMatrix)
|
|
{
|
|
MTH3D_tdstVector stInitT, stFinalT;
|
|
MTH3D_tdstVector stInitI, stFinalI;
|
|
MTH3D_tdstVector stInitJ, stFinalJ;
|
|
MTH3D_tdstVector stInitK, stFinalK;
|
|
|
|
// check translation
|
|
POS_fn_vGetTranslationVector(hInitialMatrix, &stInitT);
|
|
POS_fn_vGetTranslationVector(hFinalMatrix, &stFinalT);
|
|
if (!MTH3D_M_bEqualVector(&stInitT, &stFinalT))
|
|
return FALSE;
|
|
|
|
// check rotation
|
|
POS_fn_vGetRotationMatrix(hInitialMatrix, &stInitI, &stInitJ, &stInitK);
|
|
POS_fn_vGetRotationMatrix(hFinalMatrix, &stFinalI, &stFinalJ, &stFinalK);
|
|
if ((!MTH3D_M_bEqualVector(&stInitI, &stFinalI)) ||
|
|
(!MTH3D_M_bEqualVector(&stInitJ, &stFinalJ)) ||
|
|
(!MTH3D_M_bEqualVector(&stInitK, &stFinalK)))
|
|
return FALSE;
|
|
|
|
// check scale
|
|
POS_fn_vGetScaleMatrix (hInitialMatrix, &stInitI, &stInitJ, &stInitK);
|
|
POS_fn_vGetScaleMatrix (hFinalMatrix, &stFinalI, &stFinalJ, &stFinalK);
|
|
if ((!MTH3D_M_bEqualVector(&stInitI, &stFinalI)) ||
|
|
(!MTH3D_M_bEqualVector(&stInitJ, &stFinalJ)) ||
|
|
(!MTH3D_M_bEqualVector(&stInitK, &stFinalK)))
|
|
return FALSE;
|
|
|
|
// check transform
|
|
POS_fn_vGetTransformMatrix (hInitialMatrix, &stInitI, &stInitJ, &stInitK);
|
|
POS_fn_vGetTransformMatrix (hFinalMatrix, &stFinalI, &stFinalJ, &stFinalK);
|
|
if ((!MTH3D_M_bEqualVector(&stInitI, &stFinalI)) ||
|
|
(!MTH3D_M_bEqualVector(&stInitJ, &stFinalJ)) ||
|
|
(!MTH3D_M_bEqualVector(&stInitK, &stFinalK)))
|
|
return FALSE;
|
|
|
|
// matrix are equal
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//ANNECY CO SPOFLAG 03/02/98
|
|
//#################################################################################
|
|
// FLAG
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: get or update super-object flag
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
unsigned long EDT_SuperObject::GetFlags (void)
|
|
{
|
|
return HIE_fn_SO_ulGetFlags(GetStruct());
|
|
}
|
|
|
|
void EDT_SuperObject::SetFlags (unsigned long ulFlags)
|
|
{
|
|
unsigned long ulOldFlag;
|
|
|
|
ulOldFlag = HIE_fn_SO_ulGetFlags(GetStruct());
|
|
|
|
HIE_fn_SO_vSetFlags(GetStruct(), ulFlags);
|
|
|
|
if((((ulOldFlag & HIE_C_Flag_ulTypeOfBoundingVolume) ? TRUE : FALSE) &&
|
|
((ulFlags & HIE_C_Flag_ulTypeOfBoundingVolume) ? FALSE : TRUE)) ||
|
|
(((ulOldFlag & HIE_C_Flag_ulTypeOfBoundingVolume) ? FALSE : TRUE) &&
|
|
((ulFlags & HIE_C_Flag_ulTypeOfBoundingVolume) ? TRUE : FALSE)))
|
|
{
|
|
// The Flag concerning the type of bounding volume has changed!
|
|
// We have to desallocate the old structure.
|
|
GEO_M_CPAFree(GetStruct()->hBoundingVolume);
|
|
}
|
|
// if necessary, notify
|
|
fn_vNotifySave();
|
|
}
|
|
//ENDANNECY CO SPOFLAG
|
|
|
|
//ANNECY CO SPOFLAG 05/02/98
|
|
/*===========================================================================
|
|
* Description: check if super-object can be edited
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
BOOL EDT_SuperObject::fn_bIsEditProtected (void)
|
|
{
|
|
if (!CPA_SuperObject::fn_bIsEditProtected())
|
|
return FALSE;
|
|
else
|
|
{
|
|
if (GetSuperObjectEditor()->fn_bIsCurrentEditor())
|
|
return !GetSuperObjectEditor()->GetInterface()->fn_bFullSelect();
|
|
else
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
//ENDANNECY CO SPOFLAG
|
|
|
|
|
|
//ANNECY Shaitan Transparency 26/03/98 {
|
|
/*===========================================================================
|
|
* Description: get the transparency level
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
float EDT_SuperObject::fn_fGetTransparencyLevel (void)
|
|
{
|
|
return HIE_fn_fGetSuperObjectTransparenceLevel(GetStruct());
|
|
}
|
|
|
|
/*===========================================================================
|
|
* Description: set the transparency level
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void EDT_SuperObject::fn_vSetTransparencyLevel (float fNewLevel)
|
|
{
|
|
HIE_fn_vSetSuperObjectTransparenceLevel(GetStruct(), fNewLevel);
|
|
// for the actors
|
|
if (GetObjectDLL())
|
|
GetObjectDLL()->fn_vOnModifTransparency(this, fNewLevel);
|
|
// for save
|
|
fn_vNotifySave();
|
|
}
|
|
//ENDANNECY Shaitan Transparency }
|
|
#endif // ACTIVE_EDITOR
|