From: vsr Date: Wed, 3 Dec 2014 08:15:20 +0000 (+0300) Subject: 0022813: [CEA 1336] Regression : sigsegv at the med file openning X-Git-Tag: V7_5_1b1~9 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=486ffef058aef2cf3e9388e04aaad27a71094c59;p=modules%2Fgui.git 0022813: [CEA 1336] Regression : sigsegv at the med file openning --- diff --git a/src/SVTK/CMakeLists.txt b/src/SVTK/CMakeLists.txt index 22a93e45d..955302b26 100755 --- a/src/SVTK/CMakeLists.txt +++ b/src/SVTK/CMakeLists.txt @@ -105,8 +105,8 @@ SET(_other_HEADERS SET(_internal_HEADERS SVTK_SelectorDef.h SVTK_Trihedron.h - vtkPVAxesActor.h - vtkPVAxesWidget.h + salomevtkPVAxesActor.h + salomevtkPVAxesWidget.h ) # header files / to install @@ -181,8 +181,8 @@ SET(_other_SOURCES SVTK_ViewModel.cxx SVTK_ViewParameterDlg.cxx SVTK_ViewWindow.cxx - vtkPVAxesActor.cxx - vtkPVAxesWidget.cxx + salomevtkPVAxesActor.cxx + salomevtkPVAxesWidget.cxx ) # sources / to compile diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index 49b496192..19f924966 100755 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -93,8 +93,8 @@ #include "SVTK_Recorder.h" #include "SVTK_RecorderDlg.h" -#include "vtkPVAxesWidget.h" -#include "vtkPVAxesActor.h" +#include "salomevtkPVAxesWidget.h" +#include "salomevtkPVAxesActor.h" #include "SALOME_ListIO.hxx" @@ -213,14 +213,14 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) setCentralWidget(myInteractor); - myAxesWidget = vtkPVAxesWidget::New(); + myAxesWidget = salomevtk::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(); + salomevtk::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 ); diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h index ef6eb8a55..ea6f67236 100755 --- a/src/SVTK/SVTK_ViewWindow.h +++ b/src/SVTK/SVTK_ViewWindow.h @@ -66,7 +66,10 @@ class SVTK_KeyFreeInteractorStyle; class SVTK_ViewParameterDlg; class SVTK_Recorder; -class vtkPVAxesWidget; +namespace salomevtk +{ + class vtkPVAxesWidget; +} class vtkObject; class QtxAction; @@ -453,7 +456,7 @@ protected: int myToolBar; int myRecordingToolBar; - vtkPVAxesWidget* myAxesWidget; + salomevtk::vtkPVAxesWidget* myAxesWidget; Qtx::BackgroundData myBackground; private: diff --git a/src/SVTK/salomevtkPVAxesActor.cxx b/src/SVTK/salomevtkPVAxesActor.cxx new file mode 100644 index 000000000..da12e3525 --- /dev/null +++ b/src/SVTK/salomevtkPVAxesActor.cxx @@ -0,0 +1,820 @@ +/*========================================================================= + + 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. + +=========================================================================*/ +// +// VSR 03/12/2014: the original file vtkPVAxesActor.cxx has been renamed to salomevtkPVAxesActor.cxx +// to avoid collisions with native VTK/ParaView classes + +#include "salomevtkPVAxesActor.h" // changed by SALOME +#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 + +// VSR 03/12/2014: we put classes copied from VTK/ParaView to the specific namespace +// to avoid collisions with native VTK/ParaView classes +namespace salomevtk +{ + +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->SetInputConnection( this->XAxisVectorText->GetOutputPort() ); + ymapper->SetInputConnection( this->YAxisVectorText->GetOutputPort() ); + zmapper->SetInputConnection( this->ZAxisVectorText->GetOutputPort() ); + + 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; +} + +//----------------------------------------------------------------------------- +#if (VTK_MAJOR_VERSION>5 || VTK_MINOR_VERSION>=2) +// 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; +} + +#else +//----------------------------------------------------------------------------- +// 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; +} +#endif + +//----------------------------------------------------------------------------- +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()))-> + SetInputConnection( this->CylinderSource->GetOutputPort() ); + break; + case vtkPVAxesActor::LINE_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInputConnection( this->LineSource->GetOutputPort() ); + break; + case vtkPVAxesActor::USER_DEFINED_SHAFT: + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> + SetInputData( this->UserDefinedShaft ); + } + + switch ( this->TipType ) + { + case vtkPVAxesActor::CONE_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInputConnection( this->ConeSource->GetOutputPort() ); + break; + case vtkPVAxesActor::SPHERE_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInputConnection( this->SphereSource->GetOutputPort() ); + break; + case vtkPVAxesActor::USER_DEFINED_TIP: + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> + SetInputData( this->UserDefinedTip ); + } + + (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))->Update(); + (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))->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); +} + +} // end of salomevtk namespace diff --git a/src/SVTK/salomevtkPVAxesActor.h b/src/SVTK/salomevtkPVAxesActor.h new file mode 100644 index 000000000..6ab2edb8e --- /dev/null +++ b/src/SVTK/salomevtkPVAxesActor.h @@ -0,0 +1,304 @@ +/*========================================================================= + + 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. +// +// VSR 03/12/2014: the original file vtkPVAxesActor.h has been renamed to salomevtkPVAxesActor.h +// to avoid collisions with native VTK/ParaView classes + +#ifndef __salomevtkPVAxesActor_h +#define __salomevtkPVAxesActor_h + +#include "SVTK.h" // added by SALOME +#include "vtkProp3D.h" + +#include + +class vtkRenderer; +class vtkPropCollection; +class vtkMapper; +class vtkProperty; +class vtkActor; +class vtkFollower; +class vtkCylinderSource; +class vtkLineSource; +class vtkConeSource; +class vtkSphereSource; +class vtkPolyData; +class vtkVectorText; + +// VSR 03/12/2014: we put classes copied from VTK/ParaView to the specific namespace +// to avoid collisions with native VTK/ParaView classes +namespace salomevtk +{ + +class SVTK_EXPORT vtkPVAxesActor : public vtkProp3D +{ +public: + static vtkPVAxesActor *New(); + vtkTypeMacro(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); +#if (VTK_MAJOR_VERSION>5 || VTK_MINOR_VERSION>=2) + virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport); // porting to VTK 5.0.x + virtual int HasTranslucentPolygonalGeometry(); // porting to VTK 5.0.x +#else + virtual int RenderTranslucentGeometry(vtkViewport *viewport); // porting to VTK 5.0.x +#endif + + // 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. +}; + +} // end of salomevtk namespace + +#endif + diff --git a/src/SVTK/salomevtkPVAxesWidget.cxx b/src/SVTK/salomevtkPVAxesWidget.cxx new file mode 100644 index 000000000..c73d4730b --- /dev/null +++ b/src/SVTK/salomevtkPVAxesWidget.cxx @@ -0,0 +1,878 @@ +/*========================================================================= + + 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. + +=========================================================================*/ +// VSR 03/12/2014: the original file vtkPVAxesWidget.cxx has been renamed to salomevtkPVAxesWidget.cxx +// to avoid collisions with native VTK/ParaView classes + +#include "salomevtkPVAxesWidget.h" // changed by SALOME +#include "salomevtkPVAxesActor.h" // changed by SALOME + +#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 "vtkRenderer.h" +#include "vtkRenderWindow.h" +#include "vtkRenderWindowInteractor.h" + +// VSR 03/12/2014: we put classes copied from VTK/ParaView to the specific namespace +// to avoid collisions with native VTK/ParaView classes +namespace salomevtk +{ + +vtkStandardNewMacro(vtkPVAxesWidget); + +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->SetInputData(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; +} + +} // end of salomevtk namespace diff --git a/src/SVTK/salomevtkPVAxesWidget.h b/src/SVTK/salomevtkPVAxesWidget.h new file mode 100644 index 000000000..bb68fa5d9 --- /dev/null +++ b/src/SVTK/salomevtkPVAxesWidget.h @@ -0,0 +1,169 @@ +/*========================================================================= + + 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. +// VSR 03/12/2014: the original file vtkPVAxesWidget.h has been renamed to salomevtkPVAxesWidget.h +// to avoid collisions with native VTK/ParaView classes + + +#ifndef __salomevtkPVAxesWidget_h +#define __salomevtkPVAxesWidget_h + +#include "SVTK.h" // added by SALOME +#include "vtkInteractorObserver.h" + +class vtkActor2D; +class vtkKWApplication; +class vtkPolyData; +class vtkRenderer; + +// VSR 03/12/2014: we put classes copied from VTK/ParaView to the specific namespace +// to avoid collisions with native VTK/ParaView classes +namespace salomevtk +{ + +class vtkPVAxesWidgetObserver; +class vtkPVAxesActor; + +class SVTK_EXPORT vtkPVAxesWidget : public vtkInteractorObserver +{ +public: + static vtkPVAxesWidget* New(); + vtkTypeMacro(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 +}; + +} // end of salomevtk namespace + +#endif diff --git a/src/SVTK/vtkPVAxesActor.cxx b/src/SVTK/vtkPVAxesActor.cxx deleted file mode 100644 index 4431e3ea6..000000000 --- a/src/SVTK/vtkPVAxesActor.cxx +++ /dev/null @@ -1,809 +0,0 @@ -/*========================================================================= - - 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 - -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->SetInputConnection( this->XAxisVectorText->GetOutputPort() ); - ymapper->SetInputConnection( this->YAxisVectorText->GetOutputPort() ); - zmapper->SetInputConnection( this->ZAxisVectorText->GetOutputPort() ); - - 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; -} - -//----------------------------------------------------------------------------- -#if (VTK_MAJOR_VERSION>5 || VTK_MINOR_VERSION>=2) -// 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; -} - -#else -//----------------------------------------------------------------------------- -// 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; -} -#endif - -//----------------------------------------------------------------------------- -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()))-> - SetInputConnection( this->CylinderSource->GetOutputPort() ); - break; - case vtkPVAxesActor::LINE_SHAFT: - (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> - SetInputConnection( this->LineSource->GetOutputPort() ); - break; - case vtkPVAxesActor::USER_DEFINED_SHAFT: - (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))-> - SetInputData( this->UserDefinedShaft ); - } - - switch ( this->TipType ) - { - case vtkPVAxesActor::CONE_TIP: - (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> - SetInputConnection( this->ConeSource->GetOutputPort() ); - break; - case vtkPVAxesActor::SPHERE_TIP: - (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> - SetInputConnection( this->SphereSource->GetOutputPort() ); - break; - case vtkPVAxesActor::USER_DEFINED_TIP: - (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))-> - SetInputData( this->UserDefinedTip ); - } - - (vtkPolyDataMapper::SafeDownCast(this->XAxisTip->GetMapper()))->Update(); - (vtkPolyDataMapper::SafeDownCast(this->XAxisShaft->GetMapper()))->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 deleted file mode 100644 index b76f59f93..000000000 --- a/src/SVTK/vtkPVAxesActor.h +++ /dev/null @@ -1,295 +0,0 @@ -/*========================================================================= - - 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" - -#include - -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(); - vtkTypeMacro(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); -#if (VTK_MAJOR_VERSION>5 || VTK_MINOR_VERSION>=2) - virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport); // porting to VTK 5.0.x - virtual int HasTranslucentPolygonalGeometry(); // porting to VTK 5.0.x -#else - virtual int RenderTranslucentGeometry(vtkViewport *viewport); // porting to VTK 5.0.x -#endif - - // 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 deleted file mode 100644 index b83b1dea3..000000000 --- a/src/SVTK/vtkPVAxesWidget.cxx +++ /dev/null @@ -1,868 +0,0 @@ -/*========================================================================= - - 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); - -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->SetInputData(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 deleted file mode 100644 index cc2bba8e1..000000000 --- a/src/SVTK/vtkPVAxesWidget.h +++ /dev/null @@ -1,159 +0,0 @@ -/*========================================================================= - - 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(); - vtkTypeMacro(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