3.0 Product occurrences – Code Sample
The following diagram and code are provided to assist with parsing Product Occurrences in Exchange. Please see the Programming Guide for more information.

/*
* This template traverses all PO / RI / BREP / Connex / Shell / Face / Loop / Co Edge / Edge
*/
#include <stdio.h>
#include <iostream>
#define INITIALIZE_A3D_API
#include <A3DSDKIncludes.h>
//##############################
#define CHECK_RET(function_call) {\
iRet = function_call; if(iRet != A3D_SUCCESS) { std::cout << "Error number=" << iRet << std::endl; return iRet; }\
}
// #############################
// Analyze BREP
{
A3DStatus iRet = A3D_SUCCESS;
A3DTopoCoEdgeData sTopoCoEdgeData;
A3D_INITIALIZE_DATA(A3DTopoCoEdgeData, sTopoCoEdgeData);
CHECK_RET(A3DTopoCoEdgeGet(pTopoCoEdge, &sTopoCoEdgeData));
// Here is the edge
// sTopoCoEdgeData.m_pEdge;
return iRet;
}
{
A3DStatus iRet = A3D_SUCCESS;
A3DTopoLoopData sTopoLoopData;
A3D_INITIALIZE_DATA(A3DTopoLoopData, sTopoLoopData);
CHECK_RET(A3DTopoLoopGet(pTopoLoop, &sTopoLoopData));
{
traverseCoEdge(sTopoLoopData.m_ppCoEdges[i]);
}
return iRet;
}
{
A3DStatus iRet = A3D_SUCCESS;
A3DTopoFaceData sTopoFaceData;
A3D_INITIALIZE_DATA(A3DTopoFaceData, sTopoFaceData);
CHECK_RET(A3DTopoFaceGet(pTopoFace, &sTopoFaceData));
{
traverseLoop(sTopoFaceData.m_ppLoops[i]);
}
return iRet;
}
{
A3DStatus iRet = A3D_SUCCESS;
A3DTopoShellData sTopoShellData;
A3D_INITIALIZE_DATA(A3DTopoShellData, sTopoShellData);
CHECK_RET(A3DTopoShellGet(pTopoShell, &sTopoShellData));
{
traverseFace(sTopoShellData.m_ppFaces[i]);
}
return iRet;
}
{
A3DStatus iRet = A3D_SUCCESS;
A3DTopoConnexData sTopoConnexData;
A3D_INITIALIZE_DATA(A3DTopoConnexData, sTopoConnexData);
CHECK_RET(A3DTopoConnexGet(pTopoConnex, &sTopoConnexData));
{
traverseShell(sTopoConnexData.m_ppShells[i]);
}
return iRet;
}
{
A3DStatus iRet = A3D_SUCCESS;
A3DRiBrepModelData sBREPData;
A3D_INITIALIZE_DATA(A3DRiBrepModelData, sBREPData);
CHECK_RET(A3DRiBrepModelGet(pBrepModel, &sBREPData));
A3DTopoBrepDataData sTopoBrepDataData;
A3D_INITIALIZE_DATA(A3DTopoBrepDataData, sTopoBrepDataData);
CHECK_RET(A3DTopoBrepDataGet(sBREPData.m_pBrepData, &sTopoBrepDataData));
{
traverseConnex(sTopoBrepDataData.m_ppConnexes[i]);
}
return iRet;
}
// ######################################################################################################################
// Traverse Representation Item
{
A3DStatus iRet = A3D_SUCCESS;
A3DRiRepresentationItemData sRIData;
A3DEEntityType eType;
CHECK_RET(A3DEntityGetType(pRI, &eType));
if (eType == kA3DTypeRiBrepModel)
{
traverseBREPModel(pRI);
}
{
A3DRiSetData sRiSetData;
A3D_INITIALIZE_DATA(A3DRiSetData, sRiSetData);
CHECK_RET(A3DRiSetGet(pRI, &sRiSetData));
{
traverseRI(sRiSetData.m_ppRepItems[i]);
}
}
return iRet;
}
// ######################################################################################################################
// Traverse part
{
A3DStatus iRet = A3D_SUCCESS;
A3DAsmPartDefinitionData sPartData;
A3D_INITIALIZE_DATA(A3DAsmPartDefinitionData, sPartData);
A3DAsmPartDefinitionGet(pPart, &sPartData);
{
CHECK_RET(traverseRI(sPartData.m_ppRepItems[i]));
}
return iRet;
}
// ######################################################################################################################
// Traverse PO Recursively
{
A3DStatus iRet = A3D_SUCCESS;
A3DAsmProductOccurrenceData sPOData;
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sPOData);
A3DAsmProductOccurrenceGet(pPO, &sPOData);
if (sPOData.m_pPart)
{
CHECK_RET(traversePart(sPOData.m_pPart));
}
{
CHECK_RET(traversePO(sPOData.m_ppPOccurrences[i]));
}
{
CHECK_RET(traversePO(sPOData.m_pPrototype));
}
return iRet;
}
// ######################################################################################################################
#ifdef _MSC_VER
#else
#endif
{
A3DStatus iRet = A3D_SUCCESS;
if (iArgc != 2)
{
#ifdef _MSC_VER
_tprintf(_T("Usage:\n %s <CAD input file>\n"), ppcArgv[0]);
#else
printf("Usage:\n %s <CAD input file>\n", ppcArgv[0]);
#endif
return A3D_ERROR;
}
#ifdef _MSC_VER
# ifdef _WIN64
const TCHAR* pcLibPath = _T("..\\..\\..\\..\\bin\\win64\\");
# else
const TCHAR* pcLibPath = _T("..\\..\\..\\..\\bin\\win32\\");
# endif
#else
# ifdef __APPLE__
# elif defined(X32)
# else
# endif
#endif
A3DSDKHOOPSExchangeLoader sHoopsExchangeLoader(pcLibPath);
if (sHoopsExchangeLoader.m_eSDKStatus != A3D_SUCCESS)
return sHoopsExchangeLoader.m_eSDKStatus;
A3DImport sImport(ppcArgv[1]);
sHoopsExchangeLoader.Import(sImport);
// get Model File
A3DAsmModelFileData sModelFileData;
A3D_INITIALIZE_DATA(A3DAsmModelFileData, sModelFileData);
CHECK_RET(A3DAsmModelFileGet(sHoopsExchangeLoader.m_psModelFile, &sModelFileData));
// Traverse each PO in Model File
{
CHECK_RET(traversePO(sModelFileData.m_ppPOccurrences[i]));
}
return iRet;
}
/***********************************************************************
* Copyright (c) 2014 by Tech Soft 3D, LLC.
* The information contained herein is confidential and proprietary to Tech Soft 3D, LLC., 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, LLC. is granted only under a written non-disclosure agreement, expressly prescribing the
* scope and manner of such use.
*/