From b9f9fb2c9f3bc80d9d98c32c08e97c9af8c5afbe Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 19 Dec 2024 00:22:41 +0100 Subject: [PATCH 01/12] Blender addon - extract and install manually added addon archive file --- common/lc_blenderpreferences.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 91aa594b..8c37d4ca 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -1317,6 +1317,8 @@ bool lcBlenderPreferences::ExtractBlenderAddon(const QString& BlenderDir) ShowMessage(Message, tr("Extract addon")); } } + else if (AddonAction == ADDON_NO_ACTION) + return true; return Extracted; } @@ -1444,7 +1446,10 @@ int lcBlenderPreferences::GetBlenderAddon(const QString& BlenderDir) { if (GetBlenderAddonVersionMatch()) { - AddonAction = ADDON_NO_ACTION; + if (ExtractedAddon) + AddonAction = ADDON_NO_ACTION; + else + AddonAction = ADDON_EXTRACT; } else if (gMainWindow) { From 4764f6a868f245b38917d1f1a42446b3aa6a603a Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 2 Jan 2025 18:09:19 +0100 Subject: [PATCH 02/12] Blender addon - save configuration on apply --- common/lc_blenderpreferences.cpp | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 8c37d4ca..95021e00 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -348,8 +348,11 @@ void lcBlenderPreferencesDialog::ShowPathsGroup() void lcBlenderPreferencesDialog::EnableButton(bool Change) { - mApplyButton->setEnabled(Change); - mResetButton->setEnabled(Change); + if (Change) + { + mApplyButton->setEnabled(true); + mResetButton->setEnabled(true); + } mPathsButton->setText(tr("Hide Paths")); mPathsButton->setToolTip(tr("Hide addon path preferences dialog")); } @@ -362,13 +365,9 @@ void lcBlenderPreferencesDialog::ResetSettings() void lcBlenderPreferencesDialog::accept() { - if (mPreferences->SettingsModified()) - { - mApplyButton->setEnabled(false); - mPreferences->SaveSettings(); - QDialog::accept(); - } else - QDialog::reject(); + mApplyButton->setEnabled(false); + mPreferences->Apply(QDialog::Accepted); + QDialog::accept(); } void lcBlenderPreferencesDialog::reject() @@ -517,7 +516,7 @@ lcBlenderPreferences::lcBlenderPreferences(int Width, int Height, double Scale, if (mAddonVersion.isEmpty()) { mModulesBox->setEnabled(false); - mAddonUpdateButton->setEnabled(false); + mAddonUpdateButton->setEnabled(true); mImportActBox->setChecked(true); // default addon module } else @@ -1207,9 +1206,7 @@ void lcBlenderPreferences::ConfigureBlenderAddon(bool TestBlender, bool AddonUpd StatusUpdate(true, false, tr("Installing...")); - QDir ConfigDir(BlenderConfigDir); - if(!QDir(ConfigDir).exists()) - ConfigDir.mkpath("."); + emit SettingChangedSig(true); } SaveSettings(); From e30a9f73bc98b93e15d5cd7113ed47f753b089a0 Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 2 Jan 2025 08:11:20 +0100 Subject: [PATCH 03/12] Blender addon - remove config file argument from console command --- qt/lc_renderdialog.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/qt/lc_renderdialog.cpp b/qt/lc_renderdialog.cpp index 069ca8f7..4b45dfad 100644 --- a/qt/lc_renderdialog.cpp +++ b/qt/lc_renderdialog.cpp @@ -447,12 +447,11 @@ void lcRenderDialog::on_RenderButton_clicked() "'EXEC_DEFAULT', " "resolution_width=%1, resolution_height=%2, " "render_percentage=%3, model_file=r'%4', " - "image_file=r'%5', preferences_file=r'%6'") + "image_file=r'%5'") .arg(mWidth).arg(mHeight) .arg(mScale * 100) .arg(QDir::toNativeSeparators(ModelFileName).replace("\\","\\\\")) - .arg(QDir::toNativeSeparators(ui->OutputEdit->text()).replace("\\","\\\\")) - .arg(QDir::toNativeSeparators(BlenderLDrawConfigFile).replace("\\","\\\\")); + .arg(QDir::toNativeSeparators(ui->OutputEdit->text()).replace("\\","\\\\")); if (BlenderImportModule == QLatin1String("MM")) PythonExpression.append(", use_ldraw_import_mm=True"); if (SearchCustomDir) From 5b9dcd2595f42c5c84827cd0e5777c8fa52a3526 Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 2 Jan 2025 08:15:55 +0100 Subject: [PATCH 04/12] Blender addon - set MM import remove doubles default to true --- common/lc_blenderpreferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 95021e00..6579bffb 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -214,7 +214,7 @@ lcBlenderPreferences::BlenderSettings lcBlenderPreferences::mDefaultSettingsMM /* 25 LBL_PREFER_UNOFFICIAL */ {"preferunofficial", "0", QObject::tr("Prefer Unofficial Parts"), QObject::tr("Search for unofficial parts first")}, /* 26 LBL_PROFILE */ {"profile", "0", QObject::tr("Profile"), QObject::tr("Profile import performance")}, /* 27 LBL_RECALCULATE_NORMALS */ {"recalculatenormals", "0", QObject::tr("Recalculate Normals"), QObject::tr("Recalculate normals. Not recommended if BFC processing is active")}, - /* 28 LBL_REMOVE_DOUBLES_MM */ {"removedoubles", "0", QObject::tr("No Duplicate Vertices"), QObject::tr("Merge vertices that are within a certain distance.")}, + /* 28 LBL_REMOVE_DOUBLES_MM */ {"removedoubles", "1", QObject::tr("No Duplicate Vertices"), QObject::tr("Merge vertices that are within a certain distance.")}, /* 29 LBL_RENDER_WINDOW_MM */ {"renderwindow", "1", QObject::tr("Display Render Window"), QObject::tr("Specify whether to display the render window during Blender user interface image file render")}, /* 30 LBL_SEARCH_ADDL_PATHS_MM */ {"searchadditionalpaths", "0", QObject::tr("Search Additional Paths"), QObject::tr("Specify whether to search additional LDraw paths")}, /* 31 LBL_SETEND_FRAME */ {"setendframe", "1", QObject::tr("Set Step End Frame"), QObject::tr("Set the end frame to the last step")}, From 3e60ee3707a0e37857f22f38bb132050e8bc495c Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 2 Jan 2025 08:21:23 +0100 Subject: [PATCH 05/12] Blender addon - set MM import use colour scheme default to alternate --- common/lc_blenderpreferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 6579bffb..3ca2cbf6 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -241,7 +241,7 @@ lcBlenderPreferences::BlenderSettings lcBlenderPreferences::mDefaultSettingsMM /* 51/11 LBL_STARTING_STEP_FRAME */ {"startingstepframe", "1", QObject::tr("Starting Step Frame"), QObject::tr("Frame to add the first STEP meta command")}, /* 52/00 LBL_CHOSEN_LOGO */ {"chosenlogo", "logo3", QObject::tr("Chosen Logo"), QObject::tr("Which logo to display. logo and logo2 aren't used and are only included for completeness")}, - /* 53/01 LBL_COLOUR_SCHEME_MM */ {"usecolourscheme", "lgeo", QObject::tr("Colour Scheme"), QObject::tr("Colour scheme options - Realistic (lgeo), Original (LDConfig), Alternate (LDCfgalt), Custom (User Defined)")}, + /* 53/01 LBL_COLOUR_SCHEME_MM */ {"usecolourscheme", "alt", QObject::tr("Colour Scheme"), QObject::tr("Colour scheme options - Realistic (lgeo), Original (LDConfig), Alternate (LDCfgalt), Custom (User Defined)")}, /* 54/02 LBL_RESOLUTION_MM */ {"resolution", "Standard", QObject::tr("Resolution"), QObject::tr("Resolution of part primitives, ie. how much geometry they have")}, /* 55/03 LBL_SCALE_STRATEGY */ {"scalestrategy", "mesh", QObject::tr("How To Scale Parts"), QObject::tr("Apply import scaling to mesh - Recommended for rendering, Apply import scaling to object - Recommended for part editing")}, /* 56/04 LBL_SMOOTH_TYPE */ {"smoothtype", "edge_split", QObject::tr("Smooth Type"), QObject::tr("Use either autosmooth or an edge split modifier to smooth part faces")} From 1775dc6bdf9822dfab92f5fcfa7ffbd47064eb7e Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 2 Jan 2025 09:32:02 +0100 Subject: [PATCH 06/12] Blender addon - update progress to detect Blender version 3 or greater --- qt/lc_renderdialog.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/qt/lc_renderdialog.cpp b/qt/lc_renderdialog.cpp index 4b45dfad..074e28ea 100644 --- a/qt/lc_renderdialog.cpp +++ b/qt/lc_renderdialog.cpp @@ -425,7 +425,7 @@ void lcRenderDialog::on_RenderButton_clicked() QApplication::processEvents(); mBlendProgValue = 0; - mBlendProgMax = 0; + mBlendProgMax = 0; const QStringList DataPathList = QStandardPaths::standardLocations(QStandardPaths::AppLocalDataLocation); mDataPath = DataPathList.first(); @@ -582,6 +582,8 @@ void lcRenderDialog::on_RenderButton_clicked() } else { + ui->RenderProgress->setRange(mBlendProgValue, mBlendProgMax); + ui->RenderProgress->setValue(1); #ifdef Q_OS_WIN mProcess->start(ShellProgram, QStringList() << "/C" << Script.fileName()); #else @@ -622,9 +624,10 @@ void lcRenderDialog::ReadStdOut() QRegExp RxRenderProgress; RxRenderProgress.setCaseSensitivity(Qt::CaseInsensitive); #endif - bool BlenderVersion3 = lcGetProfileString(LC_PROFILE_BLENDER_VERSION).startsWith("v3"); + int BlenderVersionNum = QString(lcGetProfileString(LC_PROFILE_BLENDER_VERSION).at(1)).toInt(); + bool BlenderVersion3OrGreater = BlenderVersionNum > 2; - if (BlenderVersion3) + if (BlenderVersion3OrGreater) RxRenderProgress.setPattern("Sample (\\d+)\\/(\\d+)"); else RxRenderProgress.setPattern("(\\d+)\\/(\\d+) Tiles"); From 4861c45eb95e042c0dcf90a689e87884ace5b45c Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 2 Jan 2025 18:11:49 +0100 Subject: [PATCH 07/12] Blender addon - move preferences to renderldraw module --- common/lc_blenderpreferences.cpp | 26 ++++++++++++++------------ common/lc_blenderpreferences.h | 2 +- qt/lc_renderdialog.cpp | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 3ca2cbf6..6088fc00 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -42,7 +42,7 @@ const QLatin1String LineEnding("\r\n"); #define LC_BLENDER_ADDON_FILE "LDrawBlenderRenderAddons.zip" #define LC_BLENDER_ADDON_INSTALL_FILE "install_blender_ldraw_addons.py" #define LC_BLENDER_ADDON_CONFIG_FILE "LDrawRendererPreferences.ini" -#define LC_BLENDER_ADDON_PARAMS_FILE "BlenderLDrawParameters.lst" +#define LC_BLENDER_ADDON_PARAMS_FILE "LDrawParameters.lst" #define LC_BLENDER_ADDON_REPO_STR "https://github.com/trevorsandy" #define LC_BLENDER_ADDON_REPO_API_STR "https://api.github.com/repos/trevorsandy" @@ -1324,7 +1324,7 @@ int lcBlenderPreferences::GetBlenderAddon(const QString& BlenderDir) { const QString BlenderAddonDir = QDir::toNativeSeparators(QString("%1/addons").arg(BlenderDir)); const QString BlenderAddonFile = QDir::toNativeSeparators(QString("%1/%2").arg(BlenderDir).arg(LC_BLENDER_ADDON_FILE)); - const QString AddonVersionFile = QDir::toNativeSeparators(QString("%1/%2/__version__.py").arg(BlenderAddonDir).arg(LC_BLENDER_ADDON_FOLDER_STR)); + const QString AddonVersionFile = QDir::toNativeSeparators(QString("%1/%2/__version__.py").arg(BlenderAddonDir).arg(LC_BLENDER_ADDON_RENDER_FOLDER)); bool ExtractedAddon = QFileInfo(AddonVersionFile).isReadable(); bool BlenderAddonValidated = ExtractedAddon || QFileInfo(BlenderAddonFile).isReadable(); AddonEnc AddonAction = ADDON_DOWNLOAD; @@ -1380,7 +1380,7 @@ int lcBlenderPreferences::GetBlenderAddon(const QString& BlenderDir) QByteArray Ba; if (!ExtractedAddon) { - const char* VersionFile = "addons/" LC_BLENDER_ADDON_FOLDER_STR "/__version__.py"; + const char* VersionFile = "addons/" LC_BLENDER_ADDON_RENDER_FOLDER "/__version__.py"; lcZipFile ZipFile; @@ -2461,7 +2461,7 @@ void lcBlenderPreferences::LoadSettings() lcSetProfileString(LC_PROFILE_BLENDER_IMPORT_MODULE, QString()); } - if (!QDir(QString("%1/Blender/addons/%2").arg(gAddonPreferences->mDataDir).arg(LC_BLENDER_ADDON_FOLDER_STR)).isReadable()) + if (!QDir(QString("%1/Blender/addons/%2").arg(gAddonPreferences->mDataDir).arg(LC_BLENDER_ADDON_RENDER_FOLDER)).isReadable()) lcSetProfileString(LC_PROFILE_BLENDER_IMPORT_MODULE, QString()); if (!NumPaths()) @@ -2521,9 +2521,7 @@ void lcBlenderPreferences::LoadSettings() QFileInfo BlenderConfigFileInfo(lcGetProfileString(LC_PROFILE_BLENDER_LDRAW_CONFIG_PATH)); - bool ConfigFileExists = BlenderConfigFileInfo.exists(); - - if (ConfigFileExists) + if (BlenderConfigFileInfo.exists()) { QSettings Settings(BlenderConfigFileInfo.absoluteFilePath(), QSettings::IniFormat); @@ -2623,8 +2621,6 @@ void lcBlenderPreferences::SaveSettings() if (!NumSettings() || !NumSettingsMM()) LoadSettings(); - const QString BlenderConfigDir = QString("%1/Blender/setup/addon_setup/config").arg(gAddonPreferences->mDataDir); - QString Key, Value = mBlenderPaths[PATH_BLENDER].value; if (Value.isEmpty()) Value = gAddonPreferences->mPathLineEditList[PATH_BLENDER]->text(); @@ -2643,8 +2639,14 @@ void lcBlenderPreferences::SaveSettings() lcSetProfileString(LC_PROFILE_BLENDER_VERSION, Value); - Value = lcGetProfileString(LC_PROFILE_BLENDER_LDRAW_CONFIG_PATH).isEmpty() ? QString("%1/%2").arg(BlenderConfigDir).arg(LC_BLENDER_ADDON_CONFIG_FILE) : lcGetProfileString(LC_PROFILE_BLENDER_LDRAW_CONFIG_PATH); - lcSetProfileString(LC_PROFILE_BLENDER_LDRAW_CONFIG_PATH, QDir::toNativeSeparators(Value)); + const QString BlenderConfigDir = QString("%1/Blender/addons/%2/config").arg(gAddonPreferences->mDataDir).arg(LC_BLENDER_ADDON_RENDER_FOLDER); + + Value = lcGetProfileString(LC_PROFILE_BLENDER_LDRAW_CONFIG_PATH); + if (!Value.contains(LC_BLENDER_ADDON_RENDER_FOLDER)) + { + Value = QString("%1/%2").arg(BlenderConfigDir).arg(LC_BLENDER_ADDON_CONFIG_FILE); + lcSetProfileString(LC_PROFILE_BLENDER_LDRAW_CONFIG_PATH, QDir::toNativeSeparators(Value)); + } QString searchDirectoriesKey; QString parameterFileKey = QLatin1String("ParameterFile"); @@ -3378,7 +3380,7 @@ void lcBlenderPreferences::LoadDefaultParameters(QByteArray& Buffer, int Which) bool lcBlenderPreferences::ExportParameterFile() { - const QString BlenderConfigDir = QString("%1/Blender/setup/addon_setup/config").arg(gAddonPreferences->mDataDir); + const QString BlenderConfigDir = QString("%1/Blender/addons/%2/config").arg(gAddonPreferences->mDataDir).arg(LC_BLENDER_ADDON_RENDER_FOLDER); const QString ParameterFile = QString("%1/%2").arg(BlenderConfigDir).arg(LC_BLENDER_ADDON_PARAMS_FILE); QFile File(ParameterFile); diff --git a/common/lc_blenderpreferences.h b/common/lc_blenderpreferences.h index 8dba2af7..7e073c65 100644 --- a/common/lc_blenderpreferences.h +++ b/common/lc_blenderpreferences.h @@ -8,7 +8,7 @@ #define LC_WINDOWS_SHELL "cmd.exe" #define LC_BLENDER_ADDON_BLEND_FILE "leocad.blend" #define LC_BLENDER_ADDON_IMPORT_MODULE "TN" -#define LC_BLENDER_ADDON_FOLDER_STR "io_scene_render_ldraw" +#define LC_BLENDER_ADDON_RENDER_FOLDER "io_scene_render_ldraw" class QFormLayout; class QGridLayout; diff --git a/qt/lc_renderdialog.cpp b/qt/lc_renderdialog.cpp index 074e28ea..bb49a7ab 100644 --- a/qt/lc_renderdialog.cpp +++ b/qt/lc_renderdialog.cpp @@ -106,7 +106,7 @@ lcRenderDialog::lcRenderDialog(QWidget* Parent, int Command) bool BlenderConfigured = !lcGetProfileString(LC_PROFILE_BLENDER_IMPORT_MODULE).isEmpty(); QStringList const& DataPathList = QStandardPaths::standardLocations(QStandardPaths::AppLocalDataLocation); - if (!QDir(QString("%1/Blender/addons/%2").arg(DataPathList.first()).arg(LC_BLENDER_ADDON_FOLDER_STR)).isReadable()) + if (!QDir(QString("%1/Blender/addons/%2").arg(DataPathList.first()).arg(LC_BLENDER_ADDON_RENDER_FOLDER)).isReadable()) { BlenderConfigured = false; lcSetProfileString(LC_PROFILE_BLENDER_IMPORT_MODULE, QString()); From 837369c48894ff5ba14b964e5140f183d4f0b98a Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Thu, 2 Jan 2025 20:42:23 +0100 Subject: [PATCH 08/12] Blender addon - set config file path before save settings --- common/lc_blenderpreferences.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 6088fc00..526855bd 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -1058,7 +1058,8 @@ void lcBlenderPreferences::ConfigureBlenderAddon(bool TestBlender, bool AddonUpd connect(&mUpdateTimer, SIGNAL(timeout()), this, SLOT(Update())); mUpdateTimer.start(500); - if (!ModuleChange) + QDir ConfigDir(BlenderConfigDir); + if (!ModuleChange || !ConfigDir.exists()) { mProgressBar = new QProgressBar(mContent); mProgressBar->setMaximum(0); @@ -3382,6 +3383,9 @@ bool lcBlenderPreferences::ExportParameterFile() { const QString BlenderConfigDir = QString("%1/Blender/addons/%2/config").arg(gAddonPreferences->mDataDir).arg(LC_BLENDER_ADDON_RENDER_FOLDER); const QString ParameterFile = QString("%1/%2").arg(BlenderConfigDir).arg(LC_BLENDER_ADDON_PARAMS_FILE); + QDir ConfigDir(BlenderConfigDir); + if(!ConfigDir.exists()) + ConfigDir.mkpath("."); QFile File(ParameterFile); if (!OverwriteFile(File.fileName())) From bbd346b296db4ca18e84cb66d8a0cddf7d271c04 Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Sat, 4 Jan 2025 22:51:24 +0100 Subject: [PATCH 09/12] Blender addon - set use zip library if LDraw path does not contain parts --- common/lc_blenderpreferences.cpp | 46 +++++++++++++++++++++++++------- common/lc_blenderpreferences.h | 2 +- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 526855bd..97eac579 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -140,7 +140,7 @@ lcBlenderPreferences::BlenderSettings lcBlenderPreferences::mDefaultSettings [N /*17 LBL_POSITION_CAMERA */ {"positioncamera", "1", QObject::tr("Position Camera"), QObject::tr("Position the camera to show the whole model")}, /*18 LBL_REMOVE_DOUBLES */ {"removedoubles", "1", QObject::tr("No Duplicate Vertices"), QObject::tr("Remove duplicate vertices (recommended)")}, /*19 LBL_RENDER_WINDOW */ {"renderwindow", "1", QObject::tr("Display Render Window"), QObject::tr("Specify whether to display the render window during Blender user interface image file render")}, - /*10 LBL_USE_ARCHIVE_LIBS */ {"usearchivelibrary", "0", QObject::tr("Use Archive Libraries"), QObject::tr("Add any archive (zip) libraries in the LDraw file path to the library search list")}, + /*10 LBL_USE_ARCHIVE_LIBRARY */ {"usearchivelibrary", "0", QObject::tr("Use Archive Libraries"), QObject::tr("Add any archive (zip) libraries in the LDraw file path to the library search list - impacts performance")}, /*21 LBL_SEARCH_ADDL_PATHS */ {"searchadditionalpaths", "0", QObject::tr("Search Additional Paths"),QObject::tr("Specify whether to search additional LDraw paths")}, /*22 LBL_SMOOTH_SHADING */ {"smoothshading", "1", QObject::tr("Smooth Shading"), QObject::tr("Smooth faces and add an edge-split modifier (recommended)")}, /*23 LBL_TRANSPARENT_BACKGROUND*/ {"transparentbackground", "0", QObject::tr("Transparent Background"), QObject::tr("Specify whether to render a background (affects 'Photo-realistic look only)")}, @@ -223,7 +223,7 @@ lcBlenderPreferences::BlenderSettings lcBlenderPreferences::mDefaultSettingsMM /* 34 LBL_TRANSPARENT_BACKGROUND_MM */ {"transparentbackground", "0", QObject::tr("Transparent Background"), QObject::tr("Specify whether to render a background")}, /* 35 LBL_TREAT_SHORTCUT_AS_MODEL */ {"treatshortcutasmodel", "0", QObject::tr("Treat Shortcuts As Models"),QObject::tr("Split shortcut parts into their constituent pieces as if they were models")}, /* 36 LBL_TRIANGULATE */ {"triangulate", "0", QObject::tr("Triangulate Faces"), QObject::tr("Triangulate all faces")}, - /* 37 LBL_USE_ARCHIVE_LIBRARY_MM */ {"usearchivelibrary", "0", QObject::tr("Use Archive Libraries"), QObject::tr("Add any archive (zip) libraries in the LDraw file path to the library search list")}, + /* 37 LBL_USE_ARCHIVE_LIBRARY_MM */ {"usearchivelibrary", "0", QObject::tr("Use Archive Libraries"), QObject::tr("Add any archive (zip) libraries in the LDraw file path to the library search list - impacts performance")}, /* 38 LBL_USE_FREESTYLE_EDGES */ {"usefreestyleedges", "0", QObject::tr("Use Freestyle Edges"), QObject::tr("Render LDraw edges using freestyle")}, /* 39 LBL_VERBOSE_MM */ {"verbose", "1", QObject::tr("Verbose output"), QObject::tr("Output all messages while working, else only show warnings and errors")}, @@ -2465,6 +2465,24 @@ void lcBlenderPreferences::LoadSettings() if (!QDir(QString("%1/Blender/addons/%2").arg(gAddonPreferences->mDataDir).arg(LC_BLENDER_ADDON_RENDER_FOLDER)).isReadable()) lcSetProfileString(LC_PROFILE_BLENDER_IMPORT_MODULE, QString()); + bool UseArchiveLibrary = false; + auto LDrawPartsLibrary = [&] (QString const& LDrawPath) + { + QString LDrawDir = LDrawPath; + + const QFileInfo FileInfo(LDrawDir); + if (FileInfo.isFile()) + LDrawDir = FileInfo.absolutePath(); + + const QString Suffix = FileInfo.suffix().toLower(); + const QFileInfo PartInfo(QString("%1/parts/1.dat").arg(LDrawDir)); + const QFileInfo LDConfigInfo(QString("%1/LDConfig.ldr").arg(LDrawDir)); + + UseArchiveLibrary = (Suffix == "zip" || Suffix == "bin") && !(PartInfo.exists() && LDConfigInfo.exists()); + + return QDir::toNativeSeparators(LDrawDir); + }; + if (!NumPaths()) { const QString DefaultBlendFile = QString("%1/Blender/config/%2").arg(gAddonPreferences->mDataDir).arg(LC_BLENDER_ADDON_BLEND_FILE); @@ -2474,7 +2492,7 @@ void lcBlenderPreferences::LoadSettings() /* 1 PATH_BLENDFILE */ << (QFileInfo(DefaultBlendFile).exists() ? DefaultBlendFile : QString()) /* 2 PATH_ENVIRONMENT */ << QString() /* 3 PATH_LDCONFIG */ << lcGetProfileString(LC_PROFILE_COLOR_CONFIG) - /* 4 PATH_LDRAW */ << QFileInfo(lcGetProfileString(LC_PROFILE_PARTS_LIBRARY)).absolutePath() + /* 4 PATH_LDRAW */ << LDrawPartsLibrary(lcGetProfileString(LC_PROFILE_PARTS_LIBRARY)) /* 5 PATH_LSYNTH */ << QString() /* 6 PATH_STUD_LOGO */ << QString() /* 7 PATH_STUDIO_LDRAW */ << QString() @@ -2503,6 +2521,8 @@ void lcBlenderPreferences::LoadSettings() mDefaultSettings[LblIdx].label, mDefaultSettings[LblIdx].tooltip }; + if (LblIdx == LBL_USE_ARCHIVE_LIBRARY) + mBlenderSettings[LblIdx].value = QString::number(UseArchiveLibrary); } } @@ -2517,6 +2537,8 @@ void lcBlenderPreferences::LoadSettings() mDefaultSettingsMM[LblIdx].label, mDefaultSettingsMM[LblIdx].tooltip }; + if (LblIdx == LBL_USE_ARCHIVE_LIBRARY_MM) + mBlenderSettingsMM[LblIdx].value = QString::number(UseArchiveLibrary); } } @@ -2533,9 +2555,7 @@ void lcBlenderPreferences::LoadSettings() const QString& Key = QString("%1/%2").arg(LC_BLENDER_ADDON, mBlenderPaths[LblIdx].key); const QString& Value = Settings.value(Key, QString()).toString(); if (QFileInfo(Value).exists()) - { mBlenderPaths[LblIdx].value = QDir::toNativeSeparators(Value); - } } for (int LblIdx = 1/*skip blender executable*/; LblIdx < NumPaths(); LblIdx++) @@ -2545,9 +2565,7 @@ void lcBlenderPreferences::LoadSettings() const QString& Key = QString("%1/%2").arg(LC_BLENDER_ADDON_MM, mBlenderPaths[LblIdx].key_mm); const QString& Value = Settings.value(Key, QString()).toString(); if (QFileInfo(Value).exists()) - { mBlenderPaths[LblIdx].value = QDir::toNativeSeparators(Value); - } } for (int LblIdx = 0; LblIdx < NumSettings(); LblIdx++) @@ -2556,7 +2574,10 @@ void lcBlenderPreferences::LoadSettings() const QString& Value = Settings.value(Key, QString()).toString(); if (!Value.isEmpty()) { - mBlenderSettings[LblIdx].value = Value == "True" ? "1" : Value == "False" ? "0" : Value; + if (LblIdx == LBL_USE_ARCHIVE_LIBRARY && Value == "False") + mBlenderSettings[LblIdx].value = QString::number(UseArchiveLibrary); + else + mBlenderSettings[LblIdx].value = Value == "True" ? "1" : Value == "False" ? "0" : Value; } if (LblIdx == LBL_IMAGE_WIDTH || LblIdx == LBL_IMAGE_HEIGHT || LblIdx == LBL_RENDER_PERCENTAGE) { @@ -2571,7 +2592,10 @@ void lcBlenderPreferences::LoadSettings() const QString& Value = Settings.value(Key, QString()).toString(); if (!Value.isEmpty()) { - mBlenderSettingsMM[LblIdx].value = Value == "True" ? "1" : Value == "False" ? "0" : Value; + if (LblIdx == LBL_USE_ARCHIVE_LIBRARY_MM && Value == "False") + mDefaultSettingsMM[LblIdx].value = QString::number(UseArchiveLibrary); + else + mDefaultSettingsMM[LblIdx].value = Value == "True" ? "1" : Value == "False" ? "0" : Value; } if (LblIdx == LBL_RENDER_PERCENTAGE_MM || LblIdx == LBL_RESOLUTION_WIDTH || LblIdx == LBL_RESOLUTION_HEIGHT) { @@ -2587,13 +2611,15 @@ void lcBlenderPreferences::LoadSettings() { QFile File(LogFile); if (File.open(QFile::ReadOnly | QFile::Text)) - { QByteArray Ba = File.readAll(); File.close(); QString Errors; gAddonPreferences->mProgressBar = nullptr; gAddonPreferences->ReadStdOut(QString(Ba), Errors); + + if (!Errors.isEmpty()) + ShowMessage(Errors); } else { diff --git a/common/lc_blenderpreferences.h b/common/lc_blenderpreferences.h index 7e073c65..5a765749 100644 --- a/common/lc_blenderpreferences.h +++ b/common/lc_blenderpreferences.h @@ -158,7 +158,7 @@ private: LBL_POSITION_CAMERA, // 17 QCheckBox LBL_REMOVE_DOUBLES, // 18 QCheckBox LBL_RENDER_WINDOW, // 19 QCheckBox - LBL_USE_ARCHIVE_LIBS, // 20 QChekcBox + LBL_USE_ARCHIVE_LIBRARY, // 20 QChekcBox LBL_SEARCH_ADDL_PATHS, // 21 QCheckBox LBL_SMOOTH_SHADING, // 22 QCheckBox LBL_TRANSPARENT_BACKGROUND, // 23 QCheckBox From 75d3a59fe038a2f96e8e28270e5a3cb6b86fefbe Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Mon, 6 Jan 2025 03:07:13 +0100 Subject: [PATCH 10/12] Blender addon - set additional search paths to use projects path --- common/lc_blenderpreferences.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 97eac579..701fa814 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -2675,7 +2675,7 @@ void lcBlenderPreferences::SaveSettings() lcSetProfileString(LC_PROFILE_BLENDER_LDRAW_CONFIG_PATH, QDir::toNativeSeparators(Value)); } - QString searchDirectoriesKey; + QString searchDirectoriesKey = QLatin1String("additionalSearchPaths"); QString parameterFileKey = QLatin1String("ParameterFile"); QString ParameterFile = QString("%1/%2").arg(BlenderConfigDir).arg(LC_BLENDER_ADDON_PARAMS_FILE); @@ -2685,7 +2685,7 @@ void lcBlenderPreferences::SaveSettings() { if (!QFileInfo(ParameterFile).exists()) ExportParameterFile(); - Value = QDir::toNativeSeparators(QFileInfo(lcGetProfileString(LC_PROFILE_PARTS_LIBRARY)).absolutePath()); + Value = QDir::toNativeSeparators(QFileInfo(lcGetProfileString(LC_PROFILE_PROJECTS_PATH)).absolutePath()); Settings.setValue(searchDirectoriesKey, QVariant(Value)); Settings.endGroup(); }; @@ -2729,8 +2729,6 @@ void lcBlenderPreferences::SaveSettings() Settings.setValue(parameterFileKey, QVariant(QDir::toNativeSeparators(ParameterFile))); - searchDirectoriesKey = QLatin1String("additionalSearchDirectories"); - concludeSettingsGroup(); Settings.beginGroup(LC_BLENDER_ADDON_MM); @@ -2767,8 +2765,6 @@ void lcBlenderPreferences::SaveSettings() Settings.setValue(Key, QVariant(Value)); } - searchDirectoriesKey = QLatin1String("additionalSearchPaths"); - concludeSettingsGroup(); const QString preferredImportModule = gAddonPreferences->mImportActBox->isChecked() ? QString("TN") : gAddonPreferences->mImportMMActBox->isChecked() ? QString("MM") : QString(); From 082c83ae897113d1209c49aa0138cc703d4379dd Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Mon, 6 Jan 2025 03:10:16 +0100 Subject: [PATCH 11/12] Blender addon - set condition for wider official library check scope --- common/lc_blenderpreferences.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 701fa814..5303bf5f 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -2475,7 +2475,7 @@ void lcBlenderPreferences::LoadSettings() LDrawDir = FileInfo.absolutePath(); const QString Suffix = FileInfo.suffix().toLower(); - const QFileInfo PartInfo(QString("%1/parts/1.dat").arg(LDrawDir)); + const QFileInfo PartInfo(QString("%1/p/1-4cyli.dat").arg(LDrawDir)); const QFileInfo LDConfigInfo(QString("%1/LDConfig.ldr").arg(LDrawDir)); UseArchiveLibrary = (Suffix == "zip" || Suffix == "bin") && !(PartInfo.exists() && LDConfigInfo.exists()); @@ -2623,7 +2623,8 @@ void lcBlenderPreferences::LoadSettings() } else { - ShowMessage(tr("Failed to open log file: %1:\n%2") + ShowMessage(tr("Blender config file was not found. " + "Install log check failed:
%1:
%2") .arg(File.fileName()) .arg(File.errorString())); } From 096b85e4c2beb6e8208ed1ba0475da936ddaab80 Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Tue, 7 Jan 2025 09:42:40 +0100 Subject: [PATCH 12/12] Blender addon - change MM bevel_weight default to 0.03 for Blender 4.3 --- common/lc_blenderpreferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/lc_blenderpreferences.cpp b/common/lc_blenderpreferences.cpp index 5303bf5f..08015801 100644 --- a/common/lc_blenderpreferences.cpp +++ b/common/lc_blenderpreferences.cpp @@ -228,7 +228,7 @@ lcBlenderPreferences::BlenderSettings lcBlenderPreferences::mDefaultSettingsMM /* 39 LBL_VERBOSE_MM */ {"verbose", "1", QObject::tr("Verbose output"), QObject::tr("Output all messages while working, else only show warnings and errors")}, /* 40/00 LBL_BEVEL_SEGMENTS */ {"bevelsegments", "4", QObject::tr("Bevel Segments"), QObject::tr("Bevel segments")}, - /* 41/01 LBL_BEVEL_WEIGHT */ {"bevelweight", "0.3", QObject::tr("Bevel Weight"), QObject::tr("Bevel weight")}, + /* 41/01 LBL_BEVEL_WEIGHT */ {"bevelweight", "0.03", QObject::tr("Bevel Weight"), QObject::tr("Bevel weight")}, /* 42/02 LBL_BEVEL_WIDTH_MM */ {"bevelwidth", "0.3", QObject::tr("Bevel Width"), QObject::tr("Width of the bevelled edges")}, /* 43/03 LBL_CAMERA_BORDER_PERCENT_MM */ {"cameraborderpercent", "5", QObject::tr("Camera Border Percent"), QObject::tr("When positioning the camera, include a (percentage) border around the model in the render")}, /* 44/04 LBL_FRAMES_PER_STEP */ {"framesperstep", "3", QObject::tr("Frames Per Step"), QObject::tr("Frames per step")},