# Is there a bug in vtkAreaPicker.cxx

**URL:** <https://discourse.vtk.org/t/is-there-a-bug-in-vtkareapicker-cxx/8924>\
**Category:** Development\
**Tags:** code, proposal\
**Created:** [July 11, 2022, 9:17am UTC](https://discourse.vtk.org/t/is-there-a-bug-in-vtkareapicker-cxx/8924 "2022-07-11T09:17:52Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jialinwang](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/j/3be4f8/32.png) [@jialinwang](https://discourse.vtk.org/u/jialinwang)\
**Post date:** [July 11, 2022, 9:17am UTC](https://discourse.vtk.org/t/is-there-a-bug-in-vtkareapicker-cxx/8924/1 "2022-07-11T09:17:52Z")

</div>

void vtkAreaPicker::DefineFrustum(double x0, double y0, double x1, double y1, vtkRenderer\* renderer)  
{  
this-\>X0 = (x0 \< x1) ? x0 : x1;  
this-\>Y0 = (y0 \< y1) ? y0 : y1;  
this-\>X1 = (x0 \> x1) ? x0 : x1;  
this-\>Y1 = (y0 \> y1) ? y0 : y1;

if (this-\>X0 == this-\>X1)  
{  
this-\>X1 += 1.0;  
}  
if (this-\>Y0 == this-\>Y1)  
{  
this-\>Y1 += 1.0;  
}

// compute world coordinates of the pick volume  
double verts[32];  
renderer-\>SetDisplayPoint(this-\>X0, this-\>Y0, 0);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[0]);

renderer-\>SetDisplayPoint(this-\>X0, this-\>Y0, 1);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[4]);

renderer-\>SetDisplayPoint(this-\>X0, this-\>Y1, 0);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[8]);

renderer-\>SetDisplayPoint(this-\>X0, this-\>Y1, 1);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[12]);

renderer-\>SetDisplayPoint(this-\>X1, this-\>Y0, 0);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[16]);

renderer-\>SetDisplayPoint(this-\>X1, this-\>Y0, 1);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[20]);

renderer-\>SetDisplayPoint(this-\>X1, this-\>Y1, 0);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[24]);

renderer-\>SetDisplayPoint(this-\>X1, this-\>Y1, 1);  
renderer-\>DisplayToWorld();  
renderer-\>GetWorldPoint(&verts[28]);

// a pick point is required by vtkAbstractPicker  
// return center for now until a better meaning is desired  
double sum[3] = { 0.0, 0.0, 0.0 };  
for (int i = 0; i \< 8; i++)  
{  
sum[0] += verts[i \* 3 + 0];  
sum[1] += verts[i \* 3 + 1];  
sum[2] += verts[i \* 3 + 2];  
}  
this-\>PickPosition[0] = sum[0] / 8.0;  
this-\>PickPosition[1] = sum[1] / 8.0;  
this-\>PickPosition[2] = sum[2] / 8.0;

this-\>FrustumExtractor-\>CreateFrustum(verts);  
}

The above is the source code of the function vtkAreaPicker::DefineFrustum. Each point has 4 doubles, but 3 is used int verts[i \* 3 + 0], verts[i \* 3 + 1] and verts[i \* 3 + 2].
