This commit is contained in:
ninja
2025-12-15 23:22:33 +08:00
parent 019570564b
commit 8782765fbc
809 changed files with 118753 additions and 18289 deletions

View File

@@ -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);