[vtkusers] How to get bounds of each bounding box in vtkOBBTree
Jothy
jothybasu at gmail.com
Fri Sep 9 07:57:51 EDT 2011
Hi David,
As you suggested I have sub classed vtkOBBTree and add a new method
GeneratePolygons2 and call this function on GenerateRepresentation. The
class works fine. But I am a bit confused to get the bounds of the
individual boxes correctly.
I used pts->GetBounds() in Generatepolygons2, it prints the same bounds for
all levels.
For instance in the picute attached I want to get the bounds of each red box
seperatly.
See the code below
void myOBBTree::GeneratePolygons2(vtkOBBNode *OBBptr, int level, int
repLevel,vtkPoints *pts, vtkCellArray *polys)
{
if ( level == repLevel || (repLevel < 0 && OBBptr->Kids == NULL) )
{
double x[3];
vtkIdType cubeIds[8];
vtkIdType ptIds[4];
x[0] = OBBptr->Corner[0];
x[1] = OBBptr->Corner[1];
x[2] = OBBptr->Corner[2];
cubeIds[0] = pts->InsertNextPoint(x);
x[0] = OBBptr->Corner[0] + OBBptr->Axes[0][0];
x[1] = OBBptr->Corner[1] + OBBptr->Axes[0][1];
x[2] = OBBptr->Corner[2] + OBBptr->Axes[0][2];
cubeIds[1] = pts->InsertNextPoint(x);
x[0] = OBBptr->Corner[0] + OBBptr->Axes[1][0];
x[1] = OBBptr->Corner[1] + OBBptr->Axes[1][1];
x[2] = OBBptr->Corner[2] + OBBptr->Axes[1][2];
cubeIds[2] = pts->InsertNextPoint(x);
x[0] = OBBptr->Corner[0] + OBBptr->Axes[0][0] + OBBptr->Axes[1][0];
x[1] = OBBptr->Corner[1] + OBBptr->Axes[0][1] + OBBptr->Axes[1][1];
x[2] = OBBptr->Corner[2] + OBBptr->Axes[0][2] + OBBptr->Axes[1][2];
cubeIds[3] = pts->InsertNextPoint(x);
x[0] = OBBptr->Corner[0] + OBBptr->Axes[2][0];
x[1] = OBBptr->Corner[1] + OBBptr->Axes[2][1];
x[2] = OBBptr->Corner[2] + OBBptr->Axes[2][2];
cubeIds[4] = pts->InsertNextPoint(x);
x[0] = OBBptr->Corner[0] + OBBptr->Axes[0][0] + OBBptr->Axes[2][0];
x[1] = OBBptr->Corner[1] + OBBptr->Axes[0][1] + OBBptr->Axes[2][1];
x[2] = OBBptr->Corner[2] + OBBptr->Axes[0][2] + OBBptr->Axes[2][2];
cubeIds[5] = pts->InsertNextPoint(x);
x[0] = OBBptr->Corner[0] + OBBptr->Axes[1][0] + OBBptr->Axes[2][0];
x[1] = OBBptr->Corner[1] + OBBptr->Axes[1][1] + OBBptr->Axes[2][1];
x[2] = OBBptr->Corner[2] + OBBptr->Axes[1][2] + OBBptr->Axes[2][2];
cubeIds[6] = pts->InsertNextPoint(x);
x[0] = OBBptr->Corner[0] + OBBptr->Axes[0][0] + OBBptr->Axes[1][0]
+ OBBptr->Axes[2][0];
x[1] = OBBptr->Corner[1] + OBBptr->Axes[0][1] + OBBptr->Axes[1][1]
+ OBBptr->Axes[2][1];
x[2] = OBBptr->Corner[2] + OBBptr->Axes[0][2] + OBBptr->Axes[1][2]
+ OBBptr->Axes[2][2];
cubeIds[7] = pts->InsertNextPoint(x);
ptIds[0] = cubeIds[0]; ptIds[1] = cubeIds[2];
ptIds[2] = cubeIds[3]; ptIds[3] = cubeIds[1];
polys->InsertNextCell(4,ptIds);
ptIds[0] = cubeIds[0]; ptIds[1] = cubeIds[1];
ptIds[2] = cubeIds[5]; ptIds[3] = cubeIds[4];
polys->InsertNextCell(4,ptIds);
ptIds[0] = cubeIds[0]; ptIds[1] = cubeIds[4];
ptIds[2] = cubeIds[6]; ptIds[3] = cubeIds[2];
polys->InsertNextCell(4,ptIds);
ptIds[0] = cubeIds[1]; ptIds[1] = cubeIds[3];
ptIds[2] = cubeIds[7]; ptIds[3] = cubeIds[5];
polys->InsertNextCell(4,ptIds);
ptIds[0] = cubeIds[4]; ptIds[1] = cubeIds[5];
ptIds[2] = cubeIds[7]; ptIds[3] = cubeIds[6];
polys->InsertNextCell(4,ptIds);
ptIds[0] = cubeIds[2]; ptIds[1] = cubeIds[6];
ptIds[2] = cubeIds[7]; ptIds[3] = cubeIds[3];
polys->InsertNextCell(4,ptIds);
double bds[6];
pts->GetBounds(bds);
qDebug()<<bds[0]<<bds[1]<<bds[2]<<bds[3]<<bds[4]<<bds[5]<<"Level
Bounds1";
}
On Wed, Aug 31, 2011 at 2:53 PM, David Doria <daviddoria at gmail.com> wrote:
> On Wed, Aug 31, 2011 at 9:09 AM, Jothy <jothybasu at gmail.com> wrote:
> > Thanks David,
> >
> > But I couldn't figure out how to get the bounds of the individual boxes.
> >
> > Jothy
>
> It looks like the GenerateRepresentation calls a (unfortunately
> protected) GeneratePolygons function. I don't think there is a built
> in way to get each box, but you could subclass OBBTree and call that
> function on your subclass object.
>
> David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110909/27ced30f/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: untitled.JPG
Type: image/jpeg
Size: 30082 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110909/27ced30f/attachment.jpeg>
More information about the vtkusers
mailing list