Files
Hoops_Exchange/exchange/exchangesource/PRC2XML/PRC2XMLMarkupDimension.cpp
2025-12-15 23:22:33 +08:00

593 lines
29 KiB
C++

/***********************************************************************************************************************
*
* Copyright (c) 2010 - 2025 by Tech Soft 3D, Inc.
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
* scope and manner of such use.
*
***********************************************************************************************************************/
#include <A3DSDKIncludes.h>
#include "PRC2XML.h"
//######################################################################################################################
static void sttraverseDimensionType(int iDimensionType, _TiXmlElement* setting)
{
switch(iDimensionType)
{
case KEA3DMDDimensionTypeDistance: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeDistance"); break;
case KEA3DMDDimensionTypeDistanceOffset: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeDistanceOffset"); break;
case KEA3DMDDimensionTypeLength: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeLength"); break;
case KEA3DMDDimensionTypeLengthCurvilinear: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeLengthCurvilinear"); break;
case KEA3DMDDimensionTypeAngle: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeAngle"); break;
case KEA3DMDDimensionTypeRadius: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeRadius"); break;
case KEA3DMDDimensionTypeRadiusTangent: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeRadiusTangent"); break;
case KEA3DMDDimensionTypeRadiusCylinder: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeRadiusCylinder"); break;
case KEA3DMDDimensionTypeRadiusEdge: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeRadiusEdge"); break;
case KEA3DMDDimensionTypeDiameter: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeDiameter"); break;
case KEA3DMDDimensionTypeDiameterTangent: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeDiameterTangent"); break;
case KEA3DMDDimensionTypeDiameterCylinder: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeDiameterCylinder"); break;
case KEA3DMDDimensionTypeDiameterEdge: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeDiameterEdge"); break;
case KEA3DMDDimensionTypeDiameterCone: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeDiameterCone"); break;
case KEA3DMDDimensionTypeChamfer: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeChamfer"); break;
case KEA3DMDDimensionTypeSlope: setting->SetAttribute("m_eType", "KEA3DMDDimensionTypeSlope"); break;
default: setting->SetAttribute("m_eType", "unexpected"); break;
}
}
//######################################################################################################################
static void sttraverseDimensionValueFormat(const A3DMDDimensionValueFormat* psValueFormat, _TiXmlElement* setting)
{
if(psValueFormat == NULL)
{
setting->SetAttribute("psValueFormat", "NULL");
return;
}
A3DMDDimensionValueFormatData sValueFormatData;
A3D_INITIALIZE_DATA(A3DMDDimensionValueFormatData, sValueFormatData);
_TiXmlElement* markup_dimvalueformat = new _TiXmlElement("A3DMDDimensionValueFormatData");
setting->LinkEndChild(markup_dimvalueformat);
A3DStatus iRet = A3DMDDimensionValueFormatGet(psValueFormat, &sValueFormatData);
if(iRet != A3D_SUCCESS)
{
markup_dimvalueformat->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
markup_dimvalueformat->SetAttribute("m_pcName", sValueFormatData.m_pcName?sValueFormatData.m_pcName:"dimension");
markup_dimvalueformat->SetAttribute("m_iType", sValueFormatData.m_iType);
markup_dimvalueformat->SetAttribute("m_iUnit", sValueFormatData.m_iUnit);
markup_dimvalueformat->SetDoubleAttribute("m_dGlobFact", sValueFormatData.m_dGlobFact);
markup_dimvalueformat->SetAttribute("m_iNulFac_1", sValueFormatData.m_iNulFac_1);
markup_dimvalueformat->SetAttribute("m_iNulFac_2", sValueFormatData.m_iNulFac_2);
markup_dimvalueformat->SetAttribute("m_iExise", sValueFormatData.m_iExise);
markup_dimvalueformat->SetAttribute("m_iSep1000", sValueFormatData.m_iSep1000);
markup_dimvalueformat->SetDoubleAttribute("m_dFact_1", sValueFormatData.m_dFact_1);
markup_dimvalueformat->SetDoubleAttribute("m_dFact_2", sValueFormatData.m_dFact_2);
markup_dimvalueformat->SetDoubleAttribute("m_dFact_3", sValueFormatData.m_dFact_3);
markup_dimvalueformat->SetDoubleAttribute("m_dValPos_1", sValueFormatData.m_dValPos_1);
markup_dimvalueformat->SetDoubleAttribute("m_dValPos_2", sValueFormatData.m_dValPos_2);
markup_dimvalueformat->SetDoubleAttribute("m_dValPos_3", sValueFormatData.m_dValPos_3);
markup_dimvalueformat->SetAttribute("m_pcSepar_1",
sValueFormatData.m_pcSepar_1 ? sValueFormatData.m_pcSepar_1 : "null");
markup_dimvalueformat->SetAttribute("m_pcSepar_1",
sValueFormatData.m_pcSepar_2 ? sValueFormatData.m_pcSepar_2 : "null");
markup_dimvalueformat->SetAttribute("m_pcSepar_1",
sValueFormatData.m_pcSepar_3 ? sValueFormatData.m_pcSepar_3 : "null");
markup_dimvalueformat->SetDoubleAttribute("m_dSepScl_1", sValueFormatData.m_dSepScl_1);
markup_dimvalueformat->SetDoubleAttribute("m_dSepScl_2", sValueFormatData.m_dSepScl_2);
markup_dimvalueformat->SetDoubleAttribute("m_dSepScl_3", sValueFormatData.m_dSepScl_3);
markup_dimvalueformat->SetDoubleAttribute("m_dSepPos_1", sValueFormatData.m_dSepPos_1);
markup_dimvalueformat->SetDoubleAttribute("m_dSepPos_2", sValueFormatData.m_dSepPos_2);
markup_dimvalueformat->SetDoubleAttribute("m_dSepPos_3", sValueFormatData.m_dSepPos_3);
markup_dimvalueformat->SetDoubleAttribute("m_dRestY", sValueFormatData.m_dRestY);
markup_dimvalueformat->SetAttribute("m_iFinZer", sValueFormatData.m_iFinZer);
markup_dimvalueformat->SetAttribute("m_iSepNum", sValueFormatData.m_iSepNum);
markup_dimvalueformat->SetAttribute("m_iTypFrac", sValueFormatData.m_iTypFrac);
markup_dimvalueformat->SetAttribute("m_iSepDen", sValueFormatData.m_iSepDen);
markup_dimvalueformat->SetDoubleAttribute("m_dOperY", sValueFormatData.m_dOperY);
markup_dimvalueformat->SetAttribute("m_iNulOther", sValueFormatData.m_iNulOther);
markup_dimvalueformat->SetDoubleAttribute("m_dResScl", sValueFormatData.m_dResScl);
markup_dimvalueformat->SetAttribute("m_iFact", sValueFormatData.m_iFact);
markup_dimvalueformat->SetDoubleAttribute("m_dRestX", sValueFormatData.m_dRestX);
A3DMDDimensionValueFormatGet(NULL, &sValueFormatData);
}
//######################################################################################################################
static void sttraverseDimensionToleranceSimpleFormat(const A3DMDDimensionSimpleToleranceFormat* psToleranceFormat,
_TiXmlElement* setting)
{
if(psToleranceFormat == NULL)
{
setting->SetAttribute("psToleranceFormat", "NULL");
return;
}
A3DMDDimensionSimpleToleranceFormatData sFormatData;
A3D_INITIALIZE_DATA(A3DMDDimensionSimpleToleranceFormatData, sFormatData);
_TiXmlElement* markup_dimtolformat = new _TiXmlElement("A3DMDDimensionSimpleToleranceFormat");
setting->LinkEndChild(markup_dimtolformat);
A3DStatus iRet = A3DMDDimensionSimpleToleranceFormatGet(psToleranceFormat, &sFormatData);
if(iRet != A3D_SUCCESS)
{
markup_dimtolformat->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
markup_dimtolformat->SetAttribute("m_pcName", (sFormatData.m_pcName && sFormatData.m_pcName[0]!=0)?sFormatData.m_pcName:"no name");
markup_dimtolformat->SetAttribute("m_iType", sFormatData.m_iType);
markup_dimtolformat->SetAttribute("m_iSepar_1", sFormatData.m_iSepar_1);
markup_dimtolformat->SetAttribute("m_iSepar_2", sFormatData.m_iSepar_2);
markup_dimtolformat->SetDoubleAttribute("m_dSymbolH", sFormatData.m_dSymbolH);
markup_dimtolformat->SetAttribute("m_iSepTo_1", sFormatData.m_iSepTo_1);
markup_dimtolformat->SetAttribute("m_iSepTo_2", sFormatData.m_iSepTo_2);
markup_dimtolformat->SetAttribute("m_iSepTo_3", sFormatData.m_iSepTo_3);
markup_dimtolformat->SetAttribute("m_iTrailing", sFormatData.m_iTrailing);
markup_dimtolformat->SetAttribute("m_iFractLine", sFormatData.m_iFractLine);
markup_dimtolformat->SetAttribute("m_iPtOnValue", sFormatData.m_iPtOnValue);
markup_dimtolformat->SetAttribute("m_iAnchorPt", sFormatData.m_iAnchorPt);
markup_dimtolformat->SetDoubleAttribute("m_dIntX", sFormatData.m_dIntX);
markup_dimtolformat->SetDoubleAttribute("m_dIntY", sFormatData.m_dIntY);
markup_dimtolformat->SetDoubleAttribute("m_dExtX", sFormatData.m_dExtX);
markup_dimtolformat->SetDoubleAttribute("m_dExtY", sFormatData.m_dExtY);
markup_dimtolformat->SetAttribute("m_iMergeSame", sFormatData.m_iMergeSame);
markup_dimtolformat->SetAttribute("m_iShowNull", sFormatData.m_iShowNull);
markup_dimtolformat->SetDoubleAttribute("m_dScale", sFormatData.m_dScale);
A3DMDDimensionSimpleToleranceFormatGet(NULL, &sFormatData);
}
//######################################################################################################################
static void sttraverseDimensionToleranceFormat(const A3DMDDimensionToleranceFormat* psToleranceFormat,
_TiXmlElement* setting)
{
A3DEEntityType eType = kA3DTypeUnknown;
if(psToleranceFormat == NULL)
{
setting->SetAttribute("psToleranceFormat", "NULL");
return;
}
A3DStatus iRet = A3DEntityGetType(psToleranceFormat, &eType);
if(iRet != A3D_SUCCESS)
{
setting->SetAttribute("psToleranceFormat", "type error");
return;
}
if(eType == kA3DTypeMDDimensionSimpleToleranceFormat)
{
sttraverseDimensionToleranceSimpleFormat((A3DMDDimensionSimpleToleranceFormat*)psToleranceFormat, setting);
}
else if(eType == kA3DTypeMDDimensionCombinedToleranceFormat)
{
A3DMDDimensionCombinedToleranceFormatData sFormatData;
A3D_INITIALIZE_DATA(A3DMDDimensionCombinedToleranceFormatData, sFormatData);
_TiXmlElement* markup_dimtolformat = new _TiXmlElement("A3DMDDimensionCombinedToleranceFormatData");
setting->LinkEndChild(markup_dimtolformat);
iRet = A3DMDDimensionCombinedToleranceFormatGet(psToleranceFormat, &sFormatData);
if(iRet != A3D_SUCCESS)
{
markup_dimtolformat->SetAttribute("psToleranceFormat", "NULL");
return;
}
markup_dimtolformat->SetAttribute("m_pcName", (sFormatData.m_pcName && sFormatData.m_pcName[0]!=0)?sFormatData.m_pcName:"no name");
markup_dimtolformat->SetAttribute("m_iType", sFormatData.m_iType);
sttraverseDimensionToleranceSimpleFormat(sFormatData.m_pToleranceFormat1, markup_dimtolformat);
markup_dimtolformat->SetDoubleAttribute("m_dExtX1", sFormatData.m_dExtX1);
markup_dimtolformat->SetDoubleAttribute("m_dExtY1", sFormatData.m_dExtY1);
markup_dimtolformat->SetAttribute("m_iAnchorPt1", sFormatData.m_iAnchorPt1);
markup_dimtolformat->SetAttribute("m_iPtOnValue1", sFormatData.m_iPtOnValue1);
markup_dimtolformat->SetAttribute("m_iSepar_1", sFormatData.m_iSepar_1);
sttraverseDimensionToleranceSimpleFormat(sFormatData.m_pToleranceFormat2, markup_dimtolformat);
markup_dimtolformat->SetDoubleAttribute("m_dExtX2", sFormatData.m_dExtX2);
markup_dimtolformat->SetDoubleAttribute("m_dExtY2", sFormatData.m_dExtY2);
markup_dimtolformat->SetAttribute("m_iAnchorPt2", sFormatData.m_iAnchorPt2);
markup_dimtolformat->SetAttribute("m_iPtOnValue2", sFormatData.m_iPtOnValue2);
markup_dimtolformat->SetAttribute("m_iSepar_2", sFormatData.m_iSepar_2);
A3DMDDimensionCombinedToleranceFormatGet(NULL, &sFormatData);
}
else
setting->SetAttribute("A3DMDDimensionToleranceFormat", "unexpected type");
}
//######################################################################################################################
static void sttraverseDimensionValue(const A3DMDDimensionValue* psValue, _TiXmlElement* setting)
{
A3DMDDimensionValueData sValueData;
A3D_INITIALIZE_DATA(A3DMDDimensionValueData, sValueData);
_TiXmlElement* markup_dimvalue = new _TiXmlElement("A3DMDDimensionValueData");
setting->LinkEndChild(markup_dimvalue);
A3DStatus iRet = A3DMDDimensionValueGet(psValue, &sValueData);
if(iRet != A3D_SUCCESS)
{
markup_dimvalue->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
if(sValueData.m_iType == 0)
markup_dimvalue->SetAttribute("m_iType", "true value");
else if(sValueData.m_iType == 1)
markup_dimvalue->SetAttribute("m_iType", "fake num value");
else if(sValueData.m_iType == 2)
markup_dimvalue->SetAttribute("m_iType", "fake alpha num value");
else
markup_dimvalue->SetAttribute("m_iType", "unexpected");
markup_dimvalue->SetAttribute("m_bFormat", sValueData.m_bFormat ? "decimal format" : "fractional");
markup_dimvalue->SetDoubleAttribute("m_dAccuracy", sValueData.m_dAccuracy);
markup_dimvalue->SetDoubleAttribute("m_dToleranceAccuracy", sValueData.m_dToleranceAccuracy);
markup_dimvalue->SetAttribute("m_pcFakeValue", sValueData.m_pcFakeValue ? sValueData.m_pcFakeValue : "null");
markup_dimvalue->SetDoubleAttribute("m_dTolNumSup", sValueData.m_dTolNumSup);
markup_dimvalue->SetDoubleAttribute("m_dTolNumInf", sValueData.m_dTolNumInf);
markup_dimvalue->SetAttribute("m_pcTolTxtSup", sValueData.m_pcTolTxtSup ? sValueData.m_pcTolTxtSup : "null");
markup_dimvalue->SetAttribute("m_pcTolTxtInf", sValueData.m_pcTolTxtInf ? sValueData.m_pcTolTxtInf : "null");
markup_dimvalue->SetAttribute("m_pcBeforeText", sValueData.m_pcBeforeText ? sValueData.m_pcBeforeText : "null");
markup_dimvalue->SetAttribute("m_pcAfterText", sValueData.m_pcAfterText ? sValueData.m_pcAfterText : "null");
markup_dimvalue->SetAttribute("m_pcAboveText", sValueData.m_pcAboveText ? sValueData.m_pcAboveText : "null");
markup_dimvalue->SetAttribute("m_pcBelowText", sValueData.m_pcBelowText ? sValueData.m_pcBelowText : "null");
markup_dimvalue->SetAttribute("m_usLastSeparDefinedNum", sValueData.m_usLastSeparDefinedNum);
markup_dimvalue->SetAttribute("m_iOption", sValueData.m_iOption);
markup_dimvalue->SetDoubleAttribute("m_dDeltaForMinMax", sValueData.m_dDeltaForMinMax);
sttraverseDimensionValueFormat(sValueData.m_pDimValueFormat, markup_dimvalue);
sttraverseDimensionToleranceFormat(sValueData.m_pToleranceFormat, markup_dimvalue);
if(sValueData.m_pChamferDimSecondValue)
sttraverseDimensionValue(sValueData.m_pChamferDimSecondValue, markup_dimvalue);
A3DMDDimensionValueGet(NULL, &sValueData);
}
//######################################################################################################################
static void sttraverseDimensionExtentionLine(const A3DMDDimensionExtentionLine* psExtentionLine, _TiXmlElement* setting)
{
A3DMDDimensionExtentionLineData sData;
A3D_INITIALIZE_DATA(A3DMDDimensionExtentionLineData, sData);
_TiXmlElement* markup_extline = new _TiXmlElement("A3DMDDimensionExtentionLineData");
setting->LinkEndChild(markup_extline);
A3DStatus iRet = A3DMDDimensionExtentionLineGet(psExtentionLine, &sData);
if(iRet != A3D_SUCCESS)
{
markup_extline->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
if(sData.m_pFunnel)
{
A3DMDDimensionFunnelData sFunnelData;
A3D_INITIALIZE_DATA(A3DMDDimensionFunnelData, sFunnelData);
_TiXmlElement* markup_funnel = new _TiXmlElement("A3DMDDimensionFunnelData");
markup_extline->LinkEndChild(markup_funnel);
iRet = A3DMDDimensionFunnelGet(sData.m_pFunnel, &sFunnelData);
if(iRet != A3D_SUCCESS)
{
markup_funnel->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
markup_funnel->SetAttribute("m_usIndex", sFunnelData.m_usIndex);
markup_funnel->SetAttribute("m_bMode", sFunnelData.m_bMode ? "true" : "false");
markup_funnel->SetDoubleAttribute("m_dAngle", sFunnelData.m_dAngle);
markup_funnel->SetDoubleAttribute("m_dHeight", sFunnelData.m_dHeight);
markup_funnel->SetDoubleAttribute("m_dWidth", sFunnelData.m_dWidth);
A3DMDDimensionFunnelGet(NULL, &sFunnelData);
}
_TiXmlElement* markup_ext1 = new _TiXmlElement("m_sExtremity1");
markup_extline->LinkEndChild(markup_ext1);
markup_ext1->SetAttribute("m_bShow", sData.m_sExtremity1.m_bShow ? "true" : "false");
markup_ext1->SetDoubleAttribute("m_dBlanking", sData.m_sExtremity1.m_dBlanking);
markup_ext1->SetDoubleAttribute("m_dOverrun", sData.m_sExtremity1.m_dOverrun);
_TiXmlElement* markup_ext2 = new _TiXmlElement("m_sExtremity2");
markup_extline->LinkEndChild(markup_ext2);
markup_ext2->SetAttribute("m_bShow", sData.m_sExtremity2.m_bShow ? "true" : "false");
markup_ext2->SetDoubleAttribute("m_dBlanking", sData.m_sExtremity2.m_dBlanking);
markup_ext2->SetDoubleAttribute("m_dOverrun", sData.m_sExtremity2.m_dOverrun);
markup_extline->SetDoubleAttribute("m_dLineSlant", sData.m_dLineSlant);
markup_extline->SetAttribute("m_usStyle", sData.m_usStyle);
markup_extline->SetDoubleAttribute("m_fThickness", sData.m_fThickness);
A3DMDDimensionExtentionLineGet(NULL, &sData);
}
//######################################################################################################################
static void sttraverseDimensionLineSymbol(const A3DMDDimensionLineSymbol* psLineSymbol, _TiXmlElement* setting)
{
if(psLineSymbol == NULL)
return;
A3DMDDimensionLineSymbolData sData;
A3D_INITIALIZE_DATA(A3DMDDimensionLineSymbolData, sData);
_TiXmlElement* markup_dimline = new _TiXmlElement("A3DMDDimensionLineSymbolData");
setting->LinkEndChild(markup_dimline);
A3DStatus iRet = A3DMDDimensionLineSymbolGet(psLineSymbol, &sData);
if(iRet != A3D_SUCCESS)
{
markup_dimline->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
markup_dimline->SetAttribute("m_eShape", sData.m_eShape);
markup_dimline->SetAttribute("m_iLineColor", sData.m_iLineColor);
markup_dimline->SetDoubleAttribute("m_fThickness", sData.m_fThickness);
markup_dimline->SetDoubleAttribute("m_fArrowLength", sData.m_fArrowLength);
markup_dimline->SetDoubleAttribute("m_fArrowAngle", sData.m_fArrowAngle);
A3DMDDimensionLineSymbolGet(NULL, &sData);
}
//######################################################################################################################
static void sttraverseDimensionSecondPart(const A3DMDDimensionSecondPart* psSecondPart, _TiXmlElement* setting)
{
if (psSecondPart == NULL)
return;
A3DMDDimensionSecondPartData sData;
A3D_INITIALIZE_DATA(A3DMDDimensionSecondPartData, sData);
_TiXmlElement* markup_secondpart = new _TiXmlElement("A3DMDDimensionSecondPartData");
setting->LinkEndChild(markup_secondpart);
A3DStatus iRet = A3DMDDimensionSecondPartGet(psSecondPart, &sData);
if (iRet != A3D_SUCCESS)
{
markup_secondpart->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
markup_secondpart->SetAttribute("m_eOrientation", sData.m_eOrientation);
markup_secondpart->SetDoubleAttribute("m_dAngle", sData.m_dAngle);
markup_secondpart->SetDoubleAttribute("m_dOffSet", sData.m_dOffSet);
A3DMDDimensionSecondPartGet(NULL, &sData);
}
//######################################################################################################################
static void sttraverseDimensionForeshortened(const A3DMDDimensionForeshortened* psForeshortened, _TiXmlElement* setting)
{
if (psForeshortened == NULL)
return;
A3DMDDimensionForeshortenedData sData;
A3D_INITIALIZE_DATA(A3DMDDimensionForeshortenedData, sData);
_TiXmlElement* markup_Foreshortened = new _TiXmlElement("A3DMDDimensionForeshortenedData");
setting->LinkEndChild(markup_Foreshortened);
A3DStatus iRet = A3DMDDimensionForeshortenedGet(psForeshortened, &sData);
if (iRet != A3D_SUCCESS)
{
markup_Foreshortened->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
markup_Foreshortened->SetAttribute("m_bOrientation", sData.m_bOrientation);
markup_Foreshortened->SetAttribute("m_bTextPosition", sData.m_bTextPosition);
markup_Foreshortened->SetDoubleAttribute("m_dAngle", sData.m_dAngle);
markup_Foreshortened->SetDoubleAttribute("m_fRatio", sData.m_fRatio);
markup_Foreshortened->SetAttribute("m_usPointScale", sData.m_usPointScale);
A3DMDDimensionForeshortenedGet(NULL, &sData);
}
//######################################################################################################################
static void sttraverseDimensionLine(const A3DMDDimensionLine* psLine, _TiXmlElement* setting)
{
if (psLine == NULL)
return;
A3DMDDimensionLineData sData;
A3D_INITIALIZE_DATA(A3DMDDimensionLineData, sData);
_TiXmlElement* markup_dimline = new _TiXmlElement("A3DMDDimensionLineData");
setting->LinkEndChild(markup_dimline);
A3DStatus iRet = A3DMDDimensionLineGet(psLine, &sData);
if (iRet != A3D_SUCCESS)
{
markup_dimline->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return;
}
if (sData.m_pSymbol1)
{
_TiXmlElement* Symbol1 = new _TiXmlElement("Symbol1");
markup_dimline->LinkEndChild(Symbol1);
sttraverseDimensionLineSymbol(sData.m_pSymbol1, Symbol1);
}
if (sData.m_pSymbol2)
{
_TiXmlElement* Symbol2 = new _TiXmlElement("Symbol2");
markup_dimline->LinkEndChild(Symbol2);
sttraverseDimensionLineSymbol(sData.m_pSymbol2, Symbol2);
}
if (sData.m_pLeaderSymbol)
{
_TiXmlElement* LeaderSymbol = new _TiXmlElement("LeaderSymbol");
markup_dimline->LinkEndChild(LeaderSymbol);
sttraverseDimensionLineSymbol(sData.m_pLeaderSymbol, LeaderSymbol);
}
markup_dimline->SetAttribute("m_eGraphRepresentation", sData.m_eGraphRepresentation);
if (sData.m_pSecondPart)
{
_TiXmlElement* SecondPart = new _TiXmlElement("SecondPart");
markup_dimline->LinkEndChild(SecondPart);
sttraverseDimensionSecondPart(sData.m_pSecondPart, SecondPart);
}
markup_dimline->SetAttribute("m_usStyle", sData.m_usStyle);
markup_dimline->SetDoubleAttribute("m_fThickness", sData.m_fThickness);
markup_dimline->SetAttribute("m_usReversal", sData.m_usReversal);
if (sData.m_psForeshortened)
{
_TiXmlElement* Foreshortened = new _TiXmlElement("Foreshortened");
markup_dimline->LinkEndChild(Foreshortened);
sttraverseDimensionForeshortened(sData.m_psForeshortened, Foreshortened);
}
markup_dimline->SetDoubleAttribute("m_dLeaderAngle", sData.m_dLeaderAngle);
markup_dimline->SetAttribute("m_eExtension", sData.m_eExtension);
if (sData.m_pExplicitCurve)
{
_TiXmlElement* ExplicitCurve = new _TiXmlElement("ExplicitCurve");
markup_dimline->LinkEndChild(ExplicitCurve);
traverseCurve(sData.m_pExplicitCurve, ExplicitCurve);
}
A3DMDDimensionLineGet(NULL, &sData);
}
//######################################################################################################################
A3DStatus traverseMarkupDimension(const A3DMarkupDimension* pMarkup, _TiXmlElement* setting)
{
A3DMarkupDimensionData sMarkupData;
A3D_INITIALIZE_DATA(A3DMarkupDimensionData, sMarkupData);
_TiXmlElement* markup_dim = new _TiXmlElement("A3DMarkupDimensionData");
setting->LinkEndChild(markup_dim);
A3DStatus iRet = A3DMarkupDimensionGet(pMarkup, &sMarkupData);
if(iRet != A3D_SUCCESS)
{
markup_dim->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return iRet;
}
sttraverseDimensionType(sMarkupData.m_eType, markup_dim);
sttraverseDimensionValue(sMarkupData.m_pMainValue, markup_dim);
if(sMarkupData.m_pDualValue)
{
_TiXmlElement* markup_dualval = new _TiXmlElement("m_pDualValue");
markup_dim->LinkEndChild(markup_dualval);
if(sMarkupData.m_eDualDisplay == KEA3DMDDimensionDualDisplayNone)
markup_dualval->SetAttribute("m_eDualDisplay", "KEA3DMDDimensionDualDisplayNone");
else if(sMarkupData.m_eDualDisplay == KEA3DMDDimensionDualDisplayBelow)
markup_dualval->SetAttribute("m_eDualDisplay", "KEA3DMDDimensionDualDisplayBelow");
else if(sMarkupData.m_eDualDisplay == KEA3DMDDimensionDualDisplayFractional)
markup_dualval->SetAttribute("m_eDualDisplay", "KEA3DMDDimensionDualDisplayFractional");
else if(sMarkupData.m_eDualDisplay == KEA3DMDDimensionDualDisplaySideBySide)
markup_dualval->SetAttribute("m_eDualDisplay", "KEA3DMDDimensionDualDisplaySideBySide");
else
markup_dualval->SetAttribute("m_eDualDisplay", "unexpected");
sttraverseDimensionValue(sMarkupData.m_pDualValue, markup_dualval);
}
markup_dim->SetDoubleAttribute("m_dValue", sMarkupData.m_dValue);
markup_dim->SetAttribute("m_eSymbol", sMarkupData.m_eSymbol);
markup_dim->SetAttribute("m_eAdditionnalSymbol", sMarkupData.m_eAdditionnalSymbol);
markup_dim->SetAttribute("m_pcSuffixe", sMarkupData.m_pcSuffixe?sMarkupData.m_pcSuffixe : "null");
markup_dim->SetAttribute("m_pcPrefixe", sMarkupData.m_pcPrefixe?sMarkupData.m_pcPrefixe : "null");
if(sMarkupData.m_eType == KEA3DMDDimensionTypeChamfer)
markup_dim->SetDoubleAttribute("m_dChamferDimSecondValue", sMarkupData.m_dChamferDimSecondValue);
sttraverseDimensionExtentionLine(sMarkupData.m_pExtentionLine, markup_dim);
sttraverseDimensionLine(sMarkupData.m_pLine, markup_dim);
markup_dim->SetAttribute("m_eOrientation", sMarkupData.m_eOrientation);
markup_dim->SetAttribute("m_usPosition", sMarkupData.m_usPosition);
_TiXmlElement* markup_frame = new _TiXmlElement("Frame");
markup_dim->LinkEndChild(markup_frame);
markup_frame->SetAttribute("m_eFrame", sMarkupData.m_eFrame);
markup_frame->SetAttribute("m_usFrame", sMarkupData.m_usFrame);
markup_frame->SetAttribute("m_usFrameGroup", sMarkupData.m_usFrameGroup);
_TiXmlElement* markup_score = new _TiXmlElement("Score");
markup_dim->LinkEndChild(markup_score);
markup_score->SetAttribute("m_eScore", sMarkupData.m_eScore);
markup_score->SetAttribute("m_usScore", sMarkupData.m_usScore);
markup_score->SetAttribute("m_usScoreGroup", sMarkupData.m_usScoreGroup);
traverseMarkupTextProperties(sMarkupData.m_pTextProperties, markup_dim);
return A3DMarkupDimensionGet(NULL, &sMarkupData);
}
//######################################################################################################################
A3DStatus traverseToleranceSizeValue(const A3DMDToleranceSizeValue* pToleranceSizeValue, _TiXmlElement* setting)
{
A3DMDToleranceSizeValueData sToleranceSizeValueData;
A3D_INITIALIZE_DATA(A3DMDToleranceSizeValueData, sToleranceSizeValueData);
_TiXmlElement* markup_ToleranceSizeValue = new _TiXmlElement("A3DMDToleranceSizeValueData");
setting->LinkEndChild(markup_ToleranceSizeValue);
A3DStatus iRet = A3DMDToleranceSizeValueGet(pToleranceSizeValue, &sToleranceSizeValueData);
if (iRet != A3D_SUCCESS)
{
markup_ToleranceSizeValue->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
return iRet;
}
sttraverseDimensionType(sToleranceSizeValueData.m_eType, markup_ToleranceSizeValue);
markup_ToleranceSizeValue->SetDoubleAttribute("m_dValue", sToleranceSizeValueData.m_dValue);
markup_ToleranceSizeValue->SetAttribute("m_pcSeparator", sToleranceSizeValueData.m_pcSeparator ? sToleranceSizeValueData.m_pcSeparator : "null");
_TiXmlElement* MainValue = new _TiXmlElement("A3DMDDimensionValue");
markup_ToleranceSizeValue->LinkEndChild(MainValue);
if (sToleranceSizeValueData.m_sMainValue.m_iType == 0)
MainValue->SetAttribute("m_iType", "true value");
else if (sToleranceSizeValueData.m_sMainValue.m_iType == 1)
MainValue->SetAttribute("m_iType", "fake num value");
else if (sToleranceSizeValueData.m_sMainValue.m_iType == 2)
MainValue->SetAttribute("m_iType", "fake alpha num value");
else
MainValue->SetAttribute("m_iType", "unexpected");
MainValue->SetAttribute("m_bFormat", sToleranceSizeValueData.m_sMainValue.m_bFormat ? "decimal format" : "fractional");
MainValue->SetDoubleAttribute("m_dAccuracy", sToleranceSizeValueData.m_sMainValue.m_dAccuracy);
MainValue->SetDoubleAttribute("m_dToleranceAccuracy", sToleranceSizeValueData.m_sMainValue.m_dToleranceAccuracy);
MainValue->SetAttribute("m_pcFakeValue", sToleranceSizeValueData.m_sMainValue.m_pcFakeValue ? sToleranceSizeValueData.m_sMainValue.m_pcFakeValue : "null");
MainValue->SetDoubleAttribute("m_dTolNumSup", sToleranceSizeValueData.m_sMainValue.m_dTolNumSup);
MainValue->SetDoubleAttribute("m_dTolNumInf", sToleranceSizeValueData.m_sMainValue.m_dTolNumInf);
MainValue->SetAttribute("m_pcTolTxtSup", sToleranceSizeValueData.m_sMainValue.m_pcTolTxtSup ? sToleranceSizeValueData.m_sMainValue.m_pcTolTxtSup : "null");
MainValue->SetAttribute("m_pcTolTxtInf", sToleranceSizeValueData.m_sMainValue.m_pcTolTxtInf ? sToleranceSizeValueData.m_sMainValue.m_pcTolTxtInf : "null");
MainValue->SetAttribute("m_pcBeforeText", sToleranceSizeValueData.m_sMainValue.m_pcBeforeText ? sToleranceSizeValueData.m_sMainValue.m_pcBeforeText : "null");
MainValue->SetAttribute("m_pcAfterText", sToleranceSizeValueData.m_sMainValue.m_pcAfterText ? sToleranceSizeValueData.m_sMainValue.m_pcAfterText : "null");
MainValue->SetAttribute("m_pcAboveText", sToleranceSizeValueData.m_sMainValue.m_pcAboveText ? sToleranceSizeValueData.m_sMainValue.m_pcAboveText : "null");
MainValue->SetAttribute("m_pcBelowText", sToleranceSizeValueData.m_sMainValue.m_pcBelowText ? sToleranceSizeValueData.m_sMainValue.m_pcBelowText : "null");
MainValue->SetAttribute("m_usLastSeparDefinedNum", sToleranceSizeValueData.m_sMainValue.m_usLastSeparDefinedNum);
MainValue->SetAttribute("m_iOption", sToleranceSizeValueData.m_sMainValue.m_iOption);
MainValue->SetDoubleAttribute("m_dDeltaForMinMax", sToleranceSizeValueData.m_sMainValue.m_dDeltaForMinMax);
sttraverseDimensionValueFormat(sToleranceSizeValueData.m_sMainValue.m_pDimValueFormat, MainValue);
sttraverseDimensionToleranceFormat(sToleranceSizeValueData.m_sMainValue.m_pToleranceFormat, MainValue);
if (sToleranceSizeValueData.m_sMainValue.m_pChamferDimSecondValue)
sttraverseDimensionValue(sToleranceSizeValueData.m_sMainValue.m_pChamferDimSecondValue, MainValue);
sttraverseDimensionValue(sToleranceSizeValueData.m_pDualValue, MainValue);
return A3DMDToleranceSizeValueGet(NULL, &sToleranceSizeValueData);
}