#include "vtkImageTracerWidgetCallback.h" #include "vtkViewImage2DWithTracer.h" #include "vtkImageTracerWidget.h" #include "vtkImageData.h" #include "vtkMatrix4x4.h" #include "vtkImageReslice.h" #include "vtkPolyDataMapper.h" #include "vtkActor.h" #include "vtkRenderWindowInteractor.h" vtkImageTracerWidgetCallback::vtkImageTracerWidgetCallback() { this->View = 0; this->PathPoly = vtkPolyData::New(); } vtkImageTracerWidgetCallback::~vtkImageTracerWidgetCallback() { this->PathPoly->Delete(); } void vtkImageTracerWidgetCallback::SetView (vtkViewImage2DWithTracer* view) { this->View = view; } void vtkImageTracerWidgetCallback::Execute (vtkObject* caller, unsigned long event, void*) { if( !this->GetView() ) { return; } if(event == vtkCommand::EndInteractionEvent ) { this->OnEndInteractionEvent (caller); return; } if( event == vtkCommand::KeyPressEvent ) { this->OnKeyPressEvent (caller, this->GetView()->GetRenderWindowInteractor()->GetKeyCode() ); return; } } void vtkImageTracerWidgetCallback::OnEndInteractionEvent(vtkObject* caller) { vtkImageTracerWidget *tracerWidget = reinterpret_cast(caller); if(!tracerWidget) { return; } int closed = tracerWidget->IsClosed(); if( !closed ) return; vtkPolyData* auxPoly = vtkPolyData::New(); tracerWidget->GetPath(auxPoly); this->PathPoly->Initialize(); this->PathPoly->Allocate(); this->PathPoly->DeepCopy (auxPoly); auxPoly->Delete(); vtkPoints* points = this->PathPoly->GetPoints(); if (!points) { return; } int numPoints = this->PathPoly->GetNumberOfPoints(); vtkMatrix4x4* transform = this->GetView()->GetImageReslice()->GetResliceAxes(); double origin[3]; this->GetView()->GetImageReslice()->GetResliceAxesOrigin (origin); for( int i=0; iGetPoint(i, pt); pt[3]=0.0; transform->MultiplyPoint (pt, pt); pt[0]+=origin[0]; pt[1]+=origin[1]; pt[2]+=origin[2]; points->SetPoint (i,pt); } } void vtkImageTracerWidgetCallback::OnKeyPressEvent (vtkObject* caller, unsigned char key) { vtkImageTracerWidget *tracerWidget = reinterpret_cast(caller); if(!tracerWidget) { return; } //int enabled; switch(key) { /* case '0': enabled = tracerWidget->GetEnabled(); tracerWidget->SetEnabled ( (++enabled)%2 ); return; */ case 'v': case 'V': case '1': vtkViewImage2DWithTracer* tracer = reinterpret_cast( this->GetView() ); if(tracer) { tracer->ValidateTracing(); tracer->Render(); } return; } return; }