mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
ParaView-5.0.1: Added the source-tree to ThirdParty-dev and patched as described in the README file
Resolves bug-report http://bugs.openfoam.org/view.php?id=2098
This commit is contained in:
@ -0,0 +1,253 @@
|
||||
/*=========================================================================
|
||||
|
||||
Program: ParaView
|
||||
Module: vtk3DWidgetRepresentation.cxx
|
||||
|
||||
Copyright (c) Kitware, Inc.
|
||||
All rights reserved.
|
||||
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
||||
|
||||
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
PURPOSE. See the above copyright notice for more information.
|
||||
|
||||
=========================================================================*/
|
||||
#include "vtk3DWidgetRepresentation.h"
|
||||
|
||||
#include "vtkAbstractWidget.h"
|
||||
#include "vtkCommand.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
#include "vtkPVImplicitPlaneRepresentation.h"
|
||||
#include "vtkPVRenderView.h"
|
||||
#include "vtkRenderer.h"
|
||||
#include "vtkTransform.h"
|
||||
#include "vtkWidgetRepresentation.h"
|
||||
|
||||
vtkStandardNewMacro(vtk3DWidgetRepresentation);
|
||||
vtkCxxSetObjectMacro(vtk3DWidgetRepresentation, Widget, vtkAbstractWidget);
|
||||
//----------------------------------------------------------------------------
|
||||
vtk3DWidgetRepresentation::vtk3DWidgetRepresentation()
|
||||
{
|
||||
this->SetNumberOfInputPorts(0);
|
||||
this->Widget = 0;
|
||||
this->Representation = 0;
|
||||
this->UseNonCompositedRenderer = false;
|
||||
this->Enabled = false;
|
||||
|
||||
this->CustomTransform = vtkTransform::New();
|
||||
this->CustomTransform->PostMultiply();
|
||||
this->CustomTransform->Identity();
|
||||
this->RepresentationObserverTag = 0;
|
||||
this->ViewObserverTag = 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtk3DWidgetRepresentation::~vtk3DWidgetRepresentation()
|
||||
{
|
||||
this->SetWidget(0);
|
||||
this->SetRepresentation(0);
|
||||
this->CustomTransform->Delete();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::SetRepresentation(vtkWidgetRepresentation* repr)
|
||||
{
|
||||
if (this->Representation == repr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->Representation)
|
||||
{
|
||||
this->Representation->RemoveObserver(this->RepresentationObserverTag);
|
||||
this->RepresentationObserverTag = 0;
|
||||
}
|
||||
vtkSetObjectBodyMacro(Representation, vtkWidgetRepresentation, repr);
|
||||
if (this->Representation)
|
||||
{
|
||||
this->RepresentationObserverTag = this->Representation->AddObserver(
|
||||
vtkCommand::ModifiedEvent,
|
||||
this, &vtk3DWidgetRepresentation::OnRepresentationModified);
|
||||
}
|
||||
|
||||
this->UpdateEnabled();
|
||||
this->UpdateTransform();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool vtk3DWidgetRepresentation::AddToView(vtkView* view)
|
||||
{
|
||||
vtkPVRenderView* pvview = vtkPVRenderView::SafeDownCast(view);
|
||||
if (pvview)
|
||||
{
|
||||
vtkRenderer* activeRenderer = this->UseNonCompositedRenderer?
|
||||
pvview->GetNonCompositedRenderer() : pvview->GetRenderer();
|
||||
if (this->Widget)
|
||||
{
|
||||
// If DefaultRenderer is non-null, SetCurrentRenderer() will have no
|
||||
// effect.
|
||||
this->Widget->SetDefaultRenderer(NULL);
|
||||
this->Widget->SetCurrentRenderer(activeRenderer);
|
||||
// Set the DefaultRenderer to ensure that it doesn't get overridden by the
|
||||
// Widget. The Widget should use the specified renderer. Period.
|
||||
this->Widget->SetDefaultRenderer(activeRenderer);
|
||||
}
|
||||
if (this->Representation)
|
||||
{
|
||||
this->Representation->SetRenderer(activeRenderer);
|
||||
activeRenderer->AddActor(this->Representation);
|
||||
}
|
||||
if (this->View)
|
||||
{
|
||||
this->View->RemoveObserver(this->ViewObserverTag);
|
||||
this->ViewObserverTag = 0;
|
||||
}
|
||||
this->View = pvview;
|
||||
// observer the view so we know when it gets a new interactor.
|
||||
this->ViewObserverTag = this->View->AddObserver(vtkCommand::ModifiedEvent,
|
||||
this, &vtk3DWidgetRepresentation::OnViewModified);
|
||||
this->UpdateEnabled();
|
||||
this->UpdateTransform();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::SetEnabled(bool enable)
|
||||
{
|
||||
if (this->Enabled != enable)
|
||||
{
|
||||
this->Enabled = enable;
|
||||
this->UpdateEnabled();
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::UpdateEnabled()
|
||||
{
|
||||
if (this->Widget == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool enable_widget = (this->View != NULL)? this->Enabled : false;
|
||||
|
||||
// BUG #14913: Don't enable widget when the representation is missing or not
|
||||
// visible.
|
||||
if (this->Representation == NULL ||
|
||||
this->Representation->GetVisibility() == 0)
|
||||
{
|
||||
enable_widget = false;
|
||||
}
|
||||
|
||||
// Not all processes have the interactor setup. Enable 3D widgets only on
|
||||
// those processes that have an interactor.
|
||||
if (this->View == NULL || this->View->GetInteractor() == NULL)
|
||||
{
|
||||
enable_widget = false;
|
||||
}
|
||||
|
||||
if (this->Widget->GetEnabled() != (enable_widget? 1 : 0))
|
||||
{
|
||||
// We do this here, instead of AddToView() since
|
||||
// the View may not have the interactor setup when
|
||||
// AddToView() is called (which happens when loading state files).
|
||||
this->Widget->SetInteractor(this->View->GetInteractor());
|
||||
this->Widget->SetEnabled(enable_widget? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::OnRepresentationModified()
|
||||
{
|
||||
// This will be called everytime the representation is modified, but since the
|
||||
// work done in this->UpdateEnabled() is minimal, we let it do it.
|
||||
this->UpdateEnabled();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::OnViewModified()
|
||||
{
|
||||
if (this->View && this->Widget &&
|
||||
this->View->GetInteractor() != this->Widget->GetInteractor())
|
||||
{
|
||||
this->UpdateEnabled();
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
bool vtk3DWidgetRepresentation::RemoveFromView(vtkView* view)
|
||||
{
|
||||
vtkPVRenderView* pvview = vtkPVRenderView::SafeDownCast(view);
|
||||
if (pvview)
|
||||
{
|
||||
this->View = NULL;
|
||||
if (this->Widget)
|
||||
{
|
||||
this->Widget->SetEnabled(0);
|
||||
this->Widget->SetDefaultRenderer(0);
|
||||
this->Widget->SetCurrentRenderer(0);
|
||||
this->Widget->SetInteractor(0);
|
||||
}
|
||||
if (this->Representation)
|
||||
{
|
||||
vtkRenderer* renderer = this->Representation->GetRenderer();
|
||||
if (renderer)
|
||||
{
|
||||
renderer->RemoveActor(this->Representation);
|
||||
// NOTE: this will modify the Representation and call
|
||||
// this->OnRepresentationModified().
|
||||
this->Representation->SetRenderer(0);
|
||||
}
|
||||
}
|
||||
this->UpdateTransform();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::SetCustomWidgetTransform(vtkTransform *transform)
|
||||
{
|
||||
if (this->CustomTransform->GetInput () != transform)
|
||||
{
|
||||
this->CustomTransform->SetInput(transform);
|
||||
if (!transform)
|
||||
{
|
||||
this->CustomTransform->Identity();
|
||||
}
|
||||
this->UpdateTransform();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::UpdateTransform()
|
||||
{
|
||||
if (vtkPVImplicitPlaneRepresentation *plane =
|
||||
vtkPVImplicitPlaneRepresentation::SafeDownCast(this->Representation))
|
||||
{
|
||||
if (this->View)
|
||||
{
|
||||
plane->SetTransform(this->CustomTransform);
|
||||
plane->UpdateTransformLocation();
|
||||
}
|
||||
else
|
||||
{
|
||||
plane->ClearTransform();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtk3DWidgetRepresentation::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
this->Superclass::PrintSelf(os, indent);
|
||||
os << indent << "UseNonCompositedRenderer: " << this->UseNonCompositedRenderer
|
||||
<< endl;
|
||||
os << indent << "Widget: " << this->Widget << endl;
|
||||
os << indent << "Representation: " << this->Representation << endl;
|
||||
os << indent << "Enabled: " << this->Enabled << endl;
|
||||
os << indent << "CustomTransform: ";
|
||||
this->CustomTransform->Print(os);
|
||||
}
|
||||
Reference in New Issue
Block a user