//*****************************************************************************
//*  _zObject.cpp                                                             *
//*****************************************************************************
//*                                                                           *
//* This file contains all the methods of the ZDx_Object class                *
//* and its inherited classes                                                 *
//*                                                                           *
//*****************************************************************************
//* Author : Alexis Vaisse                                                    *
//*****************************************************************************


// "standard" include
#include "stdafx.h"
#include "ACP_Base.h"

#include "TFA.h"        // Family dll include

#define HieFriend
#include "IncGAM.h"
#include "IncITF.h"
#include "..\Main\Inc\_EditID.h"

#include "OGD.h"    // 3dGeom dll include
#include "OAC.h"    // Actor  dll include
#include "OPD.h"    // Physical object dll include
//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
#include "ozo.h"
//ENDROMTEAM WorldEditor (Cristi Petrescu)


// personal include
#include "_zObject.hpp"
#include "_zInterf.hpp"


//*****************************************************************************
// class ZDx_Object
//*****************************************************************************

//DeclareTemplateStatic (ACP_tdxHandleOfObject); 

//-----------------------------------------------------------------------------
// class ZDx_Object - GiveZDxID
// Give the ID of a ZDx object, depending on its type
//-----------------------------------------------------------------------------
long ZDx_Object::GiveZDxID (tdeZDxType _eZDxType)
{
    switch (_eZDxType)
    {
        case eZdd            : return C_lZDD;
        case eZde            : return C_lZDE;
        case eZdm            : return C_lZDM;
        case eZdr            : return C_lZDR;
        case eBoundingVolume : return C_lBoundingVolume;
// ANNECY AV CLEAN_MEC {
//        case eTestPoint      : return C_lTestPoint;
// END ANNECY AV }
        default              : ASSERT (0);
                               return C_lZDD;
    }
}

//-----------------------------------------------------------------------------
// class ZDx_Object - constructor
//-----------------------------------------------------------------------------
ZDx_Object::ZDx_Object (ZDx_Interface * _pZDxInterface      , const CString          _csZDxTypeName ,
                        tdeZDxType      _eZDxType           , tdeZDxGeometricType    _eZDxGeometricType ,
                        CString         _csZDxName          , CPA_BaseObject *       _pOwner ,
//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
                        Shape3D *    _pGeometric3dObject /*, ACP_tdxHandleOfElement _hHandleOfElement*/)
//ENDROMTEAM WorldEditor (Cristi Petrescu)

// ANNECY AV CLEAN_MEC {
    : CPA_SaveObject (_pZDxInterface , _csZDxTypeName , /* _eZDxType == eTestPoint ? E_ss_NoSave : */ E_ss_Responsible , _pOwner) ,
// END ANNECY AV }
      CPA_EdMot<ACP_tdxHandleOfObject> ((ACP_tdxHandleOfObject) _pGeometric3dObject -> GetData ())
{
    m_pZDxShape = 0;  // Because it can be used by fn_csComputeReferencedSectionName called by fn_eRename

    // Initialisation for base class

    SetSectionData           (this); 	
    SetDataPath              ("");
    SetReferencedSectionName ("");
	
    // Internal initialisation

    SetZDxType          (_eZDxType);
    SetZDxGeometricType (_eZDxGeometricType);
    m_eDisplayType  = eNotDisplayed;
    m_bMotorDisplay = TRUE;
    m_lIndexInList  = -1;
// ANNECY AV CLEAN_MEC {
//    m_pTestPoint    = NULL;
// END ANNECY AV }

//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
//    switch (_eZDxGeometricType)
//    {
//        case eSphere :  m_pZDxShape = new ZDx_Shape (this , _pGeometric3dObject /*, _hHandleOfElement*/);     break;
//        case eBox    :  m_pZDxShape = new ZDx_Shape    (this , _pGeometric3dObject /*, _hHandleOfElement*/);     break;
//        case ePoint  :  m_pZDxShape = new ZDx_Shape  (this , _pGeometric3dObject /*, _hHandleOfElement*/);     break;
//        case eCone   :  m_pZDxShape = new ZDx_Shape   (this , _pGeometric3dObject /*, _hHandleOfElement*/);     break;
//        default:        ASSERT (0);                                                                        break;
//    }
	m_pZDxShape = new ZDx_Shape (this , _pGeometric3dObject);
//ENDROMTEAM WorldEditor (Cristi Petrescu)

    // Set the name

    if (fn_eRename (_csZDxName) != E_mc_None)  SetDefaultValidName ();
    fn_vUpdateSectionName ();
}

