Fixed missing color define in some POV exports.

This commit is contained in:
Leonardo Zide
2025-08-07 18:16:59 -07:00
parent e450fb035b
commit 6c6ec18c66
2 changed files with 16 additions and 47 deletions
+16 -31
View File
@@ -2288,22 +2288,20 @@ std::pair<bool, QString> Project::ExportPOVRay(const QString& FileName)
}
}
for (const lcModelPartsEntry& ModelPart : ModelParts)
auto AddColorDefinition=[UseLGEO, &ColorTable, &LgeoColorTable, &MaterialColors, &Line, &POVFile](int ColorIndex)
{
size_t ColorIdx = ModelPart.ColorIndex;
if (!ColorTable[ColorIdx][0])
if (!ColorTable[ColorIndex][0])
{
lcColor* Color = &gColorList[ColorIdx];
lcColor* Color = &gColorList[ColorIndex];
if (LgeoColorTable[ColorIdx].empty())
if (LgeoColorTable[ColorIndex].empty())
{
sprintf(ColorTable[ColorIdx].data(), "lc_%s", Color->SafeName);
sprintf(ColorTable[ColorIndex].data(), "lc_%s", Color->SafeName);
if (lcIsColorTranslucent(ColorIdx))
if (lcIsColorTranslucent(ColorIndex))
{
if (!UseLGEO && !MaterialColors.contains(ColorTable[ColorIdx].data()))
MaterialColors.append(ColorTable[ColorIdx].data());
if (!UseLGEO && !MaterialColors.contains(ColorTable[ColorIndex].data()))
MaterialColors.append(ColorTable[ColorIndex].data());
sprintf(Line, "#ifndef (lc_%s)\n#declare lc_%s = TranslucentColor(%g, %g, %g, TransFilter)\n#end\n\n",
Color->SafeName, Color->SafeName, Color->Value[0], Color->Value[1], Color->Value[2]);
@@ -2312,9 +2310,9 @@ std::pair<bool, QString> Project::ExportPOVRay(const QString& FileName)
{
const char* MacroName;
if (lcIsColorChrome(ColorIdx))
if (lcIsColorChrome(ColorIndex))
MacroName = "Chrome";
else if (lcIsColorRubber(ColorIdx))
else if (lcIsColorRubber(ColorIndex))
MacroName = "Rubber";
else
MacroName = "Opaque";
@@ -2324,33 +2322,20 @@ std::pair<bool, QString> Project::ExportPOVRay(const QString& FileName)
}
else
{
sprintf(ColorTable[ColorIdx].data(), "LDXColor%i", Color->Code);
sprintf(ColorTable[ColorIndex].data(), "LDXColor%i", Color->Code);
sprintf(Line,"#ifndef (LDXColor%i) // %s\n#declare LDXColor%i = material { texture { %s } }\n#end\n\n",
Color->Code, Color->Name, Color->Code, LgeoColorTable[ColorIdx].c_str());
Color->Code, Color->Name, Color->Code, LgeoColorTable[ColorIndex].c_str());
}
POVFile.WriteLine(Line);
}
}
};
if (!ColorTable[lcGetColorIndex(TopModelColorCode)][0])
{
size_t ColorIdx = lcGetColorIndex(TopModelColorCode);
for (const lcModelPartsEntry& ModelPart : ModelParts)
AddColorDefinition(ModelPart.ColorIndex);
lcColor* Color = &gColorList[ColorIdx];
sprintf(ColorTable[ColorIdx].data(), "LDXColor%i", Color->Code);
if (LgeoColorTable[ColorIdx].empty())
sprintf(Line, "#ifndef (lc_%s)\n#declare lc_%s = OpaqueColor(%g, %g, %g)\n#end\n\n",
Color->SafeName, Color->SafeName, Color->Value[0], Color->Value[1], Color->Value[2]);
else
sprintf(Line,"#ifndef (LDXColor%i) // %s\n#declare LDXColor%i = material { texture { %s } }\n#end\n\n",
Color->Code, Color->Name, Color->Code, LgeoColorTable[ColorIdx].c_str());
POVFile.WriteLine(Line);
}
AddColorDefinition(lcGetColorIndex(TopModelColorCode));
std::set<lcMesh*> AddedMeshes;
-16
View File
@@ -5,7 +5,6 @@
#include "lc_application.h"
#include "lc_profile.h"
#include "lc_blenderpreferences.h"
#include "lc_mainwindow.h"
#include "lc_model.h"
#include "lc_qutils.h"
@@ -180,11 +179,6 @@ bool lcRenderDialog::PromptCancel()
if (QMessageBox::question(this, tr("Cancel Render"), tr("Are you sure you want to cancel the current render?"), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
return false;
if (mDialogMode == lcRenderDialogMode::RenderPOVRay)
gMainWindow->mActions[LC_FILE_RENDER_POVRAY]->setEnabled(true);
else if (mDialogMode == lcRenderDialogMode::RenderBlender)
gMainWindow->mActions[LC_FILE_RENDER_BLENDER]->setEnabled(true);
if (mProcess)
{
#ifdef Q_OS_WIN
@@ -233,8 +227,6 @@ void lcRenderDialog::reject()
void lcRenderDialog::RenderPOVRay()
{
gMainWindow->mActions[LC_FILE_RENDER_POVRAY]->setEnabled(false);
QString FileName = GetPOVFileName();
ui->preview->SetImage(QImage());
@@ -363,7 +355,6 @@ void lcRenderDialog::RenderPOVRay()
else
{
delete Process;
gMainWindow->mActions[LC_FILE_RENDER_POVRAY]->setEnabled(true);
QMessageBox::information(this, tr("Render Error"), tr("Error starting POV-Ray."));
CloseProcess();
}
@@ -426,7 +417,6 @@ void lcRenderDialog::RenderBlender()
else
{
Arguments << QLatin1String("--background");
gMainWindow->mActions[LC_FILE_RENDER_BLENDER]->setEnabled(false);
}
PythonExpression.append(", cli_render=True)\"");
@@ -466,7 +456,6 @@ void lcRenderDialog::RenderBlender()
{
QMessageBox::information(this, tr("Render Error"), tr("Cannot write Blender render script file '%1':\n%2.").arg(ScriptFile.fileName(), ScriptFile.errorString()));
gMainWindow->mActions[LC_FILE_RENDER_BLENDER]->setEnabled(true);
return;
}
@@ -559,7 +548,6 @@ void lcRenderDialog::RenderBlender()
}
else
{
gMainWindow->mActions[LC_FILE_RENDER_BLENDER]->setEnabled(true);
Message = tr("Error starting Blender render process");
QMessageBox::information(this, tr("Render Error"), Message);
CloseProcess();
@@ -771,8 +759,6 @@ void lcRenderDialog::ShowResult()
if (mDialogMode == lcRenderDialogMode::RenderPOVRay)
{
gMainWindow->mActions[LC_FILE_RENDER_POVRAY]->setEnabled(true);
ui->preview->SetImage(mImage.scaled(mPreviewWidth, mPreviewHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation));
if (!FileName.isEmpty())
@@ -788,8 +774,6 @@ void lcRenderDialog::ShowResult()
}
else if (mDialogMode == lcRenderDialogMode::RenderBlender)
{
gMainWindow->mActions[LC_FILE_RENDER_BLENDER]->setEnabled(true);
Success = QFileInfo(FileName).exists();
if (Success)
{