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

【VTK】MFC中使用VTK9.3

MFC中如果使用VTK

  • 碎碎念
  • 一、vtk环境配置
  • 二、具体实现
    • 1、新建类
    • 2. 自定义控件
    • 3、跑个栗子
  • 总结


碎碎念

如果不是老程序用的MFC,我才不想用MFC去使用VTK呢。

一、vtk环境配置

关于环境配置你可以看这篇文章,在这里不过多赘述。需要注意要选择支持MFC,默认是不支持的。
在这里插入图片描述

二、具体实现

创建一个基于对话框的MFC项目,然后设置好vtk的环境

1、新建类

新建一个VtkView类,让其继承CStatic类

#pragma once
#include <vtkRenderer.h>
#include <vtkAutoInit.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
class VtkView : public CStatic
{
private:
	CRect m_rect;
	vtkNew<vtkRenderer> ren1;
	vtkNew<vtkRenderWindow> renWin;
	vtkNew<vtkRenderWindowInteractor> iren;
	void VtkView::PreSubclassWindow()
	{
		GetClientRect(&m_rect);
		renWin->SetParentId(this->m_hWnd);
		renWin->SetSize(m_rect.Width(), m_rect.Height());
		renWin->AddRenderer(ren1);
		if (renWin->GetInteractor() == nullptr)
		{
			
			iren->SetRenderWindow(renWin);
			iren->Initialize();
		}
		CStatic::PreSubclassWindow();
		
	}
};


   

2. 自定义控件

切换至资源视图,ctrl+a 删除默认控件,在窗口中加入picture Control
在这里插入图片描述

在这里插入图片描述
修改控件id为vtk_view, 为其添加一个变量,变量类型设置为VtkView(就是我们添加的类),名称随意
在这里插入图片描述
不要忘了添加#include "VtkView.h"来解决未知类型问题。
此时点击运行,会出现找不到dll问题,直接将vtk目录的bin文件夹下所有文件复制到项目根目录即可解决问题
在这里插入图片描述
再次点击运行,运行成功
在这里插入图片描述

3、跑个栗子

例子地址

#pragma once
#include <vtkRenderer.h>
#include <vtkAutoInit.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkNamedColors.h>
#include <vtkCylinderSource.h>
#include <vtkProperty.h>
#include <vtkPolyDataMapper.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
class VtkView : public CStatic
{
private:
	CRect m_rect;
	vtkNew<vtkRenderer> ren1;
	vtkNew<vtkRenderWindow> renWin;
	vtkNew<vtkRenderWindowInteractor> iren;
	void VtkView::PreSubclassWindow()
	{
		GetClientRect(&m_rect);
		renWin->SetParentId(this->m_hWnd);
		renWin->SetSize(m_rect.Width(), m_rect.Height());
		renWin->AddRenderer(ren1);
		if (renWin->GetInteractor() == nullptr)
		{
			
			iren->SetRenderWindow(renWin);
			iren->Initialize();
		}
		vtkNew<vtkNamedColors> colors;
		std::array<unsigned char, 4> bkg{ {26, 51, 102, 255} };
		colors->SetColor("BkgColor", bkg.data());
		vtkNew<vtkCylinderSource> cylinder;
		cylinder->SetResolution(8);
		vtkNew<vtkPolyDataMapper> cylinderMapper;
		cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
		vtkNew<vtkActor> cylinderActor;
		cylinderActor->SetMapper(cylinderMapper);
		cylinderActor->GetProperty()->SetColor(
			colors->GetColor4d("Tomato").GetData());
		cylinderActor->RotateX(30.0);
		cylinderActor->RotateY(-45.0);
		ren1->AddActor(cylinderActor);
		ren1->SetBackground(colors->GetColor3d("BkgColor").GetData());
		renWin->Render();
		CStatic::PreSubclassWindow();
		
	}
};

运用结果:
在这里插入图片描述


总结

以上就是今天要讲的内容,本文仅仅简单介绍了MFC下如何使用VTK,如果您有更丰富的使用经验,期待您分享给我,感激不尽。


http://www.kler.cn/a/402722.html

相关文章:

  • RangeInt,开源一个有限范围计数器模块。c语言的。 可以用于单片机
  • 使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
  • web-03
  • Excel的图表使用和导出准备
  • 实验十三 生态安全评价
  • Linux|内存级文件原理
  • 1+X应急响应(网络)威胁情报分析:
  • 百度遭初创企业指控抄袭,维权还是碰瓷?
  • Github 2024-11-20C开源项目日报 Top9
  • 【Python项目】基于Python的医疗知识图谱问答系统
  • 低代码开发平台搭建思考与实战
  • ftdi_sio应用学习笔记 2 - 操作串口
  • Linux系统之lsblk命令的基本使用
  • 音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现
  • 芯原科技嵌入式面试题及参考答案
  • React的诞生与发展
  • AI 大模型:重塑软件开发的魔法力量
  • 【AIGC半月报】AIGC大模型启元:2024.11(下)
  • js utils 封装
  • 快速理解python中的yield关键字
  • Web应用安全入门:架构搭建、漏洞分析与HTTP数据包处理
  • 基于Spark3.4.4开发StructuredStreaming读取文件数据
  • 结合第三方模块requests,文件IO、正则表达式,通过函数封装爬虫应用采集数据
  • vue 获取项目本地文件并转base64
  • sei主网节点快速搭建方法
  • 【西瓜书】线性判别分析-LDA