X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FPartSet%2FPartSet_WidgetSketchLabel.cpp;h=96a84446d9d17eab9a8804e2d17643f13b3d1b32;hb=9fadaebe6d57d0836c7997ee60eb4cfdb67e2ffb;hp=aa209656b328a61230ef0ff4e5efe3eacce1a881;hpb=b3695c3af5289903f1c0fa01bbb7c40203c5e544;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetSketchLabel.cpp b/src/PartSet/PartSet_WidgetSketchLabel.cpp index aa209656b..96a84446d 100644 --- a/src/PartSet/PartSet_WidgetSketchLabel.cpp +++ b/src/PartSet/PartSet_WidgetSketchLabel.cpp @@ -25,23 +25,24 @@ #include "SketchPlugin_SketchEntity.h" -#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 @@ -193,18 +194,24 @@ QList PartSet_WidgetSketchLabel::getControls() const return aResult; } -void PartSet_WidgetSketchLabel::onSelectionChanged() +bool PartSet_WidgetSketchLabel::processSelection() { + std::shared_ptr aPlane = plane(); + if (aPlane.get()) + return false; + QList aSelected = getFilteredSelected(); if (aSelected.empty()) - return; + return false; ModuleBase_ViewerPrsPtr aPrs = aSelected.first(); bool aDone = setSelectionInternal(aSelected, false); if (aDone) { updateByPlaneSelected(aPrs); updateObject(myFeature); } + + return aDone; } void PartSet_WidgetSketchLabel::onShowConstraint(bool theOn) @@ -272,8 +279,27 @@ bool PartSet_WidgetSketchLabel::setSelectionInternal( void PartSet_WidgetSketchLabel::updateByPlaneSelected(const ModuleBase_ViewerPrsPtr& thePrs) { - // 1. hide main planes if they have been displayed + // 1. hide main planes if they have been displayed and display sketch preview plane myPreviewPlanes->erasePreviewPlanes(myWorkshop); + + PartSet_Module* aModule = dynamic_cast(myWorkshop->module()); + if (aModule) { + CompositeFeaturePtr aSketch = std::dynamic_pointer_cast(myFeature); + bool isSetSizeOfView = false; + double aSizeOfView = 0; + QString aSizeOfViewStr = mySizeOfView->text(); + if (!aSizeOfViewStr.isEmpty()) { + aSizeOfView = aSizeOfViewStr.toDouble(&isSetSizeOfView); + if (isSetSizeOfView && aSizeOfView <= 0) { + isSetSizeOfView = false; + } + } + if (isSetSizeOfView) + aModule->sketchMgr()->previewSketchPlane()->setSizeOfView(aSizeOfView, true); + aModule->sketchMgr()->previewSketchPlane()->createSketchPlane(aSketch, myWorkshop); + if (isSetSizeOfView) + aModule->sketchMgr()->previewSketchPlane()->setSizeOfView(aSizeOfView, false); + } // 2. if the planes were displayed, change the view projection const GeomShapePtr& aShape = thePrs->shape(); std::shared_ptr aGShape; @@ -294,7 +320,8 @@ void PartSet_WidgetSketchLabel::updateByPlaneSelected(const ModuleBase_ViewerPrs // If the selected object is a sketch then use its plane std::shared_ptr aPlane; ObjectPtr aObj = thePrs->object(); - if (aObj.get()) { + // obsolete as selected sketch is stored in external attribute + /*if (aObj.get()) { FeaturePtr aFeature = ModelAPI_Feature::feature(aObj); if (aFeature.get() && (aFeature != feature())) { if (aFeature->getKind() == SketchPlugin_Sketch::ID()) { @@ -303,7 +330,7 @@ void PartSet_WidgetSketchLabel::updateByPlaneSelected(const ModuleBase_ViewerPrs aPlane = PartSet_Tools::sketchPlane(aSketch); } } - } + }*/ if (aGShape.get() != NULL) { // get plane parameters if (!aPlane.get()) { @@ -350,17 +377,14 @@ void PartSet_WidgetSketchLabel::updateByPlaneSelected(const ModuleBase_ViewerPrs //myLabel->setText(""); //myLabel->setToolTip(""); XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(myWorkshop); - disconnect(aWorkshop->selector(), SIGNAL(selectionChanged()), - this, SLOT(onSelectionChanged())); - // 4. deactivate face selection filter - activateFilters(false); // 5. Clear selection mode and define sketching mode emit planeSelected(plane()); // after the plane is selected in the sketch, the sketch selection should be activated // it can not be performed in the sketch label widget because, we don't need to switch off // the selection by any label deactivation, but need to switch it off by stop the sketch - activateSelection(true); + myWorkshop->selectionActivate()->updateSelectionFilters(); + myWorkshop->selectionActivate()->updateSelectionModes(); // 6. Update sketcher actions XGUI_ActionsMgr* anActMgr = aWorkshop->actionsMgr(); @@ -452,17 +476,6 @@ bool PartSet_WidgetSketchLabel::fillSketchPlaneBySelection(const ModuleBase_View if (thePrs->object() && (feature() != thePrs->object())) { FeaturePtr aFeature = ModelAPI_Feature::feature(thePrs->object()); - if (aFeature.get() && (aFeature != feature())) { - if (aFeature->getKind() == SketchPlugin_Sketch::ID()) { - CompositeFeaturePtr aSketch = - std::dynamic_pointer_cast(aFeature); - std::shared_ptr aPlane = PartSet_Tools::sketchPlane(aSketch); - if (aPlane.get()) { - aDir = setSketchPlane(aPlane); - return aDir.get(); - } - } - } DataPtr aData = feature()->data(); AttributeSelectionPtr aSelAttr = std::dynamic_pointer_cast @@ -497,7 +510,6 @@ void PartSet_WidgetSketchLabel::activateCustom() std::shared_ptr aPlane = plane(); if (aPlane.get()) { myStackWidget->setCurrentIndex(1); - activateSelection(true); return; } @@ -507,7 +519,7 @@ void PartSet_WidgetSketchLabel::activateCustom() // Clear previous selection mode It is necessary for correct activation of preview planes XGUI_Workshop* aWorkshop = XGUI_Tools::workshop(myWorkshop); XGUI_Displayer* aDisp = aWorkshop->displayer(); - aDisp->activateObjects(QIntList(), aDisp->displayedObjects(), false); + aWorkshop->selectionActivate()->activateObjects(QIntList(), aDisp->displayedObjects(), false); if (!aBodyIsVisualized) { // We have to select a plane before any operation @@ -516,43 +528,35 @@ void PartSet_WidgetSketchLabel::activateCustom() } else mySizeOfViewWidget->setVisible(false); - - activateSelection(true); - - connect(XGUI_Tools::workshop(myWorkshop)->selector(), SIGNAL(selectionChanged()), - this, SLOT(onSelectionChanged())); - activateFilters(true); } void PartSet_WidgetSketchLabel::deactivate() { - ModuleBase_ModelWidget::deactivate(); + ModuleBase_WidgetValidated::deactivate(); bool aHidePreview = myPreviewPlanes->isPreviewDisplayed(); myPreviewPlanes->erasePreviewPlanes(myWorkshop); - activateSelection(false); - activateFilters(false); if (aHidePreview) myWorkshop->viewer()->update(); } -void PartSet_WidgetSketchLabel::activateSelection(bool toActivate) +void PartSet_WidgetSketchLabel::selectionModes(int& theModuleSelectionModes, QIntList& theModes) { - if (toActivate) { - QIntList aModes; - std::shared_ptr aPlane = plane(); - if (aPlane.get()) { - myWorkshop->module()->activeSelectionModes(aModes); - } - else { - aModes << TopAbs_FACE; - } - myWorkshop->activateSubShapesSelection(aModes); - } else { - myWorkshop->deactivateSubShapesSelection(); - } + theModuleSelectionModes = -1; + std::shared_ptr aPlane = plane(); + if (!aPlane.get()) + theModes << TopAbs_FACE; } +void PartSet_WidgetSketchLabel::selectionFilters(QIntList& theModuleSelectionFilters, + SelectMgr_ListOfFilter& theSelectionFilters) +{ + std::shared_ptr aPlane = plane(); + if (aPlane.get()) + return; + return ModuleBase_WidgetValidated::selectionFilters(theModuleSelectionFilters, + theSelectionFilters); +} std::shared_ptr PartSet_WidgetSketchLabel::setSketchPlane(const TopoDS_Shape& theShape)