//-----------------------------------------------------------------------------
// class ZDx_Object - copy constructor
//-----------------------------------------------------------------------------
ZDx_Object::ZDx_Object (ZDx_Object & _pZDxObjectToCopy)

    : CPA_SaveObject (_pZDxObjectToCopy)
{
    SetZDxType          (_pZDxObjectToCopy . GetZDxType ());
    SetZDxGeometricType (_pZDxObjectToCopy . GetZDxGeometricType ());
    m_eDisplayType  = eNotDisplayed;
    m_bMotorDisplay = TRUE;
    m_lIndexInList  = -1;
// ANNECY AV CLEAN_MEC {
//    m_pTestPoint    = NULL;
// END ANNECY AV }

    // Create a new geometric object
//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
    //ACP_tdxHandleOfElement HandleOfElement;
    Shape3D * pGeometric3dObject = ((ZDx_Interface *) GetEditor ()) ->
        CreateGraphicObject (_pZDxObjectToCopy . GetZDxGeometricType () /*, & HandleOfElement */, "" , "");  //??? Remplir DataPath et ReferenceSectionName
//ENDROMTEAM WorldEditor (Cristi Petrescu)

    SetStruct ((ACP_tdxHandleOfObject) _pZDxObjectToCopy . GetEngineStruct ());

//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
	MTH3D_tdstVector stPoint;
	GLI_tdxValue     Length;
	Shape3D *pShape3DToCopy = _pZDxObjectToCopy . GetZDxShape () -> GetGeometric3dObject ();

    switch (m_eZDxGeometricType)
    {
        case eSphere :  
			m_pZDxShape = new ZDx_Shape (this , pGeometric3dObject);/*, HandleOfElement ,
                                                      (ZDx_Sphere *) _pZDxObjectToCopy . GetZDxShape ());*/
			stPoint = ((Sphere3D *)pShape3DToCopy) -> GetCenter ();
			((Sphere3D *) pGeometric3dObject) -> SetCenter (& stPoint);
			Length  = ((Sphere3D *)pShape3DToCopy) -> GetRadius ();
			((Sphere3D *) pGeometric3dObject) -> SetRadius (& Length);
			break;
        case eBox    :  
			m_pZDxShape = new ZDx_Shape (this , pGeometric3dObject); /*, HandleOfElement ,
                                                      (ZDx_Box    *) _pZDxObjectToCopy . GetZDxShape ());*/
			stPoint = ((Box3D *) pShape3DToCopy) -> GetMinPoint ();
	        ((Box3D *) pGeometric3dObject) -> SetMinPoint (& stPoint);
		    stPoint = ((Box3D *) pShape3DToCopy) -> GetMaxPoint ();
			((Box3D *) pGeometric3dObject) -> SetMaxPoint (& stPoint);
			stPoint = ((Box3D *) pShape3DToCopy) -> GetMinPoint ();
			((Box3D *) pGeometric3dObject) -> SetMinPoint (& stPoint);    // To be sure it is copied (because we must have Min <= Max)
			break;
        case ePoint  :  
			m_pZDxShape = new ZDx_Point (this , pGeometric3dObject /*, HandleOfElement */,
                                                      (ZDx_Point  *) _pZDxObjectToCopy . GetZDxShape ());
            break;
        case eCone   :  
			m_pZDxShape = new ZDx_Shape (this , pGeometric3dObject); /*, HandleOfElement ,
                                                      (ZDx_Cone   *) _pZDxObjectToCopy . GetZDxShape ());*/
			stPoint = ((Cone3D *) pShape3DToCopy) -> GetBasePoint ();
			((Cone3D *) pGeometric3dObject) -> SetBasePoint (& stPoint);
			stPoint = ((Cone3D *) pShape3DToCopy) -> GetTopPoint  ();
			((Cone3D *) pGeometric3dObject) -> SetTopPoint  (& stPoint);
			Length  = ((Cone3D *) pShape3DToCopy) -> GetRadius    ();
			((Cone3D *) pGeometric3dObject) -> SetRadius    (& Length);
			break;
        default:        ASSERT (0);
                        break;
    }
//ENDROMTEAM WorldEditor (Cristi Petrescu)
}

