From 19909d80a70e49d0fd5b981aa1570cebc0faa20d Mon Sep 17 00:00:00 2001 From: danielbui78 Date: Fri, 24 Jun 2022 14:48:28 -0400 Subject: [PATCH] Update and Integrate Latest Daz Bridge Library features - Update to latest Daz Bridge Library: - Morph controller bugfixes - UI/UX updates --- .../plugins/DazToC4D/DazToC4D.pyp | 4 +- DazStudioPlugin/DzC4DAction.cpp | 3 +- DazStudioPlugin/DzC4DDialog.cpp | 51 ++++++++++++++++-- DazStudioPlugin/DzC4DDialog.h | 1 + DazStudioPlugin/Resources/c4dplugin.zip | Bin 450618 -> 450618 bytes DazStudioPlugin/version.h | 4 +- dzbridge-common | 2 +- 7 files changed, 54 insertions(+), 11 deletions(-) diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/DazToC4D.pyp b/Cinema 4D/appdir_common/plugins/DazToC4D/DazToC4D.pyp index fa904c1..a1de8a6 100644 --- a/Cinema 4D/appdir_common/plugins/DazToC4D/DazToC4D.pyp +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/DazToC4D.pyp @@ -1,7 +1,7 @@ DZBRIDGE_VERSION_MAJOR = 2022 DZBRIDGE_VERSION_MINOR = 1 -DZBRIDGE_VERSION_REVISION = 9 -DZBRIDGE_VERSION_BUILD = 21 +DZBRIDGE_VERSION_REVISION = 10 +DZBRIDGE_VERSION_BUILD = 22 DZBRIDGE_VERSION_STRING = "v%s.%s.%s.%s" % (DZBRIDGE_VERSION_MAJOR, DZBRIDGE_VERSION_MINOR, DZBRIDGE_VERSION_REVISION, DZBRIDGE_VERSION_BUILD) ## ## DazToC4D diff --git a/DazStudioPlugin/DzC4DAction.cpp b/DazStudioPlugin/DzC4DAction.cpp index 9ab09a6..2012870 100644 --- a/DazStudioPlugin/DzC4DAction.cpp +++ b/DazStudioPlugin/DzC4DAction.cpp @@ -128,14 +128,13 @@ void DzC4DAction::executeAction() { dzScene->setPrimarySelection(rootNodes[0]); } - else + else if (rootNodes.length() > 1) { if (m_nNonInteractiveMode == 0) { QMessageBox::warning(0, tr("Error"), tr("Please select one Character or Prop to send."), QMessageBox::Ok); } - return; } } diff --git a/DazStudioPlugin/DzC4DDialog.cpp b/DazStudioPlugin/DzC4DDialog.cpp index 356fea8..8c869a2 100644 --- a/DazStudioPlugin/DzC4DDialog.cpp +++ b/DazStudioPlugin/DzC4DDialog.cpp @@ -59,6 +59,25 @@ DzC4DDialog::DzC4DDialog(QWidget* parent) : setWindowTitle(tr("Daz To Cinema 4D Bridge v%1.%2").arg(PLUGIN_MAJOR).arg(PLUGIN_MINOR)); #endif + // Welcome String for Setup/Welcome Mode + QString sSetupModeString = tr("

\ +If this is your first time using the Daz To Cinema 4D Bridge, please be sure to read or watch \ +the tutorials or videos below to install and enable the Cinema 4D Plugin for the bridge:

\ +\ +Once the maya plugin is enabled, please add a Character or Prop to the Scene to transfer assets using the Daz To Cinema 4D Bridge.

\ +To find out more about Daz Bridges, go to https://www.daz3d.com/daz-bridges
\ +"); + m_WelcomeLabel->setText(sSetupModeString); + QString sBridgeVersionString = tr("Daz To Cinema 4D Bridge %1.%2 revision %3.%4").arg(PLUGIN_MAJOR).arg(PLUGIN_MINOR).arg(revision).arg(PLUGIN_BUILD); + setBridgeVersionStringAndLabel(sBridgeVersionString); + // Disable Unsupported AssetType ComboBox Options QStandardItemModel* model = qobject_cast(assetTypeCombo->model()); QStandardItem* item = nullptr; @@ -142,7 +161,7 @@ bool DzC4DDialog::loadSavedSettings() void DzC4DDialog::resetToDefaults() { - m_DontSaveSettings = true; + m_bDontSaveSettings = true; DzBridgeDialog::resetToDefaults(); QString DefaultPath = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation) + QDir::separator() + "DazToC4D"; @@ -167,7 +186,7 @@ void DzC4DDialog::resetToDefaults() { assetTypeCombo->setCurrentIndex(1); } - m_DontSaveSettings = false; + m_bDontSaveSettings = false; } void DzC4DDialog::HandleSelectIntermediateFolderButton() @@ -252,10 +271,14 @@ void DzC4DDialog::HandleTargetPluginInstallerButton() // Get Software Versio DzBridgeDialog::m_sEmbeddedFilesPath = ":/DazBridgeC4D"; QString sBinariesFile = "/c4dplugin.zip"; - QString sDestinationPath = QDir().homePath() + "/Documents/cinema4d"; + QString sDestinationPath = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation) + "/cinema4d/plugins"; + if (QDir(sDestinationPath).exists() == false) + { + sDestinationPath = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation) + "/cinema4d"; + } if (QDir(sDestinationPath).exists() == false) { - sDestinationPath = QDir().homePath() + "/Documents"; + sDestinationPath = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); } QString softwareVersion = m_TargetSoftwareVersionCombo->currentText(); @@ -348,4 +371,24 @@ modify the selected folder.")); return; } +void DzC4DDialog::HandleOpenIntermediateFolderButton(QString sFolderPath) +{ + QString sIntermediateFolder = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation) + QDir::separator() + "DazToC4D"; +#if __LEGACY_PATHS__ + sIntermediateFolder = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation) + "/DAZ 3D/Bridges/Daz To Cinema 4D/Exports"; + if (QFile(sIntermediateFolder).exists() == false) + { + QDir().mkpath(sIntermediateFolder); + } +#else + if (intermediateFolderEdit != nullptr) + { + sIntermediateFolder = intermediateFolderEdit->text(); + } +#endif + sIntermediateFolder = sIntermediateFolder.replace("\\", "/"); + DzBridgeDialog::HandleOpenIntermediateFolderButton(sIntermediateFolder); +} + + #include "moc_DzC4DDialog.cpp" diff --git a/DazStudioPlugin/DzC4DDialog.h b/DazStudioPlugin/DzC4DDialog.h index 1b35aab..cbfa677 100644 --- a/DazStudioPlugin/DzC4DDialog.h +++ b/DazStudioPlugin/DzC4DDialog.h @@ -37,6 +37,7 @@ protected slots: void HandleSelectIntermediateFolderButton(); void HandleAssetTypeComboChange(int state); void HandleTargetPluginInstallerButton(); + virtual void HandleOpenIntermediateFolderButton(QString sFolderPath = ""); protected: QLineEdit* intermediateFolderEdit; diff --git a/DazStudioPlugin/Resources/c4dplugin.zip b/DazStudioPlugin/Resources/c4dplugin.zip index 232e035bcf7b41d0c763c1ff2a8676ddd4b3e887..e91dcf86e297aaccf9455993dcecdaa547fc11c6 100644 GIT binary patch delta 5172 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 delta 5172 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