/*========================================================================= * * CPASObj.cpp - CPA_SuperObject : implementation * * * Version 1.0 * Creation date 20.06.97 * Revision date * * Shaitan *=======================================================================*/ #include "stdafx.h" #ifdef ACTIVE_EDITOR #include "acp_base.h" #include "itf/CPASObj.hpp" #include "itf/CPAMWorl.hpp" #include "itf/CPAInter.hpp" #include "itf/CPAHieEd.hpp" #include "itf/CoheMngr.hpp" #include "x:\cpa\Main\inc\_editid.h" #include "DPT.h" //################################################################################# // CPA_SuperObject //################################################################################# /*=========================================================================== Static Init =========================================================================*/ void CPA_SuperObject::fn_vInitLoadEditor() { CPA_EdMot::Init(HIE_fn_hCreateSuperObject,HIE_fn_vCopySuperObject,HIE_fn_vDestroySuperObject); } /*=========================================================================== Constructor =========================================================================*/ CPA_SuperObject::CPA_SuperObject (CPA_EditorBase *pEditor, HIE_tdxHandleToSuperObject hEngineSO, tdeSaveStatus eStatus, tdeTypeSO eTypeSO) : m_p_oObject(NULL), CPA_EdMot(hEngineSO), CPA_SuperObjectBase(hEngineSO), CPA_ModifiableObject(pEditor, C_szSuperObjectTypeName, eStatus) { // parameters m_p_oObjectDLLInterface = NULL; m_pSuperObjectOwner = NULL; m_bEditProtected = FALSE; m_bAxisDrawn = FALSE; m_bCenterVisible = FALSE; m_csModelName = ""; SetTypeSO(eTypeSO); } /*=========================================================================== New Constructor =========================================================================*/ CPA_SuperObject::CPA_SuperObject (CPA_EditorBase *pEditor, tdeSaveStatus eStatus, tdeTypeSO eTypeSO) : m_p_oObject(NULL), CPA_EdMot(), CPA_SuperObjectBase(), CPA_ModifiableObject(pEditor, C_szSuperObjectTypeName, eStatus) { GEO_tdxHandleToMatrix hLocalMatrix; // local matrix hLocalMatrix = GEO_fn_hCreateMatrix(); POS_fn_vSetIdentityMatrix(hLocalMatrix); HIE_fn_vSetSuperObjectMatrix(GetStruct(), hLocalMatrix); // parameters m_p_oObjectDLLInterface = NULL; m_pSuperObjectOwner = NULL; m_bEditProtected = FALSE; m_bAxisDrawn = FALSE; m_bCenterVisible = FALSE; m_csModelName = ""; SetTypeSO(eTypeSO); } /*=========================================================================== Copy-Constructor =========================================================================*/ CPA_SuperObject::CPA_SuperObject (CPA_SuperObject &r_oSource) :m_p_oObject(NULL), CPA_EdMot(r_oSource), CPA_ModifiableObject(r_oSource), CPA_SuperObjectBase() { // local matrix POS_tdxHandleToPosition hLocalMatrix = (POS_tdxHandleToPosition) malloc (sizeof (POS_tdstCompletePosition)); POS_fn_vSetIdentityMatrix(hLocalMatrix); GEO_M_vCopyMatrix(hLocalMatrix, HIE_fn_hGetSuperObjectMatrix(r_oSource.GetStruct())); HIE_fn_vSetSuperObjectMatrix(GetStruct(), hLocalMatrix); // global matrix GEO_M_vCopyMatrix(HIE_fn_hGetSuperObjectGlobalMatrix(GetStruct()), HIE_fn_hGetSuperObjectGlobalMatrix(r_oSource.GetStruct())); // copy common parameters m_p_oObjectDLLInterface = r_oSource.m_p_oObjectDLLInterface; m_pSuperObjectOwner = r_oSource.m_pSuperObjectOwner; m_bEditProtected = r_oSource.m_bEditProtected; m_bAxisDrawn = r_oSource.m_bAxisDrawn; m_bCenterVisible = r_oSource.m_bCenterVisible; m_csModelName = r_oSource.m_csModelName; SetTypeSO(r_oSource.GetTypeSO()); // init object SetObject(r_oSource.m_p_oObject); } /*=========================================================================== Destructor =========================================================================*/ CPA_SuperObject::~CPA_SuperObject(void) { CPA_SuperObjectBase *p_oSuperObject; POSITION P; for(p_oSuperObject = GetHeadElement(P); p_oSuperObject; p_oSuperObject = GetNextElement(P)) { delete ((CPA_SuperObject *) p_oSuperObject); p_oSuperObject = NULL; } } /*=========================================================================== Object & DLL =========================================================================*/ long CPA_SuperObject::GetObjectType() { return ( (m_p_oObject) ? m_p_oObject->GetDataType() : GetDataType() ); } //=========================================================================== void CPA_SuperObject::SetObject (CPA_BaseObject * p_oNewObject) { if (m_p_oObject != NULL) { // warn coherence manager g_oCoherenceManager.m_fn_vRemoveALink(this, m_p_oObject); // cancel old link m_p_oObject = NULL; m_p_oObjectDLLInterface = NULL; HIE_fn_vSetSuperObjectObjectAndType(GetStruct(), NULL, HIE_C_ulSuperObject); } if (p_oNewObject != NULL) { // warn coherence manager g_oCoherenceManager.m_fn_vAddALink(this, p_oNewObject); // set new link m_p_oObject = p_oNewObject; m_p_oObjectDLLInterface = (CPA_ObjectDLLBase *) (p_oNewObject->GetEditor()); HIE_fn_vSetSuperObjectObjectAndType(GetStruct(), p_oNewObject->GetData(), p_oNewObject->GetDataType()); } else { m_p_oObject = NULL; m_p_oObjectDLLInterface = NULL; HIE_fn_vSetSuperObjectObjectAndType(GetStruct(), NULL, HIE_C_ulSuperObject); } } /*=========================================================================== Hierarchy Links =========================================================================*/ CPA_SuperObject * CPA_SuperObject::GetSuperObjectFirstChild (void) { return ((CPA_SuperObject *) GetHeadElement()); } //=========================================================================== CPA_SuperObject * CPA_SuperObject::GetSuperObjectLastChild (void) { return ((CPA_SuperObject *) GetTailElement()); } //=========================================================================== CPA_SuperObject * CPA_SuperObject::GetSuperObjectNextChild (CPA_SuperObject *pChild) { return ((CPA_SuperObject *) GetNextElement(pChild)); } //=========================================================================== CPA_SuperObject * CPA_SuperObject::GetSuperObjectPrevChild (CPA_SuperObject *pChild) { return ((CPA_SuperObject *) GetPrevElement(pChild)); } //=========================================================================== CPA_SuperObject * CPA_SuperObject::GetSuperObjectFather (void) { return ((CPA_SuperObject *) GetParent()); } //=========================================================================== void CPA_SuperObject::AddANewChild (CPA_SuperObject *pChild, BOOL bUpdateEngine, CPA_SuperObject *pNextBrother) { POSITION pos = NULL; // find position if (pNextBrother) pos = Find(pNextBrother); // insert at the right position if (pos) InsertBefore(pos, pChild, bUpdateEngine); else AddTail(pChild, bUpdateEngine); // warn coherence manager g_oCoherenceManager.m_fn_vAddALink(this, pChild); } //=========================================================================== void CPA_SuperObject::RemoveAChild (CPA_SuperObject *pChild, BOOL bUpdateEngine) { POSITION pos = NULL; // isolate child pos = Find(pChild); if (pos) RemoveAt(pos, bUpdateEngine); // warn coherence manager g_oCoherenceManager.m_fn_vRemoveALink(this, pChild); } //=========================================================================== void CPA_SuperObject::RemoveAllChilds (BOOL bUpdateEngine) { CPA_SuperObject *pChild; // remove childs while (GetCount()) { // remove child pChild = (CPA_SuperObject *) RemoveHead(bUpdateEngine); // warn coherence manager g_oCoherenceManager.m_fn_vRemoveALink(this, pChild); } } //=========================================================================== void CPA_SuperObject::IsolateChild (BOOL bUpdateEngine) { CPA_SuperObject *pFather; // save father pFather = GetSuperObjectFather(); // Isolate Child Isolate(bUpdateEngine); // warn coherence manager if (pFather) g_oCoherenceManager.m_fn_vRemoveALink(pFather, this); } //=========================================================================== void CPA_SuperObject::fn_vUpdateValidity (BOOL bValid) { CPA_SuperObject *pChild; // update super-object if (bValid) fn_bValidate(); else fn_bUnValidate(); // update all childs for (pChild = GetSuperObjectFirstChild(); pChild; pChild = GetSuperObjectNextChild(pChild)) pChild->fn_vUpdateValidity(bValid); } /*=========================================================================== Parameters *=========================================================================*/ BOOL CPA_SuperObject::SetTypeSO (tdeTypeSO eType) { //Evt_Editor *pEditor = (Evt_Editor *) GetEditor(); // check editor specification //if (pEditor->GetSpecificEditor()->fn_bCanChangeTypeSO(this, eType)) m_eTypeSO = eType; // check if type is coherent return (m_eTypeSO == eType); } /*=========================================================================== Name & Name to draw *=========================================================================*/ CString CPA_SuperObject::GetRealTypeName (void) { return ( (m_p_oObject) ? m_p_oObject->GetType() : GetType() ); } //=========================================================================== BOOL CPA_SuperObject::fn_bIsUnderObject (CPA_SuperObject *pEdObj) { CPA_SuperObject *pParent; if (pEdObj == this) return TRUE; pParent = GetSuperObjectFather(); if (!pParent) return FALSE; else return (pParent->fn_bIsUnderObject(pEdObj)); } //=========================================================================== void CPA_SuperObject::SetSuperObjectStruct (HIE_tdxHandleToSuperObject hSupObj) { // update base object fn_vUpdateData(hSupObj); // set engine struct CPA_SuperObjectBase::SetSuperObjectStruct(hSupObj); } #endif // ACTIVE_EDITOR