X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Module.cpp;h=544d4b5c5a36d3b5fbd8a14bd5d43ab7d3704068;hb=334029ee7a94867a1ed39d7ba51b6e49770b6e34;hp=3ec2c8552780c7a37e387bf9fbb4d5cfb9acb311;hpb=8578511c4164ad4fd45ad1c6a92cc8aaacba5972;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index 3ec2c8552..544d4b5c5 100755 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -38,6 +38,7 @@ #include "PartSet_CustomPrs.h" #include "PartSet_IconFactory.h" #include "PartSet_OverconstraintListener.h" +#include "PartSet_TreeNodes.h" #include "PartSet_Filters.h" #include "PartSet_FilterInfinite.h" @@ -51,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -70,25 +72,28 @@ #include #include #include +#include #include #include #include -#include -#include -#include -#include -#include +#include +#include +#include #include -#include -#include -#include +#include #include +#include #include -#include +#include +#include +#include +#include +#include #include -#include +#include +#include #include #include @@ -101,6 +106,7 @@ #include #include +#include #include #include @@ -141,9 +147,11 @@ extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop* return new PartSet_Module(theWshop); } +//****************************************************** PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) : ModuleBase_IModule(theWshop), myVisualLayerId(0), + myRoot(0), myIsOperationIsLaunched(false) { new PartSet_IconFactory(); @@ -169,8 +177,13 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) Events_Loop* aLoop = Events_Loop::loop(); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_DOCUMENT_CHANGED)); - mySelectionFilters.Append(new PartSet_GlobalFilter(myWorkshop)); - mySelectionFilters.Append(new PartSet_FilterInfinite(myWorkshop)); + registerSelectionFilter(SF_GlobalFilter, new PartSet_GlobalFilter(myWorkshop)); + registerSelectionFilter(SF_FilterInfinite, new PartSet_FilterInfinite(myWorkshop)); + Handle(PartSet_ResultGroupNameFilter) aCRFilter = new PartSet_ResultGroupNameFilter(myWorkshop); + std::set aCRGroupNames; + aCRGroupNames.insert(ModelAPI_ResultConstruction::group()); + aCRFilter->setGroupNames(aCRGroupNames); + registerSelectionFilter(SF_ResultGroupNameFilter, aCRFilter); setDefaultConstraintShown(); @@ -189,40 +202,55 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) Config_PropManager::registerProp("Visualization", "sketch_preview_plane", "Color of sketch plane", Config_Prop::Color, PartSet_CustomPrs::OPERATION_SKETCH_PLANE()); + + Config_PropManager::registerProp("Visualization", "hidden_face_transparency", + "Hidden faces transparency", + Config_Prop::DblSpin, + "0.8"); + std::ostringstream aStream; + aStream << SketcherPrs_Tools::getDefaultArrowSize(); + Config_PropManager::registerProp("Visualization", "dimension_arrow_size", + "Dimension arrow size", Config_Prop::IntSpin, aStream.str()); + + Config_PropManager::registerProp("Visualization", "dimension_font", "Dimension font", + Config_Prop::String, "Times-bold"); + + aStream.str(""); + aStream.clear(); + aStream << SketcherPrs_Tools::getDefaultTextHeight(); + Config_PropManager::registerProp("Visualization", "dimension_value_size", + "Dimension value size", Config_Prop::IntSpin, aStream.str()); + + Config_PropManager::registerProp("Visualization", "sketch_dimension_color", + "Sketch dimension color", + Config_Prop::Color, SKETCH_DIMENSION_COLOR); } +//****************************************************** PartSet_Module::~PartSet_Module() { - SelectMgr_ListIteratorOfListOfFilter aIt(mySelectionFilters); - for (; aIt.More(); aIt.Next()) { - Handle(SelectMgr_Filter) aFilter = aIt.Value(); + std::map::const_iterator aFiltersIt = + mySelectionFilters.begin(); + for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) { + Handle(SelectMgr_Filter) aFilter = aFiltersIt->second; if (!aFilter.IsNull()) aFilter.Nullify(); } delete myCustomPrs; delete myOverconstraintListener; + delete myRoot; } -void PartSet_Module::activateSelectionFilters() +//****************************************************** +void PartSet_Module::createFeatures() { - SelectMgr_ListIteratorOfListOfFilter aIt(mySelectionFilters); - for (; aIt.More(); aIt.Next()) { - Handle(SelectMgr_Filter) aFilter = aIt.Value(); - if (!aFilter.IsNull()) - myWorkshop->viewer()->addSelectionFilter(aFilter); - } + ModuleBase_IModule::createFeatures(); + myRoot = new PartSet_RootNode(); + myRoot->setWorkshop(workshop()); } -void PartSet_Module::deactivateSelectionFilters() -{ - SelectMgr_ListIteratorOfListOfFilter aIt(mySelectionFilters); - for (; aIt.More(); aIt.Next()) { - Handle(SelectMgr_Filter) aFilter = aIt.Value(); - if (!aFilter.IsNull()) - myWorkshop->viewer()->removeSelectionFilter(aFilter); - } -} +//****************************************************** void PartSet_Module::storeSelection() { // cash is used only to restore selection, so it should be filled in storeSelection and @@ -231,6 +259,7 @@ void PartSet_Module::storeSelection() sketchMgr()->storeSelection(PartSet_SketcherMgr::ST_SelectType, myCurrentSelection); } +//****************************************************** void PartSet_Module::restoreSelection() { // cash is used only to restore selection, so it should be filled in storeSelection and @@ -239,6 +268,7 @@ void PartSet_Module::restoreSelection() myCurrentSelection.clear(); } +//****************************************************** void PartSet_Module::registerValidators() { //Registering of validators @@ -265,14 +295,17 @@ void PartSet_Module::registerValidators() new PartSet_MultyTranslationSelection); aFactory->registerValidator("PartSet_SplitSelection", new PartSet_SplitSelection); aFactory->registerValidator("PartSet_ProjectionSelection", new PartSet_ProjectionSelection); + aFactory->registerValidator("PartSet_IntersectionSelection", new PartSet_IntersectionSelection); } +//****************************************************** void PartSet_Module::connectToPropertyPanel(ModuleBase_ModelWidget* theWidget, const bool isToConnect) { mySketchMgr->connectToPropertyPanel(theWidget, isToConnect); } +//****************************************************** void PartSet_Module::operationCommitted(ModuleBase_Operation* theOperation) { if (sketchMgr()->isNestedSketchOperation(theOperation)) { @@ -296,6 +329,7 @@ void PartSet_Module::operationCommitted(ModuleBase_Operation* theOperation) } } +//****************************************************** void PartSet_Module::operationAborted(ModuleBase_Operation* theOperation) { /// Restart sketcher operations automatically @@ -305,6 +339,7 @@ void PartSet_Module::operationAborted(ModuleBase_Operation* theOperation) overconstraintListener()->setActive(false); } +//****************************************************** void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation) { ModuleBase_OperationFeature* aFOperation = dynamic_cast @@ -392,6 +427,7 @@ void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation) } } +//****************************************************** void PartSet_Module::updateSketcherOnStart(ModuleBase_Operation* theOperation) { if (PartSet_SketcherMgr::isSketchOperation(theOperation)) { @@ -402,6 +438,7 @@ void PartSet_Module::updateSketcherOnStart(ModuleBase_Operation* theOperation) } } +//****************************************************** void PartSet_Module::updatePresentationsOnStart(ModuleBase_Operation* theOperation) { ModuleBase_OperationFeature* aFOperation = @@ -412,6 +449,7 @@ void PartSet_Module::updatePresentationsOnStart(ModuleBase_Operation* theOperati } } +//****************************************************** void PartSet_Module::operationResumed(ModuleBase_Operation* theOperation) { ModuleBase_IModule::operationResumed(theOperation); @@ -424,6 +462,7 @@ void PartSet_Module::operationResumed(ModuleBase_Operation* theOperation) } } +//****************************************************** void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation) { bool isModifiedArgs = myCustomPrs->deactivate(ModuleBase_IModule::CustomizeArguments, false); @@ -450,6 +489,7 @@ void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation) } } +//****************************************************** ModuleBase_Operation* PartSet_Module::currentOperation() const { XGUI_ModuleConnector* aConnector = dynamic_cast(workshop()); @@ -457,6 +497,7 @@ ModuleBase_Operation* PartSet_Module::currentOperation() const return anOpMgr->currentOperation(); } +//****************************************************** bool PartSet_Module::canUndo() const { bool aCanUndo = false; @@ -469,6 +510,7 @@ bool PartSet_Module::canUndo() const return aCanUndo; } +//****************************************************** bool PartSet_Module::canRedo() const { bool aCanRedo = false; @@ -481,6 +523,7 @@ bool PartSet_Module::canRedo() const return aCanRedo; } +//****************************************************** bool PartSet_Module::canApplyAction(const ObjectPtr& theObject, const QString& theActionId) const { bool aValid = true; @@ -496,18 +539,21 @@ bool PartSet_Module::canApplyAction(const ObjectPtr& theObject, const QString& t return aValid; } +//****************************************************** bool PartSet_Module::canEraseObject(const ObjectPtr& theObject) const { // the sketch manager put the restriction to the objects erase return mySketchMgr->canEraseObject(theObject); } +//****************************************************** bool PartSet_Module::canDisplayObject(const ObjectPtr& theObject) const { // the sketch manager put the restriction to the objects display return mySketchMgr->canDisplayObject(theObject); } +//****************************************************** bool PartSet_Module::canUsePreselection(const QString& thePreviousOperationKind, const QString& theStartedOperationKind) { @@ -522,6 +568,7 @@ bool PartSet_Module::canUsePreselection(const QString& thePreviousOperationKind, mySketchMgr->processHiddenObject(theObjects); }*/ +//****************************************************** bool PartSet_Module::canActivateSelection(const ObjectPtr& theObject) const { bool aCanActivate = ModuleBase_IModule::canActivateSelection(theObject); @@ -539,6 +586,7 @@ bool PartSet_Module::canActivateSelection(const ObjectPtr& theObject) const return aCanActivate; } +//****************************************************** bool PartSet_Module::addViewerMenu(const QMap& theStdActions, QWidget* theParent, QMap& theMenuActions) const @@ -546,11 +594,13 @@ bool PartSet_Module::addViewerMenu(const QMap& theStdActions, return myMenuMgr->addViewerMenu(theStdActions, theParent, theMenuActions); } +//****************************************************** void PartSet_Module::updateViewerMenu(const QMap& theStdActions) { myMenuMgr->updateViewerMenu(theStdActions); } +//****************************************************** bool PartSet_Module::isActionEnableStateFixed(const int theActionId) const { bool isEnabledFixed = false; @@ -560,6 +610,7 @@ bool PartSet_Module::isActionEnableStateFixed(const int theActionId) const return isEnabledFixed; } +//****************************************************** QString PartSet_Module::getFeatureError(const FeaturePtr& theFeature) { QString anError = ModuleBase_IModule::getFeatureError(theFeature); @@ -569,6 +620,7 @@ QString PartSet_Module::getFeatureError(const FeaturePtr& theFeature) return anError; } +//****************************************************** void PartSet_Module::grantedOperationIds(ModuleBase_Operation* theOperation, QStringList& theIds) const { @@ -580,21 +632,94 @@ void PartSet_Module::grantedOperationIds(ModuleBase_Operation* theOperation, } } +//****************************************************** void PartSet_Module::activeSelectionModes(QIntList& theModes) { - theModes.clear(); if (mySketchMgr->activeSketch().get()) - PartSet_SketcherMgr::sketchSelectionModes(theModes); + PartSet_SketcherMgr::sketchSelectionModes(mySketchMgr->activeSketch(), theModes); + else + theModes = XGUI_Tools::workshop(myWorkshop)->viewerSelectionModes(); } -void PartSet_Module::customSubShapesSelectionModes(QIntList& theTypes) +//****************************************************** +void PartSet_Module::moduleSelectionModes(int theModesType, QIntList& theModes) +{ + customSubShapesSelectionModes(theModes); + //theModes.append(XGUI_Tools::workshop(myWorkshop)->viewerSelectionModes()); + //myWorkshop->module()->activeSelectionModes(theModes); +} + +//****************************************************** +void PartSet_Module::moduleSelectionFilters(const QIntList& theFilterTypes, + SelectMgr_ListOfFilter& theSelectionFilters) { - if (theTypes.contains(TopAbs_FACE)) - theTypes.append(SketcherPrs_Tools::Sel_Sketch_Face); - if (theTypes.contains(TopAbs_WIRE)) - theTypes.append(SketcherPrs_Tools::Sel_Sketch_Wire); + bool isSketchActive = mySketchMgr->activeSketch().get(); + + std::map::const_iterator aFiltersIt = + mySelectionFilters.begin(); + for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) { + int aFilterType = aFiltersIt->first; + // do not add not participating filters in given parameters + if (!theFilterTypes.contains(aFilterType)) + continue; + + // using sketch filters only if sketch operation is active + if (!isSketchActive && + mySketchMgr->sketchSelectionFilter((XGUI_SelectionFilterType)aFilterType)) + continue; + + // using filtering of construction results only from faces panel + if (aFilterType == SF_ResultGroupNameFilter) + continue; + + theSelectionFilters.Append(aFiltersIt->second); + } } +//****************************************************** +QIntList PartSet_Module::selectionFilters() +{ + QIntList aTypes; + + std::map::const_iterator aFiltersIt = + mySelectionFilters.begin(); + for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) + aTypes.append(aFiltersIt->first); + + return aTypes; +} + +//****************************************************** +void PartSet_Module::registerSelectionFilter(const XGUI_SelectionFilterType theFilterType, + const Handle(SelectMgr_Filter)& theFilter) +{ + mySelectionFilters[theFilterType] = theFilter; +} + +//****************************************************** +Handle(SelectMgr_Filter) PartSet_Module::selectionFilter(const int theType) +{ + XGUI_SelectionFilterType aType = (XGUI_SelectionFilterType)theType; + + if (mySelectionFilters.find(aType) != mySelectionFilters.end()) + return mySelectionFilters[aType]; + else + return Handle(SelectMgr_Filter)(); +} + +//****************************************************** +void PartSet_Module::customSubShapesSelectionModes(QIntList& theModes) +{ + if (theModes.contains(TopAbs_FACE)) + theModes.append(SketcherPrs_Tools::Sel_Sketch_Face); + if (theModes.contains(TopAbs_WIRE)) + theModes.append(SketcherPrs_Tools::Sel_Sketch_Wire); + + if (mySketchMgr->activeSketch().get()) + PartSet_SketcherMgr::sketchSelectionModes(mySketchMgr->activeSketch(), theModes); +} + +//****************************************************** void PartSet_Module::getGeomSelection(const std::shared_ptr& theSelected, ObjectPtr& theObject, AttributePtr& theAttribute) { @@ -606,11 +731,13 @@ void PartSet_Module::getGeomSelection(const std::shared_ptrisMouseOverWindow(); } +//****************************************************** bool PartSet_Module::isSketchNeutralPointActivated() const { bool isNeutralPoint = true; @@ -622,20 +749,24 @@ bool PartSet_Module::isSketchNeutralPointActivated() const return isNeutralPoint; } +//****************************************************** void PartSet_Module::closeDocument() { myActivePartIndex = QModelIndex(); + SketcherPrs_PositionMgr::get()->clearAll(); } +//****************************************************** void PartSet_Module::clearViewer() { myCustomPrs->clearPrs(); XGUI_Workshop* aWorkshop = getWorkshop(); XGUI_Displayer* aDisplayer = aWorkshop->displayer(); - aDisplayer->deactivateSelectionFilters(); + aDisplayer->deactivateSelectionFilters(false); } +//****************************************************** void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation) { ModuleBase_OperationFeature* aFOperation = @@ -649,6 +780,7 @@ void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation) aPanel->activateWidget(aPanel->modelWidgets().first()); } +//****************************************************** bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation, QList& theWidgets) const { @@ -701,6 +833,7 @@ bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation, return aProcessed; } +//****************************************************** void PartSet_Module::onSelectionChanged() { ModuleBase_Operation* aOperation = myWorkshop->currentOperation(); @@ -734,6 +867,7 @@ void PartSet_Module::onSelectionChanged() } } +//****************************************************** void PartSet_Module::onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent) { XGUI_ModuleConnector* aConnector = dynamic_cast(workshop()); @@ -741,6 +875,7 @@ void PartSet_Module::onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* the anOpMgr->onKeyReleased(theWnd->viewPort(), theEvent); } +//****************************************************** ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& theType, QWidget* theParent, Config_WidgetAPI* theWidgetApi) @@ -799,21 +934,23 @@ ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& th return aWgt; } +//****************************************************** ModuleBase_ModelWidget* PartSet_Module::activeWidget() const { ModuleBase_ModelWidget* anActiveWidget = 0; - anActiveWidget = mySketchReentrantMgr->internalActiveWidget(); - if (!anActiveWidget) { - ModuleBase_Operation* aOperation = myWorkshop->currentOperation(); - if (aOperation) { - ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel(); - anActiveWidget = aPanel ? aPanel->activeWidget() : 0; - } - } - return anActiveWidget; + ModuleBase_Operation* aOperation = myWorkshop->currentOperation(); + if (!aOperation) + return anActiveWidget; + + ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel(); + if (!aPanel) + return anActiveWidget; + + return aPanel->activeWidget(true); } +//****************************************************** bool PartSet_Module::deleteObjects() { bool isProcessed = false; @@ -887,17 +1024,20 @@ bool PartSet_Module::deleteObjects() return isProcessed; } +//****************************************************** void PartSet_Module::editFeature(FeaturePtr theFeature) { storeConstraintsState(theFeature->getKind()); ModuleBase_IModule::editFeature(theFeature); } +//****************************************************** bool PartSet_Module::canCommitOperation() const { return true; } +//****************************************************** void PartSet_Module::launchOperation(const QString& theCmdId, const bool& isStartAfterCommitOnly) { myIsOperationIsLaunched = true; @@ -909,6 +1049,7 @@ void PartSet_Module::launchOperation(const QString& theCmdId, const bool& isStar myIsOperationIsLaunched = false; } +//****************************************************** void PartSet_Module::storeConstraintsState(const std::string& theFeatureKind) { if (myWorkshop->currentOperation() && @@ -919,6 +1060,7 @@ void PartSet_Module::storeConstraintsState(const std::string& theFeatureKind) } } +//****************************************************** void PartSet_Module::updateConstraintsState(const std::string& theFeatureKind) { if (PartSet_SketcherMgr::constraintsIdList().contains(theFeatureKind.c_str()) || @@ -931,28 +1073,29 @@ void PartSet_Module::updateConstraintsState(const std::string& theFeatureKind) } } +//****************************************************** void PartSet_Module::onObjectDisplayed(ObjectPtr theObject, AISObjectPtr theAIS) { Handle(AIS_InteractiveObject) anAIS = theAIS->impl(); if (!anAIS.IsNull()) { - bool aToUseZLayer = false; FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); - if (aFeature.get() && PartSet_Tools::findRefsToMeFeature(aFeature, - SketchPlugin_Projection::ID())) - aToUseZLayer = true; - Handle(AIS_InteractiveContext) aCtx = anAIS->GetContext(); - Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(anAIS); - if (!aDim.IsNull()) { - aToUseZLayer = true; - } else { - Handle(SketcherPrs_SymbolPrs) aCons = Handle(SketcherPrs_SymbolPrs)::DownCast(anAIS); - if (!aCons.IsNull()) - aToUseZLayer = true; + if (aFeature.get()) { + bool aToUseZLayer = false; + if (PartSet_Tools::findRefsToMeFeature(aFeature,SketchPlugin_Projection::ID())) + aToUseZLayer = true; + else { + CompositeFeaturePtr aParent = ModelAPI_Tools::compositeOwner(aFeature); + aToUseZLayer = (aParent.get() && (aParent->getKind() == SketchPlugin_Sketch::ID())); + } + if (aToUseZLayer) { + Handle(AIS_InteractiveContext) aCtx = anAIS->GetContext(); + aCtx->SetZLayer(anAIS, myVisualLayerId); + } } - aCtx->SetZLayer(anAIS, myVisualLayerId); } } +//****************************************************** void PartSet_Module::onBeforeObjectErase(ObjectPtr theObject, AISObjectPtr theAIS) { // this is obsolete @@ -962,6 +1105,7 @@ void PartSet_Module::onBeforeObjectErase(ObjectPtr theObject, AISObjectPtr theAI // myCustomPrs->redisplay(theObject, false); } +//****************************************************** void PartSet_Module::onViewTransformed(int theTrsfType) { // Set length of arrows constant in pixel size @@ -993,10 +1137,12 @@ void PartSet_Module::onViewTransformed(int theTrsfType) if (aView.IsNull()) return; + bool isModified = false; ModuleBase_Operation* aCurrentOperation = myWorkshop->currentOperation(); if (aCurrentOperation && (PartSet_SketcherMgr::isSketchOperation(aCurrentOperation) || - sketchMgr()->isNestedSketchOperation(aCurrentOperation))) + sketchMgr()->isNestedSketchOperation(aCurrentOperation) || + (aCurrentOperation->id() == "Measurement"))) { double aLen = aView->Convert(SketcherPrs_Tools::getConfigArrowSize()); @@ -1004,17 +1150,17 @@ void PartSet_Module::onViewTransformed(int theTrsfType) SketcherPrs_Tools::setArrowSize(aLen); const double aCurScale = aViewer->activeView()->Camera()->Scale(); aViewer->SetScale(aViewer->activeView(), aCurScale); - double aTextHeight = SketcherPrs_Tools::getConfigTextHeight(); - SketcherPrs_Tools::setTextHeight (aTextHeight); - bool isModified = false; +#ifdef OPTIMIZE_PRS + QList aPrsList = aDisplayer->displayedPresentations(); + foreach(Handle(AIS_InteractiveObject) aAisObj, aPrsList) { +#else QList aPrsList = aDisplayer->displayedPresentations(); - foreach (AISObjectPtr aAIS, aPrsList) { + foreach(AISObjectPtr aAIS, aPrsList) { Handle(AIS_InteractiveObject) aAisObj = aAIS->impl(); - +#endif Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(aAisObj); if (!aDim.IsNull()) { aDim->DimensionAspect()->ArrowAspect()->SetLength(aLen); - aDim->DimensionAspect()->TextAspect()->SetHeight(aTextHeight); aContext->Redisplay(aDim, false); isModified = true; } @@ -1022,13 +1168,16 @@ void PartSet_Module::onViewTransformed(int theTrsfType) if (isModified) aDisplayer->updateViewer(); } + } +//****************************************************** bool PartSet_Module::isCustomPrsActivated(const ModuleBase_CustomizeFlag& theFlag) const { return myCustomPrs->isActive(theFlag); } +//****************************************************** void PartSet_Module::activateCustomPrs(const FeaturePtr& theFeature, const ModuleBase_CustomizeFlag& theFlag, const bool theUpdateViewer) @@ -1036,12 +1185,14 @@ void PartSet_Module::activateCustomPrs(const FeaturePtr& theFeature, myCustomPrs->activate(theFeature, theFlag, theUpdateViewer); } +//****************************************************** void PartSet_Module::deactivateCustomPrs(const ModuleBase_CustomizeFlag& theFlag, const bool theUpdateViewer) { myCustomPrs->deactivate(theFlag, theUpdateViewer); } +//****************************************************** bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr thePrs, std::shared_ptr theCustomPrs) { @@ -1066,6 +1217,7 @@ bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr the return aCustomized; } +//****************************************************** bool PartSet_Module::afterCustomisePresentation(std::shared_ptr theResult, AISObjectPtr thePrs, GeomCustomPrsPtr theCustomPrs) @@ -1108,6 +1260,7 @@ bool PartSet_Module::afterCustomisePresentation(std::shared_ptr return aCustomized; } +//****************************************************** bool PartSet_Module::customizeObject(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag, const bool theUpdateViewer) { @@ -1118,6 +1271,7 @@ bool PartSet_Module::customizeObject(ObjectPtr theObject, const ModuleBase_Custo return isRedisplayed; } +//****************************************************** void PartSet_Module::customizeObjectBrowser(QWidget* theObjectBrowser) { XGUI_ObjectsBrowser* aOB = dynamic_cast(theObjectBrowser); @@ -1135,6 +1289,7 @@ void PartSet_Module::customizeObjectBrowser(QWidget* theObjectBrowser) } } +//****************************************************** void PartSet_Module::onActiveDocPopup(const QPoint& thePnt) { SessionPtr aMgr = ModelAPI_Session::get(); @@ -1150,12 +1305,13 @@ void PartSet_Module::onActiveDocPopup(const QPoint& thePnt) aMenu.exec(aHeader->mapToGlobal(thePnt)); } +//****************************************************** Handle(AIS_InteractiveObject) PartSet_Module::createPresentation(const ResultPtr& theResult) { return mySketchMgr->createPresentation(theResult); } - +//****************************************************** ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const { ObjectPtr anObject; @@ -1178,6 +1334,7 @@ ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const return anObject; } +//****************************************************** bool PartSet_Module::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const { bool aCanBeShaged = true; @@ -1189,6 +1346,7 @@ bool PartSet_Module::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const return aCanBeShaged; } +//****************************************************** void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const { QObjectPtrList aObjects = myWorkshop->selection()->selectedObjects(); @@ -1248,6 +1406,7 @@ void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const } } +//****************************************************** #define EXPAND_PARENT(OBJ) \ QModelIndex aObjIndex = aDataModel->objectIndex(OBJ); \ if (aObjIndex.isValid()) { \ @@ -1257,7 +1416,7 @@ if (aObjIndex.isValid()) { \ aTreeView->setExpanded(aParent, true); \ } - +//****************************************************** void PartSet_Module::processEvent(const std::shared_ptr& theMessage) { if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_DOCUMENT_CHANGED)) { @@ -1278,8 +1437,9 @@ void PartSet_Module::processEvent(const std::shared_ptr& theMess SessionPtr aMgr = ModelAPI_Session::get(); DocumentPtr aActiveDoc = aMgr->activeDocument(); - if (myActivePartIndex.isValid()) - aTreeView->setExpanded(myActivePartIndex, false); + // workaround for #2431 (SISGSEGV when launching some unit tests from GUI) + //if (myActivePartIndex.isValid()) + // aTreeView->setExpanded(myActivePartIndex, false); XGUI_DataModel* aDataModel = aWorkshop->objectBrowser()->dataModel(); myActivePartIndex = aDataModel->documentRootIndex(aActiveDoc, 0); @@ -1344,6 +1504,7 @@ void PartSet_Module::processEvent(const std::shared_ptr& theMess } } +//****************************************************** void PartSet_Module::onTreeViewDoubleClick(const QModelIndex& theIndex) { if (myWorkshop->currentOperation()) // Do not change activation of parts if an operation active @@ -1380,7 +1541,7 @@ void PartSet_Module::onTreeViewDoubleClick(const QModelIndex& theIndex) } } - +//****************************************************** void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*) { // z layer is created for all started operations in order to visualize operation AIS presentation @@ -1408,16 +1569,8 @@ void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*) } // if there is an active operation with validated widget, // the filters of this widget should be activated in the created view - ModuleBase_Operation* aOperation = myWorkshop->currentOperation(); - if (aOperation) { - ModuleBase_ModelWidget* anActiveWidget = activeWidget(); - if (anActiveWidget) { - ModuleBase_WidgetSelector* aWSelector = - dynamic_cast(anActiveWidget); - if (aWSelector) - aWSelector->activateSelectionAndFilters(true); - } - } + myWorkshop->selectionActivate()->updateSelectionFilters(); + myWorkshop->selectionActivate()->updateSelectionModes(); } //****************************************************** @@ -1426,6 +1579,7 @@ void PartSet_Module::widgetStateChanged(int thePreviousState) mySketchMgr->widgetStateChanged(thePreviousState); } +//****************************************************** bool PartSet_Module::processEnter(const std::string& thePreviousAttributeID) { return mySketchReentrantMgr->processEnter(thePreviousAttributeID); @@ -1512,10 +1666,15 @@ XGUI_Workshop* PartSet_Module::getWorkshop() const return aConnector->workshop(); } -//****************************************************** void PartSet_Module::setDefaultConstraintShown() { myHasConstraintShown[PartSet_Tools::Geometrical] = true; myHasConstraintShown[PartSet_Tools::Dimensional] = true; myHasConstraintShown[PartSet_Tools::Expressions] = false; } + +//****************************************************** +ModuleBase_ITreeNode* PartSet_Module::rootNode() const +{ + return myRoot; +}