X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Selection.cpp;h=7a80eb0a9c8bcf3b5017ac250aa91fe19333591d;hb=4de8d53fef7532b6843d79c970f55ad46f98da62;hp=9e29e8b1b08bf729dd70ae701143b374d9bef318;hpb=c4eab94a20a0d93100549a210582d46409fec1cc;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Selection.cpp b/src/XGUI/XGUI_Selection.cpp index 9e29e8b1b..7a80eb0a9 100644 --- a/src/XGUI/XGUI_Selection.cpp +++ b/src/XGUI/XGUI_Selection.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2024 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -23,6 +23,10 @@ #include "XGUI_ViewerProxy.h" #include "XGUI_ObjectsBrowser.h" +#ifndef HAVE_SALOME +#include +#endif + #include "ModuleBase_BRepOwner.h" #include "ModuleBase_ResultPrs.h" #include "ModuleBase_ViewerPrs.h" @@ -52,6 +56,10 @@ #include +#ifdef WIN32 +#pragma warning(disable : 4456) // for nested foreach +#endif + #define DEBUG_DELIVERY XGUI_Selection::XGUI_Selection(XGUI_Workshop* theWorkshop) @@ -196,18 +204,33 @@ void XGUI_Selection::getSelectedInBrowser(QList& thePre void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrsPtr& thePrs, const Handle(SelectMgr_EntityOwner)& theOwner) const { - thePrs->setOwner(theOwner); Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable()); +#ifndef HAVE_SALOME + Handle(AIS_ViewCube) aCube = Handle(AIS_ViewCube)::DownCast(anIO); + if (!aCube.IsNull()) + return; +#endif + + thePrs->setOwner(theOwner); thePrs->setInteractive(anIO); // we should not check the appearance of this feature because there can be some selected shapes // for one feature Handle(StdSelect_BRepOwner) aBRO = Handle(StdSelect_BRepOwner)::DownCast(theOwner); if( !aBRO.IsNull() && aBRO->HasShape() ) { + TopoDS_Shape aShape = aBRO->Shape(); + Handle(ModuleBase_ResultPrs) aPrsObj = + Handle(ModuleBase_ResultPrs)::DownCast(aBRO->Selectable()); + if (!aPrsObj.IsNull()) { + if (aPrsObj->isSubstituted()) { + if (aPrsObj->Shape().IsSame(aShape)) + aShape = aPrsObj->originalShape(); + } + } // the located method is called in the context to obtain the shape by the SelectedShape() // method, so the shape is located by the same rules - TopoDS_Shape aShape = aBRO->Shape().Located (aBRO->Location() * aBRO->Shape().Location()); + aShape = aShape.Located(aBRO->Location() * aShape.Location()); #ifdef BEFORE_TRIHEDRON_PATCH #ifndef DEBUG_DELIVERY if (aShape.IsNull()) @@ -278,12 +301,12 @@ void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrsPtr& thePrs, Handle(AIS_TrihedronOwner) aTrihedronOwner = Handle(AIS_TrihedronOwner)::DownCast(theOwner); if (!aTrihedronOwner.IsNull()) { const Prs3d_DatumParts& aPart = aTrihedronOwner->DatumPart(); - std::string aName; + std::wstring aName; switch (aPart) { - case Prs3d_DP_Origin: aName = "Origin"; break; - case Prs3d_DP_XAxis: aName = "OX"; break; - case Prs3d_DP_YAxis: aName = "OY"; break; - case Prs3d_DP_ZAxis: aName = "OZ"; break; + case Prs3d_DP_Origin: aName = L"Origin"; break; + case Prs3d_DP_XAxis: aName = L"OX"; break; + case Prs3d_DP_YAxis: aName = L"OY"; break; + case Prs3d_DP_ZAxis: aName = L"OZ"; break; default: break; } if (aName.length() > 0) { @@ -339,7 +362,6 @@ QList XGUI_Selection::getHighlighted() const return aPresentations; QList aSelectedIds; // Remember of selected address in order to avoid duplicates - XGUI_Displayer* aDisplayer = myWorkshop->displayer(); for (aContext->InitDetected(); aContext->MoreDetected(); aContext->NextDetected()) { Handle(SelectMgr_EntityOwner) anOwner = aContext->DetectedOwner(); if (!anOwner.IsNull()) { @@ -428,14 +450,12 @@ void XGUI_Selection::entityOwners(const Handle(AIS_InteractiveObject)& theObject Handle(SelectMgr_Selection) aSelection = theObject->Selection(aMode); NCollection_Vector anEntities = aSelection->Entities(); - for (NCollection_Vector::Iterator anIt(anEntities); - anIt.More(); - anIt.Next()) { - Handle(SelectMgr_SensitiveEntity) anEntity = anIt.Value(); + for (NCollection_Vector::Iterator anEntIt(anEntities); + anEntIt.More(); anEntIt.Next()) { + Handle(SelectMgr_SensitiveEntity) anEntity = anEntIt.Value(); if (anEntity.IsNull()) continue; - Handle(SelectMgr_EntityOwner) anOwner = - Handle(SelectMgr_EntityOwner)::DownCast(anEntity->BaseSensitive()->OwnerId()); + Handle(SelectMgr_EntityOwner) anOwner = anEntity->BaseSensitive()->OwnerId(); if (!anOwner.IsNull()) theOwners.Add(anOwner); }