//-----------------------------------------------------------------------------
// class ZDx_Object - destructor
//-----------------------------------------------------------------------------
ZDx_Object::~ZDx_Object ()
{
    delete m_pZDxShape -> GetGeometric3dObject ();    // We delete the geometric object
    delete m_pZDxShape;                               // and the ZDx shape object

// ANNECY AV CLEAN_MEC {
//    if (m_pTestPoint)  delete m_pTestPoint;
// END ANNECY AV }
}

//-----------------------------------------------------------------------------
// class ZDx_Object - InitZDxObject
// static initialization : this function must be called once to initialize the CPA_EdMot functions
//-----------------------------------------------------------------------------
void ZDx_Object::InitZDxObject ()
{
    CPA_EdMot<ACP_tdxHandleOfObject>::Init (CreateZDxEngineStruct , CopyZDxEngineStruct , DeleteZDxEngineStruct);
}

//-----------------------------------------------------------------------------
// class ZDx_Object - CreateZDxEngineStruct
// When created, a ZDx_Object has no engine object
// It will be added later
//-----------------------------------------------------------------------------
ACP_tdxHandleOfObject ZDx_Object::CreateZDxEngineStruct ()
{
    return NULL;
}

//-----------------------------------------------------------------------------
// class ZDx_Object - CopyZDxEngineStruct
// Copy a ZDx engine structure
//-----------------------------------------------------------------------------
void ZDx_Object::CopyZDxEngineStruct (ACP_tdxHandleOfObject _hDst , ACP_tdxHandleOfObject _hSrc)
{
    // A ZDx can't be copied
    _hDst = NULL;
}

//-----------------------------------------------------------------------------
// class ZDx_Object - DeleteZDxEngineStruct
// Delete a ZDx engine structure
//-----------------------------------------------------------------------------
void ZDx_Object::DeleteZDxEngineStruct (ACP_tdxHandleOfObject _hZDxEngineStruct)
{
    // We do nothing
}

//-----------------------------------------------------------------------------
// class ZDx_Object - GetDataType
// Return the engine type of the ZDx object
//-----------------------------------------------------------------------------
long ZDx_Object::GetDataType ()
{
    return GiveZDxID (m_eZDxType);
}

//-----------------------------------------------------------------------------
// class ZDx_Object - GetData
// Return the engine object of the ZDx object
//-----------------------------------------------------------------------------
void * ZDx_Object::GetData ()
{
    return GetStruct ();
}

//-----------------------------------------------------------------------------
// class ZDx_Object - fn_eCheckUnicity
// Check if the given name is valid or not
//-----------------------------------------------------------------------------
tdeMissingCriteria ZDx_Object::fn_eCheckUnicity (const CString csNewName)
{
    // Check unicity with owner
    tdeMissingCriteria eResult = fn_eCheckUnicityWithOwner (csNewName);
    if (eResult != E_mc_None)  return eResult;

    // Check unicity for geometric object name
    ZDx_Shape  * pZDxShape          = GetZDxShape ();
    if (! pZDxShape)           return E_mc_None;
//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
    Shape3D * pGeometric3dObject = pZDxShape -> GetGeometric3dObject ();
//ENDROMTEAM WorldEditor (Cristi Petrescu)
    if (! pGeometric3dObject)  return E_mc_None;

    if (pGeometric3dObject -> GetName () . CompareNoCase (csNewName) == 0)  return E_mc_None;
    else return pGeometric3dObject -> fn_eCheckUnicity (csNewName);
}

