X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2FPartSet%2FPartSet_SketcherMgr.cpp;h=6e5a2d3850ca4651198483d0729182a70ee02be3;hb=c856f50b73f4a8ac6c13cc657f0b68cbcd5ae76f;hp=48ba4156b1ad13090d15233a430ddc0c2b8b9525;hpb=f14192492e36f4febc93b2ad7ab7f866cbbdf71b;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_SketcherMgr.cpp b/src/PartSet/PartSet_SketcherMgr.cpp index 48ba4156b..6e5a2d385 100644 --- a/src/PartSet/PartSet_SketcherMgr.cpp +++ b/src/PartSet/PartSet_SketcherMgr.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -102,9 +102,8 @@ #include #include -//#include #include -#include +#include #include #include @@ -170,10 +169,17 @@ void getAttributesOrResults(const Handle(SelectMgr_EntityOwner)& theOwner, } PartSet_SketcherMgr::PartSet_SketcherMgr(PartSet_Module* theModule) - : QObject(theModule), myModule(theModule), myIsEditLaunching(false), myIsDragging(false), - myDragDone(false), myIsMouseOverWindow(false), - myIsMouseOverViewProcessed(true), myPreviousUpdateViewerEnabled(true), - myIsPopupMenuActive(false), myExternalPointsMgr(0), myNoDragMoving(false) + : QObject(theModule), + myModule(theModule), + myIsEditLaunching(false), + myIsDragging(false), + myDragDone(false), + myIsMouseOverWindow(false), + myIsMouseOverViewProcessed(true), + myIsPopupMenuActive(false), + myPreviousUpdateViewerEnabled(true), + myExternalPointsMgr(0), + myNoDragMoving(false) { ModuleBase_IWorkshop* anIWorkshop = myModule->workshop(); ModuleBase_IViewer* aViewer = anIWorkshop->viewer(); @@ -361,7 +367,7 @@ bool PartSet_SketcherMgr::isDragModeCreation() const // Acceptable features; QStringList aList; aList << "SketchLine" << "SketchMacroCircle" << "SketchMacroArc" << - "SketchMacroEllipse" << "SketchMacroEllipticArc" << "SketchRectangle"; + "SketchMacroEllipse" << "SketchMacroEllipticArc" << "SketchMacroRectangle"; return aList.contains(aId); } @@ -461,19 +467,6 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE } myPreviousDrawModeEnabled = aViewer->enableDrawMode(false); launchEditing(); - if (aFeature.get() != NULL) { - std::shared_ptr aSPFeature = - std::dynamic_pointer_cast(aFeature); - if (aSPFeature.get() && - (aSPFeature->getKind() == SketchPlugin_ConstraintRadius::ID() || - aSPFeature->getKind() == SketchPlugin_ConstraintAngle::ID())) { - DataPtr aData = aSPFeature->data(); - AttributePtr aAttr = aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()); - std::shared_ptr aFPAttr = - std::dynamic_pointer_cast(aAttr); - aFPAttr->setValue(myCurrentPoint.myCurX, myCurrentPoint.myCurY); - } - } } else if (isSketchOpe && isEditing) { // If selected another object commit current result bool aPrevLaunchingState = myIsEditLaunching; @@ -516,12 +509,12 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE } myIsEditLaunching = aPrevLaunchingState; if (aFeature.get() != NULL) { - std::shared_ptr aSPFeature = + std::shared_ptr aSketchFeature = std::dynamic_pointer_cast(aFeature); - if (aSPFeature.get() && - (aSPFeature->getKind() == SketchPlugin_ConstraintRadius::ID() || - aSPFeature->getKind() == SketchPlugin_ConstraintAngle::ID())) { - DataPtr aData = aSPFeature->data(); + if (aSketchFeature.get() && + (aSketchFeature->getKind() == SketchPlugin_ConstraintRadius::ID() || + aSketchFeature->getKind() == SketchPlugin_ConstraintAngle::ID())) { + DataPtr aData = aSketchFeature->data(); AttributePtr aAttr = aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()); std::shared_ptr aFPAttr = std::dynamic_pointer_cast(aAttr); @@ -685,7 +678,6 @@ void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEve #endif Handle(V3d_View) aView = theWnd->v3dView(); - gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView); Point aMousePnt; get2dPoint(theWnd, theEvent, aMousePnt); @@ -1103,6 +1095,8 @@ void PartSet_SketcherMgr::startSketch(ModuleBase_Operation* theOperation) myCurrentSketch = std::dynamic_pointer_cast(aFOperation->feature()); double aSizeOfView = 0; std::shared_ptr aCentralPoint; + // Reset size of view from previous launches + mySketchPlane->setSizeOfView(aSizeOfView, false, aCentralPoint); if (aFOperation->isEditOperation() && mySketchPlane->getDefaultSizeOfView(myCurrentSketch, aSizeOfView, aCentralPoint)) { mySketchPlane->setSizeOfView(aSizeOfView, true, aCentralPoint); @@ -1169,9 +1163,8 @@ void PartSet_SketcherMgr::startSketch(ModuleBase_Operation* theOperation) #ifdef DEBUG_SKETCHER_ENTITIES anInfo.append(ModuleBase_Tools::objectInfo(aFeature)); #endif - std::list aResults = aFeature->results(); - std::list::const_iterator aIt; - for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) { + std::list aFeatResults = aFeature->results(); + for (aIt = aFeatResults.begin(); aIt != aFeatResults.end(); ++aIt) { if ((*aIt)->isDisplayed()) // Display object if it was created outside of GUI aECreator->sendUpdated((*aIt), EVENT_DISP); @@ -1189,7 +1182,6 @@ void PartSet_SketcherMgr::startSketch(ModuleBase_Operation* theOperation) qDebug(QString("startSketch: %1, %2").arg(anInfo.size()).arg(anInfoStr).toStdString().c_str()); #endif - bool aHasPlane = false; std::shared_ptr aPln; aPln = PartSet_Tools::sketchPlane(myCurrentSketch); Handle(SelectMgr_Filter) aFilter = myModule->selectionFilter(SF_SketchPlaneFilter); @@ -1199,8 +1191,8 @@ void PartSet_SketcherMgr::startSketch(ModuleBase_Operation* theOperation) workshop()->selectionActivate()->updateSelectionFilters(); workshop()->selectionActivate()->updateSelectionModes(); - Events_Loop::loop()->flush(EVENT_DISP); Events_Loop::loop()->flush(EVENT_ATTR); + Events_Loop::loop()->flush(EVENT_DISP); myExternalPointsMgr = new PartSet_ExternalPointsMgr(myModule->workshop(), myCurrentSketch); @@ -1505,8 +1497,6 @@ bool PartSet_SketcherMgr::canDisplayConstraint(const FeaturePtr& theFeature, std::string aKind = theFeature->getKind(); if (aConstrIds.contains(QString(aKind.c_str()))) { - bool isTypedConstraint = false; - switch (theState) { case PartSet_Tools::Dimensional: { bool isDistance = isDistanceKind(aKind); @@ -1713,10 +1703,10 @@ bool PartSet_SketcherMgr::setDistanceValueByPreselection(ModuleBase_Operation* t anAISIO = anAIS->impl(); } if (anAIS.get() != NULL) { - Handle(AIS_InteractiveObject) anAISIO = anAIS->impl(); + anAISIO = anAIS->impl(); if (!anAISIO.IsNull()) { - Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(anAISIO); + Handle(PrsDim_Dimension) aDim = Handle(PrsDim_Dimension)::DownCast(anAISIO); if (!aDim.IsNull()) { gp_Pnt aPosition = aDim->GetTextPosition(); @@ -1756,8 +1746,6 @@ void PartSet_SketcherMgr::getSelectionOwners(const FeaturePtr& theFeature, std::map aSelectedAttributes = anInfo.myAttributes; std::set aSelectedResults = anInfo.myResults; - ModuleBase_IViewer* aViewer = theWorkshop->viewer(); - XGUI_ModuleConnector* aConnector = dynamic_cast(theWorkshop); XGUI_Displayer* aDisplayer = aConnector->workshop()->displayer(); @@ -1789,10 +1777,10 @@ void PartSet_SketcherMgr::getSelectionOwners(const FeaturePtr& theFeature, } for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) { ResultPtr aResult = *aIt; - AISObjectPtr aAISObj = aDisplayer->getAISObject(aResult); - if (aAISObj.get() == NULL) + AISObjectPtr aResAISObj = aDisplayer->getAISObject(aResult); + if (aResAISObj.get() == NULL) continue; - Handle(AIS_InteractiveObject) anAISIO = aAISObj->impl(); + Handle(AIS_InteractiveObject) anAISIO = aResAISObj->impl(); SelectMgr_IndexedMapOfOwner aSelectedOwners; aConnector->workshop()->selector()->selection()->entityOwners(anAISIO, aSelectedOwners); @@ -1828,13 +1816,13 @@ void PartSet_SketcherMgr::getSelectionOwners(const FeaturePtr& theFeature, // result owners are put in the list of selection only if local selected shapes were not // found if (aSelectedResults.find(aResult) != aSelectedResults.end()) { - for ( Standard_Integer i = 1, n = aSelectedOwners.Extent(); i <= n; i++ ) { + for (Standard_Integer i = 1, n = aSelectedOwners.Extent(); i <= n; i++ ) { Handle(StdSelect_BRepOwner) anOwner = - Handle(StdSelect_BRepOwner)::DownCast(aSelectedOwners(i)); - if ( anOwner.IsNull() || !anOwner->HasShape() || theOwnersToSelect.FindIndex(anOwner)) + Handle(StdSelect_BRepOwner)::DownCast(aSelectedOwners(i)); + if (anOwner.IsNull() || !anOwner->HasShape() || theOwnersToSelect.FindIndex(anOwner)) continue; - // select whole result - theOwnersToSelect.Add(anOwner); + // select whole result + theOwnersToSelect.Add(anOwner); } } } @@ -1868,8 +1856,8 @@ void PartSet_SketcherMgr::widgetStateChanged(int thePreviousState) ModuleBase_OperationFeature* aFOperation = dynamic_cast (getCurrentOperation()); if (aFOperation) { - if (PartSet_SketcherMgr::isSketchOperation(aFOperation) || - isNestedSketchOperation(aFOperation) && + if ((PartSet_SketcherMgr::isSketchOperation(aFOperation) || + isNestedSketchOperation(aFOperation)) && thePreviousState == ModuleBase_ModelWidget::ModifiedInPP) { FeaturePtr aFeature = aFOperation->feature(); visualizeFeature(aFeature, aFOperation->isEditOperation(), canDisplayObject(aFeature)); @@ -1928,9 +1916,6 @@ void PartSet_SketcherMgr::visualizeFeature(const FeaturePtr& theFeature, if (isEditOperation || !theFeature.get()) return; - ModuleBase_IWorkshop* aWorkshop = myModule->workshop(); - XGUI_ModuleConnector* aConnector = dynamic_cast(aWorkshop); - // 1. change visibility of the object itself, here the presentable object is processed, // e.g. constraints features //FeaturePtr aFeature = aFOperation->feature(); @@ -2017,8 +2002,8 @@ void PartSet_SketcherMgr::storeSelection(const SelectionType theType, std::list aResults = aFeature->results(); std::list::const_iterator aIt; for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) { - ResultPtr aResult = *aIt; - getAttributesOrResults(anOwner, aFeature, aSketch, aResult, + ResultPtr aCurResult = *aIt; + getAttributesOrResults(anOwner, aFeature, aSketch, aCurResult, anInfo.myAttributes, anInfo.myResults, anInfo.myLocalSelectedShapes); } } @@ -2069,8 +2054,6 @@ void PartSet_SketcherMgr::updateBySketchParameters( case PartSet_Tools::Geometrical: case PartSet_Tools::Dimensional: { if (aPrevState != theState) { - ModuleBase_IWorkshop* aWorkshop = myModule->workshop(); - XGUI_ModuleConnector* aConnector = dynamic_cast(aWorkshop); int aNumberOfSubs = myCurrentSketch->numberOfSubs(); for (int i = 0; i < aNumberOfSubs; i++) { FeaturePtr aSubFeature = myCurrentSketch->subFeature(i); @@ -2095,6 +2078,8 @@ void PartSet_SketcherMgr::updateBySketchParameters( } } break; + default: // [to avoid compilation warning] + break; } } @@ -2231,9 +2216,9 @@ void PartSet_SketcherMgr::processEvent(const std::shared_ptr& th FeaturePtr aFeature = std::dynamic_pointer_cast(*aIt); if (aFeature.get()) { std::list aRes = aFeature->results(); - std::list::const_iterator aIt; - for (aIt = aRes.cbegin(); aIt != aRes.cend(); ++aIt) { - ModuleBase_ViewerPrsPtr aPrsPtr(new ModuleBase_ViewerPrs(*aIt)); + std::list::const_iterator aRIt; + for (aRIt = aRes.cbegin(); aRIt != aRes.cend(); ++aRIt) { + ModuleBase_ViewerPrsPtr aPrsPtr(new ModuleBase_ViewerPrs(*aRIt)); aPrsList.append(aPrsPtr); } } @@ -2269,7 +2254,7 @@ bool isIncludeToResult(const ObjectPtr& theObject) for (aIt = aRefsToMe.cbegin(); aIt != aRefsToMe.cend(); ++aIt) { if ((*aIt)->id() == SketchPlugin_Projection::PROJECTED_FEATURE_ID()) { FeaturePtr aFeature = std::dynamic_pointer_cast((*aIt)->owner()); - if (aFeature.get()) { + if (aFeature.get() && !aFeature->isMacro()) { anAttr = aFeature->data()->boolean(SketchPlugin_Projection::INCLUDE_INTO_RESULT()); if (anAttr.get()) return anAttr->value(); @@ -2283,26 +2268,27 @@ bool isIncludeToResult(const ObjectPtr& theObject) std::vector PartSet_SketcherMgr::colorOfObject(const ObjectPtr& theObject, const FeaturePtr& theFeature, bool isConstruction) const { - static const QStringList& aConstrIds = constraintsIdList(); PartSet_OverconstraintListener* aOCListener = myModule->overconstraintListener(); std::string aKind = theFeature->getKind(); + if (aOCListener->isConflictingObject(theObject)) { + return Config_PropManager::color("Visualization", "sketch_overconstraint_color"); + } if (isDistanceKind(aKind)) { - if (aOCListener->isConflictingObject(theObject)) - return Config_PropManager::color("Visualization", "sketch_overconstraint_color"); return Config_PropManager::color("Visualization", "sketch_dimension_color"); } if (isExternal(theFeature)) return Config_PropManager::color("Visualization", "sketch_external_color"); - if (isConstruction) - return Config_PropManager::color("Visualization", "sketch_auxiliary_color"); if (aOCListener->isFullyConstrained()) { return Config_PropManager::color("Visualization", "sketch_fully_constrained_color"); } - else if (aOCListener->isConflictingObject(theObject)) { - return Config_PropManager::color("Visualization", "sketch_overconstraint_color"); - } + if (aKind == SketchPlugin_ConstraintCoincidence::ID()) + return std::vector(3, 0); + + if (isConstruction) + return Config_PropManager::color("Visualization", "sketch_auxiliary_color"); + return Config_PropManager::color("Visualization", "sketch_entity_color"); } @@ -2365,8 +2351,8 @@ void PartSet_SketcherMgr::customizeSketchPresentation(const ObjectPtr& theObject // thePrs->setPointMarker(1, 1.); // Set point as a '+' symbol } if (isCopy(aFeature) || !isIncludeToResult(aFeature)) { - double aWidth = thePrs->width(); - thePrs->setWidth(aWidth / 2.5); + double aPrsWidth = thePrs->width(); + thePrs->setWidth(aPrsWidth / 2.5); } double aDeflection = Config_PropManager::real("Visualization", "construction_deflection"); @@ -2403,10 +2389,10 @@ void PartSet_Fitter::fitAll(Handle(V3d_View) theView) for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) { aRes = (*aIt); if (aRes->isDisplayed()) { - FeaturePtr aFeature = ModelAPI_Feature::feature(aRes); - if (aFeature.get()) { + FeaturePtr aCurFeature = ModelAPI_Feature::feature(aRes); + if (aCurFeature.get()) { std::shared_ptr aSPFeature = - std::dynamic_pointer_cast(aFeature); + std::dynamic_pointer_cast(aCurFeature); if (aSPFeature.get()) { bool isAxiliary = aSPFeature->boolean(SketchPlugin_SketchEntity::AUXILIARY_ID())->value();