Files
2025-12-15 23:22:33 +08:00

632 lines
20 KiB
C++

/***********************************************************************************************************************
*
* Copyright (c) 2010 - 2025 by Tech Soft 3D, Inc.
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
* scope and manner of such use.
*
***********************************************************************************************************************/
#include "VisitorContainer.h"
#include "Visitors.h"
#ifdef CONNECT_BREP
#include "VisitorBrep.h"
#endif
#ifdef CONNECT_TRANSFO
#include "VisitorTransfo.h"
#endif
#ifdef CONNECT_COLORS
#include "VisitorCascadedAttribute.h"
#endif
#ifdef CONNECT_ASSEMBLY_TREE
#include "VisitorTree.h"
#endif
#ifdef CONNECT_MESH
#include "VisitorTessellation.h"
#endif
#ifdef CONNECT_PMI
//#include <VisitorPMI.h>
#endif
#ifdef CONNECT_PMI
#include "ViewTraverse.h"
#endif
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
#define VISITENTER \
{\
ActivateEntityReference(sConnector.GetA3DEntity()); \
for(unsigned uI = 0; uI < m_apVisitor.size(); uI++)\
m_apVisitor[uI]->visitEnter(sConnector);\
return A3D_SUCCESS;\
}
#define VISITLEAVE \
{\
DeactivateEntityReference(sConnector.GetA3DEntity()); \
for(unsigned uI = 0; uI < m_apVisitor.size(); uI++)\
m_apVisitor[uI]->visitLeave(sConnector);\
return A3D_SUCCESS;\
}
//Tree
#ifdef CONNECT_ASSEMBLY_TREE
// static A3DStatus stCreateAndPushCascadedAttributes( const A3DRootBaseWithGraphics* pBase,
// const A3DMiscCascadedAttributes* pFatherAttr,
// A3DMiscCascadedAttributes** ppAttr,
// A3DMiscCascadedAttributesData* psAttrData)
// {
// A3DStatus iRet = A3D_SUCCESS;
//
// CHECK_RET(A3DMiscCascadedAttributesCreate(ppAttr));
// CHECK_RET(A3DMiscCascadedAttributesPush(*ppAttr, pBase, pFatherAttr));
//
// A3D_INITIALIZE_DATA(A3DMiscCascadedAttributesData, (*psAttrData));
// CHECK_RET(A3DMiscCascadedAttributesGet(*ppAttr, psAttrData));
//
// return iRet;
// }
A3DStatus A3DVisitorContainer::visitEnter(const A3DModelFileConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DProductOccurrenceConnector& sConnector)
{
m_uiCurrentLevel++;
// Entity Reference
unsigned int uI, uNbRefEntity = sConnector.m_sProductOccurrenceData.m_uiEntityReferenceSize;
for(uI = 0; uI < uNbRefEntity; uI++)
{
A3DMiscEntityReferenceData sMiscRefData;
A3D_INITIALIZE_DATA(A3DMiscEntityReferenceData, sMiscRefData);
A3DMiscEntityReference* pEntityRef = sConnector.m_sProductOccurrenceData.m_ppEntityReferences[uI];
A3DMiscEntityReferenceGet (pEntityRef, &sMiscRefData);
A3DStepEntityRefManager sEntityManager;
sEntityManager.m_pStepEntityRef = pEntityRef;
sEntityManager.m_uiPOLevel = m_uiCurrentLevel;
A3DEEntityType sType;
A3DEntityGetType (sMiscRefData.m_pEntity, &sType);
if(sType == kA3DTypeMiscReferenceOnTopology)
{
A3DMiscReferenceOnTopologyData sTopoRefData;
A3D_INITIALIZE_DATA(A3DMiscReferenceOnTopologyData,sTopoRefData);
A3DMiscReferenceOnTopologyGet (pEntityRef, &sTopoRefData);
sEntityManager.m_pA3DEntityRef = sTopoRefData.m_pBrepData;
sEntityManager.m_bRefOnTopoItem = true;
A3DMiscReferenceOnTopologyGet (NULL, &sTopoRefData);
}
else if(sType == kA3DTypeMiscReferenceOnCsysItem)
{
A3DMiscReferenceOnCsysItemData sA3DMiscReferenceOnCSYSITemData;
A3D_INITIALIZE_DATA(A3DMiscReferenceOnCsysItemData, sA3DMiscReferenceOnCSYSITemData);
A3DMiscReferenceOnCsysItemGet (pEntityRef, &sA3DMiscReferenceOnCSYSITemData);
sEntityManager.m_pA3DEntityRef = sA3DMiscReferenceOnCSYSITemData.m_pCoordinateSystem;
A3DMiscReferenceOnCsysItemGet (NULL, &sA3DMiscReferenceOnCSYSITemData);
}
else
sEntityManager.m_pA3DEntityRef = sMiscRefData.m_pEntity;
A3DMiscEntityReferenceGet (NULL, &sMiscRefData);
m_asStepEntityRefManager.push_back(sEntityManager);
}
A3DStatus iRet = A3D_SUCCESS;
// Active View ...
if (m_psActivatedView)
{
A3DUns32 uNbView = sConnector.m_sProductOccurrenceData.m_uiViewsSize;
for (uI = 0; uI < uNbView; uI++)
{
if (sConnector.m_sProductOccurrenceData.m_ppViews[uI] != m_psActivatedView)
continue;
A3DMkpViewConnector sMkpViewConnector(sConnector.m_sProductOccurrenceData.m_ppViews[uI]);
sMkpViewConnector.TraverseView(this);
}
}
ActivateEntityReference(sConnector.GetA3DEntity());
for( uI = 0; uI < m_apVisitor.size(); uI++)
{
m_apVisitor[uI]->visitEnter(sConnector);
}
return iRet;
}
A3DStatus A3DVisitorContainer::visitEnter(const A3DPartConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DRiConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DRiBrepModelConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DRiSetConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DPolyRiBrepModelConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DModelFileConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DProductOccurrenceConnector& sConnector)
{
for(unsigned uI = 0; uI < m_apVisitor.size(); uI++)
{
m_apVisitor[uI]->visitLeave(sConnector);
}
unsigned int uI, uNbRefEntity = sConnector.m_sProductOccurrenceData.m_uiEntityReferenceSize;
for (uI = 0; uI < uNbRefEntity; uI++)
{
m_asStepEntityRefManager.pop_back();
}
if (m_psActivatedView != NULL)
{
A3DUns32 uNbView = sConnector.m_sProductOccurrenceData.m_uiViewsSize;
for (uI = 0; uI < uNbView; uI++)
{
if (sConnector.m_sProductOccurrenceData.m_ppViews[uI]!=m_psActivatedView)
continue;
A3DMkpViewConnector sViewConnector(m_psActivatedView);
unsigned int uJ;
uNbRefEntity = sViewConnector.GetViewData().m_uiLinkedItemsSize;
for (uJ = 0; uJ < uNbRefEntity; uJ++)
{
m_asViewLinkedItemManager.pop_back();
}
}
}
DeactivateEntityReference(sConnector.GetA3DEntity());
m_uiCurrentLevel--;
return A3D_SUCCESS;
}
A3DStatus A3DVisitorContainer::visitLeave(const A3DPartConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DRiConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DRiBrepModelConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DRiSetConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DPolyRiBrepModelConnector& sConnector)
VISITLEAVE
#endif
//Markup
#ifdef CONNECT_PMI
A3DStatus A3DVisitorContainer::visitEnter(const A3DMkpAnnotationEntityConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DMkpAnnotationSetConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DMkpAnnotationItemConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DMarkupConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DMarkupDimensionConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DMarkupGDTConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DMarkupDatumConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DMkpAnnotationEntityConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DMkpAnnotationSetConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DMkpAnnotationItemConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DMarkupDimensionConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DMarkupConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DMarkupGDTConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DMarkupDatumConnector& sConnector)
VISITLEAVE
#endif
//Brep
#ifdef CONNECT_BREP
A3DStatus A3DVisitorContainer::visitEnter(const A3DBrepDataConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DConnexConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DShellConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DFaceConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DLoopConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DCoEdgeConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DEdgeConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DUniqueVertexConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitEnter(const A3DMultipleVertexConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DBrepDataConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DConnexConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DShellConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DFaceConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DLoopConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DCoEdgeConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DEdgeConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DUniqueVertexConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitLeave(const A3DMultipleVertexConnector& sConnector)
VISITLEAVE
#endif
//Mesh
#ifdef CONNECT_MESH
A3DStatus A3DVisitorContainer::visitEnter(const A3DTessDataConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DTessDataConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitEnter(const A3DFaceTessDataConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DFaceTessDataConnector& sConnector)
VISITLEAVE
//VISIT(const A3DTessDataConnector&)
#endif
A3DVisitorContainer::A3DVisitorContainer(unsigned int uFlagElementToconnect)
: A3DVisitor("Container"),
m_pTreeVisitor(NULL),
m_pCurrentPOFather(NULL),
m_psActivatedView(NULL),
m_bTraverseActivatedViewOnly(true),
m_uiCurrentLevel(0),
m_uFlagElementToConnect(uFlagElementToconnect),
m_bTraverseInstance(false)
{
#ifdef CONNECT_TRANSFO
if(uFlagElementToconnect&CONNECT_TRANSFO)
{
A3DVisitorTransfo* psVisistorTransfo = new A3DVisitorTransfo(this);
this->push( psVisistorTransfo);
}
#endif
#ifdef CONNECT_COLORS
if(uFlagElementToconnect&CONNECT_COLORS)
{
A3DVisitorColorMaterials* psVisitorcascadedAttribute = new A3DVisitorColorMaterials(this);
this->push( psVisitorcascadedAttribute);
}
#endif
#ifdef CONNECT_MESH
if(uFlagElementToconnect&CONNECT_MESH)
{
A3DVisitorTessellation* psVisitorTessellation = new A3DVisitorTessellation(this);
this->push( psVisitorTessellation);
}
#endif
#ifdef CONNECT_BREP
if(uFlagElementToconnect&CONNECT_BREP)
{
A3DVisitorBrep* psVisitorBrep = new A3DVisitorBrep(this);
this->push( psVisitorBrep);
}
#endif
#ifdef CONNECT_ASSEMBLY_TREE
if(uFlagElementToconnect&CONNECT_ASSEMBLY_TREE)
{
A3DTreeVisitor* psVisitorTree= new A3DTreeVisitor(this);
this->push( psVisitorTree);
}
#endif
#ifdef CONNECT_PMI
if(uFlagElementToconnect&CONNECT_PMI)
{
//A3DVisitorPMI* psVisitorPMI = new A3DVisitorPMI(this);
//this->push( psVisitorPMI );
}
#endif
#ifdef CONNECT_VIEWS
if(uFlagElementToconnect&CONNECT_VIEWS)
{
// Not yet Implemented
// A3DVisitorview* psVisitorViews = new A3DVisitorview(this);
// this->push( psVisitorViews);
}
#endif
}
#ifdef CONNECT_VIEWS
A3DStatus A3DVisitorContainer::visitEnter(const A3DMkpViewConnector& sConnector)
{
if ((m_psActivatedView == NULL) || (m_psActivatedView != sConnector.GetA3DEntity()))
{
if (!m_bTraverseActivatedViewOnly)
{
VISITENTER;
}
return A3D_SUCCESS;
}
// VISITENTER
ActivateEntityReference(sConnector.GetA3DEntity());
for (unsigned uI = 0; uI < m_apVisitor.size(); uI++)
{
m_apVisitor[uI]->visitEnter(sConnector);
}
unsigned int uI, uNbRefEntity = sConnector.GetViewData().m_uiLinkedItemsSize;
for (uI = 0; uI < uNbRefEntity; uI++)
{
A3DMiscMarkupLinkedItemData sMkpLinkedItemData;
A3D_INITIALIZE_DATA(A3DMiscMarkupLinkedItemData, sMkpLinkedItemData);
A3DMiscMarkupLinkedItem* pMkpLinkedItemEntityRef = sConnector.GetViewData().m_ppLinkedItems[uI];
A3DMiscMarkupLinkedItemGet (pMkpLinkedItemEntityRef, &sMkpLinkedItemData);
A3DViewLinkedItemManager sViewLinkedItemManager;
A3DMiscEntityReferenceData sMiscRefData;
A3D_INITIALIZE_DATA(A3DMiscEntityReferenceData, sMiscRefData);
A3DMiscEntityReferenceGet (pMkpLinkedItemEntityRef, &sMiscRefData);
sViewLinkedItemManager.m_pA3DEntityRef = sMiscRefData.m_pEntity;
sViewLinkedItemManager.m_POOwner = sMkpLinkedItemData.m_pTargetProductOccurrence;
sViewLinkedItemManager.m_pMarkupLinkedItem = pMkpLinkedItemEntityRef;
sViewLinkedItemManager.m_uiPOLevel = m_uiCurrentLevel;
A3DEEntityType sType;
A3DEntityGetType (sMiscRefData.m_pEntity, &sType);
if (sType == kA3DTypeMiscReferenceOnTopology)
{
A3DMiscReferenceOnTopologyData sTopoRefData;
A3D_INITIALIZE_DATA(A3DMiscReferenceOnTopologyData, sTopoRefData);
A3DMiscReferenceOnTopologyGet (sMiscRefData.m_pEntity, &sTopoRefData);
sViewLinkedItemManager.m_pA3DEntityRef = sTopoRefData.m_pBrepData;
sViewLinkedItemManager.m_bRefOnTopoItem = true;
A3DMiscReferenceOnTopologyGet (NULL, &sTopoRefData);
}
else if (sType == kA3DTypeMiscReferenceOnCsysItem)
{
A3DMiscReferenceOnCsysItemData sA3DMiscReferenceOnCSYSITemData;
A3D_INITIALIZE_DATA(A3DMiscReferenceOnCsysItemData, sA3DMiscReferenceOnCSYSITemData);
A3DMiscReferenceOnCsysItemGet (sMiscRefData.m_pEntity, &sA3DMiscReferenceOnCSYSITemData);
sViewLinkedItemManager.m_pA3DEntityRef = sA3DMiscReferenceOnCSYSITemData.m_pCoordinateSystem;
A3DMiscReferenceOnCsysItemGet (NULL, &sA3DMiscReferenceOnCSYSITemData);
}
else
sViewLinkedItemManager.m_pA3DEntityRef = sMiscRefData.m_pEntity;
A3DMiscEntityReferenceGet (NULL, &sMiscRefData);
m_asViewLinkedItemManager.push_back(sViewLinkedItemManager);
}
return A3D_SUCCESS;
}
A3DStatus A3DVisitorContainer::visitLeave(const A3DMkpViewConnector& sConnector)
{
if ((m_psActivatedView == NULL) || (m_psActivatedView != sConnector.GetA3DEntity()))
{
if (!m_bTraverseActivatedViewOnly)
VISITLEAVE;
return A3D_SUCCESS;
}
VISITLEAVE;
}
#endif
void A3DVisitorContainer::push( A3DVisitor* psVisitor )
{
// vector<A3DVisitor*>::iterator iter =
// search(m_apVisitor.begin(), m_apVisitor.end(), &psVisitor, &psVisitor+1);
// if(iter == m_apVisitor.end())
// {
// m_apVisitorExcludedForDelete.push_back(psVisitor);
// }
m_apVisitor.push_back(psVisitor);
if(!m_pTreeVisitor)
m_pTreeVisitor = (A3DVisitor*)dynamic_cast<A3DTreeVisitor*>(psVisitor);//dynamic_cast return null if failed.
}
A3DVisitorContainer::~A3DVisitorContainer()
{
size_t uI, uNbVisitor = m_apVisitor.size();
// vector<A3DVisitor*>::iterator iter;
for(uI = 0; uI < uNbVisitor; uI++)
// {
// iter = search( m_apVisitorExcludedForDelete.begin(),
// m_apVisitorExcludedForDelete.end(),
// &m_apVisitor[uI],
// &m_apVisitor[uI]+1);
// if(iter == m_apVisitorExcludedForDelete.end())
delete m_apVisitor[uI];
// }
}
void* A3DVisitorContainer::FindInMap(const A3DEntity* pA3DEntity)
{
map<const A3DEntity*, void*>::iterator my_mapIter;
my_mapIter = m_apA3DEntityYourEntityMap.find(pA3DEntity);
if(my_mapIter == m_apA3DEntityYourEntityMap.end())
return NULL;
return my_mapIter->second;
}
void A3DVisitorContainer::SetInMap(const A3DEntity* pA3DEntity, void* pYourEntity)
{
m_apA3DEntityYourEntityMap.emplace(pA3DEntity, pYourEntity);
}
void A3DVisitorContainer::RemoveFromMap(const A3DEntity* pA3DEntity)
{
m_apA3DEntityYourEntityMap.erase(pA3DEntity);
}
A3DVisitor* A3DVisitorContainer::GetVisitorByName( std::string strName )
{
for(auto visitor : m_apVisitor)
{
if(visitor->GetName() == strName)
{
return visitor;
}
}
return nullptr;
}
A3DVisitor* A3DVisitorContainer::GetTreeVisitor() const
{
return m_pTreeVisitor;
}
void A3DVisitorContainer::ActivateEntityReference( A3DEntity const* pEntity )
{
// StepEntityReference
size_t uI, uNbPushStepEntityRef = m_asStepEntityRefManager.size();
for(uI = 0; uI < uNbPushStepEntityRef; uI++)
{
if(m_asStepEntityRefManager[uI].m_pA3DEntityRef == pEntity)
{
m_asStepEntityRefManager[uI].m_uiPushLevel = m_uiCurrentLevel;
}
}
// ViewLinkedItem
size_t uNbPushViewLMkpLinkedItem = m_asViewLinkedItemManager.size();
for (uI = 0; uI < uNbPushViewLMkpLinkedItem; uI++)
{
A3DViewLinkedItemManager *pCurManager = &m_asViewLinkedItemManager[uI];
if (pCurManager->m_pA3DEntityRef == pEntity &&
( pCurManager->m_POOwner == NULL ||
pCurManager->m_POOwner == pEntity ||
pCurManager->m_POOwner == m_pCurrentPOFather
)
)
{
pCurManager->m_uiPushLevel = m_uiCurrentLevel;
}
}
}
void A3DVisitorContainer::DeactivateEntityReference( A3DEntity const* pEntity )
{
// StepEntityReference
size_t uI, uNbPushStepEntityRef = m_asStepEntityRefManager.size();
for(uI = 0; uI < uNbPushStepEntityRef; uI++)
{
if(m_asStepEntityRefManager[uI].m_pA3DEntityRef == pEntity)
{
m_asStepEntityRefManager[uI].m_uiPushLevel = ~0U;
}
}
// ViewLinkedItem
size_t uNbPushViewLMkpLinkedItem = m_asViewLinkedItemManager.size();
for (uI = 0; uI < uNbPushViewLMkpLinkedItem; uI++)
{
A3DViewLinkedItemManager *pCurManager = &m_asViewLinkedItemManager[uI];
if (pCurManager->m_pA3DEntityRef == pEntity &&
( pCurManager->m_POOwner == NULL ||
pCurManager->m_POOwner == pEntity ||
pCurManager->m_POOwner == m_pCurrentPOFather
)
)
{
pCurManager->m_uiPushLevel = ~0U;
}
}
}
A3DStepEntityRefManager const* A3DVisitorContainer::GetActiveStepEntityRefManager(A3DEntity const * pEntity) const
{
A3DStepEntityRefManager const * psActivated = NULL;
size_t uI, uNbPushStepEntityRef = m_asStepEntityRefManager.size();
for(uI = 0; uI < uNbPushStepEntityRef; uI++)
{
A3DStepEntityRefManager const * psCurManager = &m_asStepEntityRefManager[uI];
if (psCurManager->m_uiPushLevel!=~0U && (pEntity==NULL || psCurManager->m_pA3DEntityRef==pEntity))
{
if (!psActivated)
psActivated = psCurManager;
else if (psCurManager->IsFirst(*psActivated))
psActivated = psCurManager;
}
}
return psActivated;
}
A3DViewLinkedItemManager const* A3DVisitorContainer::GetActiveViewLinkedItemManager(A3DEntity const * pEntity) const
{
A3DViewLinkedItemManager const * psActivated = NULL;
size_t uI, uNbPushViewMarkupLinkedItem = m_asViewLinkedItemManager.size();
for (uI = 0; uI < uNbPushViewMarkupLinkedItem; uI++)
{
A3DViewLinkedItemManager const * psCurManager = &m_asViewLinkedItemManager[uI];
if (psCurManager->m_uiPushLevel!=~0U && (pEntity==NULL || psCurManager->m_pA3DEntityRef==pEntity))
{
if (!psActivated)
psActivated = psCurManager;
else if (psCurManager->IsFirst(*psActivated))
psActivated = psCurManager;
}
}
return psActivated;
}
#ifdef CONNECT_FEATURE
A3DStatus A3DVisitorContainer::visitEnter(const A3DFRMFeatureConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DFRMFeatureConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitEnter(const A3DFRMParameterConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DFRMParameterConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitEnter(const A3DFRMTreeConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DFRMTreeConnector& sConnector)
VISITLEAVE
A3DStatus A3DVisitorContainer::visitEnter(const A3DFRMLinkedItemConnector& sConnector)
VISITENTER
A3DStatus A3DVisitorContainer::visitLeave(const A3DFRMLinkedItemConnector& sConnector)
VISITLEAVE
#endif