From b2f2d91e326c83c8f455cec7dc32546d810a2376 Mon Sep 17 00:00:00 2001 From: vsv Date: Mon, 20 Apr 2020 20:20:03 +0300 Subject: [PATCH] Issue #19008: Processing of sub-shapes of a complex body with deflection --- src/XGUI/XGUI_ViewerProxy.cpp | 59 ++++++++++++++++++++++------------- src/XGUI/XGUI_ViewerProxy.h | 1 + 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/src/XGUI/XGUI_ViewerProxy.cpp b/src/XGUI/XGUI_ViewerProxy.cpp index e6376a47c..a9c427d62 100644 --- a/src/XGUI/XGUI_ViewerProxy.cpp +++ b/src/XGUI/XGUI_ViewerProxy.cpp @@ -449,35 +449,50 @@ 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_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; +} + +//*************************************** +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 { + aDeviation = Config_PropManager::real("Visualization", "construction_deflection"); + } + aAis = createPresentation(aTShape, aDeviation); + myHighlights.Append(aAis); + aContext->Display(aAis, false); + aContext->Deactivate(aAis); + } +} + - double aDeflection; +void XGUI_ViewerProxy::displayHighlight(FeaturePtr theFeature, const TopoDS_Shape& theIgnoreShape) +{ if (theFeature.get()) { std::list aResults = theFeature->results(); std::list::const_iterator aIt; - XGUI_Displayer* aDisplayer = myWorkshop->displayer(); - ResultPtr aRes; - Handle(AIS_InteractiveObject) anAISIO; - Handle(AIS_Shape) aAis; for (aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) { - aRes = (*aIt); - TopoDS_Shape aTShape = aRes->shape()->impl(); - if (!aTShape.IsSame(theIgnoreShape)) { - anAISIO = aDisplayer->getAISObject(aRes)->impl(); - if (!anAISIO.IsNull()) { - aAis = new AIS_Shape(aTShape); - aAis->SetColor(HIGHLIGHT_COLOR); - aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost - aDeflection = anAISIO->Attributes()->DeviationCoefficient(); - aAis->Attributes()->SetDeviationCoefficient(aDeflection); - aAis->Attributes()->SetIsoOnPlane(false); - myHighlights.Append(aAis); - aContext->Display(aAis, false); - aContext->Deactivate(aAis); - } - } + createPresentations((*aIt), theIgnoreShape); } } } diff --git a/src/XGUI/XGUI_ViewerProxy.h b/src/XGUI/XGUI_ViewerProxy.h index f31a03376..430c53e4c 100644 --- a/src/XGUI/XGUI_ViewerProxy.h +++ b/src/XGUI/XGUI_ViewerProxy.h @@ -217,6 +217,7 @@ private slots: private: void displayHighlight(FeaturePtr theFeature, const TopoDS_Shape& theIgnoreShape); bool eraseHighlight(); + void createPresentations(const ResultPtr& theRes, const TopoDS_Shape& theIgnoreShape); XGUI_Workshop* myWorkshop; -- 2.39.2