mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
273 lines
8.6 KiB
C++
273 lines
8.6 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkPVImplicitPlaneRepresentation.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 "vtkPVImplicitPlaneRepresentation.h"
|
|
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkMultiProcessController.h"
|
|
#include "vtkProperty.h"
|
|
#include "vtkTransform.h"
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
class vtkPVImplicitPlaneRepresentation::vtkPVInternal
|
|
{
|
|
public:
|
|
double* GetOriginalBounds(){ return OriginalBounds; }
|
|
double* GetOriginalOrigin(){ return OriginalOrigin; }
|
|
double* GetOriginalNormal(){ return OriginalNormal; }
|
|
|
|
bool StoreOriginalBounds() const { return StoreOriginalInfo[0]; }
|
|
bool StoreOriginalOrigin() const { return StoreOriginalInfo[1]; }
|
|
bool StoreOriginalNormal() const { return StoreOriginalInfo[2]; }
|
|
|
|
void SetOriginalBounds(double bounds[6]);
|
|
void SetOriginalOrigin(double origin[3]);
|
|
void SetOriginalNormal(double normal[3]);
|
|
|
|
vtkPVInternal();
|
|
bool HasStoredInfo() const;
|
|
void ClearStoredInfo();
|
|
|
|
double ScaledOrigin[3];
|
|
double ScaledNormal[3];
|
|
|
|
protected:
|
|
bool StoreOriginalInfo[3];
|
|
double OriginalBounds[6];
|
|
double OriginalOrigin[3];
|
|
double OriginalNormal[3];
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkPVImplicitPlaneRepresentation::vtkPVInternal::vtkPVInternal()
|
|
{
|
|
this->StoreOriginalInfo[0] = true;
|
|
this->StoreOriginalInfo[1] = true;
|
|
this->StoreOriginalInfo[2] = true;
|
|
|
|
this->OriginalBounds[0] = -1;
|
|
this->OriginalBounds[1] = 1;
|
|
this->OriginalBounds[2] = -1;
|
|
this->OriginalBounds[3] = 1;
|
|
this->OriginalBounds[4] = -1;
|
|
this->OriginalBounds[5] = 1;
|
|
|
|
this->OriginalOrigin[0] = 0.0;
|
|
this->OriginalOrigin[1] = 0.0;
|
|
this->OriginalOrigin[2] = 0.0;
|
|
|
|
this->OriginalNormal[0] = 0.0;
|
|
this->OriginalNormal[1] = 0.0;
|
|
this->OriginalNormal[2] = 0.0;
|
|
|
|
this->ScaledOrigin[0] = 0.0;
|
|
this->ScaledOrigin[1] = 0.0;
|
|
this->ScaledOrigin[2] = 0.0;
|
|
|
|
this->ScaledNormal[0] = 0.0;
|
|
this->ScaledNormal[1] = 0.0;
|
|
this->ScaledNormal[2] = 0.0;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool vtkPVImplicitPlaneRepresentation::vtkPVInternal::HasStoredInfo() const
|
|
{
|
|
return this->StoreOriginalInfo[0] == false &&
|
|
this->StoreOriginalInfo[1] == false &&
|
|
this->StoreOriginalInfo[2] == false;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::vtkPVInternal::ClearStoredInfo()
|
|
{
|
|
this->StoreOriginalInfo[0] = this->StoreOriginalInfo[1] =
|
|
this->StoreOriginalInfo[2] = true;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::vtkPVInternal::SetOriginalBounds(
|
|
double bounds[6])
|
|
{
|
|
this->OriginalBounds[0] = bounds[0];
|
|
this->OriginalBounds[1] = bounds[1];
|
|
this->OriginalBounds[2] = bounds[2];
|
|
this->OriginalBounds[3] = bounds[3];
|
|
this->OriginalBounds[4] = bounds[4];
|
|
this->OriginalBounds[5] = bounds[5];
|
|
this->StoreOriginalInfo[0] = false;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::vtkPVInternal::SetOriginalOrigin(
|
|
double origin[3])
|
|
{
|
|
this->OriginalOrigin[0] = origin[0];
|
|
this->OriginalOrigin[1] = origin[1];
|
|
this->OriginalOrigin[2] = origin[2];
|
|
this->StoreOriginalInfo[1] = false;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::vtkPVInternal::SetOriginalNormal(
|
|
double normal[3])
|
|
{
|
|
this->OriginalNormal[0] = normal[0];
|
|
this->OriginalNormal[1] = normal[1];
|
|
this->OriginalNormal[2] = normal[2];
|
|
this->StoreOriginalInfo[2] = false;
|
|
}
|
|
|
|
|
|
vtkStandardNewMacro(vtkPVImplicitPlaneRepresentation);
|
|
//----------------------------------------------------------------------------
|
|
vtkPVImplicitPlaneRepresentation::vtkPVImplicitPlaneRepresentation()
|
|
{
|
|
vtkMultiProcessController * ctrl = NULL;
|
|
ctrl = vtkMultiProcessController::GetGlobalController();
|
|
double opacity = 1;
|
|
if(ctrl == NULL || ctrl->GetNumberOfProcesses() == 1)
|
|
{
|
|
opacity = 0.25;
|
|
}
|
|
|
|
this->OutlineTranslationOff();
|
|
this->GetPlaneProperty()->SetOpacity(opacity);
|
|
this->GetSelectedPlaneProperty()->SetOpacity(opacity);
|
|
|
|
this->Internal = new vtkPVInternal();
|
|
|
|
//create and connect the two transforms together
|
|
this->Transform = vtkTransform::New();
|
|
this->InverseTransform = vtkTransform::New();
|
|
this->Transform->PostMultiply();
|
|
this->Transform->Identity();
|
|
this->InverseTransform->SetInput(this->Transform);
|
|
this->InverseTransform->Inverse();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkPVImplicitPlaneRepresentation::~vtkPVImplicitPlaneRepresentation()
|
|
{
|
|
this->InverseTransform->Delete();
|
|
this->Transform->Delete();
|
|
delete this->Internal;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::Reset()
|
|
{
|
|
this->Internal->ClearStoredInfo();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::SetTransform(vtkTransform *transform)
|
|
{
|
|
if (transform && this->Transform->GetInput() != transform)
|
|
{
|
|
this->Transform->SetInput(transform);
|
|
this->InverseTransform->Update();
|
|
}
|
|
else if ( this->Transform->GetInput() )
|
|
{
|
|
this->UpdatePlacement();
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::UpdateTransformLocation()
|
|
{
|
|
|
|
this->PlaceTransformedWidget(this->Internal->GetOriginalBounds());
|
|
double *oo = this->Internal->GetOriginalOrigin();
|
|
double *on = this->Internal->GetOriginalNormal();
|
|
this->SetTransformedOrigin(oo[0],oo[1],oo[2]);
|
|
this->SetTransformedNormal(on[0],on[1],on[2]);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::ClearTransform()
|
|
{
|
|
this->Transform->SetInput(NULL);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::SetTransformedOrigin(double x, double y, double z)
|
|
{
|
|
double in_point[4] = {x, y, z, 1};
|
|
this->Internal->SetOriginalOrigin(in_point);
|
|
|
|
this->Transform->TransformPoint(in_point, in_point);
|
|
this->Superclass::SetOrigin(in_point);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::SetTransformedNormal(double x, double y, double z)
|
|
{
|
|
double in_point[3]={x,y,z};
|
|
this->Internal->SetOriginalNormal(in_point);
|
|
|
|
this->Transform->TransformNormal(in_point,in_point);
|
|
this->Superclass::SetNormal(in_point);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
double* vtkPVImplicitPlaneRepresentation::GetTransformedNormal()
|
|
{
|
|
double * norm = this->Superclass::GetNormal();
|
|
this->InverseTransform->TransformNormal(norm,this->Internal->ScaledNormal);
|
|
return this->Internal->ScaledNormal;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
double* vtkPVImplicitPlaneRepresentation::GetTransformedOrigin()
|
|
{
|
|
double * origin = this->Superclass::GetOrigin();
|
|
this->InverseTransform->TransformPoint(origin, this->Internal->ScaledOrigin);
|
|
return this->Internal->ScaledOrigin;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::PlaceTransformedWidget(double bounds[6])
|
|
{
|
|
double tempBounds[6];
|
|
if (this->Internal->StoreOriginalBounds())
|
|
{
|
|
this->Internal->SetOriginalBounds(bounds);
|
|
}
|
|
|
|
double point[3] = {bounds[0], bounds[2], bounds[4] };
|
|
double point2[3] = {bounds[1], bounds[3], bounds[5] };
|
|
this->Transform->TransformPoint(point, point);
|
|
tempBounds[0] = point[0];
|
|
tempBounds[2] = point[1];
|
|
tempBounds[4] = point[2];
|
|
|
|
this->Transform->TransformPoint(point2, point2);
|
|
tempBounds[1] = point2[0];
|
|
tempBounds[3] = point2[1];
|
|
tempBounds[5] = point2[2];
|
|
|
|
this->Superclass::PlaceWidget(tempBounds);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkPVImplicitPlaneRepresentation::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os, indent);
|
|
os << indent << "Transform: ";
|
|
this->Transform->Print(os);
|
|
}
|