VTK入门程序样例分析vtk与MFc混编.docx
- 文档编号:30376636
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:56
- 大小:1.07MB
VTK入门程序样例分析vtk与MFc混编.docx
《VTK入门程序样例分析vtk与MFc混编.docx》由会员分享,可在线阅读,更多相关《VTK入门程序样例分析vtk与MFc混编.docx(56页珍藏版)》请在冰豆网上搜索。
VTK入门程序样例分析vtk与MFc混编
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.h"
intmain()
{
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);
inti;
for(i=0;i<360;++i)
{
//rendertheimage
renWin->Render();
//rotatetheactivecamerabyonedegree
ren1->GetActiveCamera()->Azimuth
(1);
}
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return0;
}
1、新建工程
2、输入代码
3、添加包含文件
4、编译出错
cone1.obj:
errorLNK2019:
unresolvedexternalsymbol"__declspec(dllimport)public:
void__thiscallvtkCamera:
:
Azimuth(double)"(__imp_?
Azimuth@vtkCamera@@QAEXN@Z)referencedinfunction_wmain
错误解决办法
errorLNK2019:
无法解析的外部符号"__declspec(dllimport)public:
staticclass...
称找不到vtkIO.dll
对应解决办法:
在每个项目属性的链接器->输入->附加依赖项中添加入vtkIO.lib库,目录为:
..\..\..\..\bin\Debug\vtkIO.lib
F:
\VTK58\bin\bin\Debug\vtkMFC.lib;F:
\VTK58\bin\bin\Debug\vtkRendering.lib;F:
\VTK58\bin\bin\Debug\vtkIO.lib;F:
\VTK58\bin\bin\Debug\vtkFiltering.lib;F:
\VTK58\bin\bin\Debug\vtkCommon.lib;DelayImp.lib;F:
\VTK58\bin\bin\Debug\vtkGraphics.lib;F:
\VTK58\bin\bin\Debug\vtkImaging.lib;F:
\VTK58\bin\bin\Debug\vtkFiltering.lib;F:
\VTK58\bin\bin\Debug\vtkCommon.lib;F:
\VTK58\bin\bin\Debug\vtksys.lib;
错误没了!
2、Callback命令
#include"vtkConeSource.h"
#include"vtkPolyDataMapper.h"
#include"vtkRenderWindow.h"
#include"vtkCommand.h"
#include"vtkCamera.h"
#include"vtkActor.h"
#include"vtkRenderer.h"
//Callbackfortheinteraction
classvtkMyCallback:
publicvtkCommand
{
public:
staticvtkMyCallback*New()
{returnnewvtkMyCallback;}
virtualvoidExecute(vtkObject*caller,unsignedlong,void*)
{
vtkRenderer*renderer=reinterpret_cast
cout<
<
<
}
};
intmain()
{
//
//ThepipelinecreationisdocumentedinStep1
//
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);
ren1->ResetCamera();
vtkRenderWindow*renWin=vtkRenderWindow:
:
New();
renWin->AddRenderer(ren1);
renWin->SetSize(300,300);
//Hereiswherewesetuptheobserver,wedoanewandren1will
//eventuallyfreetheobserver
vtkMyCallback*mo1=vtkMyCallback:
:
New();
ren1->AddObserver(vtkCommand:
:
StartEvent,mo1);
mo1->Delete();
//
//nowweloopover360degreesandrendertheconeeachtime
//
inti;
for(i=0;i<360;++i)
{
//rendertheimage
renWin->Render();
//rotatetheactivecamerabyonedegree
ren1->GetActiveCamera()->Azimuth
(1);
}
//
//Freeupanyobjectswecreated
//
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return0;
}
3、一个圆锥两个renderer在同一个窗口下显示
#include"vtkConeSource.h"
#include"vtkPolyDataMapper.h"
#include"vtkRenderWindow.h"
#include"vtkCamera.h"
#include"vtkActor.h"
#include"vtkRenderer.h"
intmain()
{
//
//NextwecreateaninstanceofvtkConeSourceandsetsomeofits
//properties.TheinstanceofvtkConeSource"cone"ispartofa
//visualizationpipeline(itisasourceprocessobject);itproducesdata
//(outputtypeisvtkPolyData)whichotherfiltersmayprocess.
//
vtkConeSource*cone=vtkConeSource:
:
New();
cone->SetHeight(3.0);
cone->SetRadius(1.0);
cone->SetResolution(10);
//
//Inthisexampleweterminatethepipelinewithamapperprocessobject.
//(IntermediatefilterssuchasvtkShrinkPolyDatacouldbeinsertedin
//betweenthesourceandthemapper.)Wecreateaninstanceof
//vtkPolyDataMappertomapthepolygonaldataintographicsprimitives.We
//connecttheoutputoftheconesouecetotheinputofthismapper.
//
vtkPolyDataMapper*coneMapper=vtkPolyDataMapper:
:
New();
coneMapper->SetInputConnection(cone->GetOutputPort());
//
//Createanactortorepresentthecone.Theactororchestratesrendering
//ofthemapper'sgraphicsprimitives.Anactoralsoreferstoproperties
//viaavtkPropertyinstance,andincludesaninternaltransformation
//matrix.Wesetthisactor'smappertobeconeMapperwhichwecreated
//above.
//
vtkActor*coneActor=vtkActor:
:
New();
coneActor->SetMapper(coneMapper);
//
//Createtworenderersandassignactorstothem.Arendererrendersinto
//aviewportwithinthevtkRenderWindow.Itispartorallofawindowon
//thescreenanditisresponsiblefordrawingtheactorsithas.Wealso
//setthebackgroundcolorhere.Inthisexampleweareaddingthesame
//actortotwodifferentrenderers;itisokaytoadddifferentactorsto
//differentrenderersaswell.
//
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);
//
//Finallywecreatetherenderwindowwhichwillshowuponthescreen.
//WeputourrendererintotherenderwindowusingAddRenderer.Wealso
//setthesizetobe300pixelsby300.
//
vtkRenderWindow*renWin=vtkRenderWindow:
:
New();
renWin->AddRenderer(ren1);
renWin->AddRenderer(ren2);
renWin->SetSize(600,300);
//
//Makeoneview90degreesfromother.
//
ren1->ResetCamera();
ren1->GetActiveCamera()->Azimuth(90);
//
//Nowweloopover360degreeeesandrendertheconeeachtime.
//
inti;
for(i=0;i<360;++i)
{
//rendertheimage
renWin->Render();
//rotatetheactivecamerabyonedegree
ren1->GetActiveCamera()->Azimuth
(1);
ren2->GetActiveCamera()->Azimuth
(1);
}
//
//Freeupanyobjectswecreated.AllinstancesinVTKaredeletedby
//usingtheDelete()method.
//
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
ren2->Delete();
renWin->Delete();
return0;
}
4、一个圆锥两个renderer在同一个窗口下显示
Cone4
#include"vtkConeSource.h"
#include"vtkPolyDataMapper.h"
#include"vtkRenderWindow.h"
#include"vtkCamera.h"
#include"vtkActor.h"
#include"vtkRenderer.h"
#include"vtkProperty.h"
intmain()
{
//
//NextwecreateaninstanceofvtkConeSourceandsetsomeofits
//properties.TheinstanceofvtkConeSource"cone"ispartofa
//visualizationpipeline(itisasourceprocessobject);itproducesdata
//(outputtypeisvtkPolyData)whichotherfiltersmayprocess.
//
vtkConeSource*cone=vtkConeSource:
:
New();
cone->SetHeight(3.0);
cone->SetRadius(1.0);
cone->SetResolution(10);
//
//Inthisexampleweterminatethepipelinewithamapperprocessobject.
//(IntermediatefilterssuchasvtkShrinkPolyDatacouldbeinsertedin
//betweenthesourceandthemapper.)Wecreateaninstanceof
//vtkPolyDataMappertomapthepolygonaldataintographicsprimitives.We
//connecttheoutputoftheconesouecetotheinputofthismapper.
//
vtkPolyDataMapper*coneMapper=vtkPolyDataMapper:
:
New();
coneMapper->SetInputConnection(cone->GetOutputPort());
//
//Createanactortorepresentthefirstcone.Theactor'spropertiesare
//modifiedtogiveitdifferentsurfaceproperties.Bydefault,anactor
//iscreatewithapropertysotheGetProperty()methodcanbeused.
//
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);
//
//Createapropertyanddirectlymanipulateit.Assignittothe
//secondactor.
//
vtkProperty*property=vtkProperty:
:
New();
property->SetColor(1.0,0.3882,0.2784);
property->SetDiffuse(0.7);
property->SetSpecular(0.4);
property->SetSpecularPower(20);
//
//Createasecondactorandaproperty.Thepropertyisdirectly
//manipulatedandthenassignedtotheactor.Inthisway,asingle
//propertycanbesharedamongmanyactors.Notealsothatweusethe
//samemapperasthefirstactordid.Thiswayweavoidduplicating
//geometry,whichmaysavelotsofmemoryifthegeoemtryislarge.
vtkActor*coneActor2=vtkActor:
:
New();
coneActor2->SetMapper(coneMapper);
coneActor2->GetProperty()->SetColor(0.2,0.63,0.79);
coneActor2->SetProperty(property);
coneActor2->SetPosition(0,2,0);
//
//CreatetheRendererandassignactorstoit.Arendererislikea
//viewport.Itispartorallofawindowonthescreenanditis
//responsiblefordrawingtheactorsithas.Wealsosetthebackground
//colorhere.
//
vtkRenderer*r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VTK 入门 程序 分析 MFc 混编