TEST_F(CoordinateTransformableDataObject_test, TransformAppliedToVisibleBounds) { const auto coordsSpec = ReferencedCoordinateSystemSpecification( CoordinateSystemType::geographic, "testSystem", {}, {}, {}, {}); const auto targetCoordsSpec = ReferencedCoordinateSystemSpecification( CoordinateSystemType::geographic, "otherTestSystem", {}, {}, {}, {}); auto data = genPolyData<TransformedPolyData>(); data->specifyCoordinateSystem(coordsSpec); auto transform = vtkSmartPointer<vtkTransform>::New(); transform->Translate(3, 4, 5); data->setTransform(transform); const auto dataSetBounds = DataBounds(data->dataSet()->GetBounds()); const auto dataBounds = data->bounds(); const auto shiftedBounds = data->bounds().shifted(vtkVector3d(3, 4, 5)); auto rendered = data->createRendered(); rendered->setDefaultCoordinateSystem(targetCoordsSpec); const auto visibleBounds = rendered->visibleBounds(); ASSERT_EQ(dataSetBounds, dataBounds); ASSERT_EQ(shiftedBounds, visibleBounds); }
ImageDataObject::ImageDataObject(const QString & name, vtkImageData & dataSet) : CoordinateTransformableDataObject(name, &dataSet) , m_extent{} { vtkVector3d spacing; bool spacingChanged = false; dataSet.GetSpacing(spacing.GetData()); for (int i = 0; i < 3; ++i) { if (spacing[i] < std::numeric_limits<double>::epsilon()) { spacing[i] = 1; spacingChanged = true; } } if (spacingChanged) { qWarning() << "Fixing invalid image spacing in " << name << "(" + vector3ToString(vtkVector3d(dataSet.GetSpacing())) + " to " + vector3ToString(spacing) + ")"; dataSet.SetSpacing(spacing.GetData()); } if (!dataSet.GetPointData()->GetScalars()) { dataSet.AllocateScalars(VTK_FLOAT, 1); } dataSet.GetExtent(m_extent.data()); }