X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetSketchLabel.cpp;h=74a7ee5e3074f3b350543905bab37d561f2442da;hb=383021cb51c4720904096ca851db5ee79255b402;hp=8a45411db9b0b3147c83eb74b5b0ef63b3dcdec7;hpb=9bbbe88cc0ba2e6bc814fedf5cd0c5dd05a9dacc;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetSketchLabel.cpp b/src/PartSet/PartSet_WidgetSketchLabel.cpp index 8a45411db..74a7ee5e3 100644 --- a/src/PartSet/PartSet_WidgetSketchLabel.cpp +++ b/src/PartSet/PartSet_WidgetSketchLabel.cpp @@ -132,7 +132,7 @@ PartSet_WidgetSketchLabel::~PartSet_WidgetSketchLabel() { } -bool PartSet_WidgetSketchLabel::setSelection(QList& theValues, +bool PartSet_WidgetSketchLabel::setSelection(QList& theValues, const bool theToValidate) { // do not use the given selection if the plane of the sketch has been already set. @@ -141,7 +141,7 @@ bool PartSet_WidgetSketchLabel::setSelection(QList& theVal if (plane().get()) return true; - ModuleBase_ViewerPrs aPrs = theValues.first(); + ModuleBase_ViewerPrsPtr aPrs = theValues.first(); bool aDone = setSelectionInternal(theValues, theToValidate); if (aDone) updateByPlaneSelected(aPrs); @@ -157,11 +157,11 @@ QList PartSet_WidgetSketchLabel::getControls() const void PartSet_WidgetSketchLabel::onSelectionChanged() { - QList aSelected = getFilteredSelected(); + QList aSelected = getFilteredSelected(); if (aSelected.empty()) return; - ModuleBase_ViewerPrs aPrs = aSelected.first(); + ModuleBase_ViewerPrsPtr aPrs = aSelected.first(); bool aDone = setSelectionInternal(aSelected, false); if (aDone) { updateByPlaneSelected(aPrs); @@ -209,19 +209,19 @@ void PartSet_WidgetSketchLabel::blockAttribute(const AttributePtr& theAttribute, } } -bool PartSet_WidgetSketchLabel::setSelectionInternal(const QList& theValues, +bool PartSet_WidgetSketchLabel::setSelectionInternal(const QList& theValues, const bool theToValidate) { bool aDone = false; - ModuleBase_ViewerPrs aValue; if (theValues.empty()) { // In order to make reselection possible, set empty object and shape should be done - setSelectionCustom(ModuleBase_ViewerPrs()); + setSelectionCustom(std::shared_ptr( + new ModuleBase_ViewerPrs(ObjectPtr(), GeomShapePtr(), NULL))); aDone = false; } else { // it removes the processed value from the parameters list - aValue = theValues.first();//.takeFirst(); + ModuleBase_ViewerPrsPtr aValue = theValues.first();//.takeFirst(); if (!theToValidate || isValidInFilters(aValue)) aDone = setSelectionCustom(aValue); } @@ -229,12 +229,12 @@ bool PartSet_WidgetSketchLabel::setSelectionInternal(const QListerasePreviewPlanes(myWorkshop); // 2. if the planes were displayed, change the view projection - const GeomShapePtr& aShape = thePrs.shape(); + const GeomShapePtr& aShape = thePrs->shape(); std::shared_ptr aGShape; std::shared_ptr aBaseShape; @@ -340,16 +340,16 @@ void PartSet_WidgetSketchLabel::restoreAttributeValue(const AttributePtr& theAtt } } -bool PartSet_WidgetSketchLabel::setSelectionCustom(const ModuleBase_ViewerPrs& thePrs) +bool PartSet_WidgetSketchLabel::setSelectionCustom(const ModuleBase_ViewerPrsPtr& thePrs) { return fillSketchPlaneBySelection(feature(), thePrs); } -bool PartSet_WidgetSketchLabel::canFillSketch(const ModuleBase_ViewerPrs& thePrs) +bool PartSet_WidgetSketchLabel::canFillSketch(const ModuleBase_ViewerPrsPtr& thePrs) { bool aCanFillSketch = true; // avoid any selection on sketch object - ObjectPtr anObject = thePrs.object(); + ObjectPtr anObject = thePrs->object(); ResultPtr aResult = std::dynamic_pointer_cast(anObject); if (aResult.get()) { FeaturePtr aFeature = ModelAPI_Feature::feature(aResult); @@ -360,7 +360,7 @@ bool PartSet_WidgetSketchLabel::canFillSketch(const ModuleBase_ViewerPrs& thePrs if (aCanFillSketch) { std::shared_ptr aGeomFace; - GeomShapePtr aGeomShape = thePrs.shape(); + GeomShapePtr aGeomShape = thePrs->shape(); if ((!aGeomShape.get() || aGeomShape->isNull()) && aResult.get()) { aGeomShape = aResult->shape(); } @@ -376,20 +376,20 @@ bool PartSet_WidgetSketchLabel::canFillSketch(const ModuleBase_ViewerPrs& thePrs } bool PartSet_WidgetSketchLabel::fillSketchPlaneBySelection(const FeaturePtr& theFeature, - const ModuleBase_ViewerPrs& thePrs) + const ModuleBase_ViewerPrsPtr& thePrs) { bool isOwnerSet = false; - const GeomShapePtr& aShape = thePrs.shape(); + const GeomShapePtr& aShape = thePrs->shape(); std::shared_ptr aDir; - if (thePrs.object() && (theFeature != thePrs.object())) { + if (thePrs->object() && (theFeature != thePrs->object())) { DataPtr aData = theFeature->data(); AttributeSelectionPtr aSelAttr = std::dynamic_pointer_cast (aData->attribute(SketchPlugin_SketchEntity::EXTERNAL_ID())); if (aSelAttr) { - ResultPtr aRes = std::dynamic_pointer_cast(thePrs.object()); + ResultPtr aRes = std::dynamic_pointer_cast(thePrs->object()); if (aRes) { GeomShapePtr aShapePtr(new GeomAPI_Shape()); if (!aShape.get() || aShape->isNull()) { // selection happens in the OCC viewer @@ -424,6 +424,12 @@ void PartSet_WidgetSketchLabel::activateCustom() myStackWidget->setCurrentIndex(0); bool aBodyIsVisualized = myPreviewPlanes->hasVisualizedBodies(myWorkshop); + + // 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); + if (!aBodyIsVisualized) { // We have to select a plane before any operation myPreviewPlanes->showPreviewPlanes(myWorkshop);