reman3/Rayman_X/cpa/tempgrp/TPG/Src/TPG_OEnv.cpp

518 lines
17 KiB
C++

///////////////////////////////////////////////////
//
// Particles Generator Environment
//
///////////////////////////////////////////////////
#include "StdAfx.h"
#define D_MSPrtSrc_StructureDefine
#include "TPG_OEnv.hpp"
#include "_Minterf.hpp"
#include "TPG_Strg.hpp"
#include "TPG_ClBk.hpp"
#include "PRT.h"
#include "GAM.h"
#include "MTH.h"
#include "ErO.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
////////////////////////////////////////////////
// Constructor and Destructor
////////////////////////////////////////////////
CPA_PartGen_Environment::CPA_PartGen_Environment(CString _csName, PRT_tdstParticlesEnvironment *_p_stEnv, BOOL _bIsLoaded )
: CPA_SaveObject( g_pclInterface, g_C_csPartGenEnvName, E_ss_Responsible )
{
// Initialization for CPA_SaveObject
SetSectionData( this );
SetCallBackSave( m_s_fn_vCallBackSaveEnv );
SetDataPath( C_szEffectPath );
if ( fn_eRename(_csName) != E_mc_None )
SetDefaultValidName();
fn_vUpdateSectionName();
m_pri_p_clGenerator = NULL;
if( _bIsLoaded )
{
if ( _p_stEnv == NULL ) //created when new button is pressed : engine object is created
{
SetExistingSection( FALSE );
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Creating a new environment",
"CPA_PartGen_Environment::CPA_PartGen_Environment",
E_ERROR_GRAVITY_FATAL,
"the engine object is not allocated"
);
PRT_fn_vCreateParticlesEnvironment( &_p_stEnv );
ERROR_ASSERT( _p_stEnv != NULL );
fn_vUpdateData( (void*)_p_stEnv );
m_pri_p_stEnv = _p_stEnv;
m_pub_fn_vSetEnvType(PRT_C_ulSphereEnv);
m_pub_fn_vSetBoxMin( 0.0, 0.0, 0.0 );
m_pub_fn_vSetBoxMax( 1.0, 1.0, 1.0 );
m_pub_fn_vSetSphereCenter( 0.0, 0.0, 0.0 );
}
else //created using linktable : engine object is loaded and used
{
SetExistingSection( TRUE );
fn_vUpdateData( (void*)_p_stEnv );
m_pri_p_stEnv = _p_stEnv;
}
m_pri_fn_vSetInternalPoints();
m_pri_fn_vFillDataList();
}
else //created : engine object is not loaded now
{
fn_vUpdateData( NULL );
m_pri_p_stEnv = NULL;
SetExistingSection( TRUE );
}
SetAvailable( _bIsLoaded );
}
CPA_PartGen_Environment::~CPA_PartGen_Environment()
{
fn_vNotifyUnSave();
}
//*********************************************
// Updates the pointer on engine object
void CPA_PartGen_Environment::m_pub_fn_vSetEnv( PRT_tdstParticlesEnvironment *_p_stEnv )
{
fn_vUpdateData( (void*)_p_stEnv );
m_pri_p_stEnv = _p_stEnv;
SetAvailable( TRUE );
m_pri_fn_vSetInternalPoints();
m_pri_fn_vFillDataList();
}
void CPA_PartGen_Environment::m_pub_fn_vSetGenerator( CPA_PartGen_Generator *_p_clGen )
{
m_pri_p_clGenerator = _p_clGen;
m_pri_fn_vSetInternalPoints();
}
/////////////////////////////////////////
// virtual functions
/////////////////////////////////////////
long CPA_PartGen_Environment::GetDataType( void )
{
return( 0 );
}
void* CPA_PartGen_Environment::GetData( void )
{
return (void*)m_pri_p_stEnv;
}
CString CPA_PartGen_Environment::fn_csComputeReferencedSectionName(const CString _csNewName)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
char szSectionName[ SCR_CV_ui_Cfg_MaxLenName ];
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
sprintf( szSectionName, "%s^%s:%s", C_szEnvironmentFileName, C_SectionPrtEnvDescription, (char *) LPCTSTR( _csNewName ) );
return( szSectionName );
}
//****************************************************
// load the engine object if necessary
BOOL CPA_PartGen_Environment::m_pub_fn_vLoadIfUnloaded()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Cxt_Values *p_stValues;
PRT_tdstParticlesEnvironment *p_stEnv;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
if ( fn_bIsAvailable() )
return FALSE;
p_stValues = SCR_fnp_st_RdL0_AnalyseSection((char *)LPCTSTR(GetReferencedSectionName()), SCR_CDF_uw_Anl_Normal);
p_stEnv = (PRT_tdstParticlesEnvironment*)p_stValues->a_ulValues[0];
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Loading an unloaded environment",
"CPA_PartGen_Environment::m_pub_fn_vLoadIfUnloaded",
E_ERROR_GRAVITY_FATAL,
"the loaded engine object is null"
);
ERROR_ASSERT( p_stEnv != NULL );
fn_vUpdateData( (void*) p_stEnv );
m_pri_p_stEnv = p_stEnv;
SetAvailable(TRUE);
m_pri_fn_vFillDataList();
return TRUE;
}
//////////////////////////////////////////////////
// Environment Type
void CPA_PartGen_Environment::m_pub_fn_vSetEnvType( short _wIndex )
{
PRT_M_vSetTypeParticlesEnvironment( m_pri_p_stEnv, (unsigned long)_wIndex );
fn_vNotifySave();
}
short CPA_PartGen_Environment::m_pub_fn_wGetEnvType()
{
return (short)m_pri_p_stEnv->ulEnvType;
}
/////////////////////////////////////////////////
// Min Max for Box type
void CPA_PartGen_Environment::m_pri_fn_vSetInternalPoints()
{
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Initialize internal data min max points and center for environment",
"CPA_PartGen_Environment::m_pri_fn_vSetInternalPoints",
E_ERROR_GRAVITY_FATAL,
"Edited engine environment is NULL"
);
ERROR_ASSERT( m_pri_p_stEnv != NULL );
if( m_pri_p_clGenerator == NULL )
{
MTH3D_M_vCopyVector( (&m_pri_stMinPoint), (&(m_pri_p_stEnv->stMinPoint)) );
MTH3D_M_vCopyVector( (&m_pri_stMaxPoint), (&(m_pri_p_stEnv->stMaxPoint)) );
MTH3D_M_vCopyVector( (&m_pri_stSphereCenter), (&(m_pri_p_stEnv->stSphereCenter)) );
}
else
{
if( m_pri_p_clGenerator->m_pub_fn_bGetLinkToEnv() )
{
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Initialize internal data min max points and center for environment",
"CPA_PartGen_Environment::m_pri_fn_vSetInternalPoints",
E_ERROR_GRAVITY_FATAL,
"Engine generator using the edited environment is NULL"
);
ERROR_ASSERT( m_pri_p_clGenerator->m_pri_hGenerator != NULL );
MTH3D_M_vCopyVector( (&m_pri_stMinPoint), (&(m_pri_p_clGenerator->m_pri_hGenerator->stMinPoint)) );
MTH3D_M_vCopyVector( (&m_pri_stMaxPoint), (&(m_pri_p_clGenerator->m_pri_hGenerator->stMaxPoint)) );
MTH3D_M_vCopyVector( (&m_pri_stSphereCenter), (&(m_pri_p_clGenerator->m_pri_hGenerator->stMinPoint)) );
}
else
{
MTH3D_M_vCopyVector( (&m_pri_stMinPoint), (&(m_pri_p_stEnv->stMinPoint)) );
MTH3D_M_vCopyVector( (&m_pri_stMaxPoint), (&(m_pri_p_stEnv->stMaxPoint)) );
MTH3D_M_vCopyVector( (&m_pri_stSphereCenter), (&(m_pri_p_stEnv->stSphereCenter)) );
}
}
}
void CPA_PartGen_Environment::m_pub_fn_vSetBoxMin( double _dMinX, double _dMinY, double _dMinZ )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
MTH3D_tdstVector stBoxMin;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
MTH3D_M_vSetVectorElements( &stBoxMin, MTH_M_xDoubleToReal(_dMinX), MTH_M_xDoubleToReal(_dMinY), MTH_M_xDoubleToReal(_dMinZ) );
MTH3D_M_vCopyVector ( &((m_pri_p_stEnv)->stMinPoint), ( &stBoxMin ) );
fn_vNotifySave();
}
double CPA_PartGen_Environment::m_pub_fn_dGetBoxMinX()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetXofVector( &m_pri_stMinPoint ) );
}
double CPA_PartGen_Environment::m_pub_fn_dGetBoxMinY()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetYofVector( &m_pri_stMinPoint ) );
}
double CPA_PartGen_Environment::m_pub_fn_dGetBoxMinZ()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetZofVector( &m_pri_stMinPoint ) );
}
void CPA_PartGen_Environment::m_pub_fn_vSetBoxMax( double _dMaxX, double _dMaxY, double _dMaxZ )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
MTH3D_tdstVector stBoxMax;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
MTH3D_M_vSetVectorElements( &stBoxMax, MTH_M_xDoubleToReal(_dMaxX), MTH_M_xDoubleToReal(_dMaxY), MTH_M_xDoubleToReal(_dMaxZ) );
MTH3D_M_vCopyVector ( &((m_pri_p_stEnv)->stMaxPoint), ( &stBoxMax ) );
fn_vNotifySave();
}
double CPA_PartGen_Environment::m_pub_fn_dGetBoxMaxX()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetXofVector( &m_pri_stMaxPoint ) );
}
double CPA_PartGen_Environment::m_pub_fn_dGetBoxMaxY()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetYofVector( &m_pri_stMaxPoint ) );
}
double CPA_PartGen_Environment::m_pub_fn_dGetBoxMaxZ()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetZofVector( &m_pri_stMaxPoint ) );
}
///////////////////////////////////////////////////////
// Center and Radius for Sphere type
void CPA_PartGen_Environment::m_pub_fn_vSetSphereCenter( double _dCenterX, double _dCenterY, double _dCenterZ )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
MTH3D_tdstVector stSphereCenter;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
MTH3D_M_vSetVectorElements( &stSphereCenter, MTH_M_xDoubleToReal(_dCenterX), MTH_M_xDoubleToReal(_dCenterY), MTH_M_xDoubleToReal(_dCenterZ) );
MTH3D_M_vCopyVector ( &((m_pri_p_stEnv)->stSphereCenter), ( &stSphereCenter ) );
fn_vNotifySave();
}
double CPA_PartGen_Environment::m_pub_fn_dGetSphereCenterX()
{
//ROMTEAM Bugs Correction (Cristian Stegaru 24/03/98)
// return MTH_M_xRealToDouble( MTH3D_M_xGetXofVector( &m_pri_stSphereCenter ) );
return MTH_M_xRealToDouble (MTH3D_M_xGetXofVector (&m_pri_p_stEnv->stSphereCenter));
//ENDROMTEAM Bugs Correction (Cristian Stegaru)
}
double CPA_PartGen_Environment::m_pub_fn_dGetSphereCenterY()
{
//ROMTEAM Bugs Correction (Cristian Stegaru 24/03/98)
// return MTH_M_xRealToDouble( MTH3D_M_xGetYofVector( &m_pri_stSphereCenter ) );
return MTH_M_xRealToDouble (MTH3D_M_xGetYofVector (&m_pri_p_stEnv->stSphereCenter));
//ENDROMTEAM Bugs Correction (Cristian Stegaru)
}
double CPA_PartGen_Environment::m_pub_fn_dGetSphereCenterZ()
{
//ROMTEAM Bugs Correction (Cristian Stegaru 24/03/98)
// return MTH_M_xRealToDouble( MTH3D_M_xGetZofVector( &m_pri_stSphereCenter ) );
return MTH_M_xRealToDouble (MTH3D_M_xGetZofVector (&m_pri_p_stEnv->stSphereCenter));
//ENDROMTEAM Bugs Correction (Cristian Stegaru)
}
double CPA_PartGen_Environment::m_pub_fn_dGetSphereRadius()
{
return MTH_M_xRealToDouble( m_pri_p_stEnv->xRadius );
}
///////////////////////////////////////////////////////
// Acceleration and Range
void CPA_PartGen_Environment::m_pub_fn_vSetAcceleration( double _dAccelerX, double _dAccelerY, double _dAccelerZ )
{
MTH3D_tdstVector stAcceleration;
MTH3D_M_vSetVectorElements( &stAcceleration, MTH_M_xDoubleToReal(_dAccelerX), MTH_M_xDoubleToReal(_dAccelerY), MTH_M_xDoubleToReal(_dAccelerZ) );
PRT_M_vSetAccelerationParticlesEnvironment( m_pri_p_stEnv, ( &stAcceleration ) );
fn_vNotifySave();
}
double CPA_PartGen_Environment::m_pub_fn_dGetAccelerX()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetXofVector( &((m_pri_p_stEnv)->stAcceleration )) );
}
double CPA_PartGen_Environment::m_pub_fn_dGetAccelerY()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetYofVector( &((m_pri_p_stEnv)->stAcceleration )) );
}
double CPA_PartGen_Environment::m_pub_fn_dGetAccelerZ()
{
return MTH_M_xRealToDouble( MTH3D_M_xGetZofVector( &((m_pri_p_stEnv)->stAcceleration) ) );
}
void CPA_PartGen_Environment::m_pub_fn_vSetRange( double _dRange )
{
PRT_M_vSetAccelerationRangeParticlesEnvironment( m_pri_p_stEnv, MTH_M_xDoubleToReal(_dRange) );
fn_vNotifySave();
}
double CPA_PartGen_Environment::m_pub_fn_dGetRange()
{
return MTH_M_xRealToDouble( m_pri_p_stEnv->xAccelerationRange );
}
/////////////////////////////////////////////////////
// CallBack and function for save
void CPA_PartGen_Environment::m_s_fn_vCallBackSaveEnv
(
SCR_tdst_File_Description *_p_stFile,
char *_p_szSectionName,
void *_p_vData,
SCR_tde_Ntfy_Action _eAction
)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
CPA_PartGen_Environment *p_clEnv;
char szSectionName[ SCR_CV_ui_Cfg_MaxLenName ];
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Saving an environment",
"CPA_PartGen_Environment::m_s_fn_vCallBackSaveEnv",
E_ERROR_GRAVITY_FATAL,
"trying to save a NULL environment"
);
p_clEnv = (CPA_PartGen_Environment*)_p_vData;
ERROR_ASSERT( p_clEnv != NULL );
switch( _eAction )
{
case SCR_EA_Ntfy_AddSection:
case SCR_EA_Ntfy_AddOrModifySection:
case SCR_EA_Ntfy_AddOrRebuildSection:
case SCR_EA_Ntfy_RebuildSection:
case SCR_EA_Ntfy_ModifySection:
{
sprintf( szSectionName, "%s:%s", C_SectionPrtEnvDescription, (char *) LPCTSTR(p_clEnv->GetName()) );
SCR_M_SvL0_SaveBeginSection( _p_stFile, szSectionName, SCR_CC_C_Cfg_EOL );
p_clEnv->m_pri_fn_vSaveEnv( _p_stFile );
SCR_M_SvL0_SaveEndSection( _p_stFile, SCR_CC_C_Cfg_EOL );
p_clEnv->fn_vSectionSaved();
}
break;
case SCR_EA_Ntfy_DeleteIfExists:
case SCR_EA_Ntfy_DeleteSection:
p_clEnv->fn_vSectionDeleted();
break;
}
}
void CPA_PartGen_Environment::m_pri_fn_vSaveEnv( SCR_tdst_File_Description *_p_stFile )
{
short wIndex = m_pub_fn_wGetEnvType();
SCR_M_SvL0_SaveEntry( _p_stFile, C_EntryPrtEnvType, SCR_CC_C_Cfg_NoChar );
SCR_fn_v_SvL0_SaveParameters_MP( _p_stFile, SCR_EF_SvL0_Scanf, 1, M_MAKECHAR(g_C_a_csEnvironmentTypeName[wIndex]) );
switch( wIndex )
{
case ((short)PRT_C_ulAlignedBoxEnv):
SCR_M_SvL0_SaveEntry( _p_stFile, C_EntryPrtEnvMinMaxPoint, SCR_CC_C_Cfg_NoChar );
SCR_fn_v_SvL0_SaveParameters_MP
(
_p_stFile, SCR_EF_SvL0_Scanf, 7, "%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",
m_pub_fn_dGetBoxMinX(), m_pub_fn_dGetBoxMinY(), m_pub_fn_dGetBoxMinZ(),
m_pub_fn_dGetBoxMaxX(), m_pub_fn_dGetBoxMaxY(), m_pub_fn_dGetBoxMaxZ()
);
break;
case ((short)PRT_C_ulSphereEnv):
SCR_M_SvL0_SaveEntry( _p_stFile, C_EntryPrtEnvSphere, SCR_CC_C_Cfg_NoChar );
SCR_fn_v_SvL0_SaveParameters_MP
(
_p_stFile, SCR_EF_SvL0_Scanf, 5, "%.3f,%.3f,%.3f,%.3f",
m_pub_fn_dGetSphereCenterX(), m_pub_fn_dGetSphereCenterY(), m_pub_fn_dGetSphereCenterZ(),
m_pub_fn_dGetSphereRadius()
);
break;
}
SCR_M_SvL0_SaveEntry( _p_stFile, C_EntryPrtEnvAcceleration, SCR_CC_C_Cfg_NoChar );
SCR_fn_v_SvL0_SaveParameters_MP
(
_p_stFile, SCR_EF_SvL0_Scanf, 5, "%.3f,%.3f,%.3f,%.3f",
m_pub_fn_dGetAccelerX(), m_pub_fn_dGetAccelerY(), m_pub_fn_dGetAccelerZ(),
m_pub_fn_dGetRange()
);
}
void CPA_PartGen_Environment::m_pri_fn_vFillDataList()
{
CTL_Editor_Data *p_clData = NULL;
CTL_Editor_EnumDescriptor *p_clEnumDescriptor = NULL;
//**** Environment type *********************
p_clEnumDescriptor = m_pub_fn_p_clGetDocument()->m_pub_fn_p_clGetEnumDescriptorByName( "Env_Type" );
p_clData = m_pub_clDataList.m_fn_pclAddEnumData( p_clEnumDescriptor, "Environment Type" );
p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_p_stEnv->ulEnvType) );
p_clData->m_pub_fn_vSetDataChangedSpecialCallBackFunction( g_fn_vCallBackDataChangedSpecialDisplayGenerator );
p_clData->m_pub_fn_pclAddOwnerData( (void*)this, "EditedEnv" );
p_clData->m_pub_fn_vSetDataChangedCallBackFunction( g_fn_vCallBackDataChangedEnv );
//*** Box Min env *******************************
p_clData = m_pub_clDataList.m_fn_pclAddVectorData( sizeof(MTH_tdxReal), "Min" );
p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_stMinPoint) );
p_clData->m_pub_fn_pclAddOwnerData( (void*)&(m_pri_p_stEnv->ulEnvType), "EnvType" );
p_clData->m_pub_fn_pclAddOwnerData( (void*)this, "EditedEnv" );
p_clData->m_pub_fn_vSetDataChangedCallBackFunction( g_fn_vCallBackDataChangedEnv );
p_clData->m_pub_fn_vSetModificationFunctionWhenWrite( g_fn_vModificationWriteEnvBox );
//*** Box Max env *******************************
p_clData = m_pub_clDataList.m_fn_pclAddVectorData( sizeof(MTH_tdxReal), "Max" );
p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_stMaxPoint) );
p_clData->m_pub_fn_pclAddOwnerData( (void*)&(m_pri_p_stEnv->ulEnvType), "EnvType" );
p_clData->m_pub_fn_pclAddOwnerData( (void*)this, "EditedEnv" );
p_clData->m_pub_fn_vSetDataChangedCallBackFunction( g_fn_vCallBackDataChangedEnv );
p_clData->m_pub_fn_vSetModificationFunctionWhenWrite( g_fn_vModificationWriteEnvBox );
//*** Sphere Center *****************************
p_clData = m_pub_clDataList.m_fn_pclAddVectorData( sizeof(MTH_tdxReal), "Center" );
//ROMTEAM Bugs Correction (Cristian Stegaru 24/03/98)
// p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_stSphereCenter) );
p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_p_stEnv->stSphereCenter) );
//ENDROMTEAM Bugs Correction (Cristian Stegaru)
p_clData->m_pub_fn_pclAddOwnerData( (void*)&(m_pri_p_stEnv->ulEnvType), "EnvType" );
p_clData->m_pub_fn_pclAddOwnerData( (void*)this, "EditedEnv" );
p_clData->m_pub_fn_vSetDataChangedCallBackFunction( g_fn_vCallBackDataChangedEnv );
p_clData->m_pub_fn_vSetModificationFunctionWhenWrite( g_fn_vModificationWriteEnvSphere );
//*** Sphere radius ******************************
p_clData = m_pub_clDataList.m_fn_pclAddDecimalData( sizeof(MTH_tdxReal), "Radius" );
p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_p_stEnv->xRadius) );
p_clData->m_pub_fn_pclAddOwnerData( (void*)&(m_pri_p_stEnv->ulEnvType), "EnvType" );
p_clData->m_pub_fn_pclAddOwnerData( (void*)this, "EditedEnv" );
p_clData->m_pub_fn_vSetDataChangedCallBackFunction( g_fn_vCallBackDataChangedEnv );
//*** Acceleration ******************************
p_clData = m_pub_clDataList.m_fn_pclAddVectorData( sizeof(MTH_tdxReal), "Acceleration" );
p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_p_stEnv->stAcceleration) );
p_clData->m_pub_fn_pclAddOwnerData( (void*)this, "EditedEnv" );
p_clData->m_pub_fn_vSetDataChangedCallBackFunction( g_fn_vCallBackDataChangedEnv );
//*** Acceleration range *******************************
p_clData = m_pub_clDataList.m_fn_pclAddDecimalData( sizeof(MTH_tdxReal), "Range" );
p_clData->m_fn_vSetMotorDataPtr( (void*)&(m_pri_p_stEnv->xAccelerationRange) );
p_clData->m_pub_fn_pclAddOwnerData( (void*)this, "EditedEnv" );
p_clData->m_pub_fn_vSetDataChangedCallBackFunction( g_fn_vCallBackDataChangedEnv );
}
CPA_PartGen_MyDocument * CPA_PartGen_Environment::m_pub_fn_p_clGetDocument()
{
return g_pclInterface->m_pub_fn_p_clGetDocument();
}