Files
ThirdParty-6/ParaView-5.0.1/ParaViewCore/ServerManager/Core/vtkSMExtentDomain.cxx

148 lines
4.1 KiB
C++

/*=========================================================================
Program: ParaView
Module: vtkSMExtentDomain.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 "vtkSMExtentDomain.h"
#include "vtkObjectFactory.h"
#include "vtkPVDataInformation.h"
#include "vtkSMInputProperty.h"
#include "vtkSMIntVectorProperty.h"
#include "vtkSMPropertyHelper.h"
#include "vtkSMSourceProxy.h"
vtkStandardNewMacro(vtkSMExtentDomain);
//---------------------------------------------------------------------------
vtkSMExtentDomain::vtkSMExtentDomain()
{
}
//---------------------------------------------------------------------------
vtkSMExtentDomain::~vtkSMExtentDomain()
{
}
//---------------------------------------------------------------------------
void vtkSMExtentDomain::Update(vtkSMProperty*)
{
vtkSMProxyProperty *pp = vtkSMProxyProperty::SafeDownCast(
this->GetRequiredProperty("Input"));
if (pp)
{
this->Update(pp);
}
}
//---------------------------------------------------------------------------
void vtkSMExtentDomain::Update(vtkSMProxyProperty *pp)
{
vtkSMInputProperty* ip = vtkSMInputProperty::SafeDownCast(pp);
unsigned int numProxs = pp->GetNumberOfUncheckedProxies();
for (unsigned int i = 0; i < numProxs; i++)
{
vtkSMSourceProxy* sp =
vtkSMSourceProxy::SafeDownCast(pp->GetUncheckedProxy(i));
if (sp)
{
vtkPVDataInformation *info = sp->GetDataInformation(
(ip? ip->GetUncheckedOutputPortForConnection(i):0));
if (!info)
{
continue;
}
int extent[6];
info->GetExtent(extent);
std::vector<vtkEntry> entries;
for (int j = 0; j < 3; j++)
{
entries.push_back(vtkEntry(extent[2*j], extent[2*j+1]));
}
this->SetEntries(entries);
return;
}
}
}
//---------------------------------------------------------------------------
void vtkSMExtentDomain::SetAnimationValue(vtkSMProperty *property, int idx,
double value)
{
int compare;
int animValue = (int)(floor(value));
vtkSMIntVectorProperty *ivp = vtkSMIntVectorProperty::SafeDownCast(property);
if (ivp)
{
switch (idx)
{
case 0:
case 2:
case 4:
compare = ivp->GetElement(idx+1);
if (animValue > compare)
{
ivp->SetElement(idx+1, animValue);
}
ivp->SetElement(idx, animValue);
break;
case 1:
case 3:
case 5:
compare = ivp->GetElement(idx-1);
if (animValue < compare)
{
ivp->SetElement(idx-1, animValue);
}
ivp->SetElement(idx, animValue);
break;
default:
vtkErrorMacro("Invalid extent index.");
break;
}
}
}
//---------------------------------------------------------------------------
int vtkSMExtentDomain::SetDefaultValues(vtkSMProperty* property, bool use_unchecked_values)
{
vtkSMIntVectorProperty* ivp = vtkSMIntVectorProperty::SafeDownCast(property);
unsigned int numElems = ivp? ivp->GetNumberOfElements() : 0;
if (ivp && (numElems%2 == 0))
{
vtkSMPropertyHelper helper(property);
helper.SetUseUnchecked(use_unchecked_values);
for (unsigned int cc=0; cc < numElems/2; cc++)
{
if (this->GetMinimumExists(cc))
{
helper.Set(2*cc, this->GetMinimum(cc));
}
if (this->GetMaximumExists(cc))
{
helper.Set(2*cc+1, this->GetMaximum(cc));
}
}
return 1;
}
return this->Superclass::SetDefaultValues(property, use_unchecked_values);
}
//---------------------------------------------------------------------------
void vtkSMExtentDomain::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
}