From 0b63dfba56d5463a790ea9a54849a14f1a596786 Mon Sep 17 00:00:00 2001 From: enk Date: Tue, 17 May 2005 06:49:45 +0000 Subject: [PATCH] PROJECT: POST-PROCESSOR 2005 TASK: T 1.5 4.5.1.Implementation of graduated rules in SALOME VTK viewer Added CubeAxes to view frame --- .../VTKViewer_InteractorStyleSALOME.cxx | 15 +++ .../VTKViewer_InteractorStyleSALOME.h | 4 + src/VTKViewer/VTKViewer_ViewFrame.cxx | 117 +++++++++++++++--- src/VTKViewer/VTKViewer_ViewFrame.h | 3 + 4 files changed, 120 insertions(+), 19 deletions(-) diff --git a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx index 3be94d216..6258e573f 100644 --- a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx +++ b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.cxx @@ -45,6 +45,7 @@ #include "VTKViewer_Actor.h" #include "SALOME_Selection.h" #include "SALOME_ListIteratorOfListIO.hxx" +#include "SALOME_CubeAxesActor2D.h" #include #include @@ -146,6 +147,7 @@ vtkStandardNewMacro(VTKViewer_InteractorStyleSALOME); VTKViewer_InteractorStyleSALOME::VTKViewer_InteractorStyleSALOME() { m_Trihedron = 0; + m_CubeAxes = 0; this->MotionFactor = 10.0; this->State = VTK_INTERACTOR_STYLE_CAMERA_NONE; this->RadianToDegree = 180.0 / vtkMath::Pi(); @@ -201,6 +203,10 @@ void VTKViewer_InteractorStyleSALOME::setTriedron(VTKViewer_Trihedron* theTrihed m_Trihedron = theTrihedron; } +void VTKViewer_InteractorStyleSALOME::setCubeAxes(SALOME_CubeAxesActor2D* theCubeAxes){ + m_CubeAxes = theCubeAxes; +} + //---------------------------------------------------------------------------- void VTKViewer_InteractorStyleSALOME::RotateXY(int dx, int dy) { @@ -624,20 +630,29 @@ void VTKViewer_InteractorStyleSALOME::startFitArea() //---------------------------------------------------------------------------- void VTKViewer_InteractorStyleSALOME::ViewFitAll() { int aTriedronWasVisible = false; + int aCubeAxesWasVisible = false; if(m_Trihedron){ aTriedronWasVisible = m_Trihedron->GetVisibility() == VTKViewer_Trihedron::eOn; if(aTriedronWasVisible) m_Trihedron->VisibilityOff(); } + if(m_CubeAxes){ + aCubeAxesWasVisible = m_CubeAxes->GetVisibility(); + if(aCubeAxesWasVisible) m_CubeAxes->VisibilityOff(); + } if(m_Trihedron->GetVisibleActorCount(CurrentRenderer)){ m_Trihedron->VisibilityOff(); + m_CubeAxes->VisibilityOff(); ::ResetCamera(CurrentRenderer); }else{ m_Trihedron->SetVisibility(VTKViewer_Trihedron::eOnlyLineOn); + m_CubeAxes->SetVisibility(2); ::ResetCamera(CurrentRenderer,true); } if(aTriedronWasVisible) m_Trihedron->VisibilityOn(); else m_Trihedron->VisibilityOff(); + if(aCubeAxesWasVisible) m_CubeAxes->VisibilityOn(); + else m_CubeAxes->VisibilityOff(); ::ResetCameraClippingRange(CurrentRenderer); } diff --git a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h index 2952537a3..2bb36fb4d 100644 --- a/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h +++ b/src/VTKViewer/VTKViewer_InteractorStyleSALOME.h @@ -40,6 +40,7 @@ class vtkRenderWindowInteractor; #include "VTKViewer_Filter.h" class SALOME_Actor; +class SALOME_CubeAxesActor2D; class VTKViewer_Actor; class VTKViewer_Trihedron; class VTKViewer_ViewFrame; @@ -69,6 +70,8 @@ class VTKViewer_InteractorStyleSALOME : public QObject, public vtkInteractorStyl void setGUIWindow(QWidget* theWindow); void setTriedron(VTKViewer_Trihedron* theTrihedron); + void setCubeAxes(SALOME_CubeAxesActor2D* theCubeAxes); + void setPreselectionProp(const double& theRed = 0, const double& theGreen = 1, const double& theBlue = 1, const int& theWidth = 5); @@ -170,6 +173,7 @@ class VTKViewer_InteractorStyleSALOME : public QObject, public vtkInteractorStyl VTKViewer_RenderWindowInteractor* m_Interactor; VTKViewer_ViewFrame* m_ViewFrame; VTKViewer_Trihedron* m_Trihedron; + SALOME_CubeAxesActor2D* m_CubeAxes; QWidget* myGUIWindow; std::map myFilters; diff --git a/src/VTKViewer/VTKViewer_ViewFrame.cxx b/src/VTKViewer/VTKViewer_ViewFrame.cxx index 067cc6aee..6b6a2b023 100644 --- a/src/VTKViewer/VTKViewer_ViewFrame.cxx +++ b/src/VTKViewer/VTKViewer_ViewFrame.cxx @@ -29,6 +29,7 @@ #include "VTKViewer_ViewFrame.h" #include "VTKViewer_Utilities.h" #include "VTKViewer_Trihedron.h" +#include "SALOME_CubeAxesActor2D.h" #include "VTKViewer_RenderWindow.h" #include "VTKViewer_RenderWindowInteractor.h" #include "VTKViewer_InteractorStyleSALOME.h" @@ -65,9 +66,16 @@ #include #include #include +#include #include +#ifdef _DEBUG_ +static int MYDEBUG = 0; +#else +static int MYDEBUG = 0; +#endif + using namespace std; /*! @@ -79,11 +87,13 @@ VTKViewer_ViewFrame::VTKViewer_ViewFrame(QWidget* parent, const char* name) m_ViewUp[0] = 0; m_ViewUp[1] = 0; m_ViewUp[2] = -1; m_ViewNormal[0] = 0; m_ViewNormal[1] = 0; m_ViewNormal[2] = 1; m_Triedron = VTKViewer_Trihedron::New(); + m_CubeAxes = SALOME_CubeAxesActor2D::New(); m_Transform = SALOME_Transform::New(); //m_Renderer = VTKViewer_Renderer::New() ; m_Renderer = vtkRenderer::New() ; m_Triedron->AddToRender(m_Renderer); + m_Renderer->AddProp(m_CubeAxes); InitialSetup(); } @@ -119,10 +129,30 @@ void VTKViewer_ViewFrame::InitialSetup() { m_RWInteractor->Initialize(); m_RWInteractor->setViewFrame(this); RWS->setTriedron(m_Triedron); + RWS->setCubeAxes(m_CubeAxes); + RWS->setViewFrame(this); //SRN: additional initialization, to init CurrentRenderer of vtkInteractorStyle RWS->FindPokedRenderer(0, 0); + vtkTextProperty* tprop = vtkTextProperty::New(); + tprop->SetColor(1, 1, 1); + tprop->ShadowOn(); + + float bnd[6]; + bnd[0] = bnd[2] = bnd[4] = 0; + bnd[1] = bnd[3] = bnd[5] = m_Triedron->GetSize(); + m_CubeAxes->SetLabelFormat("%6.4g"); + m_CubeAxes->SetBounds(bnd); + m_CubeAxes->SetCamera(m_Renderer->GetActiveCamera()); + m_CubeAxes->SetLabelFormat("%6.4g"); + m_CubeAxes->SetFlyModeToOuterEdges(); // ENK remarks: it must bee + m_CubeAxes->SetFontFactor(0.8); + m_CubeAxes->SetAxisTitleTextProperty(tprop); + m_CubeAxes->SetAxisLabelTextProperty(tprop); + m_CubeAxes->SetCornerOffset(0.0); + tprop->Delete(); + setCentralWidget( m_RW ); onViewReset(); } @@ -139,6 +169,8 @@ VTKViewer_ViewFrame::~VTKViewer_ViewFrame() { m_Renderer->RemoveAllProps(); // NRI : BugID 1137: m_Renderer->Delete() ; m_Triedron->Delete(); + + m_CubeAxes->Delete(); INFOS("VTKViewer_ViewFrame::~VTKViewer_ViewFrame()"); } @@ -153,6 +185,10 @@ bool VTKViewer_ViewFrame::isTrihedronDisplayed(){ return m_Triedron->GetVisibility() == VTKViewer_Trihedron::eOn; } +bool VTKViewer_ViewFrame::isCubeAxesDisplayed(){ + return m_CubeAxes->GetVisibility() == 1; +} + bool VTKViewer_ViewFrame::ComputeTrihedronSize( double& theNewSize, double& theSize ) { // calculating diagonal of visible props of the renderer @@ -200,9 +236,22 @@ double VTKViewer_ViewFrame::GetTrihedronSize() const void VTKViewer_ViewFrame::AdjustTrihedrons( const bool forcedUpdate ) { + if ( !isTrihedronDisplayed() && !forcedUpdate ) return; + float bnd[ 6 ]; + float newbnd[6]; + newbnd[ 0 ] = newbnd[ 2 ] = newbnd[ 4 ] = VTK_LARGE_FLOAT; + newbnd[ 1 ] = newbnd[ 3 ] = newbnd[ 5 ] = -VTK_LARGE_FLOAT; + + m_CubeAxes->GetBounds(bnd); + if(MYDEBUG) + cout << "Bounds: BEFORE\n" + << "\txMin=" << bnd[ 0 ] << " xMax=" << bnd[ 1 ] << "\n" + << "\tyMin=" << bnd[ 2 ] << " yMax=" << bnd[ 3 ] << "\n" + << "\tzMin=" << bnd[ 4 ] << " zMax=" << bnd[ 5 ] << "\n"; + int aVisibleNum = m_Triedron->GetVisibleActorCount( m_Renderer ); if ( aVisibleNum || forcedUpdate ) { @@ -221,10 +270,39 @@ void VTKViewer_ViewFrame::AdjustTrihedrons( const bool forcedUpdate ) { if ( aSActor->IsResizable() ) aSActor->SetSize( 0.5 * aNewSize ); + if( aSActor->GetVisibility()){ + float abounds[6]; + aSActor->GetBounds(abounds); + if(MYDEBUG) + cout << "Bounds: Actor="< -VTK_LARGE_FLOAT && abounds[1] < VTK_LARGE_FLOAT && + abounds[2] > -VTK_LARGE_FLOAT && abounds[3] < VTK_LARGE_FLOAT && + abounds[4] > -VTK_LARGE_FLOAT && abounds[5] < VTK_LARGE_FLOAT) + for(int i=0;i<5;i=i+2){ + if(abounds[i]newbnd[i+1]) newbnd[i+1]=abounds[i+1]; + + } + } } } } } + if( newbnd[0]-VTK_LARGE_FLOAT && newbnd[3]>-VTK_LARGE_FLOAT && newbnd[5]>-VTK_LARGE_FLOAT){ + for(int i=0;i<6;i++) bnd[i] = newbnd[i]; + m_CubeAxes->SetBounds(bnd); + } + if(MYDEBUG) + cout << "Bounds AFTER: VisibleActors="<SetBounds(bnd); ::ResetCameraClippingRange(m_Renderer); } @@ -239,10 +317,13 @@ void VTKViewer_ViewFrame::onAdjustTrihedron() */ void VTKViewer_ViewFrame::onViewTrihedron(){ if(!m_Triedron) return; - if(isTrihedronDisplayed()) + if(isTrihedronDisplayed()){ m_Triedron->VisibilityOff(); + m_CubeAxes->VisibilityOff(); + } else{ m_Triedron->VisibilityOn(); + m_CubeAxes->VisibilityOn(); } Repaint(); } @@ -327,13 +408,20 @@ void VTKViewer_ViewFrame::onViewFitAll(){ void VTKViewer_ViewFrame::onViewReset(){ int aTriedronIsVisible = isTrihedronDisplayed(); m_Triedron->SetVisibility(VTKViewer_Trihedron::eOnlyLineOn); + m_CubeAxes->SetVisibility(2); ::ResetCamera(m_Renderer,true); vtkCamera* aCamera = m_Renderer->GetActiveCamera(); aCamera->SetPosition(1,-1,1); aCamera->SetViewUp(0,0,1); ::ResetCamera(m_Renderer,true); - if(aTriedronIsVisible) m_Triedron->VisibilityOn(); - else m_Triedron->VisibilityOff(); + if(aTriedronIsVisible){ + m_Triedron->VisibilityOn(); + m_CubeAxes->VisibilityOn(); + } + else{ + m_Triedron->VisibilityOff(); + m_CubeAxes->VisibilityOff(); + } static float aCoeff = 3.0; aCamera->SetParallelScale(aCoeff*aCamera->GetParallelScale()); Repaint(); @@ -812,14 +900,19 @@ void VTKViewer_ViewFrame::redisplayAll( QAD_Study* theQADStudy, const bool theTo return; bool isTrhDisplayed = isTrihedronDisplayed(); + bool isCubeDisplayed = isCubeAxesDisplayed(); m_RWInteractor->RemoveAll( false ); //m_RWInteractor->EraseAll(); aSel->ClearIObjects(); - + + /* + // ENK commented, already added to renderer in + // VTKViewer_ViewFrame::VTKViewer_ViewFrame(...) if ( isTrhDisplayed ) - m_Triedron->AddToRender( m_Renderer ); + m_Triedron->AddToRender( m_Renderer ); + */ std::list aList; SALOMEDS_Tool::GetAllChildren( aStudy, aComponent, aList ); @@ -932,17 +1025,3 @@ void VTKViewer_ViewFrame::onRotateDown() { m_RWInteractor->GetInteractorStyleSALOME()->IncrementalRotate( 0, INCREMENT_FOR_OP ); } - - - - - - - - - - - - - - diff --git a/src/VTKViewer/VTKViewer_ViewFrame.h b/src/VTKViewer/VTKViewer_ViewFrame.h index cef0aaa5f..ca3817774 100644 --- a/src/VTKViewer/VTKViewer_ViewFrame.h +++ b/src/VTKViewer/VTKViewer_ViewFrame.h @@ -38,6 +38,7 @@ class SALOME_Actor; class SALOME_Transform; class VTKViewer_Trihedron; +class SALOME_CubeAxesActor2D; class VTKViewer_RenderWindow; class VTKViewer_RenderWindowInteractor; @@ -58,6 +59,7 @@ public: VTKViewer_RenderWindowInteractor* getRWInteractor() {return m_RWInteractor;} bool isTrihedronDisplayed(); + bool isCubeAxesDisplayed(); void setBackgroundColor( const QColor& ); QColor backgroundColor() const; @@ -153,6 +155,7 @@ private: VTKViewer_RenderWindow* m_RW; VTKViewer_RenderWindowInteractor* m_RWInteractor; VTKViewer_Trihedron* m_Triedron; + SALOME_CubeAxesActor2D* m_CubeAxes; SALOME_Transform* m_Transform; friend class VTKViewer_RenderWindowInteractor; -- 2.39.2