C#调用C++编写VTK控件显示点云

C#调用C++编写VTK控件显示点云


前言

最近在做三维点云相关的事情,中途需要设计一个基于C#的点云显示控件,由于自己的算法是用C++写的,在网上找了一圈之后决定用VTK做这个事情,因为PCL的点云显示底层用的也是VTK,但是在网上找了一圈之后发现基于C#的VTK没有源码,只有相关库,这个对后续出现Bug后的排查十分不优化,因此这个方法便被我排除了。后续在厕所沉思时突然来了灵感(哈哈哈,请大家忽略这个地点),用CLI的方式,在中间层用C++调用VTK编写一个可以供C#调用的类,然后再在C#端将其封装成一个控件即可。说时迟那时快,我便按着这个思路开始实践了。


一、VTK是什么?

VTK具体介绍请大家移步到这: 钢铁男儿查看

二、实现步骤

1.编译或下载VTK库(我个人推荐自己编译VTK库)

VTK源码地址:VTK
VTK利用源码编译库的方法:参考博主风烟倦

2.VS2017配置VTK

配置地址:参考博主知识海洋里的咸鱼

3.CLI调用VTK,编写点云显示类(重点)

以下是Display.cpp的具体:
Display.cpp

#include "pch.h"

#include "DIsplay3dData.h"

#include <iostream>
#include <vector>
#include <string>
#include <opencv2/core.hpp>

#include <vtkAutoInit.h>  
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)

#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkProperty.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkPLYReader.h>
#include <vtkAxesActor.h>
#include <vtkNamedColors.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkInteractorStyleTrackballCamera.h >
#include <vtkPointData.h>

void Release();
bool realTimeRefreshCloudPoint(vtkSmartPointer<vtkPoints> &points, vtkSmartPointer<vtkUnsignedCharArray> &rgb,
	int cloudPointSize, List<double>^ x, List<double>^ y, List<double>^ z, List<unsigned char>^ r, List<unsigned char>^ g, List<unsigned char>^ b);
void startInteractor(vtkSmartPointer<vtkRenderWindowInteractor> interactor);

vtkSmartPointer<vtkRenderer> m_Renderer;
vtkSmartPointer<vtkRenderWindow> m_RenderWindow;
vtkSmartPointer<vtkRenderWindowInteractor>m_RenderWindowInteractor;

vtkSmartPointer<vtkAxesActor> m_Axes;
vtkSmartPointer<vtkOrientationMarkerWidget> m_AxesWidget;
vtkSmartPointer<vtkPoints> m_Points;
vtkSmartPointer<vtkCellArray> m_Vertices;
vtkSmartPointer<vtkPolyData> m_PointCloud;
vtkSmartPointer<vtkPolyDataMapper> m_Mapper;
vtkSmartPointer<vtkActor> m_Actor;
vtkSmartPointer<vtkCamera> m_Camera;
vtkSmartPointer<vtkInteractorStyleTrackballCamera> m_Style;
vtkSmartPointer<vtkInteractorStyleTrackballCamera>m_Interator;
vtkSmartPointer<vtkUnsignedCharArray> m_RgbColors;

Display::Display()
{
   
	m_ImageNums = 0;
	m_CloudPointSize = 0;

	m_CylinderRadius = 0.08f;
	m_CylinderLength = 0.2f;

	m_IsFirstLoadRes = true;
	isStart = false;
	m_isDestroy = false;

	m_XColor = Color::Red;
	m_YColor = Color::Yellow;
	m_ZColor = Color::Blue;
}

Display::~Display()
{
   
	m_Renderer->RemoveAllViewProps();

	Release();

	m_RenderWindow->Render();

	if (m_Renderer != nullptr)
	{
   
		m_RenderWindow->RemoveRenderer(m_Renderer);
		m_Renderer = nullptr;
	
  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值