VTK入门程序样例分析-vtk与MFc混编.doc_第1页
VTK入门程序样例分析-vtk与MFc混编.doc_第2页
VTK入门程序样例分析-vtk与MFc混编.doc_第3页
VTK入门程序样例分析-vtk与MFc混编.doc_第4页
VTK入门程序样例分析-vtk与MFc混编.doc_第5页
免费预览已结束,剩余39页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VTk与MFC混编前面几个例子是熟悉vtk的,练习时用控制台程序编写,vtk与MFC混编的过程中遇到了很多问题,为了方便大家,我把这一过程中的遇到的错误和解决办法都记录下来了,希望能够对大家有所帮助VTK入门程序样例分析1、 圆锥圆柱类1、简单圆锥【圆锥鼠标拖动】#include vtkConeSource.h#include vtkPolyDataMapper.h#include vtkRenderWindow.h#include vtkCamera.h#include vtkActor.h#include vtkRenderer.hint 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 ); vtkRenderer *ren1= vtkRenderer:New(); ren1-AddActor( coneActor ); ren1-SetBackground( 0.1, 0.2, 0.4 ); vtkRenderWindow *renWin = vtkRenderWindow:New(); renWin-AddRenderer( ren1 ); renWin-SetSize( 300, 300 ); int i; for (i = 0; i Render(); / rotate the active camera by one degree ren1-GetActiveCamera()-Azimuth( 1 ); cone-Delete(); coneMapper-Delete(); coneActor-Delete(); ren1-Delete(); renWin-Delete(); return 0;1、 新建工程2、 输入代码3、 添加包含文件4、 编译出错cone1.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: void _thiscall vtkCamera:Azimuth(double) (_imp_?AzimuthvtkCameraQAEXNZ) referenced in function _wmain错误解决办法error LNK2019: 无法解析的外部符号 _declspec(dllimport) public: static class.称找不到vtkIO.dll对应解决办法:在每个项目属性的链接器-输入-附加依赖项中添加入vtkIO.lib库,目录为:.binDebugvtkIO.libF:VTK58binbinDebugvtkMFC.lib;F:VTK58binbinDebugvtkRendering.lib;F:VTK58binbinDebugvtkIO.lib;F:VTK58binbinDebugvtkFiltering.lib;F:VTK58binbinDebugvtkCommon.lib;DelayImp.lib;F:VTK58binbinDebugvtkGraphics.lib;F:VTK58binbinDebugvtkImaging.lib;F:VTK58binbinDebugvtkFiltering.lib;F:VTK58binbinDebugvtkCommon.lib;F:VTK58binbinDebugvtksys.lib;错误没了!2、Callback命令#include vtkConeSource.h#include vtkPolyDataMapper.h#include vtkRenderWindow.h#include vtkCommand.h#include vtkCamera.h#include vtkActor.h#include vtkRenderer.h/ Callback for the interactionclass vtkMyCallback : public vtkCommandpublic: static vtkMyCallback *New() return new vtkMyCallback; virtual void Execute(vtkObject *caller, unsigned long, void*) vtkRenderer *renderer = reinterpret_cast(caller); cout GetActiveCamera()-GetPosition()0 GetActiveCamera()-GetPosition()1 GetActiveCamera()-GetPosition()2 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( 0.1, 0.2, 0.4 ); ren1-ResetCamera(); vtkRenderWindow *renWin = vtkRenderWindow:New(); renWin-AddRenderer( ren1 ); renWin-SetSize( 300, 300 ); / Here is where we setup the observer, we do a new and ren1 will / eventually free the observer vtkMyCallback *mo1 = vtkMyCallback:New(); ren1-AddObserver(vtkCommand:StartEvent,mo1); mo1-Delete(); / / now we loop over 360 degrees and render the cone each time / int i; for (i = 0; i Render(); / rotate the active camera by one degree ren1-GetActiveCamera()-Azimuth( 1 ); / / Free up any objects we created / cone-Delete(); coneMapper-Delete(); coneActor-Delete(); ren1-Delete(); renWin-Delete(); return 0;3、一个圆锥两个renderer在同一个窗口下显示#include vtkConeSource.h#include vtkPolyDataMapper.h#include vtkRenderWindow.h#include vtkCamera.h#include vtkActor.h#include vtkRenderer.hint main() / / Next we create an instance of vtkConeSource and set some of its / properties. The instance of vtkConeSource cone is part of a / visualization pipeline (it is a source process object); it produces data / (output type is vtkPolyData) which other filters may process. / vtkConeSource *cone = vtkConeSource:New(); cone-SetHeight( 3.0 ); cone-SetRadius( 1.0 ); cone-SetResolution( 10 ); / / In this example we terminate the pipeline with a mapper process object. / (Intermediate filters such as vtkShrinkPolyData could be inserted in / between the source and the mapper.) We create an instance of / vtkPolyDataMapper to map the polygonal data into graphics primitives. We / connect the output of the cone souece to the input of this mapper. / vtkPolyDataMapper *coneMapper = vtkPolyDataMapper:New(); coneMapper-SetInputConnection( cone-GetOutputPort() ); / / Create an actor to represent the cone. The actor orchestrates rendering / of the mappers graphics primitives. An actor also refers to properties / via a vtkProperty instance, and includes an internal transformation / matrix. We set this actors mapper to be coneMapper which we created / above. / vtkActor *coneActor = vtkActor:New(); coneActor-SetMapper( coneMapper ); / / Create two renderers and assign actors to them. A renderer renders into / a viewport within the vtkRenderWindow. It is part or all of a window on / the screen and it is responsible for drawing the actors it has. We also / set the background color here. In this example we are adding the same / actor to two different renderers; it is okay to add different actors to / different renderers as well. / 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); vtkRenderer *ren2= vtkRenderer:New(); ren2-AddActor( coneActor ); ren2-SetBackground( 0.2, 0.3, 0.5 ); ren2-SetViewport(0.5, 0.0, 1.0, 1.0); / / Finally we create the render window which will show up on the screen. / We put our renderer into the render window using AddRenderer. We also / set the size to be 300 pixels by 300. / vtkRenderWindow *renWin = vtkRenderWindow:New(); renWin-AddRenderer( ren1 ); renWin-AddRenderer( ren2 ); renWin-SetSize( 600, 300 ); / / Make one view 90 degrees from other. / ren1-ResetCamera(); ren1-GetActiveCamera()-Azimuth(90); / / Now we loop over 360 degreeees and render the cone each time. / int i; for (i = 0; i Render(); / rotate the active camera by one degree ren1-GetActiveCamera()-Azimuth( 1 ); ren2-GetActiveCamera()-Azimuth( 1 ); / / Free up any objects we created. All instances in VTK are deleted by / using the Delete() method. / cone-Delete(); coneMapper-Delete(); coneActor-Delete(); ren1-Delete(); ren2-Delete(); renWin-Delete(); return 0;4、一个圆锥两个renderer在同一个窗口下显示Cone4#include vtkConeSource.h#include vtkPolyDataMapper.h#include vtkRenderWindow.h#include vtkCamera.h#include vtkActor.h#include vtkRenderer.h#include vtkProperty.hint main() / / Next we create an instance of vtkConeSource and set some of its / properties. The instance of vtkConeSource cone is part of a / visualization pipeline (it is a source process object); it produces data / (output type is vtkPolyData) which other filters may process. / vtkConeSource *cone = vtkConeSource:New(); cone-SetHeight( 3.0 ); cone-SetRadius( 1.0 ); cone-SetResolution( 10 ); / / In this example we terminate the pipeline with a mapper process object. / (Intermediate filters such as vtkShrinkPolyData could be inserted in / between the source and the mapper.) We create an instance of / vtkPolyDataMapper to map the polygonal data into graphics primitives. We / connect the output of the cone souece to the input of this mapper. / vtkPolyDataMapper *coneMapper = vtkPolyDataMapper:New(); coneMapper-SetInputConnection( cone-GetOutputPort() ); / / Create an actor to represent the first cone. The actors properties are / modified to give it different surface properties. By default, an actor / is create with a property so the GetProperty() method can be used. / vtkActor *coneActor = vtkActor:New(); coneActor-SetMapper( coneMapper ); coneActor-GetProperty()-SetColor(0.2, 0.63, 0.79); coneActor-GetProperty()-SetDiffuse(0.7); coneActor-GetProperty()-SetSpecular(0.4); coneActor-GetProperty()-SetSpecularPower(20); / / Create a property and directly manipulate it. Assign it to the / second actor. / vtkProperty *property = vtkProperty:New(); property-SetColor(1.0, 0.3882, 0.2784); property-SetDiffuse(0.7); property-SetSpecular(0.4); property-SetSpecularPower(20); / / Create a second actor and a property. The property is directly / manipulated and then assigned to the actor. In this way, a single / property can be shared among many actors. Note also that we use the / same mapper as the first actor did. This way we avoid duplicating / geometry, which may save lots of memory if the geoemtry is large. vtkActor *coneActor2 = vtkActor:New(); coneActor2-SetMapper(coneMapper); coneActor2-GetProperty()-SetColor(0.2, 0.63, 0.79); coneActor2-SetProperty(property); coneActor2-SetPosition(0, 2, 0); / / Create the Renderer and assign actors to it. A renderer is like a / viewport. It is part or all of a window on the screen and it is / responsible for drawing the actors it has. We also set the background / color here. / vtkRenderer *ren1= vtkRenderer:New(); ren1-AddActor( coneActor ); ren1-AddActor( coneActor2 ); ren1-SetBackground( 0.1, 0.2, 0.4 ); / / Finally we create the render window which will show up on the screen. / We put our renderer into the render window using AddRenderer. We also / set the size to be 300 pixels by 300. / vtkRenderWindow *renWin = vtkRenderWindow:New(); renWin-AddRenderer( ren1 ); renWin-SetSize( 300, 300 ); / / Now we loop over 360 degreeees and render the cone each time. / int i; for (i = 0; i Render(); / rotate the active camera by one degree ren1-GetActiveCamera()-Azimuth( 1 ); / / Free up any objects we created. All instances in VTK are deleted by / using the Delete() method. / cone-Delete(); coneMapper-Delete(); coneActor-Delete(); property-Delete(); coneActor2-Delete(); ren1-Delete(); renWin-Delete(); return 0;5、旋转椎体#include vtkConeSource.h#include vtkDataSetMapper.h#include vtkRenderWindow.h#include vtkRenderWindowInteractor.h#include vtkCamera.h#include vtkActor.h#include vtkRenderer.h#include vtkInteractorStyleTrackballCamera.h#include vtkRotationFilter.hint main()vtkConeSource *cone = vtkConeSource:New();cone -SetRadius (0.05 );cone -SetHeight (0.25 );cone -SetResolution (256 );cone -SetCenter (0.15 ,0.0 ,0.15 );vtkRotationFilter *rotate=vtkRotationFilter:New();rotate- SetInputConnection (cone- GetOutputPort();rotate- SetAxisToZ();rotate- SetCenter (0.0 ,0.0 ,0.0);rotate- SetAngle (45);rotate- SetNumberOfCopies (7);rotate- CopyInputOn();vtkDataSetMapper *coneMapper = vtkDataSetMapper:New();coneMapper-SetInputConnection( rotate-GetOutputPort() );vtkActor *coneActor = vtkActor:New();coneActor-SetMapper( coneMapper );vtkRenderer *ren1= vtkRenderer:New();ren1-AddActor( coneActor );ren1-SetBackground( 0.1, 0.2, 0.4 );vtkRenderWindow *renWin = vtkRenderWindow:New();renWin-AddRenderer( ren1 );renWin-SetSize( 512, 512 );vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor:New();iren-SetRenderWindow(renWin);iren-Initialize();iren-Start();cone-Delete();coneMapper-Delete();coneActor-Delete();ren1-Delete();renWin-Delete();iren-Delete();return 0;编译出错:roateCone.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: void _thiscall vtkRenderWindowInteractor:SetRenderWindow(class vtkRenderWindow *) (_imp_?SetRenderWindowvtkRenderWindowInteractorQAEXPAVvtkRenderWindowZ) referenced in function _wmain1roateCone.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: static class vtkRenderWindowInteractor * _cdecl vtkRenderWindowInteractor:New(void) (_imp_?NewvtkRenderWindowInteractorSAPAV1XZ) referenced in function _wmain1roateCone.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: static class vtkRenderWindow * _cdecl vtkRenderWindow:New(void) (_imp_?NewvtkRenderWindowSAPAV1XZ) referenced in function _wmain1roateCone.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: void _thiscall vtkRenderer:AddActor(class vtkProp *) (_imp_?AddActorvtkRendererQAEXPAVvtkPropZ) referenced in function _wmain1roateCone.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: static class vtkRenderer * _cdecl vtkRenderer:New(void) (_imp_?NewvtkRendererSAPAV1XZ) referenced in function _wmain1roateCone.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: static class vtkActor * _cdecl vtkActor:New(void) (_imp_?NewvtkActorSAPAV1XZ) referenced in function _wmain1roateCone.obj : error LNK2019: unresolved external symbol _declspec(dllimport) public: static class vtkDataSetMapper * _cdecl vtkDataSetMapper:New(void) (_imp_?NewvtkDataSetMapperSAPAV1XZ) referenced in function _wmain再增加两个库:F:VTK58binbinDebugvtkIO.lib;F:VTK58binbinDebugvtkRendering.lib/ roatecone.cpp : Defines the entry point for the console application./#include stdafx.hint _tmain(int argc, _TCHAR* argv)return 0;添加include文件添加library添加附加依赖这里就是让编译器找一下这个文件,不会连接的延迟加载只会影响软件的启动速度,不会影响编译6、圆锥+坐标7、立方体、椎体球#include vtkRenderer.h#include vtkRenderWindow.h#include vtkRenderWindowInteractor.h#include vtkConeSource.h#include vtkPolyDataMapper.h#include vtkActor.h#include vtkCubeSource.h#include vtkSphereSource.h#include vtkProperty.h/#include SaveImage.hvoid main( int argc, char *argv )/ create rendering windows and three renderersvtkRenderer *ren1 = vtkRenderer:New();vtkRenderer *ren2 = vtkRenderer:New();vtkRenderWindow *renWindow1 = vtkRenderWindow:New();renWindow1-AddRenderer(ren1);renWindow1-AddRenderer(ren2);vtkRenderWindowInteractor *iren1 = vtkRenderWindowInteractor:New();iren1-SetRenderWindow(renWindow1);vtkRenderer *ren3 = vtkRenderer:New();vtkRenderWindow *renWindow2 = vtkRenderWindow:New();renWindow2-AddRenderer(ren3);vtkRenderWindowInteractor *iren2 = vtkRenderWindowInteractor:New();iren2-SetRenderWindow(renWindow2);/ create an actor and give it cone geometryvtkConeSource *cone = vtkConeSource:New();cone-SetResolution(8);vtkPolyDataMapper *coneMapper = vtkPolyDataMapper:New();coneMapper-SetInput(cone-GetOutput();vtkActor *coneActor = vtkActor:New();coneActor-SetMapper(coneMapper);coneActor-GetProperty()-SetColor(0.2000,0.6300,0.7900);/ create an actor and give it cube geometryvtkCubeSource *cube = vtkCubeSource:New();vtkPolyDataMapper *cubeMapper = vtkPolyDataMapper:New();cubeMapper-SetInput(cube-GetOutput();vtkActor *cubeActor = vtkActor:New();cubeActor-SetMapper(cubeMapper);cubeActor-GetProperty()-SetColor(0.9804,0.5020,0.4471);/ create an actor and give it sphere geometryvtkSphereSource *sphere = vtkSphereSource:New();sphere-SetThetaResolution(16); sphere-SetPhiResolution(16);vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper:New();sphereMapper-SetInput(sphere-GetOutput();vtkActor *sphereActor = vtkActor:New();sphereActor-SetMapper(sphereMapper);sphereActor-GetProperty()-SetColor(0.8900,0.6600,0.4100);/ assign our actor to both renderersren1-AddActor(coneActor);ren2-AddActor(sphereActor);ren3-AddActor(cubeActor);/ set the size of our windowrenWindow1-SetSize(300,150);renWindow1-SetPosition(0,50);renWindow2-SetSize(300,300);renWindow2-SetPosition(0,300);/ set the viewports and background of the renderersren1-SetViewport(0,0,0.5,1);ren1-SetBackground(0.9,0.9,0.9);ren2-SetViewport(0.5,0,1,1);ren2-SetBackground(1,1,1);ren3-SetBackground(1,1,1);/ draw the resulting scenerenWindow1-Render();renWindow2-Render();/ SAVEIMAGE( renWindow1 );iren1-Start();/ Clean upren1-Delete();ren2-Delete();renWindow1-Delete();iren1-Delete();ren3-Delete();renWindow2-Delete();iren2-Delete();cone-Delete();coneMapper-Delete();coneActor-Delete();cube-Delete();cubeMapper-Delete();cubeActor-Delete();sphere-Delete();sphere

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论