vtk基础01
来源:互联网 发布:常州电子软件研发 编辑:程序博客网 时间:2024/05/29 12:34
vtk中的对交互初步认识,widget有好几种方式,以下有两种,跟别是boxWidget(注释掉)和SliderWidget。通过观察者AddObserver(vtkCommand::InteractionEvent, callback)来回调函数;
Execute是交互运行的关键,将调用对象转换为sliderWidget类型,然后从其相关联的表示对象中获取滑块的当前值,并用做漫反射系数。
#include"vtkConeSource.h"#include"vtkPolyDataMapper.h"#include"vtkRenderWindow.h"#include"vtkCamera.h"#include"vtkActor.h"#include"vtkRenderer.h"#include"vtkRenderWindowInteractor.h"#include"vtkInteractorStyleTrackballCamera.h"#include"vtkCommand.h"//#include"vtkBoxWidget.h"//#include"vtkTransform.h"#include"vtkSliderWidget.h"#include"vtkSliderRepresentation3D.h"#include"vtkProperty.h"#include"vtkLight.h"//class vtkMyCallback :public vtkCommand//{//public:// static vtkMyCallback*New()// {return new vtkMyCallback; }// virtual void Execute(vtkObject*caller, unsigned long, void*)// {// vtkTransform*t = vtkTransform::New();// vtkBoxWidget*widget = reinterpret_cast<vtkBoxWidget*>(caller);// widget->GetTransform(t);// widget->GetProp3D()->SetUserTransform(t);// t->Delete();// }//};class vtkSliderCallback :public vtkCommand{public: static vtkSliderCallback *New() {return new vtkSliderCallback; } virtual void Execute(vtkObject*caller, unsigned long, void*) { vtkSliderWidget*sliderWidget = reinterpret_cast<vtkSliderWidget*>(caller); this->anActor->GetProperty()->SetDiffuse(static_cast<vtkSliderRepresentation*> (sliderWidget->GetRepresentation())->GetValue()); } vtkSliderCallback() :anActor(0){} vtkActor*anActor;};int main(){ vtkConeSource*cone = vtkConeSource::New(); cone->SetHeight(3.0); cone->SetRadius(1.0); cone->SetResolution(10); vtkPolyDataMapper*coneMapper = vtkPolyDataMapper::New(); coneMapper->SetInputConnection(cone->GetOutputPort()); vtkActor*coneActor = vtkActor::New(); coneActor->SetMapper(coneMapper); coneActor->GetProperty()->SetColor(1, 0, 0); coneActor->GetProperty()->SetAmbient(0.5); coneActor->GetProperty()->SetSpecular(0.0); vtkRenderer*ren1 = vtkRenderer::New(); ren1->AddActor(coneActor); ren1->SetBackground(0.1, 0.2, 0.4); //ren1->SetViewport(0.0, 0.0, 0.5, 1.0); vtkLight*light = vtkLight::New(); light->SetFocalPoint(0, 0, 0); light->SetPosition(-0 / 8, 0.8, 1); ren1->AddLight(light); vtkRenderWindow*renWin = vtkRenderWindow::New(); renWin->AddRenderer(ren1); //renWin->AddRenderer(ren2); renWin->SetSize(600, 300); /*ren1->ResetCamera(); ren1->GetActiveCamera()->Azimuth(90);*/ vtkRenderWindowInteractor*iren = vtkRenderWindowInteractor::New();//设定交互 iren->SetRenderWindow(renWin); vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); iren->SetInteractorStyle(style);//指定交互方式 //实例化vtkSliderRepresentation3D,并设置属性。该对象用做滑块在场景中的3D表示 vtkSliderRepresentation3D*sliderRep = vtkSliderRepresentation3D::New(); sliderRep->SetValue(0.5); sliderRep->SetTitleText("Diffuse value"); sliderRep->GetPoint1Coordinate()->SetCoordinateSystemToWorld(); sliderRep->GetPoint1Coordinate()->SetValue(-0.5, -0.8, 0); sliderRep->GetPoint2Coordinate()->SetCoordinateSystemToWorld(); sliderRep->GetPoint2Coordinate()->SetValue(0.5, -0.8, 0);//Titletext的坐标 sliderRep->SetSliderLength(0.075); sliderRep->SetSliderWidth(0.05); sliderRep->SetEndCapLength(0.05);//设置滑动块两端的大小 vtkSliderWidget*sliderWidget = vtkSliderWidget::New(); sliderWidget->SetInteractor(iren); sliderWidget->SetRepresentation(sliderRep); sliderWidget->SetAnimationModeToAnimate();//设置动画模式 sliderWidget->EnabledOn();//用于使用滑块 vtkSliderCallback*callback = vtkSliderCallback::New(); callback->anActor = coneActor; sliderWidget->AddObserver(vtkCommand::InteractionEvent, callback); //vtkBoxWidget*boxWidget = vtkBoxWidget::New();//创建vtkBoxWidget实例 //boxWidget->SetInteractor(iren); // 设置交互器 //boxWidget->SetPlaceFactor(1.25); //设置缩放因子 //boxWidget->SetProp3D(coneActor);//关联一个道具 //boxWidget->PlaceWidget();//对位置初始化 ////vtkMyCallback*callback = vtkMyCallback::New(); //boxWidget->AddObserver(vtkCommand::InteractionEvent, callback); //boxWidget->On(); iren->Initialize(); iren->Start(); return 0;}
阅读全文
0 0
- vtk基础01
- VTK基础
- VTK快速使用基础
- VTK基础概念
- 3、VTK基础概念
- VTK基础学习教程
- VTK基础概念
- VTK基础学习
- 03-VTK基础概念(1)
- 03-VTK基础概念(2)
- 03-VTK基础概念(1)
- 03-VTK基础概念(2)
- VTK基础概念-圆柱体绘制
- VTK系统基础概念一
- VTK经验分享 3. VTK的基础概念
- 01-从零开始学习VTK
- 01-从零开始学习VTK
- 01-从零开始学习VTK
- ZOJ3827 Information Entropy(模拟水题)
- Redis set的用法(转载)
- Hdu 6069
- Mysql 对于换行符回车符 查询失效的处理
- Python库之Requests(iMooc)---(4)
- vtk基础01
- LeetCode 72 Edit Distance(Python详解及实现)
- yuyv图像转rgb后转bmp的一个简单demo
- js制作选型全选不全选效果
- SHUOJ添加好友
- JavaScript学习——freeCodeCamp(1)
- shell脚本加密
- HDU6063-RXD and math
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)