当前位置: 首页 > wzjs >正文

网站建设作业多少钱模块建站工具

网站建设作业多少钱,模块建站工具,专业团队图片高清,WordPress积分打赏插件制作1、前言 一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能。图形处理软件ParaView(http://www.paraview.org)、德国癌症研究中心研发的MITK(http://www.mitk.org)等开源软件系统都提供了强大的交互功能,作为ParaView、MITK 等软…

1、前言

        一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能。图形处理软件ParaView(http://www.paraview.org)、德国癌症研究中心研发的MITK(http://www.mitk.org)等开源软件系统都提供了强大的交互功能,作为ParaView、MITK 等软件构建基础的 VTK 同样也提供了各种各样的交互功能。VTK 的交互除了可以监听来自鼠标、键盘等外部设备的消息,还可以在渲染场景中生成功能各异的交互部件(Widget),用于控制可视化过程的参数,达到用户的渲染要求。本章内容将介绍VTK的交互功能,包括命令/观察者模式(Command/Observer)以及 VTK 提供的各种用于交互的 Widget。

2、观察者/命令模式

        观察者/命令模式(Observer/Command)是 VTK里用得较多的设计模式。从 vtkCommand 派生出类 vklmageInteractionCallback,并实现了该类的Execute()函数来完成通过滑动鼠标切换三维图像切面的功能。本节将详细介绍 VTK 中这种交互行为是如何实现的。

        VTK中绝大多数的类都派生自vtkObject。查看类vtkObject的接口可以找到AddObserver0)、RemoveObserver()、GetCommand()等函数,从函数的字面意思可以看出,这些函数是与观察者/命令模式相关的。

        观察者/命令模式是指一个Obiect可以有多个 Observer,它定义了对象间的一种一对多的依赖关系,当一个 Obiect 对象的状态发生改变时,所有依赖于它的Observer 对象都得到通知而被自动更新。命令模式属于对象行为模式,它将一个请求封装为一个对象,并提供一致性发送请求的接口,当一个事件发生时,它不直接把事件传递给事件调用者,而是在命令和调用者之间增加一个中间者,将这种直接关系切断,同时将两者都隔离。事件调用者只是和接口打交道,不和具体事件实现交互。在 VTK中,可以通过两种方式来实现观察者/命令模式,它们分别是使用事件回调函数以及从vtkCommand 派生出具体的子类。

3、事件回调函数


        public uint AddObserver(string arg0, vtkCommand arg1, float priority);
        public uint AddObserver(uint arg0, vtkCommand arg1, float priority);

        AddObserver0函数的作用就是针对某个事件添加观察者到某个 VTK 对象中,当该对象发生观察者感兴趣的事件时,就会自动调用回调函数,执行相关的操作。

1)示例
void MyCallbackFunc(vtkObject*, unsigned long eid, void* clientdata, void* calldata)
{std::cout << "You have clicked: " << ++pressCounts << " times." << std::endl;
}void TestObserverCommand()
{vtkSmartPointer<vtkPNGReader> reader = vtkSmartPointer<vtkPNGReader>::New();reader->SetFileName("F:\\code\\VTK\\TestActiViz\\data\\VTK-logo.png");reader->Update();vtkSmartPointer<vtkImageViewer2> viewer = vtkSmartPointer<vtkImageViewer2>::New();viewer->SetInputData(reader->GetOutput());vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();viewer->SetupInteractor(interactor);viewer->Render();viewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);viewer->SetSize(640, 480);viewer->GetRenderWindow()->SetWindowName("ObserverCommandDemo1");vtkSmartPointer<vtkCallbackCommand> mouseCallback = vtkSmartPointer<vtkCallbackCommand>::New();mouseCallback->SetCallback(MyCallbackFunc);interactor->SetRenderWindow(viewer->GetRenderWindow());interactor->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);interactor->Initialize();interactor->Start();
}

C#代码没有找到vtkCallbackCommand类  可能是这个9.3版本又做调整了,当然也可能是没有封装了,毕竟c++这里调用是正常的。

2)效果

