X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ViewerProxy.cpp;h=1d8923579eae739d8eb62c4d777cdbd24fb45e85;hb=745c72679f6346375d5e886b25cc3865f3c4daae;hp=4b82e3ed627b289936b4967ed3dd504302dcf052;hpb=3e5f9ac99e64ed6b62dcf8d67acf825a87639f3f;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ViewerProxy.cpp b/src/XGUI/XGUI_ViewerProxy.cpp index 4b82e3ed6..1d8923579 100644 --- a/src/XGUI/XGUI_ViewerProxy.cpp +++ b/src/XGUI/XGUI_ViewerProxy.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2021 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 @@ -296,36 +296,40 @@ void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouse void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent) { - if (myIs2dMode) { - bool aHighlight2d = - ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true); - if (aHighlight2d) { - if (myShowHighlight) - eraseHighlight(); - else - updateHighlight(); - } - else { - if (myShowHighlight) - updateHighlight(); - else - eraseHighlight(); - } - } + if (theEvent->buttons() != Qt::NoButton) + eraseHighlight(); else { - bool aHighlight3d = - ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false); - if (aHighlight3d) { - if (myShowHighlight) - eraseHighlight(); - else - updateHighlight(); + if (myIs2dMode) { + bool aHighlight2d = + ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true); + if (aHighlight2d) { + if (myShowHighlight) + eraseHighlight(); + else + updateHighlight(); + } + else { + if (myShowHighlight) + updateHighlight(); + else + eraseHighlight(); + } } else { - if (myShowHighlight) - updateHighlight(); - else - eraseHighlight(); + bool aHighlight3d = + ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false); + if (aHighlight3d) { + if (myShowHighlight) + eraseHighlight(); + else + updateHighlight(); + } + else { + if (myShowHighlight) + updateHighlight(); + else + eraseHighlight(); + } } } emit mouseMove(theWnd, theEvent); @@ -445,49 +449,55 @@ bool XGUI_ViewerProxy::canDragByMouse() const } //*************************************** -void XGUI_ViewerProxy::displayHighlight(FeaturePtr theFeature, const TopoDS_Shape& theIgnoreShape) +Handle(AIS_Shape) createPresentation(const TopoDS_Shape& theShape, double theDeviation) { - Handle(AIS_InteractiveContext) aContext = AISContext(); + Handle(AIS_Shape) aAis = new AIS_Shape(theShape); + aAis->SetColor(HIGHLIGHT_COLOR); + aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost + aAis->Attributes()->SetDeviationCoefficient(theDeviation); + aAis->Attributes()->SetIsoOnPlane(false); + return aAis; +} - double aDeflection; - if (myResult->groupName() == ModelAPI_ResultConstruction::group()) { - //FeaturePtr aFeature = ModelAPI_Feature::feature(myResult); - if (theFeature.get()) { - std::list aResults = theFeature->results(); - std::list::const_iterator aIt; - ResultPtr aRes; - Handle(AIS_Shape) aAis; - for (aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) { - aRes = (*aIt); - TopoDS_Shape aTShape = aRes->shape()->impl(); - if (!aTShape.IsSame(theIgnoreShape)) { - aAis = new AIS_Shape(aTShape); - aAis->SetColor(HIGHLIGHT_COLOR); - aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost - aDeflection = Config_PropManager::real("Visualization", "construction_deflection"); - aAis->Attributes()->SetDeviationCoefficient(aDeflection); - aAis->Attributes()->SetIsoOnPlane(false); - myHighlights.Append(aAis); - aContext->Display(aAis, false); - aContext->Deactivate(aAis); - } - } +//*************************************** +void XGUI_ViewerProxy::createPresentations(const ResultPtr& theRes, + const TopoDS_Shape& theIgnoreShape) +{ + Handle(AIS_InteractiveContext) aContext = AISContext(); + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + Handle(AIS_Shape) aAis; + Handle(AIS_InteractiveObject) anAISIO; + double aDeviation = 0.001; + + TopoDS_Shape aTShape = theRes->shape()->impl(); + if (!aTShape.IsSame(theIgnoreShape)) { + AISObjectPtr aAISPrs = aDisplayer->getAISObject(theRes); + if (aAISPrs.get()) { + anAISIO = aAISPrs->impl(); + aDeviation = anAISIO->Attributes()->DeviationCoefficient(); } - } - else { - TopoDS_Shape aTShape = myResult->shape()->impl(); - Handle(AIS_Shape) aAis = new AIS_Shape(aTShape); - aAis->SetColor(HIGHLIGHT_COLOR); - aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost - aDeflection = Config_PropManager::real("Visualization", "body_deflection"); - aAis->Attributes()->SetDeviationCoefficient(aDeflection); - aAis->Attributes()->SetIsoOnPlane(false); + else { + aDeviation = Config_PropManager::real("Visualization", "construction_deflection"); + } + aAis = createPresentation(aTShape, aDeviation); myHighlights.Append(aAis); aContext->Display(aAis, false); aContext->Deactivate(aAis); } } + +void XGUI_ViewerProxy::displayHighlight(FeaturePtr theFeature, const TopoDS_Shape& theIgnoreShape) +{ + if (theFeature.get()) { + std::list aResults = theFeature->results(); + std::list::const_iterator aIt; + for (aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) { + createPresentations((*aIt), theIgnoreShape); + } + } +} + bool XGUI_ViewerProxy::eraseHighlight() { Handle(AIS_InteractiveContext) aContext = AISContext(); @@ -546,36 +556,40 @@ void XGUI_ViewerProxy::updateHighlight() #ifdef HAVE_SALOME void XGUI_ViewerProxy::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent) { - if (myIs2dMode) { - bool aHighlight2d = - ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true); - if (aHighlight2d) { - if (myShowHighlight) - eraseHighlight(); - else - updateHighlight(); - } - else { - if (myShowHighlight) - updateHighlight(); - else - eraseHighlight(); - } - } + if (theEvent->buttons() != Qt::NoButton) + eraseHighlight(); else { - bool aHighlight3d = - ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false); - if (aHighlight3d) { - if (myShowHighlight) - eraseHighlight(); - else - updateHighlight(); + if (myIs2dMode) { + bool aHighlight2d = + ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true); + if (aHighlight2d) { + if (myShowHighlight) + eraseHighlight(); + else + updateHighlight(); + } + else { + if (myShowHighlight) + updateHighlight(); + else + eraseHighlight(); + } } else { - if (myShowHighlight) - updateHighlight(); - else - eraseHighlight(); + bool aHighlight3d = + ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false); + if (aHighlight3d) { + if (myShowHighlight) + eraseHighlight(); + else + updateHighlight(); + } + else { + if (myShowHighlight) + updateHighlight(); + else + eraseHighlight(); + } } } emit mouseMove(theWnd, theEvent); @@ -685,7 +699,7 @@ void XGUI_ViewerProxy::setColorScaleTitle(const QString& theText) myWorkshop->salomeConnector()->viewer()->setColorScaleTitle(theText); #else Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); - aColorScale->SetTitle(theText.toStdString().c_str()); + aColorScale->SetTitle(theText.toStdWString().c_str()); #endif }