vtkInteractorStyleRubberBandPick 类简介
来源:互联网 发布:淘宝开店要哪些照片 编辑:程序博客网 时间:2024/05/19 05:32
类的继承图
简介:
该类主要用橡皮筋矩形拾取 props.
Like TrackBallCamera, but this can pick props underneath a rubber band selection rectangle.
用户可以通过鼠标左键或者“r”键画一个矩形。当鼠标释放的时候,附加的拾取器可以操作所选矩形中间的像素值。 如果拾取器是 vtkAreaPicker,可以操作整个所选的矩形。
键盘“P”: 1*1 的矩形框。
This interactor style allows the user to draw a rectangle in the render window by hitting 'r' and then using the left mouse button. When the mouse button is released, the attached picker operates on the pixel in the center of the selection rectangle. If the picker happens to be a vtkAreaPicker it will operate on the entire selection rectangle. When the 'p' key is hit the above pick operation occurs on a 1x1 rectangle. In other respects it behaves the same as its parent class.
示例一
#include <vtkVersion.h>#include <vtkSmartPointer.h>#include <vtkPoints.h>#include <vtkXMLPolyDataWriter.h>#include <vtkPolyData.h>#include <vtkCellArray.h>#include <vtkPolyDataMapper.h>#include <vtkActor.h>#include <vtkRenderWindow.h>#include <vtkRenderer.h>#include <vtkRenderWindowInteractor.h>#include <vtkInteractorStyleRubberBandPick.h>#include <vtkInteractorStyleTrackballCamera.h>#include <vtkInteractorStyleTrackball.h>#include <vtkAreaPicker.h>#include <vtkCallbackCommand.h>#include <vtkProp3DCollection.h>void PickCallbackFunction ( vtkObject* caller, long unsigned int eventId, void* clientData, void* callData );int main(int, char *[]){// Create a set of pointsvtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();vtkIdType pid[1];pid[0] = points->InsertNextPoint ( 1.0, 0.0, 0.0 );vertices->InsertNextCell ( 1,pid );pid[0] = points->InsertNextPoint ( 0.0, 0.0, 0.0 );vertices->InsertNextCell ( 1,pid );pid[0] = points->InsertNextPoint ( 0.0, 1.0, 0.0 );vertices->InsertNextCell ( 1,pid );// Create a polydatavtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();polydata->SetPoints ( points );polydata->SetVerts ( vertices );// VisualizevtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();#if VTK_MAJOR_VERSION <= 5mapper->SetInput(polydata);#elsemapper->SetInputData(polydata);#endifvtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkAreaPicker> areaPicker = vtkSmartPointer<vtkAreaPicker>::New();vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);renderWindowInteractor->SetPicker(areaPicker);renderer->AddActor(actor);renderer->SetBackground(0,0,0.2); // Background color dark bluerenderWindow->Render();// For vtkInteractorStyleRubberBandPick - use 'r' and left-mouse to draw a selection box used to pickvtkSmartPointer<vtkInteractorStyleRubberBandPick> style = vtkSmartPointer<vtkInteractorStyleRubberBandPick>::New();// For vtkInteractorStyleTrackballCamera - use 'p' to pick at the current mouse position//vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New(); //like paraviewstyle->SetCurrentRenderer(renderer);renderWindowInteractor->SetInteractorStyle( style );vtkSmartPointer<vtkCallbackCommand> pickCallback = vtkSmartPointer<vtkCallbackCommand>::New();pickCallback->SetCallback ( PickCallbackFunction );areaPicker->AddObserver ( vtkCommand::EndPickEvent, pickCallback );renderWindowInteractor->Start();return EXIT_SUCCESS;}void PickCallbackFunction(vtkObject* caller,long unsigned int vtkNotUsed(eventId),void* vtkNotUsed(clientData),void* vtkNotUsed(callData)){std::cout << "Pick." << std::endl;vtkAreaPicker* areaPicker = static_cast<vtkAreaPicker*>(caller);vtkProp3DCollection* props = areaPicker->GetProp3Ds();for(vtkIdType i = 0; i < props->GetNumberOfItems(); i++){vtkProp3D* prop = props->GetNextProp3D();std::cout << "Picked prop: " << prop << std::endl;}}这个就非常简单了,vtkInteractorStyleRubberBandPick 是 vtkInteractorStyle 的子类,使用时,加入到 vtkRenderWinderInteractor 的对象中,同时需要设置该 style 的当前 renderer.
示例二:
#include <vtkVersion.h>#include <vtkActor.h>#include <vtkAreaPicker.h>#include <vtkDataSetMapper.h>#include <vtkDataSetSurfaceFilter.h>#include <vtkExtractPolyDataGeometry.h>#include <vtkIdFilter.h>#include <vtkIdTypeArray.h>#include <vtkInteractorStyleRubberBandPick.h>#include <vtkObjectFactory.h>#include <vtkPlanes.h>#include <vtkPointData.h>#include <vtkPolyData.h>#include <vtkPolyDataMapper.h>#include <vtkProperty.h>#include <vtkRenderer.h>#include <vtkRendererCollection.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkSmartPointer.h>#include <vtkSphereSource.h>#include <vtkUnstructuredGrid.h>#include <vtkVersion.h>#include <vtkVertexGlyphFilter.h>#define VTKISRBP_ORIENT 0#define VTKISRBP_SELECT 1// Define interaction styleclass HighlightInteractorStyle : public vtkInteractorStyleRubberBandPick{public:static HighlightInteractorStyle* New();vtkTypeMacro(HighlightInteractorStyle,vtkInteractorStyleRubberBandPick);HighlightInteractorStyle() : vtkInteractorStyleRubberBandPick(){this->SelectedMapper = vtkSmartPointer<vtkDataSetMapper>::New();this->SelectedActor = vtkSmartPointer<vtkActor>::New();this->SelectedActor->SetMapper(SelectedMapper);}virtual void OnLeftButtonUp(){// Forward eventsvtkInteractorStyleRubberBandPick::OnLeftButtonUp();if(this->CurrentMode == VTKISRBP_SELECT){vtkPlanes* frustum = static_cast<vtkAreaPicker*>(this->GetInteractor()->GetPicker())->GetFrustum();vtkSmartPointer<vtkExtractPolyDataGeometry> extractPolyDataGeometry = vtkSmartPointer<vtkExtractPolyDataGeometry>::New();#if VTK_MAJOR_VERSION <= 5extractPolyDataGeometry->SetInput(this->PolyData);#elseextractPolyDataGeometry->SetInputData(this->PolyData);#endifextractPolyDataGeometry->SetImplicitFunction(frustum);extractPolyDataGeometry->Update();std::cout << "Extracted " << extractPolyDataGeometry->GetOutput()->GetNumberOfCells() << " cells." << std::endl;#if VTK_MAJOR_VERSION <= 5this->SelectedMapper->SetInputConnection(extractPolyDataGeometry->GetOutputPort());#elsethis->SelectedMapper->SetInputData(extractPolyDataGeometry->GetOutput());#endifthis->SelectedMapper->ScalarVisibilityOff();// vtkIdTypeArray* ids = vtkIdTypeArray::SafeDownCast(selected->GetPointData()->GetArray("OriginalIds"));this->SelectedActor->GetProperty()->SetColor(1.0, 0.0, 0.0); //(R,G,B)this->SelectedActor->GetProperty()->SetPointSize(5);this->GetInteractor()->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(SelectedActor);this->GetInteractor()->GetRenderWindow()->Render();this->HighlightProp(NULL);}}void SetPolyData(vtkSmartPointer<vtkPolyData> polyData) {this->PolyData = polyData;}private:vtkSmartPointer<vtkPolyData> PolyData;vtkSmartPointer<vtkActor> SelectedActor;vtkSmartPointer<vtkDataSetMapper> SelectedMapper;};vtkStandardNewMacro(HighlightInteractorStyle);int main (int, char *[]){vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();sphereSource->Update();vtkSmartPointer<vtkIdFilter> idFilter =vtkSmartPointer<vtkIdFilter>::New();idFilter->SetInputConnection(sphereSource->GetOutputPort());idFilter->SetIdsArrayName("OriginalIds");idFilter->Update();// This is needed to convert the ouput of vtkIdFilter (vtkDataSet) back to vtkPolyDatavtkSmartPointer<vtkDataSetSurfaceFilter> surfaceFilter = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();surfaceFilter->SetInputConnection(idFilter->GetOutputPort());surfaceFilter->Update();vtkPolyData* input = surfaceFilter->GetOutput();// Create a mapper and actorvtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(sphereSource->GetOutputPort());mapper->ScalarVisibilityOff();vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->SetPointSize(500);// VisualizevtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkAreaPicker> areaPicker =vtkSmartPointer<vtkAreaPicker>::New();vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetPicker(areaPicker);renderWindowInteractor->SetRenderWindow(renderWindow);renderer->AddActor(actor);//renderer->SetBackground(1,1,1); // Background color whiterenderWindow->Render();vtkSmartPointer<HighlightInteractorStyle> style = vtkSmartPointer<HighlightInteractorStyle>::New();style->SetPolyData(input);renderWindowInteractor->SetInteractorStyle( style );renderWindowInteractor->Start();return EXIT_SUCCESS;}
- vtkInteractorStyleRubberBandPick 类简介
- 类简介
- Tstrings类简介(Delphi7)
- .NET类库简介
- Delegate类简介
- 自定义实体类简介
- CRect类的简介
- CPictureHolder类简介
- TaskThread类库简介
- .NET类库简介
- 自定义实体类简介
- .NET类库简介
- .NET类库简介
- C# ThreadPool类简介
- UML 类图简介
- .NET类库简介
- Sandy3D 中文类简介
- C#串口类简介
- 转 epoll的一个demo(epoll+线程池)
- Python设计模式(十三)【状态模式】
- Nexus5 如何刷机
- Base64编码及其作用
- 52. N-Queens II
- vtkInteractorStyleRubberBandPick 类简介
- Linux 学习笔记
- 使用phonegap播放音频
- lightoj 1307 Counting Triangles (二分)
- shell脚本语言学习0——概括
- NodeJS写日志_Log4js使用详解
- c3p0使用logback的配置
- C语言拆分字符串名称与扩展名
- Foundation之NSDictionary