X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ViewerProxy.cpp;h=fbff53c41f2180237f277379746c294925d51237;hb=eb860f799eab680975365d8ce18cec6e04a6f391;hp=6105a6fb600a9df4cbfc6eb73aff2445314ab983;hpb=1f5d2c57d3af724cb6e63d7a880d1aad810fe1cd;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ViewerProxy.cpp b/src/XGUI/XGUI_ViewerProxy.cpp index 6105a6fb6..fbff53c41 100644 --- a/src/XGUI/XGUI_ViewerProxy.cpp +++ b/src/XGUI/XGUI_ViewerProxy.cpp @@ -30,15 +30,18 @@ #endif #include +#include #include #include #include +#include #include #include #include +#include #define HIGHLIGHT_COLOR Quantity_NOC_YELLOW @@ -175,10 +178,10 @@ void XGUI_ViewerProxy::connectToViewer() this, SLOT(onMouseMove(ModuleBase_IViewWindow*, QMouseEvent*))); connect(aViewer, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)), - this, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*))); + this, SLOT(onKeyPress(ModuleBase_IViewWindow*, QKeyEvent*))); connect(aViewer, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)), - this, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*))); + this, SLOT(onKeyRelease(ModuleBase_IViewWindow*, QKeyEvent*))); connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); @@ -293,17 +296,52 @@ void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouse void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent) { - 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 { + 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); } void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent) { + myShowHighlight = theEvent->key() == Qt::Key_H; emit keyPress(theWnd, theEvent); } void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent) { + if (theEvent->key() == Qt::Key_H) { + myShowHighlight = false; + } emit keyRelease(theWnd, theEvent); } @@ -448,16 +486,18 @@ void XGUI_ViewerProxy::displayHighlight(FeaturePtr theFeature, const TopoDS_Shap } } -void XGUI_ViewerProxy::eraseHighlight() +bool XGUI_ViewerProxy::eraseHighlight() { Handle(AIS_InteractiveContext) aContext = AISContext(); Handle(AIS_InteractiveObject) anAISIO; AIS_ListIteratorOfListOfInteractive aLIt; + bool isErased = myHighlights.Extent() > 0; for (aLIt.Initialize(myHighlights); aLIt.More(); aLIt.Next()) { anAISIO = aLIt.Value(); aContext->Remove(anAISIO, false); } myHighlights.Clear(); + return isErased; } void XGUI_ViewerProxy::updateHighlight() @@ -487,14 +527,15 @@ void XGUI_ViewerProxy::updateHighlight() else { myResult = ResultPtr(); } - aContext->UpdateCurrentViewer(); + update(); } isDisplayed = aRes.get(); } } if (!isDisplayed) { - eraseHighlight(); - aContext->UpdateCurrentViewer(); + if (eraseHighlight()) { + update(); + } myResult = ResultPtr(); } } @@ -503,11 +544,173 @@ void XGUI_ViewerProxy::updateHighlight() #ifdef HAVE_SALOME void XGUI_ViewerProxy::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent) { - 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 { + 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); } + +void XGUI_ViewerProxy::onKeyPress(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent) +{ + myShowHighlight = theEvent->key() == Qt::Key_H; + emit keyPress(theWnd, theEvent); +} + +void XGUI_ViewerProxy::onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent) +{ + if (theEvent->key() == Qt::Key_H) { + myShowHighlight = false; + } + emit keyRelease(theWnd, theEvent); +} #endif + +bool XGUI_ViewerProxy::isColorScaleVisible() const +{ +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->isColorScaleVisible(); +#else + return myWorkshop->mainWindow()->viewer()->isColorScaleVisible(); +#endif +} + +void XGUI_ViewerProxy::setColorScaleShown(bool on) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScaleShown(on); +#else + myWorkshop->mainWindow()->viewer()->setColorScaleShown(on); +#endif +} + +void XGUI_ViewerProxy::setColorScalePosition(double theX, double theY) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScalePosition(theX, theY); +#else + QWidget* aWindow = activeViewPort(); + Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); + aColorScale->SetPosition(aWindow->width() * theX, aWindow->height() * theY); +#endif +} + +void XGUI_ViewerProxy::setColorScaleSize(double theW, double theH) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScaleSize(theW, theH); +#else + QWidget* aWindow = activeViewPort(); + Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); + aColorScale->SetSize(aWindow->width() * theW, aWindow->height() * theH); +#endif +} + +void XGUI_ViewerProxy::setColorScaleRange(double theMin, double theMax) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScaleRange(theMin, theMax); +#else + Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); + aColorScale->SetRange(theMin, theMax); +#endif +} + +void XGUI_ViewerProxy::setColorScaleIntervals(int theNb) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScaleIntervals(theNb); +#else + Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); + aColorScale->SetNumberOfIntervals(theNb); +#endif +} + +void XGUI_ViewerProxy::setColorScaleTextColor(const QColor& theColor) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScaleTextColor(theColor); +#else + Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); + Quantity_Color aColor(theColor.redF(), theColor.greenF(), theColor.blueF(), Quantity_TOC_RGB); + aColorScale->SetColor(aColor); +#endif +} + + +void XGUI_ViewerProxy::setColorScaleTextHeigth(int theH) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScaleTextHeigth(theH); +#else + Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); + aColorScale->SetTextHeight(theH); +#endif +} + +void XGUI_ViewerProxy::setColorScaleTitle(const QString& theText) +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->setColorScaleTitle(theText); +#else + Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale(); + aColorScale->SetTitle(theText.toStdString().c_str()); +#endif +} + + +//****************************************************** +void XGUI_ViewerProxy::setupColorScale() +{ + SUIT_ResourceMgr* aResMgr = ModuleBase_Preferences::resourceMgr(); + double aX = aResMgr->doubleValue("Viewer", "scalar_bar_x_position", 0.03); + double aY = aResMgr->doubleValue("Viewer", "scalar_bar_y_position", 0.35); + setColorScalePosition(aX, aY); + + double aW = aResMgr->doubleValue("Viewer", "scalar_bar_width", 0.2); + double aH = aResMgr->doubleValue("Viewer", "scalar_bar_height", 0.5); + setColorScaleSize(aW, aH); + + QColor aColor = aResMgr->colorValue("Viewer", "scalar_bar_text_color", Qt::black); + setColorScaleTextColor(aColor); + + int aT = aResMgr->integerValue("Viewer", "scalar_bar_text_height", 14); + setColorScaleTextHeigth(aT); + + int aN = aResMgr->integerValue("Viewer", "scalar_bar_nb_intervals", 20); + setColorScaleIntervals(aN); +} + + //*************************************** //void XGUI_ViewerProxy::Zfitall() //{ @@ -523,4 +726,27 @@ void XGUI_ViewerProxy::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* // aView3d->DepthFitAll(); // } //#endif -//} \ No newline at end of file +//} + + +#ifdef HAVE_SALOME +void XGUI_ViewerProxy::setFitter(OCCViewer_Fitter* theFitter) +{ + myWorkshop->salomeConnector()->viewer()->setFitter(theFitter); +} + +OCCViewer_Fitter* XGUI_ViewerProxy::fitter() const +{ + return myWorkshop->salomeConnector()->viewer()->fitter(); +} +#else +void XGUI_ViewerProxy::setFitter(AppElements_Fitter* theFitter) +{ + myWorkshop->mainWindow()->viewer()->setFitter(theFitter); +} + +AppElements_Fitter* XGUI_ViewerProxy::fitter() const +{ + return myWorkshop->mainWindow()->viewer()->fitter(); +} +#endif