Fem: add a scale() function to FemPostPipeline

This commit is contained in:
wmayer
2022-04-15 12:08:47 +02:00
parent e9e04221c4
commit f00a3f59c4
6 changed files with 73 additions and 1 deletions

View File

@@ -67,6 +67,51 @@ PropertyPostDataObject::~PropertyPostDataObject()
{
}
void PropertyPostDataObject::scaleDataObject(vtkDataObject* dataObject, double s)
{
auto scalePoints = [](vtkPoints* points, double s) {
for (vtkIdType i = 0; i < points->GetNumberOfPoints(); i++) {
double xyz[3];
points->GetPoint(i, xyz);
for (int j = 0; j < 3; j++)
xyz[j] *= s;
points->SetPoint(i, xyz);
}
};
if (dataObject->GetDataObjectType() == VTK_POLY_DATA) {
vtkPolyData* dataSet = vtkPolyData::SafeDownCast(dataObject);
scalePoints(dataSet->GetPoints(), s);
}
else if (dataObject->GetDataObjectType() == VTK_STRUCTURED_GRID) {
vtkStructuredGrid* dataSet = vtkStructuredGrid::SafeDownCast(dataObject);
scalePoints(dataSet->GetPoints(), s);
}
else if (dataObject->GetDataObjectType() == VTK_UNSTRUCTURED_GRID) {
vtkUnstructuredGrid* dataSet = vtkUnstructuredGrid::SafeDownCast(dataObject);
scalePoints(dataSet->GetPoints(), s);
}
else if (dataObject->GetDataObjectType() == VTK_MULTIBLOCK_DATA_SET) {
vtkMultiBlockDataSet* dataSet = vtkMultiBlockDataSet::SafeDownCast(dataObject);
for (unsigned int i = 0; i < dataSet->GetNumberOfBlocks(); i++)
scaleDataObject(dataSet->GetBlock(i), s);
}
else if (dataObject->GetDataObjectType() == VTK_MULTIPIECE_DATA_SET) {
vtkMultiPieceDataSet* dataSet = vtkMultiPieceDataSet::SafeDownCast(dataObject);
for (unsigned int i = 0; i < dataSet->GetNumberOfPieces(); i++)
scaleDataObject(dataSet->GetPiece(i), s);
}
}
void PropertyPostDataObject::scale(double s)
{
if (m_dataObject) {
aboutToSetValue();
scaleDataObject(m_dataObject, s);
hasSetValue();
}
}
void PropertyPostDataObject::setValue(const vtkSmartPointer<vtkDataObject>& ds)
{
aboutToSetValue();
@@ -75,8 +120,9 @@ void PropertyPostDataObject::setValue(const vtkSmartPointer<vtkDataObject>& ds)
createDataObjectByExternalType(ds);
m_dataObject->DeepCopy(ds);
}
else
else {
m_dataObject = nullptr;
}
hasSetValue();
}