//ROMTEAM WorldEditor //////////////////////////////////////////////////////////////////////////////////////// // File : Shape3D.cpp: implementation of the Shape3D class. // Author : Cristi Petrescu // Date : 97.11 // Description : //////////////////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ACP_Base.h" #include "ITF.h" #include "incGAM.h" #include "GLI.h" #include "DPT.h" #undef CPA_WANTS_IMPORT #undef CPA_EXPORT #define CPA_WANTS_EXPORT #include "OGD.h" #undef CPA_WANTS_EXPORT #ifndef CPA_WANTS_IMPORT #define CPA_WANTS_IMPORT #endif #include "3dinterf.hpp" BOOL Shape3D::m_bSizeKeyPressed = FALSE; Geometry3D_Interface *Shape3D::m_pGeometry3DDLL = NULL; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method : Shape3D::Shape3D // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : constructors to create a new object // make one for each Geometry3D one. No general constructor :-( // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// Shape3D::Shape3D (BOOL bModifiable, CPA_EditorBase *_p_oEditor, ACP_tdxIndex xNbPoints, ACP_tdxIndex xNbElements, const CString _csName, tdeSaveStatus _eStatus) : Geometry3D (_p_oEditor, xNbPoints, xNbElements, _csName , _eStatus) { m_bModifiable = bModifiable; CommonShape3D (); } Shape3D::Shape3D (BOOL bModifiable, CPA_EditorBase *_p_oEditor, ACP_tdxIndex xNbPoints, ACP_tdxIndex xNbElements, CPA_BaseObject *_p_oOwnerFile, const CString _csName, char *_p_cRefPath, tdeSaveStatus _eStatus) : Geometry3D (_p_oEditor, xNbPoints, xNbElements, _p_oOwnerFile, _csName, _p_cRefPath, _eStatus) { m_bModifiable = bModifiable; CommonShape3D (); } Shape3D::Shape3D (BOOL bModifiable, CPA_EditorBase *_p_oEditor, CPA_BaseObject *_p_oOwnerFile, ACP_tdxHandleOfObject _hObject, const CString _csName, char *_p_cRefPath, tdeSaveStatus _eStatus) : Geometry3D (_p_oEditor, _p_oOwnerFile, _hObject, _csName, _p_cRefPath, _eStatus) { m_bModifiable = bModifiable; CommonShape3D (); } Shape3D::~Shape3D() { } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - _OnKeyDown // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : check for size key pressed // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL Shape3D::_OnKeyDown(UINT nChar, UINT nRepCnt /* = 0 */, UINT nFlags /* = 0 */) { ASSERT (m_pGeometry3DDLL); if(m_pGeometry3DDLL->GetKeyActionConfiguration ()->mfn_uwKeyToAction(nChar) == KA_3DG_SIZE) m_bSizeKeyPressed = TRUE; return FALSE; } //ionut BOOL Shape3D::_OnLButtonDblClk (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo) { return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - _OnKeyUp // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : check for size key pressed // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL Shape3D::_OnKeyUp(UINT nChar, UINT nRepCnt /* = 0 */, UINT nFlags /* = 0 */) { ASSERT (m_pGeometry3DDLL); if(m_pGeometry3DDLL->GetKeyActionConfiguration ()->mfn_uwKeyToAction(nChar) == KA_3DG_SIZE) m_bSizeKeyPressed = FALSE; return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - _OnMouseMove // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : are we ready ?! // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL Shape3D::_OnMouseMove(UINT nFlags, tdstMousePos * p_stPos, MTH3D_tdstVector * pDeplacement) { if (m_bModifiable && m_bSizeKeyPressed & m_bActiveMode) return TRUE; else return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - _OnLButtonDown // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : Init mouse move structures // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL Shape3D::_OnLButtonDown(UINT nFlags, tdstMousePos * p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo * p_stObject) { if (m_bModifiable && m_bSizeKeyPressed) { m_bActiveMode = TRUE; m_stGlobalSelectedPoint = p_stObject->stPickedObject.aDEF_stDataOfElement->stHit; return TRUE; } else return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - _OnLButtonUp // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : Default: we do not use the message // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL Shape3D::_OnLButtonUp(UINT nFlags, tdstMousePos * p_stPos) { m_bActiveMode = FALSE; return FALSE; } // ---------------------------------------------------------------------------- // Description : common implementation for the constructors // ---------------------------------------------------------------------------- void Shape3D::CommonShape3D() { m_bSizeKeyPressed = FALSE; m_bActiveMode = FALSE; m_hElement = 0; m_pSuperObject = NULL; //ROMTEAM WorldEditor (Cristian Stegaru 12/97) SetCallBackSave (Geometry3D::CallBackSaveGeometricObject); SetSectionData (this); //ENDROMTEAM WorldEditor (Cristian Stegaru) } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - ConvertPointGlobalToLocal // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : Temporary function to convert a point from the global repere to a local repere // pSource and pDest must be different // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// void Shape3D::ConvertPointGlobalToLocal (MTH3D_tdstVector * pDest , POS_tdstCompletePosition * pAbsoluteMatrix , MTH3D_tdstVector * pSource) { // Compute the invert matrix POS_tdstCompletePosition InvMatrix; POS_fn_vInvertIsoMatrix(& InvMatrix , pAbsoluteMatrix); POS_fn_vMulMatrixVertex(pDest , & InvMatrix , pSource); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - ConvertPointLocalToGlobal // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : Temporary function to convert a point from a local repere to the global repere // pSource and pDest must be different // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// void Shape3D::ConvertPointLocalToGlobal (MTH3D_tdstVector * pDest , POS_tdstCompletePosition * pAbsoluteMatrix , MTH3D_tdstVector * pSource) { POS_fn_vMulMatrixVertex(pDest , pAbsoluteMatrix , pSource); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - ConvertVectorGlobalToLocal // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : Temporary function to convert a vector from the global repere to a local repere // pSource and pDest must be different // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// void Shape3D::ConvertVectorGlobalToLocal (MTH3D_tdstVector * pDest , POS_tdstCompletePosition * pAbsoluteMatrix , MTH3D_tdstVector * pSource) { // Compute the invert matrix POS_tdstCompletePosition InvMatrix; POS_fn_vInvertIsoMatrix(& InvMatrix , pAbsoluteMatrix); // Put the translation to 0 MTH3D_tdstVector NullVector; MTH3D_M_vNullVector (& NullVector); POS_fn_vSetTranslationVector(& InvMatrix , & NullVector); POS_fn_vMulMatrixVertex(pDest , & InvMatrix , pSource); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method :Shape3D - ConvertVectorLocalToGlobal // Date : 97.11 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : Temporary function to convert a vector from a local repere to the global repere // pSource and pDest must be different // Author : Cristi Petrescu ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// void Shape3D::ConvertVectorLocalToGlobal (MTH3D_tdstVector * pDest , POS_tdstCompletePosition * pAbsoluteMatrix , MTH3D_tdstVector * pSource) { // Keep a copy of the translation vector MTH3D_tdstVector BackupTranslation; POS_fn_vGetTranslationVector (pAbsoluteMatrix , & BackupTranslation); // Put the translation to 0 MTH3D_tdstVector NullVector; MTH3D_M_vNullVector (& NullVector); POS_fn_vSetTranslationVector(pAbsoluteMatrix , & NullVector); POS_fn_vMulMatrixVertex(pDest , pAbsoluteMatrix , pSource); POS_fn_vSetTranslationVector(pAbsoluteMatrix , & BackupTranslation); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method : mfn_vLoad // Date : 98-01 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : // Author : Cristian Stegaru - CPA2 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// void Shape3D::mfn_vLoad (CString csEPOFile, CString csEPOName) { char *szName = new char[STR_LENGTH], *szReferencedSectionName = new char[STR_LENGTH], *szDataPath = new char[STR_LENGTH], *szElementReferencedSectionName = new char[STR_LENGTH], *szElementDataPath = new char[STR_LENGTH]; BOOL bReadOK = GetPrivateProfileString (csEPOName, "REFERENCED_SECTION_NAME", NULL, szReferencedSectionName, STR_LENGTH, csEPOFile); bReadOK = bReadOK && GetPrivateProfileString (csEPOName, "DATA_PATH", NULL, szDataPath, STR_LENGTH, csEPOFile); bReadOK = bReadOK && GetPrivateProfileString (csEPOName, "ELEMENT_REFERENCED_SECTION_NAME", NULL, szElementReferencedSectionName, STR_LENGTH, csEPOFile); bReadOK = bReadOK && GetPrivateProfileString (csEPOName, "ELEMENT_DATA_PATH", NULL, szElementDataPath, STR_LENGTH, csEPOFile); ASSERT (bReadOK); SetReferencedSectionName (szReferencedSectionName); fn_vUpdateSectionName (); SetDataPath (szDataPath); mfn_vInitElement (szElementReferencedSectionName, szElementDataPath, TRUE); fn_vNotifySave (); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method : mfn_vSave // Date : 98-01 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : // Author : Cristian Stegaru - CPA2 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// void Shape3D::mfn_vSave (CString csEPOFile, CString csEPOName, int iIdx) { BOOL bWriteOK = WritePrivateProfileString (csEPOName, "NAME", GetName (), csEPOFile); char szIdx [NB_LENGTH]; itoa (iIdx, szIdx, 10); bWriteOK = bWriteOK && WritePrivateProfileString (csEPOName, "IDX", szIdx, csEPOFile); bWriteOK = bWriteOK && WritePrivateProfileString (csEPOName, "REFERENCED_SECTION_NAME", GetReferencedSectionName (), csEPOFile); bWriteOK = bWriteOK && WritePrivateProfileString (csEPOName, "DATA_PATH", GetDataPath (), csEPOFile); SectionElement *pSectionElement = m_oListOfElementSections.GetHead (); ASSERT (pSectionElement); bWriteOK = bWriteOK && WritePrivateProfileString (csEPOName, "ELEMENT_REFERENCED_SECTION_NAME", pSectionElement->GetReferencedSectionName (), csEPOFile); bWriteOK = bWriteOK && WritePrivateProfileString (csEPOName, "ELEMENT_DATA_PATH", pSectionElement->GetDataPath (), csEPOFile); ASSERT (bWriteOK); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Method : EndCreate() // Date : 98-01-20 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Description : // Author : N Suparatu - CPA2 ////////////////////////////////////////////////////////////////////////////////////////////////////// // Modification : // Date : // By : ////////////////////////////////////////////////////////////////////////////////////////////////////// void Shape3D::EndCreate() { if(GetStruct()->d_stListOfPointsNormals) GEO_M_CPAFree(GetStruct()->d_stListOfPointsNormals); if(GetStruct()->d_hListOfPointsMaterial) GEO_M_CPAFree(GetStruct()->d_hListOfPointsMaterial); if(GetStruct()->d_stListOfEdges) GEO_M_CPAFree(GetStruct()->d_stListOfEdges); GetStruct()->d_hListOfPointsMaterial = NULL; GetStruct()->d_stListOfEdges = NULL; GetStruct()->d_stListOfPointsNormals = NULL; GEO_xCreateObjectPointNormals (GetStruct()); GEO_vCreateObjectListOfPointsMaterial(GetStruct()); GEO_xCreateObjectListOfEdges(GetStruct()); GEO_xComputeObjectNormals2(GetStruct()); GEO_vComputeObjectListOfPointsMaterial(GetStruct()); GEO_xComputeObjectListOfEdges(GetStruct()); }