#include "vtkDataManagerCallback.h" #include #include #include #include #include #include #include #include #include #include #include vtkDataManagerCallback::vtkDataManagerCallback() { this->DataManager = NULL; } vtkDataManagerCallback::~vtkDataManagerCallback() { if (this->DataManager) this->DataManager->UnRegister (this); } void vtkDataManagerCallback::SetDataManager (vtkDataManager* manager) { if (!manager) return; if (this->DataManager) { if (manager==this->DataManager) return; this->DataManager->UnRegister (this); this->DataManager = NULL; } this->DataManager = manager; this->DataManager->Register(this); } void vtkDataManagerCallback::Execute(vtkObject* caller, unsigned long event, void* callData) { // std::cout<<"executin : event is "<GetRepeatCount()) return; int X, Y; X = interactor->GetEventPosition()[0]; Y = interactor->GetEventPosition()[1]; vtkRenderer* renderer = interactor->FindPokedRenderer(X,Y); if (!renderer) return; vtkCellPicker* cellpicker = vtkCellPicker::New(); vtkPointPicker* pointpicker = vtkPointPicker::New(); cellpicker->Pick(X,Y,0.0, renderer); pointpicker->Pick(X,Y,0.0, renderer); vtkDataSet* dataset1 = cellpicker->GetDataSet(); vtkDataSet* dataset2 = pointpicker->GetDataSet(); if (!dataset1 || !dataset2 || (dataset1 != dataset2)) { cellpicker->Delete(); pointpicker->Delete(); return; } std::cout<<"a dataset was picked !" <<" point id : "<GetPointId() <<", cell id : "<GetCellId() <GetActor(); if (actor && actor->GetMatrix()) std::cout<<"transform-matrix : "<<(*(actor->GetMatrix()))<DataManager) { for (unsigned int i=0; iDataManager->GetNumberOfMetaDataSet(); i++) { vtkMetaDataSet* metadataset = this->DataManager->GetMetaDataSet (i); for (unsigned int j=0; jGetNumberOfActors(); j++) { if (metadataset->GetActor (j) && (metadataset->GetActor (j) == actor)) { metadataset->SetPickedPointId(pointpicker->GetPointId()); metadataset->SetPickedCellId(cellpicker->GetCellId()); this->DataManager->InvokeEvent(vtkDataManager::MetaDataSetPickEvent, metadataset); break; } } } } pointpicker->Delete(); cellpicker->Delete(); interactor->InvokeEvent(vtkCommand::LeftButtonReleaseEvent); } }