//-----------------------------------------------------------------------------
// class ZDx_Object - fn_vNotifyRename
// Called when one renames the ZDx : we also rename the geometric object
//-----------------------------------------------------------------------------
void ZDx_Object::fn_vNotifyRename ()
{
    SetReferencedSectionName (fn_csComputeReferencedSectionName (GetName ()));

    tdeMissingCriteria eResult = GetZDxShape () -> GetGeometric3dObject () -> fn_eRename (GetName ());
    ASSERT (eResult == E_mc_None);
}

//-----------------------------------------------------------------------------
// class ZDx_Object - GetZDxTypeName
// return the name of the type of the ZDx object
//-----------------------------------------------------------------------------
char * ZDx_Object::GetZDxTypeName ()
{
    switch (m_eZDxType)
    {
        case eZdd            : return C_szZddName;
        case eZde            : return C_szZdeName;
        case eZdm            : return C_szZdmName;
        case eZdr            : return C_szZdrName;
        case eBoundingVolume : return C_szBoundingVolumeName;
// ANNECY AV CLEAN_MEC {
//        case eTestPoint      : return C_szTestPointName;
// END ANNECY AV }
        default              : ASSERT (0);
                               return "";
    }
}

//-----------------------------------------------------------------------------
// class ZDx_Object - GetZDxName
// return the name of the ZDx object
//-----------------------------------------------------------------------------
char * ZDx_Object::GetZDxName ()
{
    // return the name of the object
    return (char *) LPCTSTR (GetName ());
}

//-----------------------------------------------------------------------------
// class ZDx_Object - SetZDxName
// set the name of the ZDx object
// return FALSE if the name already exists
//-----------------------------------------------------------------------------
BOOL ZDx_Object::SetZDxName (char * szNewName)
{
    char * szOldName = GetZDxName ();

    tdeMissingCriteria eResult = fn_eRename (szNewName);

    if (eResult == E_mc_None)                                // If the name has changed
    {
        // We get the list of zone list
        CPA_BaseObjectList * pListOfEdtList = GetEditor () -> GetMainWorld () -> fn_p_oGetOriginalObjectList (C_szEdtListTypeName);

        for (int i = 0 ; i < pListOfEdtList -> GetCount () ; i ++)
        {
            EdtList * pEdtList = (EdtList *) pListOfEdtList -> GetObjectWithIndex (i);
            // If the zone list contains this zone, we notify to save it
            if (pEdtList -> Find (this))  pEdtList -> fn_vUpdateReference (this);
        }

        // We get the list of physical objects
        CPA_BaseObjectList * pListOfPO = GetEditor () -> GetMainWorld () -> fn_p_oGetOriginalObjectList (C_szPhysicalObjectTypeName);

        for (i = 0 ; i < pListOfPO -> GetCount () ; i ++)
        {
            EditorPO * pModule = (EditorPO *) pListOfPO -> GetObjectWithIndex (i);
            // If the module contains this zone, we notify to save it
            if (pModule -> GetZone (C_ucTypeZdd) == this ||
                pModule -> GetZone (C_ucTypeZde) == this ||
                pModule -> GetZone (C_ucTypeZdm) == this ||
                pModule -> GetZone (C_ucTypeZdr) == this)  pModule -> fn_vUpdateReference (this);
        }

        // We get the list of families
        CPA_BaseObjectList * pListOfFamily = GetEditor () -> GetMainWorld () -> fn_p_oGetOriginalObjectList (C_szFamilyTypeName);

        for (i = 0 ; i < pListOfFamily -> GetCount () ; i ++)
        {
            CPA_Family * pFamily = (CPA_Family *) pListOfFamily -> GetObjectWithIndex (i);
            if (pFamily -> mfn_p_oGetBoundingVolume () == this)  pFamily -> fn_vUpdateReference (this);
        }
    }

    return eResult == E_mc_None;
}

