VTK通过winId嵌入Qt

#pragma once
#define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2)

#include <QWidget>
#include <QTimer>
#include <QDebug>
#include <QPushButton>
#include <QResizeEvent>
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkPolyData.h"
#include "vtkOBJReader.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkPolyDataMapper.h"
#include "vtkRendererCollection.h"
#include "vtkInteractorStyleTerrain.h"

class vtkWidget :public QWidget
{
	Q_OBJECT
public:
	vtkWidget(QWidget* parent = nullptr);
	~vtkWidget();
	
	void resizeEvent(QResizeEvent* event) override;

	vtkRenderer* m_pRender = nullptr;
	vtkRenderWindow* m_pRenderWnd = nullptr;
};
#include "vtkWidget.h"

vtkWidget::vtkWidget(QWidget* parent) :QWidget(parent)
{
	m_pRender = vtkRenderer::New();
	m_pRenderWnd = vtkRenderWindow::New();
	m_pRenderWnd->AddRenderer(m_pRender);
	m_pRenderWnd->SetParentId((HWND)this->winId());
	
	auto m_pRenderWndInter = vtkRenderWindowInteractor::New();
	m_pRenderWndInter->SetRenderWindow(m_pRenderWnd);
	auto m_pInteractor = vtkInteractorStyleTerrain::New();
	m_pRenderWndInter->SetInteractorStyle(m_pInteractor);
	
	auto m_pObjReader = vtkOBJReader::New();
	m_pObjReader->SetFileName("D:/Extra_Pro/bunny.obj");
	m_pObjReader->Update();
	
	auto m_pMapper = vtkPolyDataMapper::New();
	m_pMapper->SetInputConnection(m_pObjReader->GetOutputPort());
	
	auto m_pActor = vtkActor::New();
	m_pActor->SetMapper(m_pMapper);
	m_pRender->AddActor(m_pActor);
	m_pRenderWnd->Render():
}

vtkWidget::~vtkWidget()
{
}

void vtkWidget::resizeEvent(QResizeEvent* event)
{
	QWidget::resizeEvent(event);
	m_pRenderWnd->SetSize(event->size().width(), event->size().height());
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值