From f6bb4a790977b7187971464e959643cfb2ff9ed7 Mon Sep 17 00:00:00 2001 From: ouv Date: Thu, 17 Jun 2010 08:33:15 +0000 Subject: [PATCH] Issue 0020754: EDF 1307 GUI : Trihedron always visible in VTK like in OCC --- doc/salome/gui/images/pref12.png | Bin 85479 -> 73726 bytes doc/salome/gui/input/salome_preferences.doc | 2 + src/LightApp/LightApp_Application.cxx | 28 + src/LightApp/resources/LightApp.xml | 1 + src/LightApp/resources/LightApp_msg_en.ts | 4 + src/SVTK/Makefile.am | 4 +- src/SVTK/SVTK_ViewModel.cxx | 27 + src/SVTK/SVTK_ViewModel.h | 7 + src/SVTK/SVTK_ViewWindow.cxx | 38 + src/SVTK/SVTK_ViewWindow.h | 10 + src/SVTK/vtkPVAxesActor.cxx | 813 ++++++++++++++++++ src/SVTK/vtkPVAxesActor.h | 290 +++++++ src/SVTK/vtkPVAxesWidget.cxx | 869 ++++++++++++++++++++ src/SVTK/vtkPVAxesWidget.h | 159 ++++ src/SalomeApp/resources/SalomeApp.xml | 1 + 15 files changed, 2252 insertions(+), 1 deletion(-) create mode 100644 src/SVTK/vtkPVAxesActor.cxx create mode 100644 src/SVTK/vtkPVAxesActor.h create mode 100644 src/SVTK/vtkPVAxesWidget.cxx create mode 100644 src/SVTK/vtkPVAxesWidget.h diff --git a/doc/salome/gui/images/pref12.png b/doc/salome/gui/images/pref12.png index b14da29b71e40d6b815f55a9fc4ea5de00e0a699..5bea82dc130751062dc605345e67f6c66499b088 100755 GIT binary patch literal 73726 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 diff --git a/doc/salome/gui/input/salome_preferences.doc b/doc/salome/gui/input/salome_preferences.doc index 17d91caa3..a560371d1 100644 --- a/doc/salome/gui/input/salome_preferences.doc +++ b/doc/salome/gui/input/salome_preferences.doc @@ -102,6 +102,8 @@ which the speed increases or respectively decreases after pressing [+] or [-] keyboard buttons.

  • Modification Mode - allows choosing between \b Arithmetic and \b Geometrical progression used for zooming
  • +
  • Show static trihedron - allows to show/hide static trihedron +located in the bottom-left corner of the viewer.
  • Spacemouse - a mouse-like manipulator device specially designed for working with 3D presentations, objects, etc. You can reassign the diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index b1b027d92..1be10e228 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -1371,6 +1371,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType vm->setBackgroundColor( resMgr->colorValue( "VTKViewer", "background", vm->backgroundColor() ) ); vm->setTrihedronSize( resMgr->doubleValue( "VTKViewer", "trihedron_size", vm->trihedronSize() ), resMgr->booleanValue( "VTKViewer", "relative_size", vm->trihedronRelative() ) ); + vm->setStaticTrihedronVisible( resMgr->booleanValue( "VTKViewer", "show_static_trihedron", vm->isStaticTrihedronVisible() ) ); vm->setInteractionStyle( resMgr->integerValue( "VTKViewer", "navigation_mode", vm->interactionStyle() ) ); vm->setIncrementalSpeed( resMgr->integerValue( "VTKViewer", "speed_value", vm->incrementalSpeed() ), resMgr->integerValue( "VTKViewer", "speed_mode", vm->incrementalSpeedMode() ) ); @@ -1976,6 +1977,8 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "strings", aSpeedModeList, vtkSpeedMode ); pref->setItemProperty( "indexes", aModeIndexesList, vtkSpeedMode ); + pref->addPreference( tr( "PREF_SHOW_STATIC_TRIHEDRON" ), vtkGen, LightApp_Preferences::Bool, "VTKViewer", "show_static_trihedron" ); + int vtkSM = pref->addPreference( tr( "PREF_FRAME_SPACEMOUSE" ), vtkGroup, LightApp_Preferences::GroupBox ); pref->setItemProperty( "columns", 2, vtkSM ); int spacemousePref1 = pref->addPreference( tr( "PREF_SPACEMOUSE_FUNC_1" ), vtkSM, @@ -2297,6 +2300,31 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } #endif +#ifndef DISABLE_VTKVIEWER + if ( sec == QString( "VTKViewer" ) && param == QString( "show_static_trihedron" ) ) + { + bool isVisible = resMgr->booleanValue( "VTKViewer", "show_static_trihedron", true ); + QList lst; +#ifndef DISABLE_SALOMEOBJECT + viewManagers( SVTK_Viewer::Type(), lst ); + QListIterator it( lst ); + while ( it.hasNext() ) + { + SUIT_ViewModel* vm = it.next()->getViewModel(); + if ( !vm || !vm->inherits( "SVTK_Viewer" ) ) + continue; + + SVTK_Viewer* vtkVM = dynamic_cast( vm ); + if( vtkVM ) + { + vtkVM->setStaticTrihedronVisible( isVisible ); + vtkVM->Repaint(); + } + } +#endif + } +#endif + #ifndef DISABLE_VTKVIEWER if ( sec == QString( "VTKViewer" ) && (param == QString( "spacemouse_func1_btn" ) || param == QString( "spacemouse_func2_btn" ) || diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index 2ae4f774c..db336784e 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -130,6 +130,7 @@ + diff --git a/src/LightApp/resources/LightApp_msg_en.ts b/src/LightApp/resources/LightApp_msg_en.ts index 2c9178de5..1d391cd0f 100644 --- a/src/LightApp/resources/LightApp_msg_en.ts +++ b/src/LightApp/resources/LightApp_msg_en.ts @@ -170,6 +170,10 @@ CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITASPREF_FRAME_SPACEMOUSE Spacemouse + + PREF_SHOW_STATIC_TRIHEDRON + Show static trihedron + PREF_SPACEMOUSE_FUNC_1 Decrease speed increment diff --git a/src/SVTK/Makefile.am b/src/SVTK/Makefile.am index 1b078781e..6f626d02f 100755 --- a/src/SVTK/Makefile.am +++ b/src/SVTK/Makefile.am @@ -93,7 +93,9 @@ dist_libSVTK_la_SOURCES= \ SVTK_Recorder.cxx \ SVTK_RecorderDlg.cxx \ SVTK_ImageWriter.cxx \ - SVTK_ImageWriterMgr.cxx + SVTK_ImageWriterMgr.cxx \ + vtkPVAxesActor.cxx \ + vtkPVAxesWidget.cxx # internal headers diff --git a/src/SVTK/SVTK_ViewModel.cxx b/src/SVTK/SVTK_ViewModel.cxx index c34ce6ac7..35c168563 100644 --- a/src/SVTK/SVTK_ViewModel.cxx +++ b/src/SVTK/SVTK_ViewModel.cxx @@ -75,6 +75,7 @@ SVTK_Viewer::SVTK_Viewer() { myTrihedronSize = 105; myTrihedronRelative = true; + myIsStaticTrihedronVisible = true; myIncrementSpeed = 10; myIncrementMode = 0; myProjMode = 0; @@ -130,6 +131,7 @@ SUIT_ViewWindow* SVTK_Viewer::createView( SUIT_Desktop* theDesktop ) aViewWindow->setBackgroundColor( backgroundColor() ); aViewWindow->SetTrihedronSize( trihedronSize(), trihedronRelative() ); + aViewWindow->SetStaticTrihedronVisible( isStaticTrihedronVisible() ); aViewWindow->SetProjectionMode( projectionMode() ); aViewWindow->SetInteractionStyle( interactionStyle() ); aViewWindow->SetIncrementalSpeed( incrementalSpeed(), incrementalSpeedMode() ); @@ -179,6 +181,31 @@ void SVTK_Viewer::setTrihedronSize( const vtkFloatingPointType theSize, const bo } } +/*! + \return visibility status of the static trihedron +*/ +bool SVTK_Viewer::isStaticTrihedronVisible() const +{ + return myIsStaticTrihedronVisible; +} + +/*! + Sets visibility status of the static trihedron + \param theIsVisible - new visibility status +*/ +void SVTK_Viewer::setStaticTrihedronVisible( const bool theIsVisible ) +{ + myIsStaticTrihedronVisible = theIsVisible; + + if (SUIT_ViewManager* aViewManager = getViewManager()) { + QVector aViews = aViewManager->getViews(); + for ( uint i = 0; i < aViews.count(); i++ ) + { + if ( TViewWindow* aView = dynamic_cast(aViews.at( i )) ) + aView->SetStaticTrihedronVisible( theIsVisible ); + } + } +} /*! \return projection mode diff --git a/src/SVTK/SVTK_ViewModel.h b/src/SVTK/SVTK_ViewModel.h index f6a717a0a..cf4ca31fe 100644 --- a/src/SVTK/SVTK_ViewModel.h +++ b/src/SVTK/SVTK_ViewModel.h @@ -78,6 +78,12 @@ public: //! Set size of trihedron of the viewer (see #SVTK_Renderer::SetTrihedronSize) void setTrihedronSize( const vtkFloatingPointType, const bool = true ); + //! Get visibility status of the static trihedron + bool isStaticTrihedronVisible() const; + + //! Set visibility status of the static trihedron + void setStaticTrihedronVisible( const bool ); + //! Gets projection mode int projectionMode() const; @@ -162,6 +168,7 @@ private: QColor myBgColor; vtkFloatingPointType myTrihedronSize; bool myTrihedronRelative; + bool myIsStaticTrihedronVisible; bool mySelectionEnabled; bool myMultiSelectionEnabled; int myIncrementSpeed; diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index d88d66d8b..10c16646e 100755 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -44,6 +44,7 @@ #include #include #include +#include #include "QtxAction.h" @@ -78,6 +79,9 @@ #include "SVTK_Recorder.h" #include "SVTK_RecorderDlg.h" +#include "vtkPVAxesWidget.h" +#include "vtkPVAxesActor.h" + #include "SALOME_ListIteratorOfListIO.hxx" #include "VTKViewer_Algorithm.h" @@ -180,6 +184,24 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) setCentralWidget(myInteractor); + myAxesWidget = vtkPVAxesWidget::New(); + myAxesWidget->SetParentRenderer(aRenderer->GetDevice()); + myAxesWidget->SetViewport(0, 0, 0.25, 0.25); + myAxesWidget->SetInteractor(myInteractor->GetDevice()); + myAxesWidget->SetEnabled(1); + myAxesWidget->SetInteractive(0); + + vtkPVAxesActor* anAxesActor = myAxesWidget->GetAxesActor(); + anAxesActor->GetXAxisTipProperty()->SetColor( 1.0, 0.0, 0.0 ); + anAxesActor->GetXAxisShaftProperty()->SetColor( 1.0, 0.0, 0.0 ); + anAxesActor->GetXAxisLabelProperty()->SetColor( 1.0, 0.0, 0.0 ); + anAxesActor->GetYAxisTipProperty()->SetColor( 0.0, 1.0, 0.0 ); + anAxesActor->GetYAxisShaftProperty()->SetColor( 0.0, 1.0, 0.0 ); + anAxesActor->GetYAxisLabelProperty()->SetColor( 0.0, 1.0, 0.0 ); + anAxesActor->GetZAxisTipProperty()->SetColor( 0.0, 0.0, 1.0 ); + anAxesActor->GetZAxisShaftProperty()->SetColor( 0.0, 0.0, 1.0 ); + anAxesActor->GetZAxisLabelProperty()->SetColor( 0.0, 0.0, 1.0 ); + myView = new SVTK_View(this); Initialize(myView,theModel); @@ -957,6 +979,22 @@ void SVTK_ViewWindow::SetSelectionTolerance(const double& theTolNodes, myView->SetSelectionTolerance(theTolNodes, theTolItems, theTolObjects); } +/*! + Get visibility status of the static trihedron +*/ +bool SVTK_ViewWindow::IsStaticTrihedronVisible() const +{ + return (bool)myAxesWidget->GetEnabled(); +} + +/*! + Set visibility status of the static trihedron +*/ +void SVTK_ViewWindow::SetStaticTrihedronVisible( const bool theIsVisible ) +{ + myAxesWidget->SetEnabled( (int)theIsVisible ); +} + /*! Performs action \param accelAction - action diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h index ac1a5f122..9d6e24707 100755 --- a/src/SVTK/SVTK_ViewWindow.h +++ b/src/SVTK/SVTK_ViewWindow.h @@ -63,6 +63,8 @@ class SVTK_KeyFreeInteractorStyle; class SVTK_ViewParameterDlg; class SVTK_Recorder; +class vtkPVAxesWidget; + class vtkObject; class QtxAction; @@ -238,6 +240,12 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow const double& theTolCell = 0.001, const double& theTolObjects = 0.025); + //! Get visibility status of the static trihedron + bool IsStaticTrihedronVisible() const; + + //! Set visibility status of the static trihedron + virtual void SetStaticTrihedronVisible( const bool ); + //! Methods to save/restore visual parameters of a view (pan, zoom, etc.) virtual QString getVisualParameters(); @@ -397,6 +405,8 @@ protected: int myToolBar; int myRecordingToolBar; + vtkPVAxesWidget* myAxesWidget; + private: QImage myDumpImage; }; diff --git a/src/SVTK/vtkPVAxesActor.cxx b/src/SVTK/vtkPVAxesActor.cxx new file mode 100644 index 000000000..3fdc0a603 --- /dev/null +++ b/src/SVTK/vtkPVAxesActor.cxx @@ -0,0 +1,813 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +#include "vtkPVAxesActor.h" +#include "vtkObject.h" +#include "vtkObjectFactory.h" + +#include "vtkActor.h" +#include "vtkPropCollection.h" +#include "vtkProperty.h" +#include "vtkRenderWindow.h" +#include "vtkTransform.h" +#include "vtkCylinderSource.h" +#include "vtkPolyDataMapper.h" +#include "vtkLineSource.h" +#include "vtkPolyData.h" +#include "vtkConeSource.h" +#include "vtkSphereSource.h" +#include "vtkVectorText.h" +#include "vtkFollower.h" +#include "vtkRenderer.h" + +#include + +vtkCxxRevisionMacro(vtkPVAxesActor, "$Revision$"); +vtkStandardNewMacro(vtkPVAxesActor); + +vtkCxxSetObjectMacro( vtkPVAxesActor, UserDefinedTip, vtkPolyData ); +vtkCxxSetObjectMacro( vtkPVAxesActor, UserDefinedShaft, vtkPolyData ); + +//----------------------------------------------------------------------------- +vtkPVAxesActor::vtkPVAxesActor() +{ + this->XAxisLabelText = NULL; + this->YAxisLabelText = NULL; + this->ZAxisLabelText = NULL; + + this->SetXAxisLabelText("X"); + this->SetYAxisLabelText("Y"); + this->SetZAxisLabelText("Z"); + + //colors chosen to match the output of vtkAxes.cxx's LUT. + this->XAxisShaft = vtkActor::New(); + this->XAxisShaft->GetProperty()->SetColor(1, 0, 0); + this->YAxisShaft = vtkActor::New(); + this->YAxisShaft->GetProperty()->SetColor(1, 1, 0); + this->ZAxisShaft = vtkActor::New(); + this->ZAxisShaft->GetProperty()->SetColor(0, 1, 0); + + this->XAxisTip = vtkActor::New(); + this->XAxisTip->GetProperty()->SetColor(1, 0, 0); + this->YAxisTip = vtkActor::New(); + this->YAxisTip->GetProperty()->SetColor(1, 1, 0); + this->ZAxisTip = vtkActor::New(); + this->ZAxisTip->GetProperty()->SetColor(0, 1, 0); + + this->CylinderSource = vtkCylinderSource::New(); + this->CylinderSource->SetHeight(1.0); + + this->LineSource = vtkLineSource::New(); + this->LineSource->SetPoint1( 0.0, 0.0, 0.0 ); + this->LineSource->SetPoint2( 0.0, 1.0, 0.0 ); + + this->ConeSource = vtkConeSource::New(); + this->ConeSource->SetDirection( 0, 1, 0 ); + this->ConeSource->SetHeight( 1.0 ); + + this->SphereSource = vtkSphereSource::New(); + + vtkPolyDataMapper *shaftMapper = vtkPolyDataMapper::New(); + + this->XAxisShaft->SetMapper( shaftMapper ); + this->YAxisShaft->SetMapper( shaftMapper ); + this->ZAxisShaft->SetMapper( shaftMapper ); + + shaftMapper->Delete(); + + vtkPolyDataMapper *tipMapper = vtkPolyDataMapper::New(); + + this->XAxisTip->SetMapper( tipMapper ); + this->YAxisTip->SetMapper( tipMapper ); + this->ZAxisTip->SetMapper( tipMapper ); + + tipMapper->Delete(); + + this->TotalLength[0] = 1.0; + this->TotalLength[1] = 1.0; + this->TotalLength[2] = 1.0; + + this->NormalizedShaftLength[0] = 0.8; + this->NormalizedShaftLength[1] = 0.8; + this->NormalizedShaftLength[2] = 0.8; + + this->NormalizedTipLength[0] = 0.2; + this->NormalizedTipLength[1] = 0.2; + this->NormalizedTipLength[2] = 0.2; + + this->ConeResolution = 16; + this->SphereResolution = 16; + this->CylinderResolution = 16; + + this->ConeRadius = 0.4; + this->SphereRadius = 0.5; + this->CylinderRadius = 0.05; + + this->XAxisLabelPosition = 1; + this->YAxisLabelPosition = 1; + this->ZAxisLabelPosition = 1; + + this->ShaftType = vtkPVAxesActor::LINE_SHAFT; + this->TipType = vtkPVAxesActor::CONE_TIP; + + this->UserDefinedTip = NULL; + this->UserDefinedShaft = NULL; + + this->XAxisVectorText = vtkVectorText::New(); + this->YAxisVectorText = vtkVectorText::New(); + this->ZAxisVectorText = vtkVectorText::New(); + + this->XAxisLabel = vtkFollower::New(); + this->YAxisLabel = vtkFollower::New(); + this->ZAxisLabel = vtkFollower::New(); + + vtkPolyDataMapper *xmapper = vtkPolyDataMapper::New(); + vtkPolyDataMapper *ymapper = vtkPolyDataMapper::New(); + vtkPolyDataMapper *zmapper = vtkPolyDataMapper::New(); + + xmapper->SetInput( this->XAxisVectorText->GetOutput() ); + ymapper->SetInput( this->YAxisVectorText->GetOutput() ); + zmapper->SetInput( this->ZAxisVectorText->GetOutput() ); + + this->XAxisLabel->SetMapper( xmapper ); + this->YAxisLabel->SetMapper( ymapper ); + this->ZAxisLabel->SetMapper( zmapper ); + + xmapper->Delete(); + ymapper->Delete(); + zmapper->Delete(); + + this->UpdateProps(); +} + +//----------------------------------------------------------------------------- +vtkPVAxesActor::~vtkPVAxesActor() +{ + this->CylinderSource->Delete(); + this->LineSource->Delete(); + this->ConeSource->Delete(); + this->SphereSource->Delete(); + + this->XAxisShaft->Delete(); + this->YAxisShaft->Delete(); + this->ZAxisShaft->Delete(); + + this->XAxisTip->Delete(); + this->YAxisTip->Delete(); + this->ZAxisTip->Delete(); + + this->SetUserDefinedTip( NULL ); + this->SetUserDefinedShaft( NULL ); + + this->SetXAxisLabelText( NULL ); + this->SetYAxisLabelText( NULL ); + this->SetZAxisLabelText( NULL ); + + this->XAxisVectorText->Delete(); + this->YAxisVectorText->Delete(); + this->ZAxisVectorText->Delete(); + + this->XAxisLabel->Delete(); + this->YAxisLabel->Delete(); + this->ZAxisLabel->Delete(); +} + +//----------------------------------------------------------------------------- +// Shallow copy of an actor. +void vtkPVAxesActor::ShallowCopy(vtkProp *prop) +{ + vtkPVAxesActor *a = vtkPVAxesActor::SafeDownCast(prop); + if ( a != NULL ) + { + } + + // Now do superclass + this->vtkProp3D::ShallowCopy(prop); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::GetActors(vtkPropCollection *ac) +{ + ac->AddItem(this->XAxisShaft); + ac->AddItem(this->YAxisShaft); + ac->AddItem(this->ZAxisShaft); + ac->AddItem(this->XAxisTip); + ac->AddItem(this->YAxisTip); + ac->AddItem(this->ZAxisTip); + ac->AddItem(this->XAxisLabel); + ac->AddItem(this->YAxisLabel); + ac->AddItem(this->ZAxisLabel); + +} + +//----------------------------------------------------------------------------- +int vtkPVAxesActor::RenderOpaqueGeometry(vtkViewport *vp) +{ + int renderedSomething = 0; + + vtkRenderer *ren = vtkRenderer::SafeDownCast( vp ); + + this->UpdateProps(); + + this->XAxisLabel->SetCamera( ren->GetActiveCamera() ); + this->YAxisLabel->SetCamera( ren->GetActiveCamera() ); + this->ZAxisLabel->SetCamera( ren->GetActiveCamera() ); + + this->XAxisShaft->RenderOpaqueGeometry(vp); + this->YAxisShaft->RenderOpaqueGeometry(vp); + this->ZAxisShaft->RenderOpaqueGeometry(vp); + + this->XAxisTip->RenderOpaqueGeometry(vp); + this->YAxisTip->RenderOpaqueGeometry(vp); + this->ZAxisTip->RenderOpaqueGeometry(vp); + + this->XAxisLabel->RenderOpaqueGeometry(vp); + this->YAxisLabel->RenderOpaqueGeometry(vp); + this->ZAxisLabel->RenderOpaqueGeometry(vp); + + return renderedSomething; +} + +//----------------------------------------------------------------------------- +// porting to VTK 5.0.x +/* +int vtkPVAxesActor::RenderTranslucentPolygonalGeometry(vtkViewport *vp) +{ + int renderedSomething=0; + + this->UpdateProps(); + + renderedSomething += this->XAxisShaft->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->YAxisShaft->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->ZAxisShaft->RenderTranslucentPolygonalGeometry(vp); + + renderedSomething += this->XAxisTip->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->YAxisTip->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->ZAxisTip->RenderTranslucentPolygonalGeometry(vp); + + renderedSomething += this->XAxisLabel->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->YAxisLabel->RenderTranslucentPolygonalGeometry(vp); + renderedSomething += this->ZAxisLabel->RenderTranslucentPolygonalGeometry(vp); + + return renderedSomething; +} +*/ + +//----------------------------------------------------------------------------- +// porting to VTK 5.0.x +/* +int vtkPVAxesActor::HasTranslucentPolygonalGeometry() +{ + int result = 0; + + this->UpdateProps(); + + result |= this->XAxisShaft->HasTranslucentPolygonalGeometry(); + result |= this->YAxisShaft->HasTranslucentPolygonalGeometry(); + result |= this->ZAxisShaft->HasTranslucentPolygonalGeometry(); + + result |= this->XAxisTip->HasTranslucentPolygonalGeometry(); + result |= this->YAxisTip->HasTranslucentPolygonalGeometry(); + result |= this->ZAxisTip->HasTranslucentPolygonalGeometry(); + + result |= this->XAxisLabel->HasTranslucentPolygonalGeometry(); + result |= this->YAxisLabel->HasTranslucentPolygonalGeometry(); + result |= this->ZAxisLabel->HasTranslucentPolygonalGeometry(); + + return result; +} +*/ + +//----------------------------------------------------------------------------- +// porting to VTK 5.0.x +int vtkPVAxesActor::RenderTranslucentGeometry(vtkViewport *vp) +{ + int renderedSomething=0; + + this->UpdateProps(); + + renderedSomething += this->XAxisShaft->RenderTranslucentGeometry(vp); + renderedSomething += this->YAxisShaft->RenderTranslucentGeometry(vp); + renderedSomething += this->ZAxisShaft->RenderTranslucentGeometry(vp); + + renderedSomething += this->XAxisTip->RenderTranslucentGeometry(vp); + renderedSomething += this->YAxisTip->RenderTranslucentGeometry(vp); + renderedSomething += this->ZAxisTip->RenderTranslucentGeometry(vp); + + renderedSomething += this->XAxisLabel->RenderTranslucentGeometry(vp); + renderedSomething += this->YAxisLabel->RenderTranslucentGeometry(vp); + renderedSomething += this->ZAxisLabel->RenderTranslucentGeometry(vp); + + return renderedSomething; +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::ReleaseGraphicsResources(vtkWindow *win) +{ + this->XAxisShaft->ReleaseGraphicsResources( win ); + this->YAxisShaft->ReleaseGraphicsResources( win ); + this->ZAxisShaft->ReleaseGraphicsResources( win ); + + this->XAxisTip->ReleaseGraphicsResources( win ); + this->YAxisTip->ReleaseGraphicsResources( win ); + this->ZAxisTip->ReleaseGraphicsResources( win ); + + this->XAxisLabel->ReleaseGraphicsResources( win ); + this->YAxisLabel->ReleaseGraphicsResources( win ); + this->ZAxisLabel->ReleaseGraphicsResources( win ); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::GetBounds(double bounds[6]) +{ + double *bds = this->GetBounds(); + bounds[0] = bds[0]; + bounds[1] = bds[1]; + bounds[2] = bds[2]; + bounds[3] = bds[3]; + bounds[4] = bds[4]; + bounds[5] = bds[5]; +} + +//----------------------------------------------------------------------------- +// Get the bounds for this Actor as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax). +double *vtkPVAxesActor::GetBounds() +{ + double bounds[6]; + int i; + + this->XAxisShaft->GetBounds(this->Bounds); + + this->YAxisShaft->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->ZAxisShaft->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->XAxisTip->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->YAxisTip->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + this->ZAxisTip->GetBounds(bounds); + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (bounds[2*i+1]>this->Bounds[2*i+1])?(bounds[2*i+1]):(this->Bounds[2*i+1]); + } + + double dbounds[6]; + (vtkPolyDataMapper::SafeDownCast(this->YAxisShaft->GetMapper()))-> + GetInput()->GetBounds( dbounds ); + + for (i=0; i<3; i++) + { + this->Bounds[2*i+1] = + (dbounds[2*i+1]>this->Bounds[2*i+1])?(dbounds[2*i+1]):(this->Bounds[2*i+1]); + } + + // We want this actor to rotate / re-center about the origin, so give it + // the bounds it would have if the axes were symmetrical. + for (i = 0; i < 3; i++) + { + this->Bounds[2*i] = -this->Bounds[2*i+1]; + } + + return this->Bounds; +} + +//----------------------------------------------------------------------------- +unsigned long int vtkPVAxesActor::GetMTime() +{ + unsigned long mTime=this->Superclass::GetMTime(); + + + return mTime; +} + +//----------------------------------------------------------------------------- +unsigned long int vtkPVAxesActor::GetRedrawMTime() +{ + unsigned long mTime=this->GetMTime(); + + return mTime; +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetXAxisTipProperty() +{ + return this->XAxisTip->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetYAxisTipProperty() +{ + return this->YAxisTip->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetZAxisTipProperty() +{ + return this->ZAxisTip->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetXAxisShaftProperty() +{ + return this->XAxisShaft->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetYAxisShaftProperty() +{ + return this->YAxisShaft->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetZAxisShaftProperty() +{ + return this->ZAxisShaft->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetXAxisLabelProperty() +{ + return this->XAxisLabel->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetYAxisLabelProperty() +{ + return this->YAxisLabel->GetProperty(); +} + +//----------------------------------------------------------------------------- +vtkProperty *vtkPVAxesActor::GetZAxisLabelProperty() +{ + return this->ZAxisLabel->GetProperty(); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetTotalLength( float x, float y, float z ) +{ + if ( this->TotalLength[0] != x || + this->TotalLength[1] != y || + this->TotalLength[2] != z ) + { + this->TotalLength[0] = x; + this->TotalLength[1] = y; + this->TotalLength[2] = z; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetNormalizedShaftLength( float x, float y, float z ) +{ + if ( this->NormalizedShaftLength[0] != x || + this->NormalizedShaftLength[1] != y || + this->NormalizedShaftLength[2] != z ) + { + this->NormalizedShaftLength[0] = x; + this->NormalizedShaftLength[1] = y; + this->NormalizedShaftLength[2] = z; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetNormalizedTipLength( float x, float y, float z ) +{ + if ( this->NormalizedTipLength[0] != x || + this->NormalizedTipLength[1] != y || + this->NormalizedTipLength[2] != z ) + { + this->NormalizedTipLength[0] = x; + this->NormalizedTipLength[1] = y; + this->NormalizedTipLength[2] = z; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetShaftType( int type ) +{ + if ( this->ShaftType != type ) + { + this->ShaftType = type; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::SetTipType( int type ) +{ + if ( this->TipType != type ) + { + this->TipType = type; + + this->Modified(); + + this->UpdateProps(); + } +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::UpdateProps() +{ + this->CylinderSource->SetRadius(this->CylinderRadius); + this->CylinderSource->SetResolution(this->CylinderResolution); + + + this->ConeSource->SetResolution(this->ConeResolution); + this->ConeSource->SetRadius(this->ConeRadius); + + this->SphereSource->SetThetaResolution( this->SphereResolution ); + this->SphereSource->SetPhiResolution( this->SphereResolution ); + this->SphereSource->SetRadius(this->SphereRadius); + + switch ( this->ShaftType ) + { + case vtkPVAxesActor::CYLINDER_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInput( this->CylinderSource->GetOutput() ); + break; + case vtkPVAxesActor::LINE_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInput( this->LineSource->GetOutput() ); + break; + case vtkPVAxesActor::USER_DEFINED_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInput( this->UserDefinedShaft ); + } + + switch ( this->TipType ) + { + case vtkPVAxesActor::CONE_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInput( this->ConeSource->GetOutput() ); + break; + case vtkPVAxesActor::SPHERE_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInput( this->SphereSource->GetOutput() ); + break; + case vtkPVAxesActor::USER_DEFINED_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInput( this->UserDefinedTip ); + } + + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + GetInput()->Update(); + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + GetInput()->Update(); + + + + float scale[3]; + double bounds[6]; + + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + GetInput()->GetBounds( bounds ); + + int i; + for ( i = 0; i < 3; i++ ) + { + scale[i] = + this->NormalizedShaftLength[i]*this->TotalLength[i] / + (bounds[3] - bounds[2]); + } + + vtkTransform *xTransform = vtkTransform::New(); + vtkTransform *yTransform = vtkTransform::New(); + vtkTransform *zTransform = vtkTransform::New(); + + xTransform->RotateZ( -90 ); + zTransform->RotateX( 90 ); + + xTransform->Scale( scale[0], scale[0], scale[0] ); + yTransform->Scale( scale[1], scale[1], scale[1] ); + zTransform->Scale( scale[2], scale[2], scale[2] ); + + xTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + yTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + zTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + + + + this->XAxisShaft->SetUserTransform( xTransform ); + this->YAxisShaft->SetUserTransform( yTransform ); + this->ZAxisShaft->SetUserTransform( zTransform ); + + xTransform->Delete(); + yTransform->Delete(); + zTransform->Delete(); + + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + GetInput()->GetBounds( bounds ); + + xTransform = vtkTransform::New(); + yTransform = vtkTransform::New(); + zTransform = vtkTransform::New(); + + xTransform->RotateZ( -90 ); + zTransform->RotateX( 90 ); + + xTransform->Scale( this->TotalLength[0], this->TotalLength[0], this->TotalLength[0] ); + yTransform->Scale( this->TotalLength[1], this->TotalLength[1], this->TotalLength[1] ); + zTransform->Scale( this->TotalLength[2], this->TotalLength[2], this->TotalLength[2] ); + + xTransform->Translate( 0, (1.0 - this->NormalizedTipLength[0]), 0 ); + yTransform->Translate( 0, (1.0 - this->NormalizedTipLength[1]), 0 ); + zTransform->Translate( 0, (1.0 - this->NormalizedTipLength[2]), 0 ); + + xTransform->Scale( this->NormalizedTipLength[0], + this->NormalizedTipLength[0], + this->NormalizedTipLength[0] ); + + yTransform->Scale( this->NormalizedTipLength[1], + this->NormalizedTipLength[1], + this->NormalizedTipLength[1] ); + + zTransform->Scale( this->NormalizedTipLength[2], + this->NormalizedTipLength[2], + this->NormalizedTipLength[2] ); + + xTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + yTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + zTransform->Translate( -(bounds[0]+bounds[1])/2, + -bounds[2], + -(bounds[4]+bounds[5])/2 ); + + + this->XAxisTip->SetUserTransform( xTransform ); + this->YAxisTip->SetUserTransform( yTransform ); + this->ZAxisTip->SetUserTransform( zTransform ); + + xTransform->Delete(); + yTransform->Delete(); + zTransform->Delete(); + + this->XAxisVectorText->SetText( this->XAxisLabelText ); + this->YAxisVectorText->SetText( this->YAxisLabelText ); + this->ZAxisVectorText->SetText( this->ZAxisLabelText ); + + + float avgScale = + (this->TotalLength[0] + this->TotalLength[1] + this->TotalLength[2])/15; + + this->XAxisShaft->GetBounds(bounds); + this->XAxisLabel->SetScale( avgScale, avgScale, avgScale ); + this->XAxisLabel->SetPosition( bounds[0] + this->XAxisLabelPosition * + (bounds[1]-bounds[0]), + bounds[2] - (bounds[3]-bounds[2])*2.0, + bounds[5] + (bounds[5]-bounds[4])/2.0 ); + + this->YAxisShaft->GetBounds(bounds); + this->YAxisLabel->SetScale( avgScale, avgScale, avgScale ); + this->YAxisLabel->SetPosition( (bounds[0]+bounds[1])/2, + bounds[2] + this->YAxisLabelPosition * + (bounds[3]-bounds[2]), + bounds[5] + (bounds[5]-bounds[4])/2.0 ); + + this->ZAxisShaft->GetBounds(bounds); + this->ZAxisLabel->SetScale( avgScale, avgScale, avgScale ); + this->ZAxisLabel->SetPosition( bounds[0], + bounds[2] - (bounds[3]-bounds[2])*2.0, + bounds[4] + this->ZAxisLabelPosition * + (bounds[5]-bounds[4]) ); +} + +//----------------------------------------------------------------------------- +void vtkPVAxesActor::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os,indent); + + os << indent << "UserDefinedShaft: "; + if (this->UserDefinedShaft) + { + os << this->UserDefinedShaft << endl; + } + else + { + os << "(none)" << endl; + } + + os << indent << "UserDefinedTip: "; + if (this->UserDefinedTip) + { + os << this->UserDefinedTip << endl; + } + else + { + os << "(none)" << endl; + } + + os << indent << "XAxisLabelText: " << (this->XAxisLabelText ? + this->XAxisLabelText : "(none)") + << endl; + os << indent << "YAxisLabelText: " << (this->YAxisLabelText ? + this->YAxisLabelText : "(none)") + << endl; + os << indent << "ZAxisLabelText: " << (this->ZAxisLabelText ? + this->ZAxisLabelText : "(none)") + << endl; + os << indent << "XAxisLabelPosition: " << this->XAxisLabelPosition << endl; + os << indent << "YAxisLabelPosition: " << this->YAxisLabelPosition << endl; + os << indent << "ZAxisLabelPosition: " << this->ZAxisLabelPosition << endl; + + os << indent << "SphereRadius: " << this->SphereRadius << endl; + os << indent << "SphereResolution: " << this->SphereResolution << endl; + os << indent << "CylinderRadius: " << this->CylinderRadius << endl; + os << indent << "CylinderResolution: " << this->CylinderResolution << endl; + os << indent << "ConeRadius: " << this->ConeRadius << endl; + os << indent << "ConeResolution: " << this->ConeResolution << endl; + + os << indent << "NormalizedShaftLength: " + << this->NormalizedShaftLength[0] << "," + << this->NormalizedShaftLength[1] << "," + << this->NormalizedShaftLength[2] << endl; + os << indent << "NormalizedTipLength: " + << this->NormalizedTipLength[0] << "," + << this->NormalizedTipLength[1] << "," + << this->NormalizedTipLength[2] << endl; + os << indent << "TotalLength: " + << this->TotalLength[0] << "," + << this->TotalLength[1] << "," + << this->TotalLength[2] << endl; +} + +//----------------------------------------------------------------------------- +// porting to VTK 5.0.x +void vtkPVAxesActor::AddToRender( vtkRenderer* theRenderer ) +{ + theRenderer->AddActor(this->XAxisLabel); + theRenderer->AddActor(this->YAxisLabel); + theRenderer->AddActor(this->ZAxisLabel); +} diff --git a/src/SVTK/vtkPVAxesActor.h b/src/SVTK/vtkPVAxesActor.h new file mode 100644 index 000000000..0c21d1886 --- /dev/null +++ b/src/SVTK/vtkPVAxesActor.h @@ -0,0 +1,290 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +// .NAME vtkPVAxesActor - a 3D axes representation +// .SECTION Description +// +// vtkPVAxesActor is used to represent 3D axes in the scene. The user can +// define the geometry to use for the shaft and the tip, and the user can +// set the text for the three axes. The text will follow the camera. + + +#ifndef __vtkPVAxesActor_h +#define __vtkPVAxesActor_h + +#include "SVTK.h" +#include "vtkProp3D.h" + +class vtkRenderer; +class vtkPropCollection; +class vtkMapper; +class vtkProperty; +class vtkActor; +class vtkFollower; +class vtkCylinderSource; +class vtkLineSource; +class vtkConeSource; +class vtkSphereSource; +class vtkPolyData; +class vtkVectorText; + +class SVTK_EXPORT vtkPVAxesActor : public vtkProp3D +{ +public: + static vtkPVAxesActor *New(); + vtkTypeRevisionMacro(vtkPVAxesActor,vtkProp3D); + void PrintSelf(ostream& os, vtkIndent indent); + + + // Description: + // For some exporters and other other operations we must be + // able to collect all the actors or volumes. These methods + // are used in that process. + virtual void GetActors(vtkPropCollection *); + + // Description: + // Support the standard render methods. + virtual int RenderOpaqueGeometry(vtkViewport *viewport); + //virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport); // porting to VTK 5.0.x + //virtual int HasTranslucentPolygonalGeometry(); // porting to VTK 5.0.x + virtual int RenderTranslucentGeometry(vtkViewport *viewport); // porting to VTK 5.0.x + + // Description: + // Shallow copy of an axes actor. Overloads the virtual vtkProp method. + void ShallowCopy(vtkProp *prop); + + // Description: + // Release any graphics resources that are being consumed by this actor. + // The parameter window could be used to determine which graphic + // resources to release. + void ReleaseGraphicsResources(vtkWindow *); + + // Description: + // Get the bounds for this Actor as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax). (The + // method GetBounds(double bounds[6]) is available from the superclass.) + void GetBounds(double bounds[6]); + double *GetBounds(); + + // Description: + // Get the actors mtime plus consider its properties and texture if set. + unsigned long int GetMTime(); + + // Description: + // Return the mtime of anything that would cause the rendered image to + // appear differently. Usually this involves checking the mtime of the + // prop plus anything else it depends on such as properties, textures + // etc. + virtual unsigned long GetRedrawMTime(); + + // Description: + // Set the total length of the axes in 3 dimensions. + void SetTotalLength( float v[3] ) + { this->SetTotalLength( v[0], v[1], v[2] ); } + void SetTotalLength( float x, float y, float z ); + vtkGetVectorMacro( TotalLength, float, 3 ); + + // Description: + // Set the normalized (0-1) length of the shaft. + void SetNormalizedShaftLength( float v[3] ) + { this->SetNormalizedShaftLength( v[0], v[1], v[2] ); } + void SetNormalizedShaftLength( float x, float y, float z ); + vtkGetVectorMacro( NormalizedShaftLength, float, 3 ); + + // Description: + // Set the normalized (0-1) length of the tip. + void SetNormalizedTipLength( float v[3] ) + { this->SetNormalizedTipLength( v[0], v[1], v[2] ); } + void SetNormalizedTipLength( float x, float y, float z ); + vtkGetVectorMacro( NormalizedTipLength, float, 3 ); + + // Description: + // Set/get the resolution of the pieces of the axes actor + vtkSetClampMacro(ConeResolution, int, 3, 128); + vtkGetMacro(ConeResolution, int); + vtkSetClampMacro(SphereResolution, int, 3, 128); + vtkGetMacro(SphereResolution, int); + vtkSetClampMacro(CylinderResolution, int, 3, 128); + vtkGetMacro(CylinderResolution, int); + + // Description: + // Set/get the radius of the pieces of the axes actor + vtkSetClampMacro(ConeRadius, float, 0, VTK_LARGE_FLOAT); + vtkGetMacro(ConeRadius, float); + vtkSetClampMacro(SphereRadius, float, 0, VTK_LARGE_FLOAT); + vtkGetMacro(SphereRadius, float); + vtkSetClampMacro(CylinderRadius, float, 0, VTK_LARGE_FLOAT); + vtkGetMacro(CylinderRadius, float); + + // Description: + // Set/get the positions of the axis labels + vtkSetClampMacro(XAxisLabelPosition, float, 0, 1); + vtkGetMacro(XAxisLabelPosition, float); + vtkSetClampMacro(YAxisLabelPosition, float, 0, 1); + vtkGetMacro(YAxisLabelPosition, float); + vtkSetClampMacro(ZAxisLabelPosition, float, 0, 1); + vtkGetMacro(ZAxisLabelPosition, float); + + // Description: + // Set the type of the shaft to a cylinder, line, or user defined geometry. + void SetShaftType( int type ); + void SetShaftTypeToCylinder() + { this->SetShaftType( vtkPVAxesActor::CYLINDER_SHAFT ); } + void SetShaftTypeToLine() + { this->SetShaftType( vtkPVAxesActor::LINE_SHAFT ); } + void SetShaftTypeToUserDefined() + { this->SetShaftType( vtkPVAxesActor::USER_DEFINED_SHAFT ); } + + // Description: + // Set the type of the tip to a cone, sphere, or user defined geometry. + void SetTipType( int type ); + void SetTipTypeToCone() + { this->SetTipType( vtkPVAxesActor::CONE_TIP ); } + void SetTipTypeToSphere() + { this->SetTipType( vtkPVAxesActor::SPHERE_TIP ); } + void SetTipTypeToUserDefined() + { this->SetTipType( vtkPVAxesActor::USER_DEFINED_TIP ); } + + //BTX + // Description: + // Set the user defined tip polydata. + void SetUserDefinedTip( vtkPolyData * ); + vtkGetObjectMacro( UserDefinedTip, vtkPolyData ); + + // Description: + // Set the user defined shaft polydata. + void SetUserDefinedShaft( vtkPolyData * ); + vtkGetObjectMacro( UserDefinedShaft, vtkPolyData ); + + // Description: + // Get the tip properties. + vtkProperty *GetXAxisTipProperty(); + vtkProperty *GetYAxisTipProperty(); + vtkProperty *GetZAxisTipProperty(); + + // Description: + // Get the shaft properties. + vtkProperty *GetXAxisShaftProperty(); + vtkProperty *GetYAxisShaftProperty(); + vtkProperty *GetZAxisShaftProperty(); + + // Description: + // Get the label properties. + vtkProperty *GetXAxisLabelProperty(); + vtkProperty *GetYAxisLabelProperty(); + vtkProperty *GetZAxisLabelProperty(); + //ETX + // + // Description: + // Set the label text. + vtkSetStringMacro( XAxisLabelText ); + vtkSetStringMacro( YAxisLabelText ); + vtkSetStringMacro( ZAxisLabelText ); + +//BTX + enum + { + CYLINDER_SHAFT, + LINE_SHAFT, + USER_DEFINED_SHAFT + }; + + + enum + { + CONE_TIP, + SPHERE_TIP, + USER_DEFINED_TIP + }; + +//ETX + + void AddToRender( vtkRenderer* theRenderer ); // porting to VTK 5.0.x + +protected: + vtkPVAxesActor(); + ~vtkPVAxesActor(); + + vtkCylinderSource *CylinderSource; + vtkLineSource *LineSource; + vtkConeSource *ConeSource; + vtkSphereSource *SphereSource; + + vtkActor *XAxisShaft; + vtkActor *YAxisShaft; + vtkActor *ZAxisShaft; + + vtkActor *XAxisTip; + vtkActor *YAxisTip; + vtkActor *ZAxisTip; + + void UpdateProps(); + + float TotalLength[3]; + float NormalizedShaftLength[3]; + float NormalizedTipLength[3]; + + int ShaftType; + int TipType; + + vtkPolyData *UserDefinedTip; + vtkPolyData *UserDefinedShaft; + + char *XAxisLabelText; + char *YAxisLabelText; + char *ZAxisLabelText; + + vtkVectorText *XAxisVectorText; + vtkVectorText *YAxisVectorText; + vtkVectorText *ZAxisVectorText; + + vtkFollower *XAxisLabel; + vtkFollower *YAxisLabel; + vtkFollower *ZAxisLabel; + + int ConeResolution; + int SphereResolution; + int CylinderResolution; + + float ConeRadius; + float SphereRadius; + float CylinderRadius; + + float XAxisLabelPosition; + float YAxisLabelPosition; + float ZAxisLabelPosition; + +private: + vtkPVAxesActor(const vtkPVAxesActor&); // Not implemented. + void operator=(const vtkPVAxesActor&); // Not implemented. +}; + +#endif + diff --git a/src/SVTK/vtkPVAxesWidget.cxx b/src/SVTK/vtkPVAxesWidget.cxx new file mode 100644 index 000000000..42d80002b --- /dev/null +++ b/src/SVTK/vtkPVAxesWidget.cxx @@ -0,0 +1,869 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +#include "vtkPVAxesWidget.h" + +#include "vtkActor2D.h" +#include "vtkCallbackCommand.h" +#include "vtkCamera.h" +#include "vtkCoordinate.h" +#include "vtkObjectFactory.h" +#include "vtkPoints.h" +#include "vtkPolyData.h" +#include "vtkPolyDataMapper2D.h" +#include "vtkProperty.h" +#include "vtkProperty2D.h" +#include "vtkPVAxesActor.h" +#include "vtkRenderer.h" +#include "vtkRenderWindow.h" +#include "vtkRenderWindowInteractor.h" + +vtkStandardNewMacro(vtkPVAxesWidget); +vtkCxxRevisionMacro(vtkPVAxesWidget, "$Revision$"); + +vtkCxxSetObjectMacro(vtkPVAxesWidget, AxesActor, vtkPVAxesActor); +vtkCxxSetObjectMacro(vtkPVAxesWidget, ParentRenderer, vtkRenderer); + +//---------------------------------------------------------------------------- +class vtkPVAxesWidgetObserver : public vtkCommand +{ +public: + static vtkPVAxesWidgetObserver *New() + {return new vtkPVAxesWidgetObserver;}; + + vtkPVAxesWidgetObserver() + { + this->AxesWidget = 0; + } + + virtual void Execute(vtkObject* wdg, unsigned long event, void *calldata) + { + if (this->AxesWidget) + { + this->AxesWidget->ExecuteEvent(wdg, event, calldata); + } + } + + vtkPVAxesWidget *AxesWidget; +}; + +//---------------------------------------------------------------------------- +vtkPVAxesWidget::vtkPVAxesWidget() +{ + this->StartEventObserverId = 0; + + this->EventCallbackCommand->SetCallback(vtkPVAxesWidget::ProcessEvents); + + this->Observer = vtkPVAxesWidgetObserver::New(); + this->Observer->AxesWidget = this; + this->Renderer = vtkRenderer::New(); + this->Renderer->SetViewport(0.0, 0.0, 0.2, 0.2); + this->Renderer->SetLayer(1); + this->Renderer->InteractiveOff(); + this->Priority = 0.55; + this->AxesActor = vtkPVAxesActor::New(); + this->Renderer->AddActor(this->AxesActor); + this->AxesActor->AddToRender(this->Renderer); // tmp + + this->ParentRenderer = NULL; + + this->Moving = 0; + this->MouseCursorState = vtkPVAxesWidget::Outside; + + this->StartTag = 0; + + this->Interactive = 1; + + this->Outline = vtkPolyData::New(); + this->Outline->Allocate(); + vtkPoints *points = vtkPoints::New(); + vtkIdType ptIds[5]; + ptIds[4] = ptIds[0] = points->InsertNextPoint(1, 1, 0); + ptIds[1] = points->InsertNextPoint(2, 1, 0); + ptIds[2] = points->InsertNextPoint(2, 2, 0); + ptIds[3] = points->InsertNextPoint(1, 2, 0); + this->Outline->SetPoints(points); + this->Outline->InsertNextCell(VTK_POLY_LINE, 5, ptIds); + vtkCoordinate *tcoord = vtkCoordinate::New(); + tcoord->SetCoordinateSystemToDisplay(); + vtkPolyDataMapper2D *mapper = vtkPolyDataMapper2D::New(); + mapper->SetInput(this->Outline); + mapper->SetTransformCoordinate(tcoord); + this->OutlineActor = vtkActor2D::New(); + this->OutlineActor->SetMapper(mapper); + this->OutlineActor->SetPosition(0, 0); + this->OutlineActor->SetPosition2(1, 1); + + points->Delete(); + mapper->Delete(); + tcoord->Delete(); +} + +//---------------------------------------------------------------------------- +vtkPVAxesWidget::~vtkPVAxesWidget() +{ + this->Observer->Delete(); + this->AxesActor->Delete(); + this->OutlineActor->Delete(); + this->Outline->Delete(); + this->SetParentRenderer(NULL); + this->Renderer->Delete(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetEnabled(int enabling) +{ + if (!this->Interactor) + { + vtkErrorMacro("The interactor must be set prior to enabling/disabling widget"); + } + + if (enabling) + { + if (this->Enabled) + { + return; + } + if (!this->ParentRenderer) + { + vtkErrorMacro("The parent renderer must be set prior to enabling this widget"); + return; + } + + this->Enabled = 1; + + if ( this->EventCallbackCommand ) + { + vtkRenderWindowInteractor *i = this->Interactor; + i->AddObserver(vtkCommand::MouseMoveEvent, + this->EventCallbackCommand, this->Priority); + i->AddObserver(vtkCommand::LeftButtonPressEvent, + this->EventCallbackCommand, this->Priority); + i->AddObserver(vtkCommand::LeftButtonReleaseEvent, + this->EventCallbackCommand, this->Priority); + } + + this->ParentRenderer->GetRenderWindow()->AddRenderer(this->Renderer); + if (this->ParentRenderer->GetRenderWindow()->GetNumberOfLayers() < 2) + { + this->ParentRenderer->GetRenderWindow()->SetNumberOfLayers(2); + } + this->AxesActor->SetVisibility(1); + // We need to copy the camera before the compositing observer is called. + // Compositing temporarily changes the camera to display an image. + this->StartEventObserverId = + this->ParentRenderer->AddObserver(vtkCommand::StartEvent,this->Observer,1); + this->InvokeEvent(vtkCommand::EnableEvent, NULL); + } + else + { + if (!this->Enabled) + { + return; + } + + this->Enabled = 0; + this->Interactor->RemoveObserver(this->EventCallbackCommand); + + this->AxesActor->SetVisibility(0); + if (this->ParentRenderer) + { + if (this->ParentRenderer->GetRenderWindow()) + { + this->ParentRenderer->GetRenderWindow()->RemoveRenderer(this->Renderer); + this->AxesActor->ReleaseGraphicsResources(this->ParentRenderer->GetRenderWindow()); + } + if (this->StartEventObserverId != 0) + { + this->ParentRenderer->RemoveObserver(this->StartEventObserverId); + } + } + + this->InvokeEvent(vtkCommand::DisableEvent, NULL); + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ExecuteEvent(vtkObject *vtkNotUsed(o), + unsigned long vtkNotUsed(event), + void *vtkNotUsed(calldata)) +{ + if (!this->ParentRenderer) + { + return; + } + + vtkCamera *cam = this->ParentRenderer->GetActiveCamera(); + double pos[3], fp[3], viewup[3]; + cam->GetPosition(pos); + cam->GetFocalPoint(fp); + cam->GetViewUp(viewup); + + cam = this->Renderer->GetActiveCamera(); + cam->SetPosition(pos); + cam->SetFocalPoint(fp); + cam->SetViewUp(viewup); + this->Renderer->ResetCamera(); + + this->SquareRenderer(); +} + +void vtkPVAxesWidget::UpdateCursorIcon() +{ + if (!this->Enabled) + { + this->SetMouseCursor(vtkPVAxesWidget::Outside); + return; + } + + if (this->Moving) + { + return; + } + + int *parentSize = this->ParentRenderer->GetSize(); + + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + double xNorm = x / (double)parentSize[0]; + double yNorm = y / (double)parentSize[1]; + + double pos[4]; + this->Renderer->GetViewport(pos); + + int pState = this->MouseCursorState; + + if (xNorm > pos[0] && xNorm < pos[2] && yNorm > pos[1] && yNorm < pos[3]) + { + this->MouseCursorState = vtkPVAxesWidget::Inside; + } + else if (fabs(xNorm-pos[0]) < .02 && fabs(yNorm-pos[3]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::TopLeft; + } + else if (fabs(xNorm-pos[2]) < .02 && fabs(yNorm-pos[3]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::TopRight; + } + else if (fabs(xNorm-pos[0]) < .02 && fabs(yNorm-pos[1]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::BottomLeft; + } + else if (fabs(xNorm-pos[2]) < .02 && fabs(yNorm-pos[1]) < .02) + { + this->MouseCursorState = vtkPVAxesWidget::BottomRight; + } + else + { + this->MouseCursorState = vtkPVAxesWidget::Outside; + } + + if (pState == this->MouseCursorState) + { + return; + } + + if (this->MouseCursorState == vtkPVAxesWidget::Outside) + { + this->Renderer->RemoveActor(this->OutlineActor); + } + else + { + this->Renderer->AddActor(this->OutlineActor); + } + this->Interactor->Render(); + + this->SetMouseCursor(this->MouseCursorState); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetMouseCursor(int cursorState) +{ + switch (cursorState) + { + case vtkPVAxesWidget::Outside: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_DEFAULT); + break; + case vtkPVAxesWidget::Inside: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZEALL); + break; + case vtkPVAxesWidget::TopLeft: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZENW); + break; + case vtkPVAxesWidget::TopRight: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZENE); + break; + case vtkPVAxesWidget::BottomLeft: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZESW); + break; + case vtkPVAxesWidget::BottomRight: + this->Interactor->GetRenderWindow()->SetCurrentCursor(VTK_CURSOR_SIZESE); + break; + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ProcessEvents(vtkObject* vtkNotUsed(object), + unsigned long event, + void *clientdata, + void* vtkNotUsed(calldata)) +{ + vtkPVAxesWidget *self = + reinterpret_cast(clientdata); + + if (!self->GetInteractive()) + { + return; + } + + switch (event) + { + case vtkCommand::LeftButtonPressEvent: + self->OnButtonPress(); + break; + case vtkCommand::MouseMoveEvent: + self->OnMouseMove(); + break; + case vtkCommand::LeftButtonReleaseEvent: + self->OnButtonRelease(); + break; + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::OnButtonPress() +{ + if (this->MouseCursorState == vtkPVAxesWidget::Outside) + { + return; + } + + this->SetMouseCursor(this->MouseCursorState); + + this->StartPosition[0] = this->Interactor->GetEventPosition()[0]; + this->StartPosition[1] = this->Interactor->GetEventPosition()[1]; + + this->Moving = 1; + this->EventCallbackCommand->SetAbortFlag(1); + this->StartInteraction(); + this->InvokeEvent(vtkCommand::StartInteractionEvent, NULL); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::OnButtonRelease() +{ + if (this->MouseCursorState == vtkPVAxesWidget::Outside) + { + return; + } + + this->Moving = 0; + this->EndInteraction(); + this->InvokeEvent(vtkCommand::EndInteractionEvent, NULL); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::OnMouseMove() +{ + if (this->Moving) + { + switch (this->MouseCursorState) + { + case vtkPVAxesWidget::Inside: + this->MoveWidget(); + break; + case vtkPVAxesWidget::TopLeft: + this->ResizeTopLeft(); + break; + case vtkPVAxesWidget::TopRight: + this->ResizeTopRight(); + break; + case vtkPVAxesWidget::BottomLeft: + this->ResizeBottomLeft(); + break; + case vtkPVAxesWidget::BottomRight: + this->ResizeBottomRight(); + break; + } + + this->UpdateCursorIcon(); + this->EventCallbackCommand->SetAbortFlag(1); + this->InvokeEvent(vtkCommand::InteractionEvent, NULL); + } + else + { + this->UpdateCursorIcon(); + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::MoveWidget() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + double *vp = this->Renderer->GetViewport(); + + double newPos[4]; + newPos[0] = vp[0] + dxNorm; + newPos[1] = vp[1] + dyNorm; + newPos[2] = vp[2] + dxNorm; + newPos[3] = vp[3] + dyNorm; + + if (newPos[0] < 0) + { + this->StartPosition[0] = 0; + newPos[0] = 0; + newPos[2] = vp[2] - vp[0]; + } + if (newPos[1] < 0) + { + this->StartPosition[1] = 0; + newPos[1] = 0; + newPos[3] = vp[3] - vp[1]; + } + if (newPos[2] > 1) + { + this->StartPosition[0] = (int)(size[0] - size[0] * (vp[2]-vp[0])); + newPos[0] = 1 - (vp[2]-vp[0]); + newPos[2] = 1; + } + if (newPos[3] > 1) + { + this->StartPosition[1] = (int)(size[1] - size[1]*(vp[3]-vp[1])); + newPos[1] = 1 - (vp[3]-vp[1]); + newPos[3] = 1; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeTopLeft() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + int useX; + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + useX = 1; + } + else + { + change = dyNorm; + useX = 0; + } + + double *vp = this->Renderer->GetViewport(); + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = useX ? vp[0] + change : vp[0] - change; + newPos[1] = vp[1]; + newPos[2] = vp[2]; + newPos[3] = useX ? vp[3] - change : vp[3] + change; + + if (newPos[0] < 0) + { + this->StartPosition[0] = 0; + newPos[0] = 0; + } + if (newPos[0] >= newPos[2]-0.01) + { + newPos[0] = newPos[2] - 0.01; + } + if (newPos[3] > 1) + { + this->StartPosition[1] = size[1]; + newPos[3] = 1; + } + if (newPos[3] <= newPos[1]+0.01) + { + newPos[3] = newPos[1] + 0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeTopRight() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + } + else + { + change = dyNorm; + } + + double *vp = this->Renderer->GetViewport(); + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = vp[0]; + newPos[1] = vp[1]; + newPos[2] = vp[2] + change; + newPos[3] = vp[3] + change; + + if (newPos[2] > 1) + { + this->StartPosition[0] = size[0]; + newPos[2] = 1; + } + if (newPos[2] <= newPos[0]+0.01) + { + newPos[2] = newPos[0] + 0.01; + } + if (newPos[3] > 1) + { + this->StartPosition[1] = size[1]; + newPos[3] = 1; + } + if (newPos[3] <= newPos[1]+0.01) + { + newPos[3] = newPos[1] + 0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeBottomLeft() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + double *vp = this->Renderer->GetViewport(); + + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + } + else + { + change = dyNorm; + } + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = vp[0] + change; + newPos[1] = vp[1] + change; + newPos[2] = vp[2]; + newPos[3] = vp[3]; + + if (newPos[0] < 0) + { + this->StartPosition[0] = 0; + newPos[0] = 0; + } + if (newPos[0] >= newPos[2]-0.01) + { + newPos[0] = newPos[2] - 0.01; + } + if (newPos[1] < 0) + { + this->StartPosition[1] = 0; + newPos[1] = 0; + } + if (newPos[1] >= newPos[3]-0.01) + { + newPos[1] = newPos[3] - 0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::ResizeBottomRight() +{ + int x = this->Interactor->GetEventPosition()[0]; + int y = this->Interactor->GetEventPosition()[1]; + + int dx = x - this->StartPosition[0]; + int dy = y - this->StartPosition[1]; + + int *size = this->ParentRenderer->GetSize(); + double dxNorm = dx / (double)size[0]; + double dyNorm = dy / (double)size[1]; + + double *vp = this->Renderer->GetViewport(); + + int useX; + double change; + double absDx = fabs(dxNorm); + double absDy = fabs(dyNorm); + + if (absDx > absDy) + { + change = dxNorm; + useX = 1; + } + else + { + change = dyNorm; + useX = 0; + } + + this->StartPosition[0] = x; + this->StartPosition[1] = y; + + double newPos[4]; + newPos[0] = vp[0]; + newPos[1] = useX ? vp[1] - change : vp[1] + change; + newPos[2] = useX ? vp[2] + change : vp[2] - change; + newPos[3] = vp[3]; + + if (newPos[2] > 1) + { + this->StartPosition[0] = size[0]; + newPos[2] = 1; + } + if (newPos[2] <= newPos[0]+0.01) + { + newPos[2] = newPos[0] + 0.01; + } + if (newPos[1] < 0) + { + this->StartPosition[1] = 0; + newPos[1] = 0; + } + if (newPos[1] >= newPos[3]-0.01) + { + newPos[1] = newPos[3]-0.01; + } + + this->Renderer->SetViewport(newPos); + this->Interactor->Render(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SquareRenderer() +{ + int *size = this->Renderer->GetSize(); + if (size[0] == 0 || size[1] == 0) + { + return; + } + + double vp[4]; + this->Renderer->GetViewport(vp); + + double deltaX = vp[2] - vp[0]; + double newDeltaX = size[1] * deltaX / (double)size[0]; + double deltaY = vp[3] - vp[1]; + double newDeltaY = size[0] * deltaY / (double)size[1]; + + if (newDeltaX > 1) + { + if (newDeltaY > 1) + { + if (size[0] > size[1]) + { + newDeltaX = size[1] / (double)size[0]; + newDeltaY = 1; + } + else + { + newDeltaX = 1; + newDeltaY = size[0] / (double)size[1]; + } + vp[0] = vp[1] = 0; + vp[2] = newDeltaX; + vp[3] = newDeltaY; + } + else + { + vp[3] = vp[1] + newDeltaY; + if (vp[3] > 1) + { + vp[3] = 1; + vp[1] = vp[3] - newDeltaY; + } + } + } + else + { + vp[2] = vp[0] + newDeltaX; + if (vp[2] > 1) + { + vp[2] = 1; + vp[0] = vp[2] - newDeltaX; + } + } + + this->Renderer->SetViewport(vp); + + this->Renderer->NormalizedDisplayToDisplay(vp[0], vp[1]); + this->Renderer->NormalizedDisplayToDisplay(vp[2], vp[3]); + + vtkPoints *points = this->Outline->GetPoints(); + points->SetPoint(0, vp[0]+1, vp[1]+1, 0); + points->SetPoint(1, vp[2]-1, vp[1]+1, 0); + points->SetPoint(2, vp[2]-1, vp[3]-1, 0); + points->SetPoint(3, vp[0]+1, vp[3]-1, 0); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetInteractive(int state) +{ + if (this->Interactive != state) + { + this->Interactive = state; + } + + if (!state) + { + this->OnButtonRelease(); + this->MouseCursorState = vtkPVAxesWidget::Outside; + this->Renderer->RemoveActor(this->OutlineActor); + if (this->Interactor) + { + this->SetMouseCursor(this->MouseCursorState); + // this->Interactor->Render(); + } + } +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetOutlineColor(double r, double g, double b) +{ + this->OutlineActor->GetProperty()->SetColor(r, g, b); + if (this->Interactor) + { +// this->Interactor->Render(); + } +} + +//---------------------------------------------------------------------------- +double* vtkPVAxesWidget::GetOutlineColor() +{ + return this->OutlineActor->GetProperty()->GetColor(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetAxisLabelColor(double r, double g, double b) +{ + this->AxesActor->GetXAxisLabelProperty()->SetColor(r, g, b); + this->AxesActor->GetYAxisLabelProperty()->SetColor(r, g, b); + this->AxesActor->GetZAxisLabelProperty()->SetColor(r, g, b); +} + +//---------------------------------------------------------------------------- +double* vtkPVAxesWidget::GetAxisLabelColor() +{ + return this->AxesActor->GetXAxisLabelProperty()->GetColor(); +} + +//---------------------------------------------------------------------------- +vtkRenderer* vtkPVAxesWidget::GetParentRenderer() +{ + return this->ParentRenderer; +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::SetViewport(double minX, double minY, + double maxX, double maxY) +{ + this->Renderer->SetViewport(minX, minY, maxX, maxY); +} + +//---------------------------------------------------------------------------- +double* vtkPVAxesWidget::GetViewport() +{ + return this->Renderer->GetViewport(); +} + +//---------------------------------------------------------------------------- +void vtkPVAxesWidget::PrintSelf(ostream& os, vtkIndent indent) +{ + this->Superclass::PrintSelf(os, indent); + + os << indent << "AxesActor: " << this->AxesActor << endl; + os << indent << "Interactive: " << this->Interactive << endl; +} diff --git a/src/SVTK/vtkPVAxesWidget.h b/src/SVTK/vtkPVAxesWidget.h new file mode 100644 index 000000000..35c152a94 --- /dev/null +++ b/src/SVTK/vtkPVAxesWidget.h @@ -0,0 +1,159 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ +// .NAME vtkPVAxesWidget - A widget to manipulate an axe +// +// .SECTION Description +// This widget creates and manages its own vtkPVAxesActor. + + +#ifndef __vtkPVAxesWidget_h +#define __vtkPVAxesWidget_h + +#include "SVTK.h" +#include "vtkInteractorObserver.h" + +class vtkActor2D; +class vtkKWApplication; +class vtkPolyData; +class vtkPVAxesActor; +class vtkPVAxesWidgetObserver; +class vtkRenderer; + +class SVTK_EXPORT vtkPVAxesWidget : public vtkInteractorObserver +{ +public: + static vtkPVAxesWidget* New(); + vtkTypeRevisionMacro(vtkPVAxesWidget, vtkInteractorObserver); + void PrintSelf(ostream& os, vtkIndent indent); + + // Description: + // Set/get the axes actor to be displayed in this 3D widget. + void SetAxesActor(vtkPVAxesActor *actor); + vtkGetObjectMacro(AxesActor, vtkPVAxesActor); + + // Description: + // Enable the 3D widget. + virtual void SetEnabled(int); + + //BTX + // Description: + // Set the renderer this 3D widget will be contained in. + void SetParentRenderer(vtkRenderer *ren); + vtkRenderer* GetParentRenderer(); + //ETX + + // Description: + // Callback to keep the camera for the axes actor up to date with the + // camera in the parent renderer + void ExecuteEvent(vtkObject *o, unsigned long event, void *calldata); + + // Description: + // Set/get whether to allow this 3D widget to be interactively moved/scaled. + void SetInteractive(int state); + vtkGetMacro(Interactive, int); + vtkBooleanMacro(Interactive, int); + + // Description: + // Set/get the color of the outline of this widget. The outline is visible + // when (in interactive mode) the cursor is over this 3D widget. + void SetOutlineColor(double r, double g, double b); + double *GetOutlineColor(); + + // Description: + // Set/get the color of the axis labels of this widget. + void SetAxisLabelColor(double r, double g, double b); + double *GetAxisLabelColor(); + + // Description: + // Set/get the viewport to position/size this 3D widget. + void SetViewport(double minX, double minY, double maxX, double maxY); + double* GetViewport(); + +protected: + vtkPVAxesWidget(); + ~vtkPVAxesWidget(); + + vtkRenderer *Renderer; + vtkRenderer *ParentRenderer; + + vtkPVAxesActor *AxesActor; + vtkPolyData *Outline; + vtkActor2D *OutlineActor; + + static void ProcessEvents(vtkObject *object, unsigned long event, + void *clientdata, void *calldata); + + vtkPVAxesWidgetObserver *Observer; + int StartTag; + + int MouseCursorState; + int Moving; + int StartPosition[2]; + + int Interactive; + + void UpdateCursorIcon(); + void SetMouseCursor(int cursorState); + +//BTX + int State; + + enum AxesWidgetState + { + Outside = 0, + Inside, + TopLeft, + TopRight, + BottomLeft, + BottomRight + }; +//ETX + + void OnButtonPress(); + void OnMouseMove(); + void OnButtonRelease(); + + void MoveWidget(); + void ResizeTopLeft(); + void ResizeTopRight(); + void ResizeBottomLeft(); + void ResizeBottomRight(); + + void SquareRenderer(); + + unsigned long StartEventObserverId; +private: + vtkPVAxesWidget(const vtkPVAxesWidget&); // Not implemented + void operator=(const vtkPVAxesWidget&); // Not implemented +}; + +#endif diff --git a/src/SalomeApp/resources/SalomeApp.xml b/src/SalomeApp/resources/SalomeApp.xml index 0dab05727..46ab023a5 100644 --- a/src/SalomeApp/resources/SalomeApp.xml +++ b/src/SalomeApp/resources/SalomeApp.xml @@ -144,6 +144,7 @@ + -- 2.39.2