[vtkusers] In vtkCellPicker assertion from GetCellType fails
Jaspar Löchte
jstach at uni-osnabrueck.de
Mon Sep 17 16:16:12 EDT 2018
Hello there!
I use VTK 6.3 in a project for my thesis in an Qt desktop application.
I am storing Pointclouds and do some manipulation, calculating hulls, etc.
For the hulls I display some vtkLines in an extra vtkActor and wanted to create a possiblity to modify the polygon.
Therfore i want to be able to move points AND want to pick lines and create a new Point on the line to be able to move that one to.
So I wanted to use the vtkCellPicker to pick the lines (which works quite well so far …).
Since I needed a ContextMenu in Qt I manipulated the MouseEvents and use them allready in the Qt MainWindow. Like this: https://www.vtk.org/Wiki/VTK/Examples/Cxx/Qt/EventQtSlotConnect <https://www.vtk.org/Wiki/VTK/Examples/Cxx/Qt/EventQtSlotConnect>
In my Code I want to detect a vtkLine with this vtkCellPicker, like this:
m_picker->Pick(x, y, 0, m_mainStyle->GetDefaultRenderer());
long l = m_cicker->GetCellId();
if(l > 0)
{
vtkSmartPointer<vtkActor> actor = m_picker->GetActor();
long O = actor->GetMapper()->GetInput()->GetCellType(l);
if(O == 3)
{
vtkSmartPointer<vtkLine> line = vtkLine::SafeDownCast(actor->GetMapper()->GetInput()->GetCell(l));
vtkSmartPointer<vtkPoints> points = line->GetPoints();
double p[3];
if(points->GetNumberOfPoints() > 0)
{
for(int i = 0; i < points->GetNumberOfPoints(); i++)
{
points->GetPoint(i, p);
std::cout << "(" << p[0] << ", " << p[1] << ", " << p[2] << ")" << std::endl;
}
}
}
}
As I said … this works pretty well, except for any random points, the CellPicker also picks vertices from the Pointcloud (CellType == 1) and on random points my program crashes, because of an assertion fail …
I found out that the call to vtkCellPicker::Pick() calls superclass vtkPicker::Pick() and there is a call to IntersectWithLine() from the CellPicker, in this function the call to IntersectActorWithLine() calls in line 414 this one int cellType = data->GetCellType(cellId); … and here I get the assertion fail:
viewer: /build/vtk6-YpT4yb/vtk6-6.2.0+dfsg1/Common/Core/vtkDataArrayTemplate.h:191: T vtkDataArrayTemplate<T>::GetValue(vtkIdType) [with T = unsigned char; vtkIdType = long long int]: Assertion `id >= 0 && id < this->Size' failed.
Refered to https://github.com/Kitware/VTK/blob/release-6.3/Rendering/Core/vtkCellPicker.cxx#L414 <https://github.com/Kitware/VTK/blob/release-6.3/Rendering/Core/vtkCellPicker.cxx#L414>
I really don’t know how to debug this, and why this happens.
Any Ideas for me?
If there is anything not clear - ask me, I can try to go more into detail, give more Code, or something like that.
Thank you!
Jaspar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20180917/ce30f05f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 874 bytes
Desc: Message signed with OpenPGP
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20180917/ce30f05f/attachment.sig>
More information about the vtkusers
mailing list