//-----------------------------------------------------------------------------
// class ZDx_Object - CallbackToCreateZDxFile
// We must add one special line in a ZDx file
//-----------------------------------------------------------------------------
void ZDx_Object::CallbackToCreateZDxFile (SCR_tdst_File_Description * _pFile         ,
                                          char                      * _szSectionName ,
                                          void                      * _pData         ,
                                          SCR_tde_Ntfy_Action         _eAction)
{
    switch (_eAction)
    {
        case SCR_EA_Ntfy_AddSection    : // The ZDx file does not exist : we ad a special line
                                         fn_v_SvL0_fputs (_pFile , "$SetCurrentFileDouble(1,1.0)\n");
                                         break;
        case SCR_EA_Ntfy_ModifySection : // The ZDx file already exists : we do nothing
                                         break;
    }
}

//-----------------------------------------------------------------------------
// class ZDx_Object - fn_vNotifySave
// Virtual function from the base class called to notify to save a ZDx object
//-----------------------------------------------------------------------------
void ZDx_Object::fn_vNotifySave ()
{
    if (! fn_bCanBeNotified ()) return;

    GetZDxShape () -> GetGeometric3dObject () -> fn_vNotifySave ();

    // Register the file callback
    char szFileName [SCR_CV_ui_Cfg_MaxLenName];
    SCR_fn_v_RdL0_SplitSectionName ((char *) (LPCTSTR) GetZDxShape () -> GetGeometric3dObject () -> GetCompleteSectionName () , szFileName , NULL , NULL);
    // If the file does not exist, register a callback on it
    if (_access (szFileName , 0) == -1)
        SCR_fn_v_SvL1_RegisterNotify (szFileName , CallbackToCreateZDxFile , NULL , SCR_EA_Ntfy_AddOrModifySection);
}

//-----------------------------------------------------------------------------
// class ZDx_Object - fn_vNotifyUnSave
// Virtual function from the base class called to notify to delete a ZDx object
//-----------------------------------------------------------------------------
void ZDx_Object::fn_vNotifyUnSave ()
{
    if (! fn_bCanBeNotified ()) return;

    // We notify to delete the ZDx object only if it is not shared by several modules
    if (GetNumberOfModuleUsingThis () <= 1)  GetZDxShape () -> GetGeometric3dObject () -> fn_vNotifyUnSave ();
}

//-----------------------------------------------------------------------------
// class ZDx_Object - fn_vNotifyRestore
// Virtual function from the base class called to notify to restore a deleted ZDx object
//-----------------------------------------------------------------------------
void ZDx_Object::fn_vNotifyRestore ()
{
    if (! fn_bCanBeNotified ()) return;

    // We notify to restore a deleted ZDx object only if it is not used by another module
    if (GetNumberOfModuleUsingThis () == 0)  GetZDxShape () -> GetGeometric3dObject () -> fn_vNotifyRestore ();
}

//-----------------------------------------------------------------------------
// class ZDx_Object : fn_csComputeReferencedSectionName
// Compte the referenced section name : use the function of the geometric 3d object
//-----------------------------------------------------------------------------
CString ZDx_Object::fn_csComputeReferencedSectionName (const CString _csNewName)
{
    ZDx_Shape  * pZDxShape          = GetZDxShape ();
    if (! pZDxShape)           return "";
//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
    Shape3D * pGeometric3dObject = pZDxShape -> GetGeometric3dObject ();
//ENDROMTEAM WorldEditor (Cristi Petrescu)
    if (! pGeometric3dObject)  return "";

    return pGeometric3dObject -> fn_csComputeReferencedSectionName (_csNewName);
}

