From 3154cec79cb3c53d3bd491bad2243a8d9646cc36 Mon Sep 17 00:00:00 2001 From: Hehongyuanlove <51571751+Hehongyuanlove@users.noreply.github.com> Date: Fri, 17 Apr 2020 12:31:07 +0800 Subject: [PATCH 1/8] Rgba2Hex add --- include/assimp/StringUtils.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/include/assimp/StringUtils.h b/include/assimp/StringUtils.h index 894eada60..a22876896 100644 --- a/include/assimp/StringUtils.h +++ b/include/assimp/StringUtils.h @@ -145,4 +145,22 @@ std::string DecimalToHexa( T toConvert ) { return result; } +/// @fn Rgba2Hex +/// @brief translate RGBA to String +/// @param r aiColor.r +/// @param g aiColor.g +/// @param b aiColor.b +/// @param a aiColor.a +/// @param with_head # +/// @return The hexadecimal string, is empty in case of an error. +AI_FORCE_INLINE +std::string Rgba2Hex(int r, int g, int b, int a, bool with_head) +{ + std::stringstream ss; + if (with_head) + ss << "#"; + ss << std::hex << (r << 24 | g << 16 | b << 8 | a); + return ss.str(); +} + #endif // INCLUDED_AI_STRINGUTILS_H From 3bbc8e76bda5fa144da63db80774a0f2a7681db3 Mon Sep 17 00:00:00 2001 From: Hehongyuanlove <51571751+Hehongyuanlove@users.noreply.github.com> Date: Fri, 17 Apr 2020 12:34:05 +0800 Subject: [PATCH 2/8] Rgba2Hex to repair rgba(1,1,1,1) --- code/3MF/D3MFExporter.cpp | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/code/3MF/D3MFExporter.cpp b/code/3MF/D3MFExporter.cpp index 092b947e9..b9172f63e 100644 --- a/code/3MF/D3MFExporter.cpp +++ b/code/3MF/D3MFExporter.cpp @@ -254,16 +254,28 @@ void D3MFExporter::writeBaseMaterials() { if ( mat->Get( AI_MATKEY_COLOR_DIFFUSE, color ) == aiReturn_SUCCESS ) { hexDiffuseColor.clear(); tmp.clear(); - hexDiffuseColor = "#"; - - tmp = DecimalToHexa( (ai_real) color.r ); - hexDiffuseColor += tmp; - tmp = DecimalToHexa((ai_real)color.g); - hexDiffuseColor += tmp; - tmp = DecimalToHexa((ai_real)color.b); - hexDiffuseColor += tmp; - tmp = DecimalToHexa((ai_real)color.a); - hexDiffuseColor += tmp; + // rgbs % + if(color.r <= 1 && color.g <= 1 && color.b <= 1 && color.a <= 1){ + + hexDiffuseColor = Rgba2Hex( + ((ai_real)color.r)*255, + ((ai_real)color.g)*255, + ((ai_real)color.b)*255, + ((ai_real)color.a)*255, + true + ); + + }else{ + hexDiffuseColor = "#"; + tmp = DecimalToHexa( (ai_real) color.r ); + hexDiffuseColor += tmp; + tmp = DecimalToHexa((ai_real)color.g); + hexDiffuseColor += tmp; + tmp = DecimalToHexa((ai_real)color.b); + hexDiffuseColor += tmp; + tmp = DecimalToHexa((ai_real)color.a); + hexDiffuseColor += tmp; + } } else { hexDiffuseColor = "#FFFFFFFF"; } From e9a72a505390ae76cc8506e575e6b8ffad295be1 Mon Sep 17 00:00:00 2001 From: Hehongyuanlove <51571751+Hehongyuanlove@users.noreply.github.com> Date: Fri, 17 Apr 2020 12:38:07 +0800 Subject: [PATCH 3/8] repair formate 3MF --- code/3MF/D3MFExporter.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/3MF/D3MFExporter.cpp b/code/3MF/D3MFExporter.cpp index b9172f63e..725992207 100644 --- a/code/3MF/D3MFExporter.cpp +++ b/code/3MF/D3MFExporter.cpp @@ -181,7 +181,7 @@ bool D3MFExporter::export3DModel() { writeHeader(); mModelOutput << "<" << XmlTag::model << " " << XmlTag::model_unit << "=\"millimeter\"" - << "xmlns=\"http://schemas.microsoft.com/3dmanufacturing/core/2015/02\">" + << " xmlns=\"http://schemas.microsoft.com/3dmanufacturing/core/2015/02\">" << std::endl; mModelOutput << "<" << XmlTag::resources << ">"; mModelOutput << std::endl; @@ -212,7 +212,7 @@ bool D3MFExporter::export3DModel() { } void D3MFExporter::writeHeader() { - mModelOutput << ""; + mModelOutput << ""; mModelOutput << std::endl; } @@ -296,7 +296,7 @@ void D3MFExporter::writeObjects() { if ( nullptr == currentNode ) { continue; } - mModelOutput << "<" << XmlTag::object << " id=\"" << currentNode->mName.C_Str() << "\" type=\"model\">"; + mModelOutput << "<" << XmlTag::object << " id=\"" << i + 2 << "\" type=\"model\">"; mModelOutput << std::endl; for ( unsigned int j = 0; j < currentNode->mNumMeshes; ++j ) { aiMesh *currentMesh = mScene->mMeshes[ currentNode->mMeshes[ j ] ]; @@ -360,7 +360,7 @@ void D3MFExporter::writeBuild() { mModelOutput << "<" << XmlTag::build << ">" << std::endl; for ( size_t i = 0; i < mBuildItems.size(); ++i ) { - mModelOutput << "<" << XmlTag::item << " objectid=\"" << i + 1 << "\"/>"; + mModelOutput << "<" << XmlTag::item << " objectid=\"" << i + 2 << "\"/>"; mModelOutput << std::endl; } mModelOutput << ""; From cc3760aff1bad61183bf5412ab1f4fe0d9b8e8e2 Mon Sep 17 00:00:00 2001 From: Hehongyuanlove <51571751+Hehongyuanlove@users.noreply.github.com> Date: Fri, 17 Apr 2020 12:50:49 +0800 Subject: [PATCH 4/8] Update StringUtils.h --- include/assimp/StringUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/assimp/StringUtils.h b/include/assimp/StringUtils.h index a22876896..ccded24bf 100644 --- a/include/assimp/StringUtils.h +++ b/include/assimp/StringUtils.h @@ -154,7 +154,7 @@ std::string DecimalToHexa( T toConvert ) { /// @param with_head # /// @return The hexadecimal string, is empty in case of an error. AI_FORCE_INLINE -std::string Rgba2Hex(int r, int g, int b, int a, bool with_head) +std::string Rgba2Hex(floatr, float g, float b, float a, bool with_head) { std::stringstream ss; if (with_head) From 59e32a5ad97a24a0bf79140d260c8e1e63599194 Mon Sep 17 00:00:00 2001 From: Hehongyuanlove <51571751+Hehongyuanlove@users.noreply.github.com> Date: Fri, 17 Apr 2020 12:51:18 +0800 Subject: [PATCH 5/8] Update StringUtils.h --- include/assimp/StringUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/assimp/StringUtils.h b/include/assimp/StringUtils.h index ccded24bf..b057b1a9d 100644 --- a/include/assimp/StringUtils.h +++ b/include/assimp/StringUtils.h @@ -154,7 +154,7 @@ std::string DecimalToHexa( T toConvert ) { /// @param with_head # /// @return The hexadecimal string, is empty in case of an error. AI_FORCE_INLINE -std::string Rgba2Hex(floatr, float g, float b, float a, bool with_head) +std::string Rgba2Hex(float r, float g, float b, float a, bool with_head) { std::stringstream ss; if (with_head) From f80bdc5b713f3b9546df10aaedd9025020c75c7b Mon Sep 17 00:00:00 2001 From: Hehongyuanlove <51571751+Hehongyuanlove@users.noreply.github.com> Date: Fri, 17 Apr 2020 12:57:33 +0800 Subject: [PATCH 6/8] Update StringUtils.h --- include/assimp/StringUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/assimp/StringUtils.h b/include/assimp/StringUtils.h index b057b1a9d..a22876896 100644 --- a/include/assimp/StringUtils.h +++ b/include/assimp/StringUtils.h @@ -154,7 +154,7 @@ std::string DecimalToHexa( T toConvert ) { /// @param with_head # /// @return The hexadecimal string, is empty in case of an error. AI_FORCE_INLINE -std::string Rgba2Hex(float r, float g, float b, float a, bool with_head) +std::string Rgba2Hex(int r, int g, int b, int a, bool with_head) { std::stringstream ss; if (with_head) From 9c52fd763323586ecff1713e6b341b996bbe8b5d Mon Sep 17 00:00:00 2001 From: Hehongyuanlove <51571751+Hehongyuanlove@users.noreply.github.com> Date: Fri, 17 Apr 2020 12:58:41 +0800 Subject: [PATCH 7/8] Update D3MFExporter.cpp --- code/3MF/D3MFExporter.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/3MF/D3MFExporter.cpp b/code/3MF/D3MFExporter.cpp index 725992207..83036b236 100644 --- a/code/3MF/D3MFExporter.cpp +++ b/code/3MF/D3MFExporter.cpp @@ -258,10 +258,10 @@ void D3MFExporter::writeBaseMaterials() { if(color.r <= 1 && color.g <= 1 && color.b <= 1 && color.a <= 1){ hexDiffuseColor = Rgba2Hex( - ((ai_real)color.r)*255, - ((ai_real)color.g)*255, - ((ai_real)color.b)*255, - ((ai_real)color.a)*255, + (int)((ai_real)color.r)*255, + (int)((ai_real)color.g)*255, + (int)((ai_real)color.b)*255, + (int)((ai_real)color.a)*255, true ); From e299f71cfe6620373c52fba27b1a10d76d3481b2 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 17 Apr 2020 16:16:28 +0200 Subject: [PATCH 8/8] Adapt the formatting --- include/assimp/StringUtils.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/include/assimp/StringUtils.h b/include/assimp/StringUtils.h index a22876896..7e1cb4ce0 100644 --- a/include/assimp/StringUtils.h +++ b/include/assimp/StringUtils.h @@ -145,7 +145,6 @@ std::string DecimalToHexa( T toConvert ) { return result; } -/// @fn Rgba2Hex /// @brief translate RGBA to String /// @param r aiColor.r /// @param g aiColor.g @@ -153,14 +152,14 @@ std::string DecimalToHexa( T toConvert ) { /// @param a aiColor.a /// @param with_head # /// @return The hexadecimal string, is empty in case of an error. -AI_FORCE_INLINE -std::string Rgba2Hex(int r, int g, int b, int a, bool with_head) -{ +AI_FORCE_INLINE std::string Rgba2Hex(int r, int g, int b, int a, bool with_head) { std::stringstream ss; - if (with_head) + if (with_head) { ss << "#"; + } ss << std::hex << (r << 24 | g << 16 | b << 8 | a); - return ss.str(); + + return ss.str(); } #endif // INCLUDED_AI_STRINGUTILS_H