Init
This commit is contained in:
37
exchange/exchangesource/DumpFeatureTree/Visitor/Connector.h
Normal file
37
exchange/exchangesource/DumpFeatureTree/Visitor/Connector.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#ifndef A3D_CONNECTOR
|
||||
#define A3D_CONNECTOR
|
||||
|
||||
#include <stdlib.h>
|
||||
#ifdef TF_A3DLIBS
|
||||
# define A3DAPI_INTERNAL
|
||||
#else
|
||||
#include <A3DSDKIncludes.h>
|
||||
#endif
|
||||
|
||||
class A3DConnector
|
||||
{
|
||||
protected:
|
||||
|
||||
const A3DEntity* m_pEntity;
|
||||
|
||||
A3DConnector(const A3DEntity* pEntity) : m_pEntity(pEntity) {}
|
||||
A3DConnector() : m_pEntity(NULL) {};
|
||||
public:
|
||||
|
||||
const A3DEntity* GetA3DEntity() const { return m_pEntity; }
|
||||
virtual A3DEEntityType GetType() const { return kA3DTypeUnknown; }
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
576
exchange/exchangesource/DumpFeatureTree/Visitor/TreeTraverse.cpp
Normal file
576
exchange/exchangesource/DumpFeatureTree/Visitor/TreeTraverse.cpp
Normal file
@@ -0,0 +1,576 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
\file TreeConnector.cpp
|
||||
|
||||
This file contains fuctionalities to traverse a Prc Model Tree
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#include "TreeTraverse.h"
|
||||
#include "VisitorContainer.h"
|
||||
|
||||
/************************************************************************************
|
||||
|
||||
Traverse Model File
|
||||
|
||||
*************************************************************************************/
|
||||
|
||||
// Traverse all the model tree
|
||||
A3DStatus A3DModelFileConnector::Traverse(A3DVisitorContainer* psVisitor, bool bVisitPrototype)
|
||||
{
|
||||
unsigned int uI;
|
||||
psVisitor->visitEnter(*this);
|
||||
|
||||
for (uI = 0; uI < m_sModelFileData.m_uiPOccurrencesSize; uI++)
|
||||
{
|
||||
psVisitor->SetCurrentPoFather(NULL);
|
||||
A3DProductOccurrenceConnector sTreeConnector(m_sModelFileData.m_ppPOccurrences[uI]);
|
||||
if (sTreeConnector.TraversePO(m_sModelFileData.m_ppPOccurrences[uI], psVisitor, bVisitPrototype) != A3D_SUCCESS)
|
||||
return A3D_ERROR;
|
||||
}
|
||||
psVisitor->visitLeave(*this);
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
// Traversing the assembly Structure
|
||||
A3DStatus A3DProductOccurrenceConnector::TraversePO(const A3DAsmProductOccurrence* pOccurrence,
|
||||
A3DVisitorContainer* psVisitor,
|
||||
bool bVisitPrototype)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
|
||||
//Traverse AnnotationEntity
|
||||
A3DUns32 uI;
|
||||
#ifdef CONNECT_PMI
|
||||
A3DUns32 uNbAnnotationEntity = m_sProductOccurrenceData.m_uiAnnotationsSize;
|
||||
for (uI = 0; uI < uNbAnnotationEntity; uI++)
|
||||
{
|
||||
A3DMkpAnnotationEntityConnector sAnnotationEntityConnector(m_sProductOccurrenceData.m_ppAnnotations[uI]);
|
||||
sAnnotationEntityConnector.TraverseAnnotationEntity(psVisitor);
|
||||
}
|
||||
if (!uNbAnnotationEntity && m_sProductOccurrenceData.m_pPrototype != NULL)
|
||||
{
|
||||
A3DAsmProductOccurrence* pProductPrototype = m_sProductOccurrenceData.m_pPrototype;
|
||||
while (pProductPrototype)
|
||||
{
|
||||
A3DAsmProductOccurrenceData sProductPrototypeData;
|
||||
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sProductPrototypeData);
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(pProductPrototype, &sProductPrototypeData));
|
||||
uNbAnnotationEntity = sProductPrototypeData.m_uiAnnotationsSize;
|
||||
for (uI = 0; uI < uNbAnnotationEntity; uI++)
|
||||
{
|
||||
A3DMkpAnnotationEntityConnector sAnnotationEntityConnector(sProductPrototypeData.m_ppAnnotations[uI]);
|
||||
sAnnotationEntityConnector.TraverseAnnotationEntity(psVisitor);
|
||||
}
|
||||
|
||||
pProductPrototype = sProductPrototypeData.m_pPrototype;
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(NULL, &sProductPrototypeData));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONNECT_VIEWS
|
||||
A3DUns32 uNbView = m_sProductOccurrenceData.m_uiViewsSize;
|
||||
if (!uNbView && m_sProductOccurrenceData.m_pPrototype != NULL)
|
||||
{
|
||||
A3DAsmProductOccurrence* pProductPrototype = m_sProductOccurrenceData.m_pPrototype;
|
||||
while (pProductPrototype)
|
||||
{
|
||||
A3DAsmProductOccurrenceData sProductPrototypeData;
|
||||
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sProductPrototypeData);
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(pProductPrototype, &sProductPrototypeData));
|
||||
uNbView = sProductPrototypeData.m_uiViewsSize;
|
||||
for (uI = 0; uI < uNbView; uI++)
|
||||
{
|
||||
A3DMkpViewConnector sMkpViewConnector(sProductPrototypeData.m_ppViews[uI]);
|
||||
sMkpViewConnector.TraverseView(psVisitor);
|
||||
}
|
||||
pProductPrototype = sProductPrototypeData.m_pPrototype;
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(NULL, &sProductPrototypeData));
|
||||
}
|
||||
}
|
||||
else if (uNbView)
|
||||
{
|
||||
for (uI = 0; uI < uNbView; uI++)
|
||||
{
|
||||
A3DMkpViewConnector sMkpViewConnector(m_sProductOccurrenceData.m_ppViews[uI]);
|
||||
sMkpViewConnector.TraverseView(psVisitor);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONNECT_FEATURE
|
||||
|
||||
A3DUns32 uNbFeatureBasedEntity = m_sProductOccurrenceData.m_uiFeatureBasedEntitiesSize;
|
||||
if (!uNbFeatureBasedEntity && m_sProductOccurrenceData.m_pPrototype != NULL)
|
||||
{
|
||||
A3DAsmProductOccurrence* pProductPrototype = m_sProductOccurrenceData.m_pPrototype;
|
||||
while (pProductPrototype)
|
||||
{
|
||||
A3DAsmProductOccurrenceData sProductPrototypeData;
|
||||
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sProductPrototypeData);
|
||||
CHECK_RET(A3DAsmProductOccurrenceGet(pProductPrototype, &sProductPrototypeData));
|
||||
uNbFeatureBasedEntity = sProductPrototypeData.m_uiFeatureBasedEntitiesSize;
|
||||
for (uI = 0; uI < uNbFeatureBasedEntity; uI++)
|
||||
{
|
||||
A3DFRMTreeConnector sConnector(sProductPrototypeData.m_ppFeatureBasedEntities[uI]);
|
||||
sConnector.TraverseFeatureTree(psVisitor);
|
||||
}
|
||||
pProductPrototype = sProductPrototypeData.m_pPrototype;
|
||||
CHECK_RET(A3DAsmProductOccurrenceGet(NULL, &sProductPrototypeData));
|
||||
}
|
||||
}
|
||||
else if (uNbFeatureBasedEntity)
|
||||
{
|
||||
for (uI = 0; uI < uNbFeatureBasedEntity; uI++)
|
||||
{
|
||||
A3DFRMTreeConnector sConnector(m_sProductOccurrenceData.m_ppFeatureBasedEntities[uI]);
|
||||
sConnector.TraverseFeatureTree(psVisitor);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
A3DAsmPartDefinition* pPart = NULL;
|
||||
if (!bVisitPrototype)
|
||||
{
|
||||
CHECK_RET(GetPart(pPart));
|
||||
}
|
||||
else
|
||||
{
|
||||
pPart = m_sProductOccurrenceData.m_pPart;
|
||||
}
|
||||
if (pPart)
|
||||
{
|
||||
void * pEntityInMap = psVisitor->FindInMap(pPart);
|
||||
psVisitor->SetInMap(pPart, pPart);
|
||||
A3DPartConnector sPartConnector(pPart);
|
||||
psVisitor->SetCurrentPoFather(pOccurrence);
|
||||
sPartConnector.SetProductOccurenceFather(pOccurrence);
|
||||
|
||||
// if we haven't found the part in the map or if we traverse the instance
|
||||
if (pEntityInMap == NULL || psVisitor->TraverseInstances())
|
||||
{
|
||||
CHECK_RET(sPartConnector.TraversePart(psVisitor));
|
||||
}
|
||||
psVisitor->SetCurrentPoFather(NULL);
|
||||
}
|
||||
std::vector<A3DAsmProductOccurrence*> apSons;
|
||||
if (!bVisitPrototype)
|
||||
{
|
||||
CollectSons(apSons);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_sProductOccurrenceData.m_pPrototype)
|
||||
{
|
||||
if (psVisitor->FindInMap(m_sProductOccurrenceData.m_pPrototype) == NULL)
|
||||
{
|
||||
psVisitor->SetInMap(m_sProductOccurrenceData.m_pPrototype, m_sProductOccurrenceData.m_pPrototype);
|
||||
A3DProductOccurrenceConnector sPrototypeConnector(m_sProductOccurrenceData.m_pPrototype);
|
||||
sPrototypeConnector.SetPrototypeType(true);
|
||||
sPrototypeConnector.TraversePO(m_sProductOccurrenceData.m_pPrototype, psVisitor, bVisitPrototype);
|
||||
}
|
||||
}
|
||||
if (m_sProductOccurrenceData.m_pExternalData)
|
||||
{
|
||||
if (psVisitor->FindInMap(m_sProductOccurrenceData.m_pExternalData) == NULL)
|
||||
{
|
||||
psVisitor->SetInMap(m_sProductOccurrenceData.m_pExternalData, m_sProductOccurrenceData.m_pExternalData);
|
||||
A3DProductOccurrenceConnector sExternalConnector(m_sProductOccurrenceData.m_pExternalData);
|
||||
sExternalConnector.SetExternalType(true);
|
||||
sExternalConnector.TraversePO(m_sProductOccurrenceData.m_pExternalData, psVisitor, bVisitPrototype);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
unsigned int uSize = m_sProductOccurrenceData.m_uiPOccurrencesSize;
|
||||
for (uI = 0; uI < uSize; uI++)
|
||||
{
|
||||
apSons.push_back(m_sProductOccurrenceData.m_ppPOccurrences[uI]);
|
||||
}
|
||||
}
|
||||
|
||||
for (uI = 0; uI < apSons.size(); uI++)
|
||||
{
|
||||
A3DProductOccurrenceConnector sPoConnector(apSons[uI]);
|
||||
sPoConnector.SetProductOccurrenceFather(this->GetA3DEntity());
|
||||
psVisitor->SetCurrentPoFather(pOccurrence);
|
||||
CHECK_RET(sPoConnector.TraversePO(apSons[uI], psVisitor, bVisitPrototype));
|
||||
psVisitor->SetCurrentPoFather(NULL);
|
||||
}
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DProductOccurrenceConnector::CollectSons(
|
||||
std::vector<A3DAsmProductOccurrence*>& apSons) const
|
||||
{
|
||||
//Get Children or children on Prototype's ....Prototype's
|
||||
A3DAsmProductOccurrence* pPrototype = m_sProductOccurrenceData.m_pPrototype;
|
||||
A3DAsmProductOccurrence** ppPo = m_sProductOccurrenceData.m_ppPOccurrences;
|
||||
unsigned int uSize = m_sProductOccurrenceData.m_uiPOccurrencesSize;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
while (uSize == 0 && pPrototype)
|
||||
{
|
||||
A3DAsmProductOccurrenceData sPrototypeData;
|
||||
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sPrototypeData);
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(pPrototype, &sPrototypeData));
|
||||
pPrototype = sPrototypeData.m_pPrototype;
|
||||
|
||||
uSize = sPrototypeData.m_uiPOccurrencesSize;
|
||||
ppPo = sPrototypeData.m_ppPOccurrences;
|
||||
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(NULL, &sPrototypeData));
|
||||
}
|
||||
|
||||
unsigned uI;
|
||||
for (uI = 0; uI < uSize; uI++)
|
||||
apSons.push_back(ppPo[uI]);
|
||||
|
||||
//Get Children on Externals
|
||||
if (m_sProductOccurrenceData.m_pExternalData)
|
||||
{
|
||||
if (apSons.size() == 0)
|
||||
{
|
||||
A3DProductOccurrenceConnector sExternalConnector(m_sProductOccurrenceData.m_pExternalData);
|
||||
CHECK_RET(sExternalConnector.CollectSons(apSons));
|
||||
}
|
||||
else
|
||||
apSons.push_back(m_sProductOccurrenceData.m_pExternalData);
|
||||
}
|
||||
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DProductOccurrenceConnector::GetPart(
|
||||
A3DAsmPartDefinition*& pPart) const
|
||||
{
|
||||
pPart = NULL;
|
||||
A3DStatus iRet = A3D_SUCCESS;;
|
||||
if (m_sProductOccurrenceData.m_pPart)
|
||||
{
|
||||
pPart = m_sProductOccurrenceData.m_pPart;
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DAsmProductOccurrence* pProductPrototype = m_sProductOccurrenceData.m_pPrototype;
|
||||
while (pProductPrototype)
|
||||
{
|
||||
A3DAsmProductOccurrenceData sProductPrototypeData;
|
||||
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sProductPrototypeData);
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(pProductPrototype, &sProductPrototypeData));
|
||||
if (sProductPrototypeData.m_pPart)
|
||||
{
|
||||
pPart = sProductPrototypeData.m_pPart;
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(NULL, &sProductPrototypeData));
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
else
|
||||
pProductPrototype = sProductPrototypeData.m_pPrototype;
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DAsmProductOccurrenceGet,(NULL, &sProductPrototypeData));
|
||||
}
|
||||
|
||||
if (m_sProductOccurrenceData.m_uiPOccurrencesSize == 0)
|
||||
{
|
||||
if (m_sProductOccurrenceData.m_pExternalData)
|
||||
{
|
||||
A3DProductOccurrenceConnector sExternalconnector(m_sProductOccurrenceData.m_pExternalData);
|
||||
CHECK_RET(sExternalconnector.GetPart(pPart));
|
||||
}
|
||||
}
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DPartConnector::TraversePart(A3DVisitorContainer* psVisitor) const
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
|
||||
//Traverse AnnotationEntity
|
||||
A3DUns32 uI;
|
||||
#ifdef CONNECT_PMI
|
||||
A3DUns32 uNbAnnotationEntity = m_sPartData.m_uiAnnotationsSize;
|
||||
for (uI = 0; uI < uNbAnnotationEntity; uI++)
|
||||
{
|
||||
A3DMkpAnnotationEntityConnector sAnnotationEntityConnector(m_sPartData.m_ppAnnotations[uI]);
|
||||
sAnnotationEntityConnector.TraverseAnnotationEntity(psVisitor);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONNECT_VIEWS
|
||||
A3DUns32 uNbView = m_sPartData.m_uiViewsSize;
|
||||
for (uI = 0; uI < uNbView; uI++)
|
||||
{
|
||||
A3DMkpViewConnector sMkpViewConnector(m_sPartData.m_ppViews[uI]);
|
||||
sMkpViewConnector.TraverseView(psVisitor);
|
||||
}
|
||||
#endif
|
||||
|
||||
//Traverse RI
|
||||
for (uI = 0; uI < m_sPartData.m_uiRepItemsSize; uI++)
|
||||
{
|
||||
A3DRiConnector sRiConnector(m_sPartData.m_ppRepItems[uI]);
|
||||
sRiConnector.TraverseRi(psVisitor);
|
||||
}
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DRiConnector::TraverseRi(A3DVisitorContainer* psVisitor)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
psVisitor->visitEnter(*this);
|
||||
|
||||
const A3DEntity* pRi = GetA3DEntity();
|
||||
A3DEEntityType eType = kA3DTypeUnknown;
|
||||
CALL_A3D_FCTION(A3DEntityGetType,(pRi,&eType));
|
||||
|
||||
if (iRet == A3D_SUCCESS)
|
||||
{
|
||||
switch (eType)
|
||||
{
|
||||
case kA3DTypeRiBrepModel:
|
||||
{
|
||||
A3DRiBrepModelConnector sConnector((A3DRiBrepModel*)pRi);
|
||||
CHECK_RET(sConnector.TraverseRiBrepModel(psVisitor));
|
||||
break;
|
||||
}
|
||||
case kA3DTypeRiSet:
|
||||
{
|
||||
A3DRiSetConnector sConnector(static_cast<A3DRiSet const *>(pRi));
|
||||
CHECK_RET(sConnector.TraverseRiSet(psVisitor));
|
||||
break;
|
||||
}
|
||||
|
||||
case kA3DTypeRiCurve:
|
||||
{
|
||||
A3DRiCurveConnector sConnector((A3DRiCurve*)pRi);
|
||||
CHECK_RET(sConnector.TraverseRiCurve(psVisitor));
|
||||
break;
|
||||
}
|
||||
case kA3DTypeRiPointSet:
|
||||
case kA3DTypeRiDirection:
|
||||
case kA3DTypeRiCoordinateSystem:
|
||||
case kA3DTypeRiPlane:
|
||||
break;
|
||||
case kA3DTypeRiPolyBrepModel:
|
||||
{
|
||||
A3DPolyRiBrepModelConnector sConnector((A3DRiPolyBrepModel*)pRi);
|
||||
CHECK_RET(sConnector.TraverseRiPolyBrepModel(psVisitor));
|
||||
break;
|
||||
}
|
||||
case kA3DTypeRiPolyWire:
|
||||
{
|
||||
A3DRiPolyWireConnector sConnector((A3DRiPolyWire*)pRi);
|
||||
CHECK_RET(sConnector.TraverseRiPolyWire(psVisitor));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
iRet = A3D_NOT_IMPLEMENTED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
psVisitor->visitLeave(*this);
|
||||
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
// RiBrepModel
|
||||
A3DStatus A3DRiBrepModelConnector::TraverseRiBrepModel(A3DVisitorContainer* psVisitor) const
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
|
||||
//Traverse Mesh
|
||||
#ifdef CONNECT_MESH
|
||||
A3DRiRepresentationItemData sRidata;
|
||||
A3D_INITIALIZE_DATA(A3DRiRepresentationItemData, sRidata);
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DRiRepresentationItemGet,(this->GetA3DEntity(), &sRidata));
|
||||
A3DTessDataConnector sTessConnector((A3DTess3D*)sRidata.m_pTessBase);
|
||||
CHECK_RET(sTessConnector.Traverse(psVisitor));
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DRiRepresentationItemGet,(NULL, &sRidata));
|
||||
#endif
|
||||
|
||||
//Traverse Brep Data
|
||||
#ifdef CONNECT_BREP
|
||||
A3DBrepDataConnector sTopoConnector(m_sRiBrepModelData.m_pBrepData);
|
||||
CHECK_RET(sTopoConnector.Traverse(psVisitor));
|
||||
|
||||
#endif
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
// RiSet
|
||||
A3DStatus A3DRiSetConnector::TraverseRiSet(A3DVisitorContainer* psVisitor)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
unsigned uI;
|
||||
for (uI = 0; uI < m_sRiSetData.m_uiRepItemsSize; uI++)
|
||||
{
|
||||
A3DRiConnector sRiConnector(m_sRiSetData.m_ppRepItems[uI]);
|
||||
sRiConnector.TraverseRi(psVisitor);
|
||||
}
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
// RiPolyBrepModel
|
||||
A3DStatus A3DPolyRiBrepModelConnector::TraverseRiPolyBrepModel(A3DVisitorContainer* psVisitor) const
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
/*
|
||||
A3DRiRepresentationItemData sRiData;
|
||||
A3D_INITIALIZE_DATA(A3DRiRepresentationItemData, sRiData);
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DRiRepresentationItemGet,(this->GetA3DEntity(), &sRiData));
|
||||
A3DTessDataConnector sTessConnector((A3DTess3D*)sRiData.m_pTessBase);
|
||||
CHECK_RET(sTessConnector.Traverse(psVisitor));
|
||||
CHECK_RET_CALL_A3D_FCTION(A3DRiRepresentationItemGet,(NULL, &sRiData));
|
||||
*/
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
// RiCurve
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
A3DStatus A3DRiCurveConnector::TraverseRiCurve(A3DVisitorContainer* psVisitor)
|
||||
{
|
||||
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
|
||||
#ifdef CONNECT_MESH
|
||||
A3DRiRepresentationItemData sRidata;
|
||||
A3D_INITIALIZE_DATA(A3DRiRepresentationItemData, sRidata);
|
||||
CHECK_RET(A3DRiRepresentationItemGet(this->GetA3DEntity(), &sRidata));
|
||||
A3DWireTessDataConnector sWireTessConnector((A3DTess3DWire*)sRidata.m_pTessBase);
|
||||
CHECK_RET(sWireTessConnector.Traverse(psVisitor));
|
||||
CHECK_RET(A3DRiRepresentationItemGet(NULL, &sRidata));
|
||||
#endif
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
// RiPolyWire
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
A3DStatus A3DRiPolyWireConnector::TraverseRiPolyWire(A3DVisitorContainer* psVisitor)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
|
||||
#ifdef CONNECT_MESH
|
||||
A3DRiRepresentationItemData sRidata;
|
||||
A3D_INITIALIZE_DATA(A3DRiRepresentationItemData, sRidata);
|
||||
CHECK_RET(A3DRiRepresentationItemGet(this->GetA3DEntity(), &sRidata));
|
||||
A3DWireTessDataConnector sWireTessConnector((A3DTess3DWire*)sRidata.m_pTessBase);
|
||||
CHECK_RET(sWireTessConnector.Traverse(psVisitor));
|
||||
CHECK_RET(A3DRiRepresentationItemGet(NULL, &sRidata));
|
||||
#endif
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
// A3DFRMParameter
|
||||
A3DStatus A3DFRMFeatureConnector::TraverseFeature(A3DVisitorContainer* psVisitor) const
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
unsigned uI;
|
||||
|
||||
for (uI = 0; uI < m_sData.m_uiConnectionSize; uI++)
|
||||
{
|
||||
A3DFRMLinkedItemConnector sFeatureLinkedItemConnector(m_sData.m_ppConnections[uI]);
|
||||
sFeatureLinkedItemConnector.TraverseConnection(psVisitor);
|
||||
}
|
||||
|
||||
|
||||
for (uI = 0; uI < m_sData.m_uiParametersSize; uI++)
|
||||
{
|
||||
A3DFRMParameterConnector sParameterConnector(m_sData.m_ppParameters[uI]);
|
||||
sParameterConnector.TraverseParameter(psVisitor);
|
||||
}
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
// A3DFRMParameter
|
||||
A3DStatus A3DFRMLinkedItemConnector::TraverseConnection(A3DVisitorContainer* psVisitor) const
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
return iRet;
|
||||
}
|
||||
|
||||
// A3DFRMParameter
|
||||
A3DStatus A3DFRMParameterConnector::TraverseParameter(A3DVisitorContainer* psVisitor) const
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
unsigned uI;
|
||||
|
||||
for (uI = 0; uI < m_sData.m_uiFeatureSize; uI++)
|
||||
{
|
||||
A3DFRMFeatureConnector sFeatureConnector(m_sData.m_ppFeatures[uI]);
|
||||
sFeatureConnector.TraverseFeature(psVisitor);
|
||||
}
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
// FeatureTree
|
||||
A3DStatus A3DFRMTreeConnector::TraverseFeatureTree(A3DVisitorContainer* psVisitor) const
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
CHECK_RET(psVisitor->visitEnter(*this));
|
||||
unsigned uI;
|
||||
|
||||
for (uI = 0; uI < m_sTreeData.m_uiIntermediateGeometriesSize; uI++)
|
||||
{
|
||||
A3DRiConnector sRiConnector(m_sTreeData.m_ppIntermediateGeometries[uI]);
|
||||
sRiConnector.TraverseRi(psVisitor);
|
||||
}
|
||||
|
||||
for (uI = 0; uI < m_sTreeData.m_uiParametersSize; uI++)
|
||||
{
|
||||
A3DFRMParameterConnector sParameterConnector(m_sTreeData.m_ppsParameters[uI]);
|
||||
sParameterConnector.TraverseParameter(psVisitor);
|
||||
}
|
||||
|
||||
CHECK_RET(psVisitor->visitLeave(*this));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
364
exchange/exchangesource/DumpFeatureTree/Visitor/TreeTraverse.h
Normal file
364
exchange/exchangesource/DumpFeatureTree/Visitor/TreeTraverse.h
Normal file
@@ -0,0 +1,364 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#ifndef A3D_TREE_CONNECTOR
|
||||
#define A3D_TREE_CONNECTOR
|
||||
|
||||
#include <vector>
|
||||
#include "Connector.h"
|
||||
|
||||
//######################################################################################################################
|
||||
|
||||
class A3DVisitorContainer;
|
||||
class A3DModelFileConnector : public A3DConnector
|
||||
{
|
||||
public:
|
||||
|
||||
A3DModelFileConnector(const A3DAsmModelFile* pModelFile) : A3DConnector(pModelFile)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DAsmModelFileData, m_sModelFileData);
|
||||
A3DAsmModelFileGet(pModelFile, &m_sModelFileData);
|
||||
}
|
||||
|
||||
~A3DModelFileConnector() { A3DAsmModelFileGet(NULL, &m_sModelFileData); }
|
||||
|
||||
A3DStatus Traverse(A3DVisitorContainer* psVisitor, bool bVisitPrototype = false);
|
||||
|
||||
public:
|
||||
|
||||
A3DAsmModelFileData m_sModelFileData;
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DProductOccurrenceConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DModelFileConnector;
|
||||
const A3DAsmProductOccurrence* m_pFather;
|
||||
bool m_bIsInstanciated;
|
||||
bool m_bIsPrototype;
|
||||
bool m_bIsExternal;
|
||||
|
||||
private:
|
||||
|
||||
A3DProductOccurrenceConnector(const A3DAsmProductOccurrence* pProductOccurrence)
|
||||
: A3DConnector(pProductOccurrence)
|
||||
{
|
||||
m_pFather = NULL;
|
||||
m_bIsInstanciated = false;
|
||||
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, m_sProductOccurrenceData);
|
||||
A3DAsmProductOccurrenceGet(pProductOccurrence, &m_sProductOccurrenceData);
|
||||
m_bIsPrototype = false;
|
||||
m_bIsExternal = false;
|
||||
}
|
||||
|
||||
~A3DProductOccurrenceConnector() { A3DAsmProductOccurrenceGet(NULL, &m_sProductOccurrenceData); }
|
||||
|
||||
A3DStatus TraversePO(const A3DAsmProductOccurrence* pOccurrence, A3DVisitorContainer* psVisitor, bool bVisitPrototype = false);
|
||||
|
||||
void SetProductOccurrenceFather(const A3DAsmProductOccurrence* pFather) { m_pFather = pFather; }
|
||||
|
||||
public:
|
||||
A3DStatus GetPart(A3DAsmPartDefinition*& pPart) const;
|
||||
A3DStatus CollectSons(std::vector<A3DAsmProductOccurrence*>& apSons) const;
|
||||
|
||||
A3DAsmProductOccurrenceData m_sProductOccurrenceData;
|
||||
const A3DAsmProductOccurrence* GetProductOccurrenceFather() { return m_pFather; }
|
||||
void SetIsInstanciated(bool bIsInstanciated) { m_bIsInstanciated = bIsInstanciated; }
|
||||
bool IsInstanciated() { return m_bIsInstanciated; }
|
||||
void SetPrototypeType(bool bIsPrototype) { m_bIsPrototype = bIsPrototype; }
|
||||
bool IsProtoType() const { return m_bIsPrototype; }
|
||||
void SetExternalType(bool bIsExternal) { m_bIsExternal = bIsExternal; }
|
||||
bool IsExternal() const { return m_bIsExternal; }
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DPartConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DProductOccurrenceConnector;
|
||||
const A3DAsmProductOccurrence* m_pFather;
|
||||
bool m_bIsInstanciated;
|
||||
|
||||
private:
|
||||
|
||||
A3DPartConnector(const A3DAsmPartDefinition *pPart) : A3DConnector(pPart)
|
||||
{
|
||||
m_pFather = NULL;
|
||||
m_bIsInstanciated = false;
|
||||
A3D_INITIALIZE_DATA(A3DAsmPartDefinitionData, m_sPartData);
|
||||
A3DAsmPartDefinitionGet(pPart, &m_sPartData);
|
||||
}
|
||||
|
||||
~A3DPartConnector()
|
||||
{
|
||||
A3DAsmPartDefinitionGet(NULL, &m_sPartData);
|
||||
}
|
||||
|
||||
void SetProductOccurenceFather(const A3DAsmProductOccurrence* pFather) { m_pFather = pFather; }
|
||||
|
||||
public:
|
||||
A3DStatus TraversePart(A3DVisitorContainer* psVisitor) const;
|
||||
A3DAsmPartDefinitionData m_sPartData;
|
||||
const A3DAsmProductOccurrence* GetProductOccurenceFather() { return m_pFather; }
|
||||
void SetIsInstanciated(bool bIsInstanciated) { m_bIsInstanciated = bIsInstanciated; }
|
||||
bool IsInstanciated() { return m_bIsInstanciated; }
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DRiConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DPartConnector;
|
||||
friend class A3DRiSetConnector;
|
||||
bool m_bIsInstanciated;
|
||||
|
||||
public:
|
||||
|
||||
A3DRiConnector(const A3DRiRepresentationItem *pRi) : A3DConnector(pRi)
|
||||
{
|
||||
m_bIsInstanciated = false;
|
||||
A3D_INITIALIZE_DATA(A3DRiRepresentationItemData, m_sRiData);
|
||||
A3DRiRepresentationItemGet(pRi, &m_sRiData);
|
||||
}
|
||||
|
||||
~A3DRiConnector()
|
||||
{
|
||||
A3DRiRepresentationItemGet(NULL, &m_sRiData);
|
||||
}
|
||||
|
||||
A3DStatus TraverseRi(A3DVisitorContainer* psVisitor);
|
||||
|
||||
public:
|
||||
|
||||
A3DRiRepresentationItemData m_sRiData;
|
||||
void SetIsInstanciated(bool bIsInstanciated) { m_bIsInstanciated = bIsInstanciated; }
|
||||
bool IsInstanciated() { return m_bIsInstanciated; }
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DRiBrepModelConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DRiConnector;
|
||||
public:
|
||||
|
||||
A3DRiBrepModelConnector(const A3DRiBrepModel *pRi) : m_pRiBrepModel(pRi), A3DConnector(pRi)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DRiBrepModelData, m_sRiBrepModelData);
|
||||
A3DRiBrepModelGet(m_pRiBrepModel, &m_sRiBrepModelData);
|
||||
}
|
||||
|
||||
~A3DRiBrepModelConnector()
|
||||
{
|
||||
A3DRiBrepModelGet(NULL, &m_sRiBrepModelData);
|
||||
}
|
||||
|
||||
A3DStatus TraverseRiBrepModel(A3DVisitorContainer* psVisitor) const;
|
||||
|
||||
public:
|
||||
A3DRiBrepModel const* m_pRiBrepModel;
|
||||
A3DRiBrepModelData m_sRiBrepModelData;
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DRiSetConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DRiConnector;
|
||||
private:
|
||||
|
||||
A3DRiSetConnector(const A3DRiSet *pRi) : A3DConnector(pRi)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DRiSetData, m_sRiSetData);
|
||||
A3DRiSetGet(pRi, &m_sRiSetData);
|
||||
}
|
||||
|
||||
~A3DRiSetConnector()
|
||||
{
|
||||
A3DRiSetGet(NULL, &m_sRiSetData);
|
||||
}
|
||||
|
||||
A3DStatus TraverseRiSet(A3DVisitorContainer* psVisitor);
|
||||
|
||||
public:
|
||||
|
||||
A3DRiSetData m_sRiSetData;
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DPolyRiBrepModelConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DRiConnector;
|
||||
private:
|
||||
|
||||
A3DPolyRiBrepModelConnector(const A3DRiPolyBrepModel* pRi) : A3DConnector(pRi)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DRiPolyBrepModelData, m_sRiPolyBrepModelData);
|
||||
A3DRiPolyBrepModelGet(pRi, &m_sRiPolyBrepModelData);
|
||||
}
|
||||
|
||||
~A3DPolyRiBrepModelConnector()
|
||||
{
|
||||
A3DRiPolyBrepModelGet(NULL, &m_sRiPolyBrepModelData);
|
||||
}
|
||||
|
||||
public:
|
||||
A3DStatus TraverseRiPolyBrepModel(A3DVisitorContainer* psVisitor) const;
|
||||
A3DRiPolyBrepModelData m_sRiPolyBrepModelData;
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DRiCurveConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DRiConnector;
|
||||
private:
|
||||
|
||||
A3DRiCurveConnector(const A3DRiCurve* pRi) : A3DConnector(pRi)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DRiCurveData, m_sRiCurveData);
|
||||
A3DRiCurveGet(pRi, &m_sRiCurveData);
|
||||
}
|
||||
|
||||
~A3DRiCurveConnector()
|
||||
{
|
||||
A3DRiCurveGet(NULL, &m_sRiCurveData);
|
||||
}
|
||||
|
||||
A3DStatus TraverseRiCurve(A3DVisitorContainer* psVisitor);
|
||||
|
||||
public:
|
||||
|
||||
A3DRiCurveData m_sRiCurveData;
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DRiPolyWireConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DRiConnector;
|
||||
private:
|
||||
|
||||
A3DRiPolyWireConnector(const A3DRiPolyWire* pRi) : A3DConnector(pRi)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DRiPolyWireData, m_sRiPolyWireData);
|
||||
A3DRiPolyWireGet(pRi, &m_sRiPolyWireData);
|
||||
}
|
||||
|
||||
~A3DRiPolyWireConnector()
|
||||
{
|
||||
A3DRiPolyWireGet(NULL, &m_sRiPolyWireData);
|
||||
}
|
||||
|
||||
A3DStatus TraverseRiPolyWire(A3DVisitorContainer* psVisitor);
|
||||
|
||||
public:
|
||||
|
||||
A3DRiPolyWireData m_sRiPolyWireData;
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DFRMParameterConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DFRMTreeConnector;
|
||||
friend class A3DFRMFeatureConnector;
|
||||
private:
|
||||
|
||||
A3DFRMParameterConnector(const A3DFRMParameter *pParameter) : A3DConnector(pParameter)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DFRMParameterData, m_sData);
|
||||
A3DFRMParameterGet(pParameter, &m_sData);
|
||||
}
|
||||
|
||||
~A3DFRMParameterConnector()
|
||||
{
|
||||
A3DFRMParameterGet(NULL, &m_sData);
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
||||
A3DFRMParameterData m_sData;
|
||||
|
||||
A3DStatus TraverseParameter(A3DVisitorContainer* psVisitor) const;
|
||||
};
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DFRMLinkedItemConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DFRMFeatureConnector;
|
||||
private:
|
||||
|
||||
A3DFRMLinkedItemConnector(const A3DFRMLinkedItem *pLinkedItem) : A3DConnector(pLinkedItem)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DFRMLinkedItemData, m_sData);
|
||||
A3DFRMLinkedItemGet(pLinkedItem, &m_sData);
|
||||
}
|
||||
|
||||
~A3DFRMLinkedItemConnector()
|
||||
{
|
||||
A3DFRMLinkedItemGet(NULL, &m_sData);
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
||||
A3DFRMLinkedItemData m_sData;
|
||||
|
||||
A3DStatus TraverseConnection(A3DVisitorContainer* psVisitor) const;
|
||||
};
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DFRMFeatureConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DFRMParameterConnector;
|
||||
private:
|
||||
|
||||
A3DFRMFeatureConnector(const A3DFRMFeature *pFeature) : A3DConnector(pFeature)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DFRMFeatureData, m_sData);
|
||||
A3DFRMFeatureGet(pFeature, &m_sData);
|
||||
}
|
||||
|
||||
~A3DFRMFeatureConnector()
|
||||
{
|
||||
A3DFRMFeatureGet(NULL, &m_sData);
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
||||
A3DFRMFeatureData m_sData;
|
||||
A3DStatus TraverseFeature(A3DVisitorContainer* psVisitor) const;
|
||||
|
||||
|
||||
};
|
||||
|
||||
//######################################################################################################################
|
||||
class A3DFRMTreeConnector : public A3DConnector
|
||||
{
|
||||
friend class A3DProductOccurrenceConnector;
|
||||
protected:
|
||||
|
||||
A3DFRMTreeConnector(const A3DFRMTree *pTree) : A3DConnector(pTree)
|
||||
{
|
||||
A3D_INITIALIZE_DATA(A3DFRMTreeData, m_sTreeData);
|
||||
A3DFRMTreeGet(pTree, &m_sTreeData);
|
||||
}
|
||||
|
||||
~A3DFRMTreeConnector()
|
||||
{
|
||||
A3DFRMTreeGet(NULL, &m_sTreeData);
|
||||
}
|
||||
|
||||
A3DStatus TraverseFeatureTree(A3DVisitorContainer* psVisitor) const;
|
||||
|
||||
public:
|
||||
|
||||
A3DFRMTreeData m_sTreeData;
|
||||
};
|
||||
#endif
|
||||
@@ -0,0 +1,586 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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_ASSEMBLY_TREE
|
||||
#include "VisitorTree.h"
|
||||
#endif
|
||||
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
|
||||
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;
|
||||
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
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::visitEnter(const A3DMarkupTessConnector& 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
|
||||
A3DStatus A3DVisitorContainer::visitLeave(const A3DMarkupTessConnector& 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
|
||||
|
||||
A3DStatus A3DVisitorContainer::visitEnter(const A3DWireTessDataConnector& sConnector)
|
||||
VISITENTER
|
||||
|
||||
A3DStatus A3DVisitorContainer::visitLeave(const A3DWireTessDataConnector& 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)
|
||||
{
|
||||
#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);
|
||||
}
|
||||
m_bTraverseInstance = true;
|
||||
#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.insert(std::pair<const A3DEntity*, void*>(pA3DEntity, pYourEntity));
|
||||
}
|
||||
|
||||
A3DVisitor* A3DVisitorContainer::GetVisitorByName( std::string strName )
|
||||
{
|
||||
vector<A3DVisitor*>::iterator iter = m_apVisitor.begin();
|
||||
for( ; iter != m_apVisitor.end(); ++iter)
|
||||
if(strName.compare((*iter)->GetName()) == 0)
|
||||
return *iter;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
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
|
||||
@@ -0,0 +1,239 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#ifndef A3DVISITOR_CONTAINER
|
||||
#define A3DVISITOR_CONTAINER
|
||||
#include <map>
|
||||
#include "Visitors.h"
|
||||
|
||||
//This class allow to use several vistor when traversing 3DX Tree.
|
||||
//It allow also to exchange parameters between visitors
|
||||
|
||||
#define NODE_INSTANCES 0x0001
|
||||
|
||||
class A3DStepEntityRefManager
|
||||
{
|
||||
public:
|
||||
unsigned int m_uiPOLevel; // Level of creation
|
||||
unsigned int m_uiPushLevel; // if not ~0U , then is activated
|
||||
bool m_bRefOnTopoItem;;
|
||||
A3DMiscEntityReference* m_pStepEntityRef;
|
||||
A3DEntity* m_pA3DEntityRef;
|
||||
|
||||
A3DStepEntityRefManager() : m_uiPOLevel(~0U), m_uiPushLevel(~0U), m_pStepEntityRef(NULL), m_bRefOnTopoItem(false),
|
||||
m_pA3DEntityRef(NULL){}
|
||||
void GetMatrix();
|
||||
|
||||
bool IsFirst( A3DStepEntityRefManager const & sOther) const { return (m_uiPOLevel<sOther.m_uiPOLevel) || (m_uiPOLevel==sOther.m_uiPOLevel && m_uiPushLevel>sOther.m_uiPushLevel);}
|
||||
};
|
||||
|
||||
|
||||
|
||||
class A3DViewLinkedItemManager
|
||||
|
||||
{
|
||||
public:
|
||||
unsigned int m_uiPOLevel;
|
||||
unsigned int m_uiPushLevel; // if not ~0U , then is activated
|
||||
bool m_bRefOnTopoItem;
|
||||
A3DMiscMarkupLinkedItem * m_pMarkupLinkedItem;
|
||||
A3DAsmProductOccurrence * m_POOwner;
|
||||
A3DEntity * m_pA3DEntityRef;
|
||||
|
||||
A3DViewLinkedItemManager() : m_uiPOLevel(~0U), m_uiPushLevel(~0U), m_pMarkupLinkedItem(NULL),m_bRefOnTopoItem(false),
|
||||
m_POOwner(NULL), m_pA3DEntityRef(NULL){}
|
||||
void GetMatrix();
|
||||
|
||||
bool IsFirst( A3DViewLinkedItemManager const & sOther) const { return (m_uiPOLevel<sOther.m_uiPOLevel) || (m_uiPOLevel==sOther.m_uiPOLevel && m_uiPushLevel>sOther.m_uiPushLevel);}
|
||||
};
|
||||
|
||||
class A3DVisitorContainer : public A3DVisitor
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4251) // Suppress the warning C4251 because it leads to have that kind of warning : "warning
|
||||
// C4251: 'A3DVisitorColorMaterials::m_apsCascadedAttribute' : class 'std::vector<_Ty>' needs to have dll-interface to
|
||||
// be used by clients of class 'A3DVisitorColorMaterials"
|
||||
// This is because of the "dllexport" on the visitor classes, as they use stl members and it seems that stl causes
|
||||
// warning with dllexport with microsoft compiler
|
||||
#endif // _MSC_VER
|
||||
|
||||
std::map<const A3DEntity*, void*> m_apA3DEntityYourEntityMap;
|
||||
std::vector<A3DVisitor*> m_apVisitor;
|
||||
bool m_bTraverseInstance;
|
||||
|
||||
A3DVisitor* m_pTreeVisitor;
|
||||
A3DAsmProductOccurrence const * m_pCurrentPOFather;
|
||||
A3DMkpView const * m_psActivatedView;
|
||||
bool m_bTraverseActivatedViewOnly;
|
||||
|
||||
std::vector<A3DStepEntityRefManager> m_asStepEntityRefManager;
|
||||
std::vector<A3DViewLinkedItemManager> m_asViewLinkedItemManager;
|
||||
unsigned int m_uiCurrentLevel;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif // _MSC_VER
|
||||
|
||||
public:
|
||||
A3DVisitorContainer(unsigned int uFlagElementToconnect = 0);
|
||||
|
||||
virtual ~A3DVisitorContainer();
|
||||
|
||||
void push( A3DVisitor* psVisitor);
|
||||
|
||||
//A3DConnector
|
||||
virtual A3DStatus visitEnter(const A3DConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
//Assmebly Tree
|
||||
#ifdef CONNECT_ASSEMBLY_TREE
|
||||
virtual A3DStatus visitEnter(const A3DModelFileConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DModelFileConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DProductOccurrenceConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DProductOccurrenceConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DPartConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DPartConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DRiConnector& sConnector);
|
||||
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiBrepModelConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DRiBrepModelConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiSetConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DRiSetConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DPolyRiBrepModelConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DPolyRiBrepModelConnector& sConnector);
|
||||
|
||||
#endif
|
||||
#ifdef CONNECT_PMI
|
||||
//Markup Tree
|
||||
virtual A3DStatus visitEnter(const A3DMkpAnnotationEntityConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMkpAnnotationEntityConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMkpAnnotationSetConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMkpAnnotationSetConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMkpAnnotationItemConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMkpAnnotationItemConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMarkupConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupDimensionConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMarkupDimensionConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupGDTConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMarkupGDTConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupTessConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMarkupTessConnector& sConnector);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONNECT_BREP
|
||||
//Brep
|
||||
virtual A3DStatus visitEnter(const A3DBrepDataConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DBrepDataConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DConnexConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DConnexConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DShellConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DShellConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFaceConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DFaceConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DLoopConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DLoopConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DCoEdgeConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DCoEdgeConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DEdgeConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DEdgeConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DUniqueVertexConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DUniqueVertexConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMultipleVertexConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMultipleVertexConnector& sConnector);
|
||||
#endif
|
||||
#ifdef CONNECT_MESH
|
||||
//Mesh
|
||||
virtual A3DStatus visitEnter(const A3DTessDataConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DTessDataConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFaceTessDataConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DFaceTessDataConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupDatumConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMarkupDatumConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DWireTessDataConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DWireTessDataConnector& sConnector);
|
||||
|
||||
|
||||
#endif
|
||||
//Views
|
||||
#ifdef CONNECT_VIEWS
|
||||
virtual A3DStatus visitEnter(const A3DMkpViewConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DMkpViewConnector& sConnector);
|
||||
#endif
|
||||
#ifdef CONNECT_FEATURE
|
||||
virtual A3DStatus visitEnter(const A3DFRMFeatureConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DFRMFeatureConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFRMParameterConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DFRMParameterConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFRMTreeConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DFRMTreeConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFRMLinkedItemConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DFRMLinkedItemConnector& sConnector);
|
||||
#endif
|
||||
|
||||
void* FindInMap(const A3DEntity* pA3DEntity);
|
||||
void SetInMap(const A3DEntity* pA3DEntity, void* pYourEntity);
|
||||
|
||||
std::vector<A3DVisitor*>& GetVisitor() { return m_apVisitor; }
|
||||
|
||||
|
||||
bool TraverseInstances() { return m_bTraverseInstance; }
|
||||
void SetTraverseInstance(bool bTraverseInstance) { m_bTraverseInstance = bTraverseInstance; }
|
||||
|
||||
A3DVisitor* GetVisitorByName(std::string strName);
|
||||
A3DVisitor* GetTreeVisitor() const;
|
||||
|
||||
void SetCurrentPoFather(A3DAsmProductOccurrence const * pCurrentPOFather) { m_pCurrentPOFather = pCurrentPOFather; }
|
||||
A3DAsmProductOccurrence const * GetCurrentPoFather() { return m_pCurrentPOFather; }
|
||||
|
||||
void SetActivateView(A3DMkpView const * psActivatedView) { m_psActivatedView = psActivatedView; }
|
||||
A3DMkpView const * GetActivatedView() { return m_psActivatedView; }
|
||||
|
||||
void SetTraverseActivatedViewOnly(bool bTraverseActivatedViewOnly) { m_bTraverseActivatedViewOnly = bTraverseActivatedViewOnly; }
|
||||
|
||||
// StepEntityReference and ViewLinkedItem treatment
|
||||
A3DStepEntityRefManager const* GetActiveStepEntityRefManager(A3DEntity const * pEntity) const;
|
||||
A3DViewLinkedItemManager const* GetActiveViewLinkedItemManager(A3DEntity const * pEntity) const;
|
||||
|
||||
void ActivateEntityReference( A3DEntity const* pEntity );
|
||||
void DeactivateEntityReference(A3DEntity const* pEntity);
|
||||
};
|
||||
#endif
|
||||
@@ -0,0 +1,87 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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 "VisitorTree.h"
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitEnter(const A3DRiBrepModelConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitLeave(const A3DRiBrepModelConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitEnter(const A3DRiSetConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitLeave(const A3DRiSetConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitEnter(const A3DRiConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitLeave(const A3DRiConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitEnter(const A3DPartConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitLeave(const A3DPartConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitEnter(const A3DProductOccurrenceConnector& sConnector)
|
||||
{
|
||||
if(m_uOption&NODE_INSTANCES)
|
||||
{
|
||||
m_pYourEntity = m_psContainer->FindInMap(sConnector.GetA3DEntity());
|
||||
if(m_pYourEntity)
|
||||
{
|
||||
((A3DProductOccurrenceConnector*) &sConnector)->SetIsInstanciated(true);
|
||||
}
|
||||
}
|
||||
|
||||
m_psContainer->SetInMap(sConnector.GetA3DEntity(),(void*) sConnector.GetA3DEntity() );
|
||||
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
A3DStatus A3DTreeVisitor::visitLeave(const A3DProductOccurrenceConnector& /*sConnector*/)
|
||||
{
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void A3DTreeVisitor::SetYourEntity(void* /*pYourEnity*/)
|
||||
{
|
||||
//std::vector<A3DStepEntityRefManager>::iterator sIter;
|
||||
//for(sIter = m_asStepEntityRefManager.begin(); sIter != m_asStepEntityRefManager.end(); ++sIter)
|
||||
//{
|
||||
// if(sIter->m_bPushChildren == true)
|
||||
// sIter->m_apYourEntity.push_back(pYourEnity);
|
||||
//}
|
||||
//
|
||||
//return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#ifndef VISIT_TREE
|
||||
#define VISIT_TREE
|
||||
#include "Visitors.h"
|
||||
#include "VisitorContainer.h"
|
||||
|
||||
|
||||
class A3DConnector;
|
||||
class A3DVisitorContainer;
|
||||
|
||||
class A3DTreeVisitor : public A3DVisitor
|
||||
{
|
||||
friend class A3DVisitorContainer;
|
||||
protected:
|
||||
unsigned m_uOption;
|
||||
void* m_pYourEntity;
|
||||
|
||||
public:
|
||||
|
||||
A3DTreeVisitor(A3DVisitorContainer* psContainer = NULL) : A3DVisitor("Tree", psContainer)
|
||||
{
|
||||
m_uOption = 0;
|
||||
m_pYourEntity = NULL;
|
||||
}
|
||||
|
||||
virtual ~A3DTreeVisitor() {};
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiBrepModelConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DRiBrepModelConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiSetConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DRiSetConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DRiConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DPartConnector& sConnector );
|
||||
virtual A3DStatus visitLeave(const A3DPartConnector& sConnector);
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DProductOccurrenceConnector& sConnector);
|
||||
virtual A3DStatus visitLeave(const A3DProductOccurrenceConnector& sConnector);
|
||||
|
||||
|
||||
void SetYourEntity(void* pYourEnity);
|
||||
|
||||
};
|
||||
#endif
|
||||
206
exchange/exchangesource/DumpFeatureTree/Visitor/Visitors.h
Normal file
206
exchange/exchangesource/DumpFeatureTree/Visitor/Visitors.h
Normal file
@@ -0,0 +1,206 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 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.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#ifndef A3D_VISITOR
|
||||
#define A3D_VISITOR
|
||||
|
||||
//#define CONNECT_TRANSFO 0x0001
|
||||
//#define CONNECT_COLORS 0x0002
|
||||
//#define CONNECT_MESH 0x0004
|
||||
#define CONNECT_ASSEMBLY_TREE 0x008
|
||||
//#define CONNECT_BREP 0x0010
|
||||
//#define CONNECT_PMI 0x00020
|
||||
//#define CONNECT_VIEWS 0x00040
|
||||
#define CONNECT_FEATURE 0x00080
|
||||
|
||||
|
||||
#include "TreeTraverse.h"
|
||||
#ifdef CONNECT_PMI
|
||||
#include "MarkupTraverse.h"
|
||||
#endif
|
||||
#ifdef CONNECT_BREP
|
||||
#include "BrepTraverse.h"
|
||||
#endif
|
||||
#ifdef CONNECT_PMI
|
||||
#include "MarkupTraverse.h"
|
||||
#endif
|
||||
#ifdef CONNECT_MESH
|
||||
#include "TessConnector.h"
|
||||
#endif
|
||||
#ifdef CONNECT_VIEWS
|
||||
#include "ViewTraverse.h"
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
|
||||
#ifndef CALL_A3D_FCTION
|
||||
#define CALL_A3D_FCTION(fctname, params) \
|
||||
fctname params
|
||||
#endif
|
||||
|
||||
#ifndef CHECK_RET_CALL_A3D_FCTION
|
||||
#define CHECK_RET_CALL_A3D_FCTION(fctname, params) \
|
||||
{ \
|
||||
if ((iRet = fctname params)!=A3D_SUCCESS) \
|
||||
{ /*__debugbreak();*/ return iRet; } \
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CHECK_RET
|
||||
#define CHECK_RET(function_call) \
|
||||
{\
|
||||
if ((iRet = function_call)!=A3D_SUCCESS) \
|
||||
return iRet; \
|
||||
}
|
||||
#endif
|
||||
|
||||
class A3DConnector;
|
||||
class A3DVisitorContainer;
|
||||
class A3DVisitor
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4251) // Suppress the warning C4251 because it leads to have that kind of warning : "warning
|
||||
// C4251: 'A3DVisitorColorMaterials::m_apsCascadedAttribute' : class 'std::vector<_Ty>' needs to have dll-interface to
|
||||
// be used by clients of class 'A3DVisitorColorMaterials"
|
||||
// This is because of the "dllexport" on the visitor classes, as they use stl members and it seems that stl causes
|
||||
// warning with dllexport with microsoft compiler
|
||||
#endif // _MSC_VER
|
||||
|
||||
protected:
|
||||
A3DVisitorContainer* m_psContainer;
|
||||
std::string m_strName;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif // _MSC_VER
|
||||
|
||||
public :
|
||||
A3DVisitor(std::string strName, A3DVisitorContainer* psContainer = NULL)
|
||||
: m_strName(strName), m_psContainer(psContainer){}
|
||||
|
||||
virtual ~A3DVisitor() {}
|
||||
|
||||
virtual std::string GetName() const { return m_strName; }
|
||||
|
||||
//Assembly
|
||||
#ifdef CONNECT_ASSEMBLY_TREE
|
||||
virtual A3DStatus visitEnter(const A3DModelFileConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DModelFileConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DProductOccurrenceConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DProductOccurrenceConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DPartConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DPartConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DRiConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiBrepModelConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DRiBrepModelConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DRiSetConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DRiSetConnector& /*sConnector*/) { return A3D_SUCCESS;}
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DPolyRiBrepModelConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DPolyRiBrepModelConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
#endif
|
||||
//Markup
|
||||
#ifdef CONNECT_PMI
|
||||
virtual A3DStatus visitEnter(const A3DMkpAnnotationEntityConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMkpAnnotationEntityConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMkpAnnotationSetConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMkpAnnotationSetConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMkpAnnotationItemConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMkpAnnotationItemConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMarkupConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupDimensionConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMarkupDimensionConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupGDTConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMarkupGDTConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupDatumConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMarkupDatumConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMarkupTessConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMarkupTessConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
#endif
|
||||
//Brep
|
||||
#ifdef CONNECT_BREP
|
||||
virtual A3DStatus visitEnter(const A3DBrepDataConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DBrepDataConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DConnexConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DConnexConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DShellConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DShellConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFaceConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DFaceConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DLoopConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DLoopConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DCoEdgeConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DCoEdgeConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DEdgeConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DEdgeConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DUniqueVertexConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DUniqueVertexConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DMultipleVertexConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMultipleVertexConnector&) { return A3D_SUCCESS; }
|
||||
#endif
|
||||
//Mesh
|
||||
#ifdef CONNECT_MESH
|
||||
virtual A3DStatus visitEnter(const A3DTessDataConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DTessDataConnector&) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFaceTessDataConnector&) {return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DFaceTessDataConnector&) {return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DWireTessDataConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DWireTessDataConnector&) { return A3D_SUCCESS; }
|
||||
#endif
|
||||
//Views
|
||||
#ifdef CONNECT_VIEWS
|
||||
virtual A3DStatus visitEnter(const A3DMkpViewConnector&) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DMkpViewConnector&) { return A3D_SUCCESS; }
|
||||
#endif
|
||||
#ifdef CONNECT_FEATURE
|
||||
virtual A3DStatus visitEnter(const A3DFRMFeatureConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DFRMFeatureConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFRMParameterConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DFRMParameterConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFRMTreeConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DFRMTreeConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
|
||||
virtual A3DStatus visitEnter(const A3DFRMLinkedItemConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
virtual A3DStatus visitLeave(const A3DFRMLinkedItemConnector& /*sConnector*/) { return A3D_SUCCESS; }
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user