//-----------------------------------------------------------------------------
// class ZDx_Object : GetNumberOfModuleUsingThis
// Get the number of modules using this ZDx object
//-----------------------------------------------------------------------------
long ZDx_Object::GetNumberOfModuleUsingThis ()
{
    long lNumber = 0;
    // We get the list of physical objects
    CPA_BaseObjectList * pListOfPO = GetEditor () -> GetMainWorld () -> fn_p_oGetOriginalObjectList (C_szPhysicalObjectTypeName);

    for (int i = 0 ; i < pListOfPO -> GetCount () ; i ++)
    {
        EditorPO * pModule = (EditorPO *) pListOfPO -> GetObjectWithIndex (i);
        if (pModule -> GetZone (C_ucTypeZdd) == this ||
            pModule -> GetZone (C_ucTypeZde) == this ||
            pModule -> GetZone (C_ucTypeZdm) == this ||
            pModule -> GetZone (C_ucTypeZdr) == this)  lNumber++;
    }

    return lNumber;
}

//-----------------------------------------------------------------------------
// class ZDx_Object : RedrawZDxObject
// redraw the object (in fact, redraw the whole world)
//-----------------------------------------------------------------------------
void ZDx_Object::RedrawZDxObject ()
{
    ((ZDx_Interface *) GetEditor ()) -> IWillRefreshDisplay (C_lRedrawZDxObject);
    ((ZDx_Interface *) GetEditor ()) -> RefreshDisplay      (C_lRedrawZDxObject);
}


//*****************************************************************************
// class ZDx_Shape
//
// The base class for the different shape of ZDx
// The inherited classes will contains methods to modify the geometric definition of the ZDx
//*****************************************************************************

//-----------------------------------------------------------------------------
// class ZDx_Shape - constructor
//-----------------------------------------------------------------------------
//ROMTEAM WorldEditor (Cristi Petrescu 12/97)
ZDx_Shape::ZDx_Shape (ZDx_Object * _pZDxObject , Shape3D * _pGeometric3dObject /*,
                      ACP_tdxHandleOfElement _HandleOfElement*/)
{
    m_pZDxObject         = _pZDxObject;
    m_pGeometric3dObject = _pGeometric3dObject;
    //m_hHandleOfElement   = _HandleOfElement;
}
//ENDROMTEAM WorldEditor (Cristi Petrescu)

//-----------------------------------------------------------------------------
// class ZDx_Shape : RefreshData
// Recompute the center of the object from the position of the super object
//-----------------------------------------------------------------------------
void ZDx_Shape::RefreshData (CPA_SuperObject * _pSuperObject)
{
    // Get the matrix of the super object
    GEO_tdxHandleToMatrix hHandleToMatrix = HIE_fn_hGetSuperObjectMatrix (_pSuperObject -> GetStruct ());
    // Get the translation vector
    MTH3D_tdstVector TranslationVector;
    POS_fn_vGetTranslationVector(hHandleToMatrix , & TranslationVector);

    // Add this translation vector to the center of the object
    MTH3D_tdstVector Center = GetCenter ();
    MTH3D_M_vAddVector (& Center , & Center , & TranslationVector);
    SetCenter (& Center);

    // Set the translation vector to null;
    MTH3D_M_vNullVector (& TranslationVector);
    POS_fn_vSetTranslationVector(hHandleToMatrix , & TranslationVector);
}

//ROMTEAM WorldEditor (Cristi Petrescu 12/97)

//*****************************************************************************
// class ZDx_Point
//
// The class to modify the geometric aspect of a ZDx of type point
//*****************************************************************************

//-----------------------------------------------------------------------------
// class ZDx_Point : Constructor
//-----------------------------------------------------------------------------
ZDx_Point::ZDx_Point (ZDx_Object * _pZDxObject , Shape3D * _pGeometric3dObject /*,
                      ACP_tdxHandleOfElement HandleOfElement */,
                      ZDx_Point * _pZDxPointToCopy /* = NULL */)
    : ZDx_Shape (_pZDxObject , _pGeometric3dObject /*, HandleOfElement*/)
{
    if (_pZDxPointToCopy)
    {
        MTH3D_tdstVector stPoint = ((Point3D *) _pZDxPointToCopy -> GetGeometric3dObject ()) -> GetPoint ();
        ((Point3D *) _pGeometric3dObject) -> SetPoint (& stPoint);
		// BEGIN CPA2 Cristi Petrescu 97-12-05
		// if (_pZDxObject -> GetZDxType () == eTestPoint) 
// ANNECY AV CLEAN_MEC {
//		UpdateTestPointPosition ();
// END ANNECY AV }
		// END CPA2 Cristi Petrescu 97-12-05
    }
}

