-// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2022 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
XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent)
: ModuleBase_IViewer(theParent),
- myWorkshop(theParent), myShowHighlight(false)
+ myWorkshop(theParent)
{
}
aView3d->SetProj(theX, theY, theZ);
aView3d->SetTwist( theTwist );
aView3d->FitAll(0.01, false);
- aView3d->SetZSize(0.);
+ //aView3d->SetZSize(0.);
if (aView3d->Depth() < 0.1)
aView3d->DepthFitAll();
}
void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
{
- if (myIs2dMode) {
- bool aHighlight2d =
- ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true);
- if (aHighlight2d || myShowHighlight)
- updateHighlight();
- else
- eraseHighlight();
- }
+ if (theEvent->buttons() != Qt::NoButton)
+ eraseHighlight();
else {
- bool aHighlight3d =
- ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false);
- if (aHighlight3d || myShowHighlight)
- updateHighlight();
- else
- eraseHighlight();
+ 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::displayHighlight(FeaturePtr theFeature, const TopoDS_Shape& theIgnoreShape)
+Handle(AIS_Shape) createPresentation(const TopoDS_Shape& theShape, double theDeviation)
{
- Handle(AIS_InteractiveContext) aContext = AISContext();
+ 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;
+}
- double aDeflection;
- if (myResult->groupName() == ModelAPI_ResultConstruction::group()) {
- //FeaturePtr aFeature = ModelAPI_Feature::feature(myResult);
- if (theFeature.get()) {
- std::list<ResultPtr> aResults = theFeature->results();
- std::list<ResultPtr>::const_iterator aIt;
- ResultPtr aRes;
- Handle(AIS_Shape) aAis;
- for (aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) {
- aRes = (*aIt);
- TopoDS_Shape aTShape = aRes->shape()->impl<TopoDS_Shape>();
- if (!aTShape.IsSame(theIgnoreShape)) {
- aAis = new AIS_Shape(aTShape);
- aAis->SetColor(HIGHLIGHT_COLOR);
- aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost
- aDeflection = Config_PropManager::real("Visualization", "construction_deflection");
- aAis->Attributes()->SetDeviationCoefficient(aDeflection);
- myHighlights.Append(aAis);
- aContext->Display(aAis, false);
- aContext->Deactivate(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<TopoDS_Shape>();
+ if (!aTShape.IsSame(theIgnoreShape)) {
+ AISObjectPtr aAISPrs = aDisplayer->getAISObject(theRes);
+ if (aAISPrs.get()) {
+ anAISIO = aAISPrs->impl<Handle(AIS_InteractiveObject)>();
+ aDeviation = anAISIO->Attributes()->DeviationCoefficient();
}
- }
- else {
- TopoDS_Shape aTShape = myResult->shape()->impl<TopoDS_Shape>();
- Handle(AIS_Shape) aAis = new AIS_Shape(aTShape);
- aAis->SetColor(HIGHLIGHT_COLOR);
- aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost
- aDeflection = Config_PropManager::real("Visualization", "body_deflection");
- aAis->Attributes()->SetDeviationCoefficient(aDeflection);
+ else {
+ aDeviation = Config_PropManager::real("Visualization", "construction_deflection");
+ }
+ aAis = createPresentation(aTShape, aDeviation);
myHighlights.Append(aAis);
aContext->Display(aAis, false);
aContext->Deactivate(aAis);
}
}
-void XGUI_ViewerProxy::eraseHighlight()
+
+void XGUI_ViewerProxy::displayHighlight(FeaturePtr theFeature, const TopoDS_Shape& theIgnoreShape)
+{
+ if (theFeature.get()) {
+ std::list<ResultPtr> aResults = theFeature->results();
+ std::list<ResultPtr>::const_iterator aIt;
+ for (aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) {
+ createPresentations((*aIt), theIgnoreShape);
+ }
+ }
+}
+
+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()
else {
myResult = ResultPtr();
}
- aContext->UpdateCurrentViewer();
+ update();
}
isDisplayed = aRes.get();
}
}
if (!isDisplayed) {
- eraseHighlight();
- aContext->UpdateCurrentViewer();
+ if (eraseHighlight()) {
+ update();
+ }
myResult = ResultPtr();
}
}
#ifdef HAVE_SALOME
void XGUI_ViewerProxy::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
{
- if (myIs2dMode) {
- bool aHighlight2d =
- ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true);
- if (aHighlight2d || myShowHighlight)
- updateHighlight();
- else
- eraseHighlight();
- }
+ if (theEvent->buttons() != Qt::NoButton)
+ eraseHighlight();
else {
- bool aHighlight3d =
- ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false);
- if (aHighlight3d || myShowHighlight)
- updateHighlight();
- else
- eraseHighlight();
+ 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);
}
#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()->setColorScaleTitle(theText);
#else
Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
- aColorScale->SetTitle(theText.toStdString().c_str());
+ aColorScale->SetTitle(theText.toStdWString().c_str());
#endif
}
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);
// 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