Hello everyone,
I have a point set, and I want to calculate its minimum bounding box. I need it so I can create an oriented image which I will populate afterward. For the image, I use the ITK library.
So far this is my code
itk::Image<unsigned char, 3>::Pointer
createEmptyMinimumImageFromPolyData(const vtkSmartPointer<vtkPolyData>& polyData, double spacing, const size_t* padding)
{
constexpr unsigned int Dimension = 3;
using PixelType = unsigned char;
using ImageType = itk::Image<PixelType, Dimension>;
ImageType::Pointer image = ImageType::New();
double boxCorner[3];
double boxSize[3];
ImageType::DirectionType direction;
vtkOBBTree::ComputeOBB(polyData->GetPoints(), boxCorner, direction[0], direction[1], direction[2], boxSize);
std::cout << "\n" << boxCorner[0] << " " << boxCorner[1] << " " << boxCorner[2] << std::endl;
std::cout << direction;
std::cout << boxSize[0] << " " << boxSize[1] << " " << boxSize[2] << std::endl;
}
The output of this code is the following:
Box corner: 159.687 168.385 265.907
max: 23.0858 14.1807 -156.695
mid: -10.8491 97.6434 7.23822
min: 67.1796 6.68576 10.5026
size: 1316.78 385.623 220.006
I understand what the corner is, and I presume that min, mid, max all together constitute the direction matrix that I will need for the image. What I am lacking is the extent of the image a.k.a the size(?). The size that I get as output does not make sense to me, because if I try to get the bounds of the AABB of the same polyData the result is:
X range: 162.154 to 234.889 (delta: 72.735)
Y range: 174.194 to 271.959 (delta: 97.765)
Z range: 115.696 to 275.091 (delta: 159.395)
So my question is, is the size that I am getting correct? If it’s not, how am I supposed to extract that?