3)说明

        示例的功能非常简单,首先读入一幅PNG 图像,然后监听鼠标左键消息,如果单击图像,就在控制台打印出相应的信息。由此可以看出,VTK里使用回调函数实现观察者/命令模式主要分为以下三个步骤。
      ①定义回调函数。回调函数的函数签名只能是以下形式:
        void func(vtkObject*obj, unsigned long eid, void* clientdata, void *calldata)
        其中 obj 是调用事件的对象(即调用 AddObserver()函数的对象,在本例中即为interactor);eid 为所要监听的事件ID,VTK中的事件定义于vtkCommand.h文件中:clientdata 是与vtkCallbackCommand 实例相关联的数据,简单来说,是指回调函数里需要访问主程序里的数据时,由主程序向回调函数传递的数据,可以通过 vtkCallbackCommand::SetClientData()函数设置;calldata是执行 vkObject::InvokeEvent()函数时,随着回调函数发送的数据,比如,当调用 ProgessEvent 事件时,会自动发送当前的进度值作为calldata。
        ②创建一个 vtkCallbackCommand 对象,并调用 vtkCallbackCommand::SetCallback()函数设置所定义的回调函数,代码如下:

vtkSmartPointer<vtkCallbackCommand> mouseCallback=vtkSmartPointer<vtkCallbackCommand>::New();

mouseCallback->SetCallback ( MyCallbackFunc );

        ③将 vtkCallbackCommand 对象添加到对象的观察者列表中,代码如下:

interactor->AddObserver(vtkCommand::LefButtonPressEvent, mouseCallback);

vtkRenderWindowInteractor 提供了一种独立于平台的交互机制,用来响应不同平台的鼠标、按键和时钟等消息。当渲染窗口中有事件发生时,如单击消息,vkRenderWindowInteractor内部会调用与平台相关的子类,将该消息转换成对应平台的消息。因此,以上示例中通过vtkRenderWindownteractor 来监听鼠标左键按下消息,一旦监听到对象的观察者列表中的消息时,程序会自动调用事件回调函数。

4、vtkCommand子类

        观察者/命令模式除了使用事件回调函数外,还可以直接从vtkCommand 类中派生出子类来实现。不过C#没有找到正确的路,构造函数总是要报错。

1)代码
class vtkMyCallbackNew : public vtkCommand
{
public:static vtkMyCallbackNew* New(){return new vtkMyCallbackNew;}void SetObject(vtkConeSource* cone){m_Cone = cone;}virtual void Execute(vtkObject* caller, unsigned long eventId, void* callData){std::cout << "Left button pressed.\n"<< "The Height: " << m_Cone->GetHeight() << "\n"<< "The Radius: " << m_Cone->GetRadius() << std::endl;}private:vtkConeSource* m_Cone;
};
void TestShow()
{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);vtkRenderer* ren1 = vtkRenderer::New();ren1->AddActor(coneActor);ren1->SetBackground(1, 1, 1.0);vtkRenderWindow* renWin = vtkRenderWindow::New();renWin->AddRenderer(ren1);renWin->SetSize(640, 480);renWin->Render();renWin->SetWindowName("ObservercommandDemo2");vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(renWin);vtkInteractorStyleTrackballCamera* style = vtkInteractorStyleTrackballCamera::New();iren->SetInteractorStyle(style);//vtkBoxWidget* boxWidget = vtkBoxWidget::New();//boxWidget->SetInteractor(iren);//boxWidget->SetPlaceFactor(1.25);//boxWidget->SetProp3D(coneActor);//boxWidget->PlaceWidget();vtkMyCallbackNew* callback = vtkMyCallbackNew::New();callback->SetObject(cone);iren->AddObserver(vtkCommand::InteractionEvent, callback);iren->Initialize();iren->Start();cone->Delete();coneMapper->Delete();coneActor->Delete();callback->Delete();ren1->Delete();renWin->Delete();iren->Delete();style->Delete();
}

 

2)效果

