X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Selection.cpp;h=a6edd15f9aed56966fc4f9362564e066477b817c;hb=08a596f683652d0694b58dbb14eadfe11163c803;hp=f1d2a09b7c58a738a7b8be2f6c77214469719787;hpb=3b85a6447fe7ec25c2079ffe3466d7266d1361fd;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Selection.cpp b/src/XGUI/XGUI_Selection.cpp index f1d2a09b7..a6edd15f9 100644 --- a/src/XGUI/XGUI_Selection.cpp +++ b/src/XGUI/XGUI_Selection.cpp @@ -1,8 +1,22 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> - -// File: XGUI_Selection.cpp -// Created: 8 July 2014 -// Author: Vitaly SMETANNIKOV +// Copyright (C) 2014-2017 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 +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or +// email : webmaster.salome@opencascade.com +// #include "XGUI_Selection.h" #include "XGUI_Workshop.h" @@ -16,11 +30,16 @@ #include #include #include +#include #include #include +#ifdef BEFORE_TRIHEDRON_PATCH #include #include +#else +#include +#endif #include #include #include @@ -123,7 +142,7 @@ void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrsPtr& thePrs, const Handle(SelectMgr_EntityOwner)& theOwner) const { thePrs->setOwner(theOwner); - + Handle(SelectMgr_SelectableObject) aSelectable = theOwner->Selectable(); Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable()); thePrs->setInteractive(anIO); @@ -135,9 +154,11 @@ void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrsPtr& thePrs, // 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()); +#ifdef BEFORE_TRIHEDRON_PATCH #ifndef DEBUG_DELIVERY if (aShape.IsNull()) aShape = findAxisShape(anIO); +#endif #endif if (!aShape.IsNull()) { std::shared_ptr aGeomShape = @@ -148,6 +169,7 @@ void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrsPtr& thePrs, } else { #ifdef DEBUG_DELIVERY // Fill by trihedron shapes +#ifdef BEFORE_TRIHEDRON_PATCH Handle(AIS_Axis) aAxis = Handle(AIS_Axis)::DownCast(anIO); DocumentPtr aDoc = ModelAPI_Session::get()->moduleDocument(); int aSize = aDoc->size(ModelAPI_ResultConstruction::group()); @@ -197,6 +219,39 @@ void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrsPtr& thePrs, } } } +#else + /// find axis direction + Handle(AIS_TrihedronOwner) aTrihedronOwner = Handle(AIS_TrihedronOwner)::DownCast(theOwner); + if (!aTrihedronOwner.IsNull()) { + const Prs3d_DatumParts& aPart = aTrihedronOwner->DatumPart(); + std::string 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; + default: break; + } + if (aName.length() > 0) { + DocumentPtr aDoc = ModelAPI_Session::get()->moduleDocument(); + int aSize = aDoc->size(ModelAPI_ResultConstruction::group()); + ObjectPtr aObj; + ResultPtr aResult; + for (int i = 0; i < aSize; i++) { + aObj = aDoc->object(ModelAPI_ResultConstruction::group(), i); + if (aObj->data()->name() == aName) { + aResult = std::dynamic_pointer_cast(aObj); + break; + } + } + if (aResult.get()) { + thePrs->setObject(aResult); + thePrs->setShape(aResult->shape()); + return; + } + } + } +#endif #endif } @@ -242,31 +297,15 @@ QList XGUI_Selection::getHighlighted() const fillPresentation(aPrs, anOwner); aPresentations.push_back(aPrs); } - else { // TODO: check why the entity owner is null here, case is selection point on a line - Handle(AIS_InteractiveObject) anIO = aContext->DetectedInteractive(); - ModuleBase_ViewerPrsPtr aPrs(new ModuleBase_ViewerPrs()); - aPrs->setInteractive(anIO); - - ObjectPtr aResult = aDisplayer->getObject(anIO); - // we should not check the appearance of this feature because there can be some selected - // shapes for one feature - aPrs->setObject(aResult); - TopoDS_Shape aShape = aContext->DetectedShape(); - if (!aShape.IsNull()) { - std::shared_ptr aGeomShape = - std::shared_ptr(new GeomAPI_Shape()); - aGeomShape->setImpl(new TopoDS_Shape(aShape)); - aPrs->setShape(aGeomShape); - } - aPresentations.push_back(aPrs); - } } return aPresentations; } QObjectPtrList XGUI_Selection::selectedObjects() const { - return myWorkshop->objectBrowser()->selectedObjects(); + if (myWorkshop->objectBrowser()) + return myWorkshop->objectBrowser()->selectedObjects(); + return QObjectPtrList(); } void XGUI_Selection::setSelectedObjects( const QObjectPtrList& theObjects ) const @@ -364,6 +403,7 @@ void XGUI_Selection::entityOwners(const Handle(AIS_InteractiveObject)& theObject } //************************************************************** +#ifdef BEFORE_TRIHEDRON_PATCH TopoDS_Shape XGUI_Selection::findAxisShape(Handle(AIS_InteractiveObject) theIO) const { TopoDS_Shape aShape; @@ -394,3 +434,4 @@ TopoDS_Shape XGUI_Selection::findAxisShape(Handle(AIS_InteractiveObject) theIO) } return aShape; } +#endif