[vtkusers] interaction problem
Rashid Tanweer
quantum_cook at yahoo.com
Tue Apr 26 08:22:47 EDT 2011
Hi,
There can be number of solutions for such problem an inefficient one will be to
have the main QT window as a pointer in this class which is initialized at the
time the interactor is set and then you can call a QT function which can
initiate a qt Singnal. Also there is something called void * user_data (last
argument in the Execute function, you can set the user data as the pointer to
the QT window. i hope this helps.
Regards,
Rashid
________________________________
From: G G <greenlander1986 at gmail.com>
To: Rashid Tanweer <quantum_cook at yahoo.com>
Cc: vtkusers at vtk.org
Sent: Mon, April 25, 2011 9:49:13 PM
Subject: Re: [vtkusers] interaction problem
I have something like this...
void ImageInteraction::Execute(vtkObject *, unsigned long event, void *)
{
vtkRenderWindowInteractor *interactor = this->GetInteractor();
int lastPos[2];
interactor->GetLastEventPosition(lastPos);
int currPos[2];
interactor->GetEventPosition(currPos);
if (event == vtkCommand::LeftButtonPressEvent)
{
this->Slicing = 1;
// Pick at the mouse location provided by the interactor
this->Picker->Pick(interactor->GetEventPosition()[0],
interactor->GetEventPosition()[1],
interactor->GetEventPosition()[2], this->Renderer);
double pos[3];
this->Picker->GetPickPosition(pos);
// There could be other props assigned to this picker, so
// make sure we picked the image actor
vtkAssemblyPath* path = this->Picker->GetPath();
bool validPick = false;
if (path)
{
vtkCollectionSimpleIterator sit;
path->InitTraversal(sit);
vtkAssemblyNode *node;
for (int i = 0; i < path->GetNumberOfItems() && !validPick; ++i)
{
node = path->GetNextNode(sit);
if (this->Actor == vtkImageActor::SafeDownCast(node->GetViewProp()))
{
validPick = true;
break;
}
}
}
if (!validPick)
{
return;
}
}
else if (event == vtkCommand::LeftButtonReleaseEvent)
{
this->Slicing = 0;
}
else if (event == vtkCommand::MouseMoveEvent)
{
if (this->Slicing)
{ // something
}
else
{
vtkInteractorStyle *style =
vtkInteractorStyle::SafeDownCast(interactor->GetInteractorStyle());
if (style)
{
style->OnMouseMove();
}
}
}
}
And I would like to get array pos to my GUI QT. I dont know, how to emit signal
from this class/method or "return" value to GUI class
Thanks for all answers.
2011/4/25 G G <greenlander1986 at gmail.com>
Do you have some example? or example on the internet, please. I am trying
something all afternoon but any solution :(
>
>
>2011/4/25 Rashid Tanweer <quantum_cook at yahoo.com>
>
>Hi,
>>QT and VTK events are different and are generated through seperate pipelines.
>>Best way is to have them both catch, vtk events in vtkCommand Callback by
>>registering it through interactor and QT Event by registering a proper slot for
>>it.
>>
>>
>>Regards,
>>Rashid
>>
>>
>>
>>
________________________________
From: G G <greenlander1986 at gmail.com>
>>To: vtkusers at vtk.org
>>Sent: Mon, April 25, 2011 1:30:35 AM
>>Subject: [vtkusers] interaction problem
>>
>>
>>Hi, could someone help me, how to connect this code
>>http://vtk.org/gitweb?p=VTK.git;a=blob;f=Examples/ImageProcessing/Cxx/ImageSlicing.cxx
>>
>>with
>>vtkEventQtSlotConnect
>>?
>>A dont know how to connect it :(
>>Thanks a lot
>>
>>_______________________________________________
>>Powered by www.kitware.com
>>
>>Visit other Kitware open-source projects at
>>http://www.kitware.com/opensource/opensource.html
>>
>>Please keep messages on-topic and check the VTK FAQ at:
>>http://www.vtk.org/Wiki/VTK_FAQ
>>
>>Follow this link to subscribe/unsubscribe:
>>http://www.vtk.org/mailman/listinfo/vtkusers
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110426/a90bf27c/attachment.htm>
More information about the vtkusers
mailing list