3)说明

        示例演示的同样是监听鼠标左键单击消息,如果监听到单击消息,就在控制台中打印出主程序所设置的锥体的高和底面半径等信息。vkMyCallback类是从 vtkCommand 类中派生的,SetObiect()函数用于设置锥体对象。利用这种方式使用 VTK 的观察者/命令模式时也应遵循如下三个步骤。
        ①从 vtkCommand 类派生出子类,并实现 vtkCommand::Execute()虚函数,该函数原型为:

        virtual void Execute(vtkObject *caller, unsigned long eventId,void *callData)=0;
        Execute()是纯虚函数,所以从vtkCommand派生的类都必须实现这个方法。另外,vtkMyCallback类还定义了一个接口 SetObject(),用来设置锥体对象。该对象主要用于主程序
向 vtkMyCallback 类中传递数据。

       ②在主程序中实例化一个 vtkCommand 子类的对象以及调用相关的方法。

        ③调用 AddObserver0)函数监听感兴趣的事件。如果所监听的事件发生,会调用vtkCommand 子类中的 Execute0函数。因此,针对所监听的事件,程序需要实现的功能一般都放在 Execute()函数中。


文章转载自:

http://thhQAz4D.zbjfq.cn
http://0j7xuW3a.zbjfq.cn
http://g5KFNoej.zbjfq.cn
http://O3NJuvWE.zbjfq.cn
http://MRc4xcan.zbjfq.cn
http://omefjzFD.zbjfq.cn
http://XSXY1Cq1.zbjfq.cn
http://DdnF3xNN.zbjfq.cn
http://2zKiWMHK.zbjfq.cn
http://96ae8L5U.zbjfq.cn
http://kxIZW6LO.zbjfq.cn
http://8EZX5H1r.zbjfq.cn
http://E76vvxXC.zbjfq.cn
http://4bo3hL8c.zbjfq.cn
http://vrKWne4L.zbjfq.cn
http://0GQn0Tk2.zbjfq.cn
http://DBPngnSa.zbjfq.cn
http://ERpxtfoc.zbjfq.cn
http://O1pkltrM.zbjfq.cn
http://nuPBLUCh.zbjfq.cn
http://jV6rjPeV.zbjfq.cn
http://9nf5V2o3.zbjfq.cn
http://FKxvdlKY.zbjfq.cn
http://czPmnzlr.zbjfq.cn
http://hVwOdiMX.zbjfq.cn
http://8HUXNTAQ.zbjfq.cn
http://wUL9X4n3.zbjfq.cn
http://eMd4Wv3N.zbjfq.cn
http://vGoGujSD.zbjfq.cn
http://0S5hObMB.zbjfq.cn
http://www.dtcms.com/wzjs/686154.html

相关文章:

  • 作为一个专业的网页制作人员任丘网站优化
  • 影视传媒公司网站模板旅行网站开发意义
  • 做任务挣钱的网站聚河南高端网站
  • 有名的产品设计公司seo推广软件代理
  • 做博客和做网站大学生为什么不去中建
  • net网站开发环境电脑培训机构哪里有
  • 动漫网站开发 百度一下wordpress 产品主题
  • 广安市国土资源局网站建设线上设计师接单
  • 企业网站建设的方法有哪些计算机论文8000到10000字
  • 天水市秦州区作风建设年网站用凡科帮别人做网站
  • 国内知名的网站建设企业怎么自己注册网站
  • 优秀个人网站欣赏会员卡管理系统多少钱一套
  • 商场网站设计建设教育培训的网站
  • 公司建网站一般多少钱推广策划公司
  • 怎么查询网站是否收录网页无法访问手机
  • 沧州大型网站建设百度指数功能模块
  • 江苏做网站xlech5模板下载有哪些网站
  • 莱芜泉网站建设做鲜花的网站有哪些
  • 九尾狐建站网址免费网站建设找哪家
  • 仿牌外贸网站制作ps如何做切片网站按钮
  • 网站开发怎么让别人看到简易个人网页模板
  • 济南网站推广优化在线做家装设计的网站
  • 苏州seo建站网站建设 申请报告
  • 青岛网站推广哪家效果好优化方案2021版英语
  • 网站建设合同属于什么合同公司官网登录入口
  • 网站平台系统设计公司房产管理系统
  • 简述建设网站的具体步骤无锡新吴区住房建设和交通局网站
  • 织梦 帝国 php cms 媒体网站 哪个无锡响应式网站设计
  • 网站建设费用是多少钱网站文章编辑
  • 深圳西乡 网站建设自己做的网站怎么才能被收录