/*********************************************************************************************************************** * * Copyright (c) 2010 - 2025 by Tech Soft 3D, Inc. * The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret * as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event * of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized * employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the * scope and manner of such use. * ***********************************************************************************************************************/ #include #include "PRC2XML.h" static A3DVoid sttraverseSetNameAttribute(const A3DEntity* entity, _TiXmlElement* xmlnode) { { A3DRootBaseData sData; A3D_INITIALIZE_DATA(A3DRootBaseData, sData); if (A3DRootBaseGet(entity, &sData) == A3D_SUCCESS) { if (sData.m_pcName && sData.m_pcName[0] != '\0') xmlnode->SetAttribute("Name", sData.m_pcName); if (sData.m_uiPersistentId) xmlnode->SetAttribute("PersistentId", sData.m_uiPersistentId); A3DRootBaseGet(NULL, &sData); } } { A3DRootBaseWithGraphicsData sData; A3D_INITIALIZE_DATA(A3DRootBaseWithGraphicsData, sData); if (A3DRootBaseWithGraphicsGet(entity, &sData) == A3D_SUCCESS) { if (sData.m_pGraphics) { A3DGraphicsData sGraphicsData; A3D_INITIALIZE_DATA(A3DGraphicsData, sGraphicsData); if (A3DGraphicsGet(sData.m_pGraphics, &sGraphicsData) == A3D_SUCCESS) { xmlnode->SetAttribute("Layer", sGraphicsData.m_uiLayerIndex); xmlnode->SetAttribute("Style", sGraphicsData.m_uiStyleIndex); xmlnode->SetAttribute("Behaviour", sGraphicsData.m_usBehaviour); } } } } } static A3DVoid sttraverseXmlText(const char* ac, _TiXmlElement* xmlfather) { if (ac[0] != '\0') { char acUTF8[2048]; sprintf(acUTF8, "%s ", ac); _TiXmlText* xml = new _TiXmlText(acUTF8); xmlfather->LinkEndChild(xml); } } static A3DVoid sttraverseXmlText(double d, _TiXmlElement* xmlfather) { char acUTF8[2048]; sprintf(acUTF8, "%g", d); sttraverseXmlText(acUTF8, xmlfather); } static A3DVoid sttraverseFRMFeatureLinkedItem(const A3DFRMLinkedItem* pFeatureLinkedItem, _TiXmlElement* xmlfather) { _TiXmlElement* xml = new _TiXmlElement("A3DFRMLinkedItem"); A3DFRMLinkedItemData sData; A3D_INITIALIZE_DATA(A3DFRMLinkedItemData, sData); traverseSource(pFeatureLinkedItem, xml); A3DStatus iRet = A3DFRMLinkedItemGet(pFeatureLinkedItem, &sData); if (iRet == A3D_SUCCESS) { traverseEntityReference((A3DMiscEntityReference*)pFeatureLinkedItem, xml); xml->SetAttribute("m_eType", sData.m_eType); if (sData.m_pTargetProductOccurrence != NULL) setAttributePtr("m_pTargetProductOccurrence", sData.m_pTargetProductOccurrence, xml); A3DFRMLinkedItemGet(NULL, &sData); } else xml->SetAttribute("error", A3DMiscGetErrorMsg(iRet)); xmlfather->LinkEndChild(xml); } static A3DVoid sttraverseFRMParameter(const A3DFRMParameter* pFeatParameter, _TiXmlElement* xmlfather); static A3DVoid sttraverseFRMFeature(const A3DFRMFeature* pFeature, _TiXmlElement* xmlfather) { _TiXmlElement* xml = new _TiXmlElement("A3DFRMFeature"); setAttributePRC2XMLID(pFeature, xml); sttraverseSetNameAttribute(pFeature, xml); xmlfather->LinkEndChild(xml); A3DUTF8Char* pcFeatureType = NULL; A3DFRMFeatureGetTypeAsString(pFeature, &pcFeatureType); if(pcFeatureType) xml->SetAttribute("Type", pcFeatureType); A3DFRMFeatureGetTypeAsString(nullptr, &pcFeatureType); A3DFRMFeatureData sData; A3D_INITIALIZE_DATA(A3DFRMFeatureData, sData); A3DStatus iErr = A3DFRMFeatureGet(pFeature, &sData); if (iErr != A3D_SUCCESS) return ; char acName[30]; switch (sData.m_eDataType) { case kA3DFRMDataInteger: A3DFRMIntegerData sIntegerData; A3D_INITIALIZE_DATA(A3DFRMIntegerData, sIntegerData); A3DFRMIntegerDataGet(pFeature, &sIntegerData); for (A3DUns32 i = 0; i < sIntegerData.m_uiValuesSize; ++i) { sprintf_s(acName,sizeof(acName)-1, "value_%d", i); xml->SetAttribute(acName, sIntegerData.m_piValues[i]); } A3DFRMIntegerDataGet(NULL, &sIntegerData); break; case kA3DFRMDataDouble: A3DFRMDoubleData sDoubleData; A3D_INITIALIZE_DATA(A3DFRMDoubleData, sDoubleData); A3DFRMDoubleDataGet(pFeature, &sDoubleData); for (A3DUns32 i = 0; i < sDoubleData.m_uiValuesSize; ++i) { sprintf_s(acName, sizeof(acName) - 1, "value_%d", i); xml->SetDoubleAttribute(acName, sDoubleData.m_pdValues[i]); } A3DFRMDoubleDataGet(NULL, &sDoubleData); break; case kA3DFRMDataString: A3DFRMStringData sStringData; A3D_INITIALIZE_DATA(A3DFRMStringData, sStringData); A3DFRMStringDataGet(pFeature, &sStringData); for (A3DUns32 i = 0; i < sStringData.m_uiValuesSize; ++i) { sprintf(acName, "value_%d", i); if (sStringData.m_ppcValues[i] != NULL) xml->SetAttribute(acName, sStringData.m_ppcValues[i]); else xml->SetAttribute(acName, ""); } A3DFRMStringDataGet(NULL, &sStringData); break; case kA3DFRMDataEnum: { A3DInt32 iEnumValue; A3DUTF8Char* pcValueAsString = NULL; A3DFRMEnumDataGet(pFeature, &iEnumValue, &pcValueAsString); if (pcValueAsString) xml->SetAttribute("Value", pcValueAsString); else xml->SetAttribute("Value", iEnumValue); A3DFRMEnumDataGet(NULL, &iEnumValue, &pcValueAsString); } break; default: break; } for (A3DUns32 ui = 0; uiLinkEndChild(xml); A3DFRMParameterData sData; A3D_INITIALIZE_DATA(A3DFRMParameterData, sData); A3DStatus iErr = A3DFRMParameterGet(pParameter, &sData); if (iErr != A3D_SUCCESS) return; switch (sData.m_eType) { case kA3DParameterType_Information: { xml->SetAttribute("Type", "INFORMATION"); break; } case kA3DParameterType_Type: { xml->SetAttribute("Type", "TYPE"); break; } case kA3DParameterType_Specification: { xml->SetAttribute("Type", "SPECIFICATION"); break; } case kA3DParameterType_FeatureDefinition: { xml->SetAttribute("Type", "FEATURE DEFINITION"); break; } case kA3DParameterType_Definition: { xml->SetAttribute("Type", "DEFINITION"); break; } case kA3DParameterType_Container: { xml->SetAttribute("Type", "CONTAINER"); break; } case kA3DParameterType_ContainerInternal: { xml->SetAttribute("Type", "INTERNAL CONTAINER"); break; } case kA3DParameterType_Data: { xml->SetAttribute("Type", "DATA"); break; } default: break; } for (A3DUns32 ui = 0; uiLinkEndChild(xml); }