X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSHAPERGUI%2FSHAPERGUI_SalomeViewer.cpp;h=1f0d054f491c861650d04b4d833b68c8a6739529;hb=c57d2a7f1a57af01656e47e2e510990492404fce;hp=b4a65ead87a200e4461b9420f3638b637b3ecd7c;hpb=4d84ccf9dfa30be18dea333e6a77495e0516ba92;p=modules%2Fshaper.git diff --git a/src/SHAPERGUI/SHAPERGUI_SalomeViewer.cpp b/src/SHAPERGUI/SHAPERGUI_SalomeViewer.cpp index b4a65ead8..1f0d054f4 100644 --- a/src/SHAPERGUI/SHAPERGUI_SalomeViewer.cpp +++ b/src/SHAPERGUI/SHAPERGUI_SalomeViewer.cpp @@ -1,20 +1,40 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 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 "SHAPERGUI_SalomeViewer.h" #include "SHAPERGUI_OCCSelector.h" #include #include - +#include #include #include +#include #include #include #include +#define SALOME_PATCH_FOR_CTRL_WHEEL + SHAPERGUI_SalomeView::SHAPERGUI_SalomeView(OCCViewer_Viewer* theViewer) : ModuleBase_IViewWindow(), myCurrentView(0) { @@ -99,7 +119,7 @@ Handle(V3d_View) SHAPERGUI_SalomeViewer::activeView() const //********************************************** QWidget* SHAPERGUI_SalomeViewer::activeViewPort() const { - QWidget* aViewPort; + QWidget* aViewPort = 0; if (mySelector) { OCCViewer_Viewer* aViewer = mySelector->viewer(); SUIT_ViewManager* aMgr = aViewer->getViewManager(); @@ -133,13 +153,13 @@ void SHAPERGUI_SalomeViewer::setSelector(SHAPERGUI_OCCSelector* theSel) // TODO: Provide ModuleBase_IViewWindow interface connect(aMgr, SIGNAL(lastViewClosed(SUIT_ViewManager*)), this, SIGNAL(lastViewClosed())); - connect(aMgr, SIGNAL(tryCloseView(SUIT_ViewWindow*)), + connect(aMgr, SIGNAL(tryCloseView(SUIT_ViewWindow*)), this, SLOT(onTryCloseView(SUIT_ViewWindow*))); - connect(aMgr, SIGNAL(deleteView(SUIT_ViewWindow*)), + connect(aMgr, SIGNAL(deleteView(SUIT_ViewWindow*)), this, SLOT(onDeleteView(SUIT_ViewWindow*))); - connect(aMgr, SIGNAL(viewCreated(SUIT_ViewWindow*)), + connect(aMgr, SIGNAL(viewCreated(SUIT_ViewWindow*)), this, SLOT(onViewCreated(SUIT_ViewWindow*))); - connect(aMgr, SIGNAL(activated(SUIT_ViewManager*)), + connect(aMgr, SIGNAL(activated(SUIT_ViewManager*)), this, SLOT(onActivated(SUIT_ViewManager*))); connect(aMgr, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), this, @@ -254,7 +274,8 @@ void SHAPERGUI_SalomeViewer::onViewCreated(SUIT_ViewWindow* theView) } reconnectActions(aWnd, true); - myWindowScale.insert (aView->getViewPort()->getView(), aView->getViewPort()->getView()->Camera()->Scale()); + myWindowScale.insert(aView->getViewPort()->getView(), + aView->getViewPort()->getView()->Camera()->Scale()); emit viewCreated(myView); @@ -314,7 +335,7 @@ bool SHAPERGUI_SalomeViewer::enableDrawMode(bool isEnabled) //********************************************** void SHAPERGUI_SalomeViewer::reconnectActions(SUIT_ViewWindow* theWindow, - const bool theUseNewGeomSlot) + const bool theUseSHAPERSlot) { OCCViewer_ViewWindow* aWindow = dynamic_cast(theWindow); if (!aWindow) @@ -324,7 +345,7 @@ void SHAPERGUI_SalomeViewer::reconnectActions(SUIT_ViewWindow* theWindow, if (!anAction) return; - if (theUseNewGeomSlot) { + if (theUseSHAPERSlot) { anAction->disconnect(anAction, SIGNAL(toggled(bool)), theWindow, SLOT(onTrihedronShow(bool))); anAction->connect(anAction, SIGNAL(toggled(bool)), @@ -351,9 +372,29 @@ void SHAPERGUI_SalomeViewer::fitAll() } //********************************************** -void SHAPERGUI_SalomeViewer::setViewProjection(double theX, double theY, double theZ, double theTwist) +void SHAPERGUI_SalomeViewer::eraseAll() { - if (!mySelector) + Handle(AIS_InteractiveContext) aContext = AISContext(); + if (aContext.IsNull()) + return; + AIS_ListOfInteractive aList; + aContext->DisplayedObjects(aList); + AIS_ListIteratorOfListOfInteractive aLIt; + Handle(AIS_InteractiveObject) anAISIO; + for (aLIt.Initialize(aList); aLIt.More(); aLIt.Next()) { + anAISIO = aLIt.Value(); + Handle(Standard_Type) aType = anAISIO->DynamicType(); + if (anAISIO->IsKind(STANDARD_TYPE(SALOME_AISShape))) { + aContext->Erase(anAISIO, false); + } + } +} + +//********************************************** +void SHAPERGUI_SalomeViewer::setViewProjection(double theX, double theY, + double theZ, double theTwist) +{ + if (!mySelector) return; SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager(); @@ -398,7 +439,7 @@ bool SHAPERGUI_SalomeViewer::hasSelectionFilter(const Handle(SelectMgr_Filter)& const SelectMgr_ListOfFilter& aFilters = aContext->Filters(); SelectMgr_ListIteratorOfListOfFilter aIt(aFilters); for (; aIt.More() && !aFoundFilter; aIt.Next()) { - aFoundFilter = theFilter.Access() == aIt.Value().Access(); + aFoundFilter = theFilter.get() == aIt.Value().get(); } } return aFoundFilter; @@ -440,6 +481,11 @@ void SHAPERGUI_SalomeViewer::activateViewer(bool toActivate) if (!mySelector || !mySelector->viewer()) return; SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager(); +#ifdef SALOME_PATCH_FOR_CTRL_WHEEL + OCCViewer_Viewer* aViewer = dynamic_cast(aMgr->getViewModel()); + if (aViewer) + aViewer->setUseLocalSelection(toActivate); +#endif QVector aViews = aMgr->getViews(); if (toActivate) { foreach (SUIT_ViewWindow* aView, aViews) { @@ -453,24 +499,112 @@ void SHAPERGUI_SalomeViewer::activateViewer(bool toActivate) foreach (SUIT_ViewWindow* aView, aViews) { OCCViewer_ViewFrame* aOCCView = dynamic_cast(aView); OCCViewer_ViewWindow* aWnd = aOCCView->getView(OCCViewer_ViewFrame::MAIN_VIEW); - disconnect((OCCViewer_ViewWindow*)aWnd, SIGNAL(vpTransformationFinished(OCCViewer_ViewWindow::OperationType)), + disconnect((OCCViewer_ViewWindow*)aWnd, + SIGNAL(vpTransformationFinished(OCCViewer_ViewWindow::OperationType)), this, SLOT(onViewTransformed(OCCViewer_ViewWindow::OperationType))); reconnectActions(aWnd, false); } } } -void SHAPERGUI_SalomeViewer::Zfitall() +bool SHAPERGUI_SalomeViewer::isColorScaleVisible() const { - if (!mySelector || !mySelector->viewer()) - return; - SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager(); - OCCViewer_ViewFrame* aView = dynamic_cast(aMgr->getActiveView()); - if (aView) { - OCCViewer_ViewWindow* aWnd = aView->getView(OCCViewer_ViewFrame::MAIN_VIEW); - Handle(V3d_View) aView3d = aWnd->getViewPort()->getView(); - aView3d->ZFitAll(); - if (aView3d->Depth() < 0.1) - aView3d->DepthFitAll(); + if (mySelector) { + return mySelector->viewer()->isColorScaleVisible(); } -} \ No newline at end of file + return false; +} + +void SHAPERGUI_SalomeViewer::setColorScaleShown(bool on) +{ + if (mySelector) { + mySelector->viewer()->setColorScaleShown(on); + } +} + +void SHAPERGUI_SalomeViewer::setColorScalePosition(double theX, double theY) +{ + if (mySelector) { + QWidget* aWindow = activeViewPort(); + mySelector->viewer()->getColorScale()->SetPosition(aWindow->width() * theX, + aWindow->height() * theY); + } +} + +void SHAPERGUI_SalomeViewer::setColorScaleSize(double theW, double theH) +{ + if (mySelector) { + QWidget* aWindow = activeViewPort(); + mySelector->viewer()->getColorScale()->SetSize(aWindow->width() * theW, + aWindow->height() * theH); + } +} + +void SHAPERGUI_SalomeViewer::setColorScaleRange(double theMin, double theMax) +{ + if (mySelector) { + mySelector->viewer()->getColorScale()->SetRange(theMin, theMax); + } +} + +void SHAPERGUI_SalomeViewer::setColorScaleIntervals(int theNb) +{ + if (mySelector) { + mySelector->viewer()->getColorScale()->SetNumberOfIntervals(theNb); + } +} + +void SHAPERGUI_SalomeViewer::setColorScaleTextHeigth(int theH) +{ + if (mySelector) { + mySelector->viewer()->getColorScale()->SetTextHeight(theH); + } +} + +void SHAPERGUI_SalomeViewer::setColorScaleTextColor(const QColor& theColor) +{ + if (mySelector) { + Quantity_Color aColor(theColor.redF(), theColor.greenF(), theColor.blueF(), Quantity_TOC_RGB); + mySelector->viewer()->getColorScale()->SetColor(aColor); + } +} + +void SHAPERGUI_SalomeViewer::setColorScaleTitle(const QString& theText) +{ + if (mySelector) { + mySelector->viewer()->getColorScale()->SetTitle(theText.toStdString().c_str()); + } +} + +void SHAPERGUI_SalomeViewer::setFitter(OCCViewer_Fitter* theFitter) +{ + if (mySelector) + mySelector->viewer()->setFitter(theFitter); +} + +OCCViewer_Fitter* SHAPERGUI_SalomeViewer::fitter() const +{ + if (mySelector) + return mySelector->viewer()->fitter(); + return 0; +} + + +//void SHAPERGUI_SalomeViewer::Zfitall() +//{ +// if (!mySelector || !mySelector->viewer()) +// return; +// SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager(); +// /// WORKAROUND for issue #1798. SUIT_ViewManager::closeAllViews() should nullify myActiveView +// /// As a result, we need to check views count in manager +// if (aMgr->getViews().size() > 0) { +// OCCViewer_ViewFrame* aView = dynamic_cast(aMgr->getActiveView()); +// if (aView) { +// OCCViewer_ViewWindow* aWnd = aView->getView(OCCViewer_ViewFrame::MAIN_VIEW); +// Handle(V3d_View) aView3d = aWnd->getViewPort()->getView(); +// aView3d->ZFitAll(); +// if (aView3d->Depth() < 0.1) +// aView3d->DepthFitAll(); +// } +// } +//} \ No newline at end of file