2025.6.1
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* 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
|
||||
@@ -12,9 +12,31 @@
|
||||
#include <A3DSDKIncludes.h>
|
||||
#include "PRC2XML.h"
|
||||
|
||||
int traverseUnit(A3DMiscAttributeUnit* const pUnit, _TiXmlElement* setting)
|
||||
#include <string>
|
||||
#include <codecvt>
|
||||
#include <string>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <direct.h>
|
||||
#else
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
//######################################################################################################################
|
||||
int _MakeFolder(const std::string& folderPath)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
#ifdef WIN32
|
||||
return _mkdir(folderPath.c_str());
|
||||
#else
|
||||
return mkdir(folderPath.c_str(), 0777);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus traverseUnit(A3DMiscAttributeUnit* const pUnit, _TiXmlElement* setting)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
A3DMiscAttributeUnitData sDataUnit;
|
||||
A3D_INITIALIZE_DATA(A3DMiscAttributeUnitData, sDataUnit);
|
||||
|
||||
@@ -30,7 +52,7 @@ int traverseUnit(A3DMiscAttributeUnit* const pUnit, _TiXmlElement* setting)
|
||||
_TiXmlElement* basicunit = new _TiXmlElement("A3DMiscAttributeBasicUnit");
|
||||
basicunit->SetAttribute("m_eUnit", (int)sDataUnit.m_ppBasicUnits[uj]->m_eUnit);
|
||||
basicunit->SetAttribute("m_iExponent", (int)sDataUnit.m_ppBasicUnits[uj]->m_iExponent);
|
||||
basicunit->SetAttribute("m_dFactor", (int)sDataUnit.m_ppBasicUnits[uj]->m_dFactor);
|
||||
basicunit->SetDoubleAttribute("m_dFactor", (double)sDataUnit.m_ppBasicUnits[uj]->m_dFactor);
|
||||
unit->LinkEndChild(basicunit);
|
||||
}
|
||||
A3DGlobalGetUnitData(NULL, &sDataUnit);
|
||||
@@ -41,13 +63,13 @@ int traverseUnit(A3DMiscAttributeUnit* const pUnit, _TiXmlElement* setting)
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseDottingPattern(const A3DGraphDottingPatternData& sData, _TiXmlElement* setting)
|
||||
A3DStatus traverseDottingPattern(const A3DGraphDottingPatternData& sData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement* pattern = new _TiXmlElement("A3DGraphDottingPatternData");
|
||||
|
||||
_SetDoubleAttribute(pattern, "m_dPitch", (double) sData.m_dPitch);
|
||||
setDoubleAttribute(pattern, "m_dPitch", (double) sData.m_dPitch);
|
||||
pattern->SetAttribute("m_bZigZag", (int) sData.m_bZigZag);
|
||||
pattern->SetAttribute("m_uiColorIndex", (int) sData.m_uiColorIndex);
|
||||
pattern->SetAttribute("m_uiNextPatternIndex", (int) sData.m_uiNextPatternIndex);
|
||||
@@ -57,9 +79,9 @@ int traverseDottingPattern(const A3DGraphDottingPatternData& sData, _TiXmlElemen
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseHatchingPattern(const A3DGraphHatchingPatternData& sData, _TiXmlElement* setting)
|
||||
A3DStatus traverseHatchingPattern(const A3DGraphHatchingPatternData& sData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement *pattern= new _TiXmlElement("A3DGraphHatchingPatternData");
|
||||
|
||||
@@ -67,7 +89,7 @@ int traverseHatchingPattern(const A3DGraphHatchingPatternData& sData, _TiXmlElem
|
||||
for(ui = 0; ui < uiSize; ++ui)
|
||||
{
|
||||
_TiXmlElement* hatchline = new _TiXmlElement("A3DGraphHatchingPatternLineData");
|
||||
_SetDoubleAttribute(hatchline, "m_dAngle", (double) sData.m_psHatchLines[ui].m_dAngle);
|
||||
setDoubleAttribute(hatchline, "m_dAngle", (double) sData.m_psHatchLines[ui].m_dAngle);
|
||||
hatchline->SetAttribute("m_uiStyleIndex", (int) sData.m_psHatchLines[ui].m_uiStyleIndex);
|
||||
traversePoint2d("m_sStart" , sData.m_psHatchLines[ui].m_sStart, hatchline);
|
||||
traversePoint2d("m_sOffset", sData.m_psHatchLines[ui].m_sOffset, hatchline);
|
||||
@@ -80,9 +102,9 @@ int traverseHatchingPattern(const A3DGraphHatchingPatternData& sData, _TiXmlElem
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseSolidPattern(const A3DGraphSolidPatternData& sData, _TiXmlElement* setting)
|
||||
A3DStatus traverseSolidPattern(const A3DGraphSolidPatternData& sData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement* pattern = new _TiXmlElement("A3DGraphSolidPatternData");
|
||||
|
||||
@@ -95,9 +117,9 @@ int traverseSolidPattern(const A3DGraphSolidPatternData& sData, _TiXmlElement* s
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseVPicturePattern(const A3DGraphVPicturePatternData& sData, _TiXmlElement* setting)
|
||||
A3DStatus traverseVPicturePattern(const A3DGraphVPicturePatternData& sData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement* pattern = new _TiXmlElement("A3DGraphVPicturePatternData");
|
||||
pattern->SetAttribute("m_uiNextPatternIndex", (int) sData.m_uiNextPatternIndex);
|
||||
@@ -109,47 +131,94 @@ int traverseVPicturePattern(const A3DGraphVPicturePatternData& sData, _TiXmlElem
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
//static bool stMakeFileWithBinarydata(A3DUns32 uiSize, A3DUns8* const pucBinaryData, const A3DUTF8Char* psFileName)
|
||||
//{
|
||||
// FILE* psFile = fopen(psFileName, "wb");
|
||||
// if(psFile != NULL)
|
||||
// {
|
||||
// int iFileSize = uiSize;
|
||||
// fwrite(pucBinaryData, sizeof(char), size_t(iFileSize), psFile);
|
||||
// fclose(psFile);
|
||||
// return true;
|
||||
// }
|
||||
// return false;
|
||||
//}
|
||||
std::string st_texturePath;
|
||||
void setTextureDirectory(const MY_CHAR* texturePath)
|
||||
{
|
||||
// string conversion
|
||||
std::string utf8Path;
|
||||
#if defined _UNICODE || defined UNICODE
|
||||
std::wstring_convert<std::codecvt_utf8<wchar_t>> convert;
|
||||
utf8Path = convert.to_bytes(std::wstring(texturePath));
|
||||
#else
|
||||
utf8Path = texturePath;
|
||||
#endif
|
||||
|
||||
// extract output dir, and create /img/ dir
|
||||
std::string path(utf8Path);
|
||||
size_t found = path.find_last_of("/\\");
|
||||
st_texturePath = path.substr(0, found) + "/img/";
|
||||
_MakeFolder(st_texturePath);
|
||||
|
||||
// add current XML filename for all associated texture files
|
||||
st_texturePath += path.substr(found + 1);
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traversePicture(const A3DGraphPictureData& sData, _TiXmlElement* setting)
|
||||
static bool stMakeFileWithBinarydata(A3DUns32 uiSize, A3DUns8* const pucBinaryData, const std::string &psFileName)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
FILE* psFile = fopen(psFileName.c_str(), "wb");
|
||||
|
||||
if(psFile != NULL)
|
||||
{
|
||||
int iFileSize = uiSize;
|
||||
fwrite(pucBinaryData, sizeof(char), size_t(iFileSize), psFile);
|
||||
fclose(psFile);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus traversePicture(const A3DGraphPictureData& sData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement* picture = new _TiXmlElement("A3DGraphPictureData");
|
||||
|
||||
std::string ext;
|
||||
switch(sData.m_eFormat)
|
||||
{
|
||||
case kA3DPicturePng: ext = "png"; break;
|
||||
case kA3DPictureJpg: ext = "jpg"; break;
|
||||
|
||||
picture->SetAttribute("m_eFormat", (int) sData.m_eFormat);
|
||||
case kA3DPictureBmp:
|
||||
case kA3DPictureBitmapRgbByte:
|
||||
case kA3DPictureBitmapRgbaByte:
|
||||
case kA3DPictureBitmapGreyByte:
|
||||
case kA3DPictureBitmapGreyaByte:
|
||||
default:
|
||||
ext = "bmp";
|
||||
break;
|
||||
}
|
||||
picture->SetAttribute("m_eFormat", (int)sData.m_eFormat);
|
||||
picture->SetAttribute("m_uiPixelWidth", (int) sData.m_uiPixelWidth);
|
||||
picture->SetAttribute("m_uiPixelHeight", (int) sData.m_uiPixelHeight);
|
||||
//stMakeFileWithBinarydata(sData.m_uiSize,sData.m_pucBinaryData,"myfilename");
|
||||
|
||||
const char* cIndex = setting->Attribute("index");
|
||||
if (cIndex && !st_texturePath.empty())
|
||||
{
|
||||
std::string picturePath = st_texturePath + "_" + cIndex + "." + ext;
|
||||
stMakeFileWithBinarydata(sData.m_uiSize, sData.m_pucBinaryData, picturePath);
|
||||
size_t found = picturePath.find_last_of("/\\");
|
||||
picture->SetAttribute("m_sTextureFile", picturePath.substr(found+1).c_str());
|
||||
}
|
||||
|
||||
setting->LinkEndChild(picture);
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseMaterial(const A3DGraphMaterialData& sData, _TiXmlElement* setting)
|
||||
A3DStatus traverseMaterial(const A3DGraphMaterialData& sData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement* material = new _TiXmlElement("A3DGraphMaterialData");
|
||||
|
||||
_SetDoubleAttribute(material, "m_dAmbientAlpha", sData.m_dAmbientAlpha);
|
||||
_SetDoubleAttribute(material, "m_dDiffuseAlpha", sData.m_dDiffuseAlpha);
|
||||
_SetDoubleAttribute(material, "m_dEmissiveAlpha", sData.m_dEmissiveAlpha);
|
||||
_SetDoubleAttribute(material, "m_dSpecularAlpha", sData.m_dSpecularAlpha);
|
||||
_SetDoubleAttribute(material, "m_dShininess", sData.m_dShininess);
|
||||
setDoubleAttribute(material, "m_dAmbientAlpha", sData.m_dAmbientAlpha);
|
||||
setDoubleAttribute(material, "m_dDiffuseAlpha", sData.m_dDiffuseAlpha);
|
||||
setDoubleAttribute(material, "m_dEmissiveAlpha", sData.m_dEmissiveAlpha);
|
||||
setDoubleAttribute(material, "m_dSpecularAlpha", sData.m_dSpecularAlpha);
|
||||
setDoubleAttribute(material, "m_dShininess", sData.m_dShininess);
|
||||
|
||||
material->SetAttribute("m_uiAmbient", (int) sData.m_uiAmbient);
|
||||
material->SetAttribute("m_uiDiffuse", (int) sData.m_uiDiffuse);
|
||||
@@ -161,13 +230,13 @@ int traverseMaterial(const A3DGraphMaterialData& sData, _TiXmlElement* setting)
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseLinePattern(const A3DGraphLinePatternData& sData, _TiXmlElement* setting)
|
||||
A3DStatus traverseLinePattern(const A3DGraphLinePatternData& sData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement* linepattern = new _TiXmlElement("A3DGraphLinePatternData");
|
||||
traverseDoubles("m_pdLengths", sData.m_uiNumberOfLengths, sData.m_pdLengths, linepattern);
|
||||
_SetDoubleAttribute(linepattern, "m_dPhase", sData.m_dPhase);
|
||||
setDoubleAttribute(linepattern, "m_dPhase", sData.m_dPhase);
|
||||
linepattern->SetAttribute("m_bRealLength", (int) sData.m_bRealLength);
|
||||
|
||||
setting->LinkEndChild(linepattern);
|
||||
@@ -175,9 +244,9 @@ int traverseLinePattern(const A3DGraphLinePatternData& sData, _TiXmlElement* set
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseStyle(const A3DGraphStyleData& sStyleData, _TiXmlElement* setting)
|
||||
A3DStatus traverseStyle(const A3DGraphStyleData& sStyleData, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
_TiXmlElement* style = new _TiXmlElement("A3DGraphStyleData");
|
||||
|
||||
@@ -189,7 +258,7 @@ int traverseStyle(const A3DGraphStyleData& sStyleData, _TiXmlElement* setting)
|
||||
if(sStyleData.m_bIsTransparencyDefined)
|
||||
style->SetAttribute("m_ucTransparency", (int) sStyleData.m_ucTransparency);
|
||||
|
||||
_SetDoubleAttribute(style, "m_dWidth", sStyleData.m_dWidth);
|
||||
setDoubleAttribute(style, "m_dWidth", sStyleData.m_dWidth);
|
||||
|
||||
style->SetAttribute("m_bSpecialCulling", (int)sStyleData.m_bSpecialCulling);
|
||||
style->SetAttribute("m_bFrontCulling", (int)sStyleData.m_bFrontCulling);
|
||||
@@ -202,9 +271,9 @@ int traverseStyle(const A3DGraphStyleData& sStyleData, _TiXmlElement* setting)
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
int traverseGlobal(const A3DGlobal* pGlobal, _TiXmlElement* setting)
|
||||
A3DStatus traverseGlobal(const A3DGlobal* pGlobal, _TiXmlElement* setting)
|
||||
{
|
||||
A3DInt32 iRet = A3D_SUCCESS;
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
A3DGlobalData sData;
|
||||
A3D_INITIALIZE_DATA(A3DGlobalData, sData);
|
||||
|
||||
@@ -213,7 +282,7 @@ int traverseGlobal(const A3DGlobal* pGlobal, _TiXmlElement* setting)
|
||||
iRet = A3DGlobalGet(pGlobal, &sData);
|
||||
if(iRet == A3D_SUCCESS)
|
||||
{
|
||||
int traverseBase(const A3DEntity* pEntity, _TiXmlElement* setting);
|
||||
A3DStatus traverseBase(const A3DEntity* pEntity, _TiXmlElement* setting);
|
||||
A3DUns32 ui, uiSize = sData.m_uiColorsSize;
|
||||
if(uiSize)
|
||||
{
|
||||
@@ -399,7 +468,7 @@ int traverseGlobal(const A3DGlobal* pGlobal, _TiXmlElement* setting)
|
||||
}
|
||||
else
|
||||
{
|
||||
global->SetAttribute("error", iRet);
|
||||
global->SetAttribute("error", A3DMiscGetErrorMsg(iRet));
|
||||
}
|
||||
|
||||
setting->LinkEndChild(global);
|
||||
|
||||
Reference in New Issue
Block a user