234 lines
7.4 KiB
C++
234 lines
7.4 KiB
C++
/*
|
|
*=======================================================================================
|
|
* Name :EditorPO.hpp
|
|
* Author :Vincent Lhullier Date :05/06/97
|
|
* Description :Description of Editor Physical object
|
|
*=======================================================================================
|
|
* Modification -> Author : Date :
|
|
* Description :
|
|
*=======================================================================================
|
|
*/
|
|
|
|
#ifndef __EDITORPO_HPP__
|
|
#define __EDITORPO_HPP__
|
|
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
#include "ITF.h"
|
|
#include "MEC.h"
|
|
#define D_PhysiCol_Define
|
|
#include "GAM.h"
|
|
#include "SPO.h"
|
|
#include "PO.h"
|
|
#undef D_PhysiCol_Define
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
|
|
class Geometry3D;
|
|
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
|
|
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
#ifndef CPA_EXPORT
|
|
#if defined(CPA_WANTS_IMPORT)
|
|
#define CPA_EXPORT __declspec(dllimport)
|
|
#elif defined(CPA_WANTS_EXPORT)
|
|
#define CPA_EXPORT __declspec(dllexport)
|
|
#else
|
|
#define CPA_EXPORT
|
|
#endif
|
|
#endif
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
|
|
/*
|
|
=======================================================================================
|
|
Constants
|
|
=======================================================================================
|
|
*/
|
|
/*
|
|
* origin of PO object
|
|
*/
|
|
#define C_cFromFamilies 0
|
|
#define C_cFromLevels 1
|
|
#define C_cFromClasses 2
|
|
|
|
/*
|
|
* unsed index
|
|
*/
|
|
#define C_uwNotInTable ((unsigned short)-1)
|
|
|
|
|
|
/*
|
|
=======================================================================================
|
|
Editor Physical Object class
|
|
=======================================================================================
|
|
*/
|
|
class EditorPO : public CPA_SaveObject,public CPA_EdMot<PO_tdxHandleToPhysicalObject>
|
|
{
|
|
private:
|
|
char m_cOrigin;
|
|
Geometry3D **m_dp_oLodGeom;
|
|
CPA_BaseObject *m_ap_oZone[ 4 ];
|
|
|
|
CPA_SectionObject *m_p_oPCSSection;
|
|
CPA_SectionObject *m_p_oVSESection; /* object associated with VisualSet section of this PO object*/
|
|
|
|
unsigned short m_uwIndexInObjectsTable;
|
|
/*ANNECY TQ 22/06/98{*/
|
|
ACP_tdxHandleOfObject m_hBoundingVolume;
|
|
/*ENDANNECY TQ}*/
|
|
|
|
|
|
/*ROMTEAM WorldEditor (Cristian Stegaru 12/97)*/
|
|
protected:
|
|
BOOL m_bIsClone;
|
|
/*ENDROMTEAM WorldEditor (Cristian Stegaru)*/
|
|
|
|
public:
|
|
/*CPA2 Stegaru Cristian 98-03*/
|
|
CString mfn_csGetFullGeomSectionName ();
|
|
CString mfn_csGetModSectionName ();
|
|
/*End CPA2 Stegaru Cristian 98-03*/
|
|
/*CPA2 Stegaru Cristian 98-05 */
|
|
ACP_tdxIndex mfn_iGetFacesNumber ();
|
|
MTH3D_tdstVector mfn_3dvGetMinCoordinates ();
|
|
MTH3D_tdstVector mfn_3dvGetMaxCoordinates ();
|
|
MTH3D_tdstVector mfn_3dvGetSizes (); /*dX, dY, dZ*/
|
|
/*End CPA2 Stegaru Cristian 98-05*/
|
|
|
|
|
|
/*ROMTEAM WorldEditor (Nicu 16/01/98)*/
|
|
BOOL mfn_bIsClone () { return m_bIsClone;}
|
|
void mfn_vSetClone (BOOL bIsClone) { m_bIsClone = bIsClone;}
|
|
Geometry3D *m_pGeom, /* pointer to the geometric object (Shape3D)*/
|
|
*m_pOrigGeom;
|
|
int m_iIdx; /* geometric object index */
|
|
BOOL IsCandidatePO () { return -2 != m_iIdx;}
|
|
/*ENDROMTEAM WorldEditor (Nicu)*/
|
|
|
|
|
|
/* ==> constructor / destructor */
|
|
EditorPO (
|
|
CPA_EditorBase *p_oDLL,
|
|
PO_tdxHandleToPhysicalObject hObj,
|
|
CPA_BaseObject *p_oOwner,
|
|
CString csName = "",
|
|
CString csFileName = "",
|
|
CString csSectionName = ""
|
|
);
|
|
|
|
~EditorPO();
|
|
|
|
/* ==> initialisation of data members */
|
|
static void StaticInit();
|
|
void m_fn_vInitDataMembers( BOOL _bSecondPass = FALSE );
|
|
|
|
|
|
/* ==> access to origin */
|
|
char *fn_szComputeOrigin( char *_szFileName, char *_cOrigin );
|
|
char fn_cGetOrigin( void ) { return m_cOrigin; }
|
|
|
|
/* ==> loading engine PO */
|
|
BOOL m_fn_bLoadEnginePO( void );
|
|
|
|
/* ==> Access to data type */
|
|
long GetDataType(void) { return HIE_C_ulPO; }
|
|
void *GetData(void) { return GetStruct(); }
|
|
|
|
/* ==> Access to Objects Table Index */
|
|
unsigned short m_fn_uwGetIndexInObjectTable(void) { return m_uwIndexInObjectsTable; }
|
|
void m_fn_vSetIndexInObjectTable(unsigned short _uwIndex) { m_uwIndexInObjectsTable = _uwIndex; }
|
|
|
|
/* ==> name unicity */
|
|
tdeMissingCriteria fn_eCheckUnicity (const CString csNewName) { return fn_eCheckUnicityWithOwner(csNewName); }
|
|
|
|
/* ==> Notification */
|
|
void fn_vNotifySave(void);
|
|
void fn_vNotifyUnSave(void);
|
|
void fn_vNotifyRestore(void);
|
|
void fn_vNotifyRename(void);
|
|
|
|
void fn_vUpdateSectionName (void);
|
|
|
|
/* ==> access to Physical Coll Set section object */
|
|
void fn_vComputePCSSectionName( char *szPCSSectionName );
|
|
CPA_SectionObject *fn_p_oGetPCSSection (void) { return m_p_oPCSSection; }
|
|
|
|
/* ==> access to VisaulSet section object and information */
|
|
void fn_vComputeVSESectionName( char *szVSESectionName );
|
|
CPA_SectionObject *fn_p_oGetVSESection( void ) { return m_p_oVSESection; }
|
|
|
|
/* ==> access to engine struct */
|
|
void *GetEngineStruct() { return GetStruct(); };
|
|
void SetEngineStruct (PO_tdxHandleToPhysicalObject hObj) { SetStruct(hObj); }
|
|
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
Geometry3D *m_fnp_oGetGeometricWithDistance( MTH_tdxReal xDistance)
|
|
{
|
|
GEO_tdxHandleToVisualSet hVSE;
|
|
ACP_tdxIndex xNumberOfLod;
|
|
ACP_tdxIndex xIndexOfLod;
|
|
MTH_tdxReal xThreshold;
|
|
ACP_tdxHandleOfObject hGeoObj;
|
|
|
|
if (!GetStruct())
|
|
return NULL;
|
|
|
|
hVSE = PO_fn_hGetVisualSet( GetStruct() );
|
|
xNumberOfLod = (ACP_tdxIndex) GLI_lGetVisualSetNumbertOfLOD( hVSE );
|
|
|
|
for (xIndexOfLod = 0; xIndexOfLod < xNumberOfLod - 1; xIndexOfLod ++)
|
|
{
|
|
GLI_vGetVisualSetLOD( hVSE, xIndexOfLod + 1, &xThreshold, &hGeoObj );
|
|
if (xThreshold > xDistance) break;
|
|
}
|
|
return m_dp_oLodGeom[xIndexOfLod];
|
|
}
|
|
|
|
/* ==> access to zone */
|
|
CPA_BaseObject *GetZone( char cTypeZone ) { return m_ap_oZone[ cTypeZone ]; }
|
|
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
/*ROMTEAM WorldEditor (Nicu 07/11/97) */
|
|
void SetZone (char cTypeZone , CPA_BaseObject *_pZDxObject, BOOL bStandardPO = TRUE)
|
|
{
|
|
m_ap_oZone[ cTypeZone ] = _pZDxObject;
|
|
if (!bStandardPO)
|
|
m_pGeom = m_pOrigGeom = (Geometry3D*)_pZDxObject;
|
|
/*ENDROMTEAM WorldEditor (Nicu) */
|
|
PCS_tdxHandleToPhysicalCollSet hCollSet = PO_fn_hGetCollideSet(GetStruct ());
|
|
if (! hCollSet)
|
|
{
|
|
hCollSet = PCS_fn_hCreatePhysicalCollideSet();
|
|
PO_fn_vSetCollideSet (GetStruct () , hCollSet);
|
|
}
|
|
void * pEngineZone;
|
|
if (_pZDxObject) /* _pZDxObject can be a ZDx object or a PO*/
|
|
{
|
|
if (_pZDxObject -> fn_bIsOfType (C_szPhysicalObjectTypeName))
|
|
pEngineZone = ((CPA_BaseObject *) ((EditorPO *) _pZDxObject) ->
|
|
m_fnp_oGetGeometricWithDistance (0)) -> GetData ();
|
|
else pEngineZone = _pZDxObject -> GetData ();
|
|
}
|
|
else pEngineZone = NULL;
|
|
|
|
PCS_fn_vSetGeoObjOfPhysicalCollSet(cTypeZone , hCollSet , (ACP_tdxHandleOfObject) pEngineZone);
|
|
|
|
/*ROMTEAM WorldEditor (Nicu 07/11/97) */
|
|
if(m_p_oPCSSection)
|
|
/*ENDROMTEAM WorldEditor (Nicu) */
|
|
m_p_oPCSSection->fn_vWriteSection();
|
|
}
|
|
|
|
/* ==> filenames */
|
|
CString fn_csConstructFileName(CString csFileName);
|
|
/*ANNECY TQ 22/06/98{*/
|
|
ACP_tdxHandleOfObject fn_hGetEditorPOBoundingVolume() { return m_hBoundingVolume; }
|
|
void fn_vSetEditorPOBoundingVolume(ACP_tdxHandleOfObject hBoundingVolume) { m_hBoundingVolume = hBoundingVolume; }
|
|
/*ENDANNECY TQ}*/
|
|
|
|
|
|
|
|
};
|
|
|
|
#endif /*__3DOBJECT_HPP__*/
|