// CharacterInfoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "..\inc\edactors\EdAcIRes.h"
////
#include "_AInterf.hpp"
#include "IncGAM.h"
#include "TFa.h"
#include "DPT.h"

#include "EDACStrg.hpp"
#include "EDACInst.hpp"
#include "EDACModl.hpp"
#include "EDACVwAc.hpp"
#include "EDACDgIf.hpp"
#include "EDACDgQu.hpp"
#include "Defines.hpp"

//-----------------IR-------------------------
#include "EdIRStrg.hpp"
#include "EdIRFrm.hpp"
#include "EdIRDVVw.hpp"
#include "EdIRBeEn.hpp"
//--------------------------------------------

#include "EDACActr.hpp"


#include "OPD.h"
#include "OGd.h"

#include "ErO.h"

#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
//-----------------IR-------------------------
		#include "EdIRIRD.hpp"
//--------------------------------------------
#include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT

#include "CharacterInfoDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCharacterInfoDlg dialog


CCharacterInfoDlg::CCharacterInfoDlg(CPA_SuperObject *pSuperObject, CWnd* pParent /*=NULL*/)
	: CDialog(CCharacterInfoDlg::IDD, pParent)
{
	m_pSuperObject = pSuperObject;
	//{{AFX_DATA_INIT(CCharacterInfoDlg)
	m_csFamily = _T("");
	m_csInstance = _T("");
	m_csModel = _T("");
	m_csNumberOfModules = _T("");
	m_csXSize = _T("");
	m_csYSize = _T("");
	m_csZSize = _T("");
	//}}AFX_DATA_INIT
}


void CCharacterInfoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCharacterInfoDlg)
	DDX_Text(pDX, IDC_FAMILY, m_csFamily);
	DDX_Text(pDX, IDC_INSTANCE, m_csInstance);
	DDX_Text(pDX, IDC_MODEL, m_csModel);
	DDX_Text(pDX, IDC_MODULES_NB, m_csNumberOfModules);
	DDX_Text(pDX, IDC_X_SIZE, m_csXSize);
	DDX_Text(pDX, IDC_Y_SIZE, m_csYSize);
	DDX_Text(pDX, IDC_Z_SIZE, m_csZSize);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCharacterInfoDlg, CDialog)
	//{{AFX_MSG_MAP(CCharacterInfoDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCharacterInfoDlg message handlers

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : OnInitDialog
// Date   : 98-05
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CCharacterInfoDlg::OnInitDialog() 
{
	ComputeVariables ();
	CDialog::OnInitDialog();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : ComputeVariables 
// Date   : 98-05
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CCharacterInfoDlg::ComputeVariables ()
{
	ASSERT (m_pSuperObject);
	CPA_Actor *pActor = (CPA_Actor *)m_pSuperObject->GetObject ();
	ASSERT (pActor);
	m_csInstance = pActor->GetName ();
	m_csModel = pActor->m_fn_pclGetModel ()->GetName ();
	CPA_Family *pFamily = pActor->m_pub_fn_pclGetFamily ();
	if (pFamily)
		m_csFamily = pFamily->GetName ();
	int iModulesNumber = mfn_iGetModulesNumber (m_pSuperObject);
	m_csNumberOfModules.Format ("%d", iModulesNumber);
	MTH3D_tdstVector tdstSize = mfn_GetSize (m_pSuperObject);
	m_csXSize.Format ("%f", tdstSize.xX);
	m_csYSize.Format ("%f", tdstSize.xY);
	m_csZSize.Format ("%f", tdstSize.xZ);
	CStringList lstOfModules;
	mfn_vFillModulesList (m_pSuperObject, lstOfModules);
	CListBox *pList = (CListBox *)GetDlgItem (IDC_LIST__MODULES);
	ASSERT (pList);
	POSITION pos = lstOfModules.GetHeadPosition ();
	while (pos)
	{
		CString csModuleName = lstOfModules.GetNext (pos);
		pList->AddString (csModuleName);
	}
}


//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_iGetModulesNumber 
// Date   : 98-05
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CCharacterInfoDlg::mfn_vGetModulesNumber (CPA_SuperObject *pSuperObject, int &riModulesNumber)
{
    if (!pSuperObject)
		return;

	CPA_SuperObject *pChild;

    for (pChild = pSuperObject->GetSuperObjectFirstChild(); pChild; pChild = pSuperObject->GetSuperObjectNextChild (pChild))
	{
		CPA_BaseObject *pObject = pChild->GetObject ();
		if (pObject && HIE_C_ulPO == pChild->GetObjectType ()) riModulesNumber++;

		mfn_vGetModulesNumber (pChild, riModulesNumber);
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_iGetModulesNumber 
// Date   : 98-05
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
int CCharacterInfoDlg::mfn_iGetModulesNumber (CPA_SuperObject *pSuperObject)
{
	int iModulesNumber = 0;
	mfn_vGetModulesNumber (pSuperObject, iModulesNumber);
	return iModulesNumber;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_GetSize 
// Date   : 98-05
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
MTH3D_tdstVector CCharacterInfoDlg::mfn_GetSize (CPA_SuperObject *pSuperObject)
{
	
	MTH3D_tdstVector tdstSize, tdstMinCoordinates, tdstMaxCoordinates;
	tdstMinCoordinates.xX = tdstMinCoordinates.xY = tdstMinCoordinates.xZ = 0;
	tdstMaxCoordinates.xX = tdstMaxCoordinates.xY = tdstMaxCoordinates.xZ = 0;
 	mfn_vGetMinMaxCoordinates (pSuperObject, tdstMinCoordinates, tdstMaxCoordinates);
	tdstSize.xX = tdstMaxCoordinates.xX - tdstMinCoordinates.xX;
	tdstSize.xY = tdstMaxCoordinates.xY - tdstMinCoordinates.xY;
	tdstSize.xZ = tdstMaxCoordinates.xZ - tdstMinCoordinates.xZ;

	return tdstSize;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_vGetMinMaxCoordinates 
// Date   : 98-05
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CCharacterInfoDlg::mfn_vGetMinMaxCoordinates (CPA_SuperObject *pSuperObject, MTH3D_tdstVector &rtdstMinCoordinates, MTH3D_tdstVector &rtdstMaxCoordinates)
{
	if (!pSuperObject)
		return;

	CPA_SuperObject *pChild;
    for (pChild = pSuperObject->GetSuperObjectFirstChild(); pChild; pChild = pSuperObject->GetSuperObjectNextChild (pChild))
	{
		CPA_BaseObject *pObject = pChild->GetObject ();
		if (pObject && HIE_C_ulPO == pChild->GetObjectType ())
		{
			Geometry3D *p3D = ((EditorPO *)pObject)->m_fnp_oGetGeometricWithDistance (0);
			if (p3D)
			{
				MTH3D_tdstVector tdstLocalMin = p3D->mfn_3dvGetMinCoordinates ();
				rtdstMinCoordinates.xX = tdstLocalMin.xX < rtdstMinCoordinates.xX ? tdstLocalMin.xX : rtdstMinCoordinates.xX; 
				rtdstMinCoordinates.xY = tdstLocalMin.xY < rtdstMinCoordinates.xY ? tdstLocalMin.xY : rtdstMinCoordinates.xY; 
				rtdstMinCoordinates.xZ = tdstLocalMin.xZ < rtdstMinCoordinates.xZ ? tdstLocalMin.xZ : rtdstMinCoordinates.xZ; 

				MTH3D_tdstVector tdstLocalMax = p3D->mfn_3dvGetMaxCoordinates ();
				rtdstMaxCoordinates.xX = tdstLocalMax.xX > rtdstMaxCoordinates.xX ? tdstLocalMax.xX : rtdstMaxCoordinates.xX; 
				rtdstMaxCoordinates.xY = tdstLocalMax.xY > rtdstMaxCoordinates.xY ? tdstLocalMax.xY : rtdstMaxCoordinates.xY; 
				rtdstMaxCoordinates.xZ = tdstLocalMax.xZ > rtdstMaxCoordinates.xZ ? tdstLocalMax.xZ : rtdstMaxCoordinates.xZ; 
			}
		}
		mfn_vGetMinMaxCoordinates (pChild, rtdstMinCoordinates, rtdstMaxCoordinates);
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_vFillModulesList 
// Date   : 98-05
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CCharacterInfoDlg::mfn_vFillModulesList (CPA_SuperObject *pSuperObject, CStringList &rlstOfModules)
{
	if (!pSuperObject)
		return;

	CPA_SuperObject *pChild;
    for (pChild = pSuperObject->GetSuperObjectFirstChild(); pChild; pChild = pSuperObject->GetSuperObjectNextChild (pChild))
	{
		CPA_BaseObject *pObject = pChild->GetObject ();
		if (pObject && HIE_C_ulPO == pChild->GetObjectType ())
		{
			rlstOfModules.AddTail (pObject->GetName ());
		}
		mfn_vFillModulesList (pChild, rlstOfModules);
	}
}

