From 05e2e4a31fa248d71445c40e35eeafa44f5d3b1b Mon Sep 17 00:00:00 2001 From: mpv Date: Tue, 21 Jun 2022 16:26:33 +0300 Subject: [PATCH] Fix for the problem: the second sketch is shown as invalid after the first edit is canceled after as script with these two sketches is loaded. --- src/XGUI/XGUI_WorkshopListener.cpp | 47 ++++++++++++++++-------------- src/XGUI/XGUI_WorkshopListener.h | 2 +- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/XGUI/XGUI_WorkshopListener.cpp b/src/XGUI/XGUI_WorkshopListener.cpp index dfce8b8a4..317581e7a 100644 --- a/src/XGUI/XGUI_WorkshopListener.cpp +++ b/src/XGUI/XGUI_WorkshopListener.cpp @@ -431,33 +431,31 @@ void XGUI_WorkshopListener:: //bool aHasPart = false; bool aDisplayed = false; - if (!isLoadedScript) { - for (aIt = anObjects.begin(); aIt != anObjects.end(); ++aIt) { - ObjectPtr anObject = *aIt; + for (aIt = anObjects.begin(); aIt != anObjects.end(); ++aIt) { + ObjectPtr anObject = *aIt; #ifdef DEBUG_RESULT_COMPSOLID - ResultPtr aRes = std::dynamic_pointer_cast(anObject); - if (aRes.get()) { - ResultCompSolidPtr aCompSolidRes = - std::dynamic_pointer_cast(aRes); - if (aCompSolidRes.get()) { - qDebug(QString("COMPSOLID, numberOfSubs = %1") - .arg(aCompSolidRes->numberOfSubs()).toStdString().c_str()); - } - if (ModelAPI_Tools::compSolidOwner(aRes)) - qDebug("COMPSOLID sub-object"); + ResultPtr aRes = std::dynamic_pointer_cast(anObject); + if (aRes.get()) { + ResultCompSolidPtr aCompSolidRes = + std::dynamic_pointer_cast(aRes); + if (aCompSolidRes.get()) { + qDebug(QString("COMPSOLID, numberOfSubs = %1") + .arg(aCompSolidRes->numberOfSubs()).toStdString().c_str()); } + if (ModelAPI_Tools::compSolidOwner(aRes)) + qDebug("COMPSOLID sub-object"); + } #endif - ResultBodyPtr aRes = std::dynamic_pointer_cast(anObject); - - if (aRes.get() && aRes->numberOfSubs() > 0) - for (int anIndex = 0; anIndex < aRes->numberOfSubs(); ++anIndex) - setDisplayed(aRes->subResult(anIndex), aDisplayed); - else - setDisplayed(anObject, aDisplayed); - } + ResultBodyPtr aRes = std::dynamic_pointer_cast(anObject); + if (aRes.get() && aRes->numberOfSubs() > 0) + for (int anIndex = 0; anIndex < aRes->numberOfSubs(); ++anIndex) + setDisplayed(aRes->subResult(anIndex), isLoadedScript, aDisplayed); + else + setDisplayed(anObject, isLoadedScript, aDisplayed); } + MAYBE_UNUSED bool isCustomized = customizeFeature(anObjects, aDisplayed); //if (myObjectBrowser) @@ -572,8 +570,13 @@ XGUI_Workshop* XGUI_WorkshopListener::workshop() const } -void XGUI_WorkshopListener::setDisplayed(ObjectPtr theObject, bool& theDisplayed) +void XGUI_WorkshopListener::setDisplayed( + ObjectPtr theObject, const bool theIsLoadedScript, bool& theDisplayed) { + if (theIsLoadedScript) { + theObject->setDisplayed(theDisplayed); + return; + } // the validity of the data should be checked here in order to avoid display of the objects, // which were created, then deleted, but flush for the creation event happens after that // we should not display disabled objects diff --git a/src/XGUI/XGUI_WorkshopListener.h b/src/XGUI/XGUI_WorkshopListener.h index 025e014d7..52e00a8c0 100644 --- a/src/XGUI/XGUI_WorkshopListener.h +++ b/src/XGUI/XGUI_WorkshopListener.h @@ -104,7 +104,7 @@ protected: private: - void setDisplayed(ObjectPtr theObject, bool& theDisplayed); + void setDisplayed(ObjectPtr theObject, const bool theIsLoadedScript, bool& theDisplayed); XGUI_Workshop* myWorkshop; // the current workshop -- 2.30.2