/*
//-----------------------------------------------------------------------------
// class ZDx_Point : GetPoint
// return the 3D coordinates of the point
//-----------------------------------------------------------------------------
MTH3D_tdstVector ZDx_Point::GetPoint ()
{
    MTH3D_tdstVector stPoint;
    GetGeometric3dObject () -> fn_vGetPoint (0 , & stPoint);
    return stPoint;
}

//-----------------------------------------------------------------------------
// class ZDx_Point : SetPoint
// set the 3D coordinates of the point
//-----------------------------------------------------------------------------
void ZDx_Point::SetPoint (MTH3D_tdstVector * _pPoint)
{
    GetGeometric3dObject () -> fn_vSetPoint (0 , _pPoint);

    if (m_pZDxObject -> GetZDxType () == eTestPoint)  UpdateTestPointPosition ();
}

//-----------------------------------------------------------------------------
// class ZDx_Point : SetPointX
// set the X coordinate of the point
//-----------------------------------------------------------------------------
void ZDx_Point::SetPointX (GLI_tdxValue _X)
{
    MTH3D_tdstVector stPoint = GetPoint ();
    MTH3D_M_vSetXofVector (& stPoint , _X);
    SetPoint (& stPoint);
}

//-----------------------------------------------------------------------------
// class ZDx_Point : SetPointY
// set the Y coordinate of the point
//-----------------------------------------------------------------------------
void ZDx_Point::SetPointY (GLI_tdxValue _Y)
{
    MTH3D_tdstVector stPoint = GetPoint ();
    MTH3D_M_vSetYofVector (& stPoint , _Y);
    SetPoint (& stPoint);
}

//-----------------------------------------------------------------------------
// class ZDx_Point : SetPointZ
// set the Z coordinate of the point
//-----------------------------------------------------------------------------
void ZDx_Point::SetPointZ (GLI_tdxValue _Z)
{
    MTH3D_tdstVector stPoint = GetPoint ();
    MTH3D_M_vSetZofVector (& stPoint , _Z);
    SetPoint (& stPoint);
}

//-----------------------------------------------------------------------------
// Class ZDx_Point - SetColorOfPoint
// Set the color of the point : selected or not selected
//-----------------------------------------------------------------------------
void ZDx_Point::SetColorOfPoint (BOOL _bSelected)
{
    GMT_tdxHandleToGameMaterial hGameMaterial   = GEO_xGetGameMaterialOfElementPoints 
                            ((ACP_tdxHandleOfObject) m_pGeometric3dObject -> GetData () , m_hHandleOfElement);
    ACP_tdxHandleOfMaterial     hVisualMaterial = GMT_fn_hGetVisualMaterial (hGameMaterial);
    GEO_tdstColor               stColor;
    if (_bSelected)    // selected -> pink
    {
        stColor . xR = 1.0;
        stColor . xG = 0.5;
        stColor . xB = 1.0;
    }
    else               // not selected -> white
    {
        stColor . xR = 1.0;
        stColor . xG = 1.0;
        stColor . xB = 1.0;
    }
    stColor . xA = 1.0;
    GLI_xSetMaterialColor (hVisualMaterial , &   stColor);
}
*/

//-----------------------------------------------------------------------------
// Class ZDx_Point - UpdateTestPointPosition
// Set the position of the test point with the position of the point
//-----------------------------------------------------------------------------
// ANNECY AV CLEAN_MEC {
/*
void ZDx_Point::UpdateTestPointPosition ()
{
	if (m_pZDxObject -> GetZDxType () == eTestPoint)
	{
		MTH3D_tdstVector stPosition = ((Point3D *) GetGeometric3dObject ()) -> GetPoint ();
		m_pZDxObject -> GetTestPoint () -> SetPosition (& stPosition);
	}
}
*/
// END ANNECY AV }


//ENDROMTEAM WorldEditor (Cristi Petrescu)
