vtk qt切割stl模型

12 篇文章 1 订阅
文章描述了如何通过QFileDialog选择并加载STL模型,使用VTK进行切割和渲染。遇到复杂模型加载性能问题时,作者采用多线程优化,实现了模型的动态切割。
摘要由CSDN通过智能技术生成

一直想实现对stl模型的某个方向进行平面切割
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过滑动slider然后对模型进行某一个方向的面切割。同时可以用鼠标对模型进行移动缩放,旋转等操作。然后可以加一些颜色点云显示等操作。
stl加载:

	QString selectFilePath = QFileDialog::getOpenFileName(this, QString("choose STL file"), QString(""), QString("file(*.stl)"));
	if (selectFilePath.isEmpty())
	{
		ui.textBrowser->append("The address of the STL file you choose is null!");
		return;
	}

	// 原始图像
	reader = vtkSmartPointer<vtkSTLReader>::New();
	reader->SetFileName(selectFilePath.toStdString().c_str());
	reader->Update();

	//将source转换成mapper
	mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputConnection(reader->GetOutputPort());

	//送入渲染引擎进行显示
	actor = vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);

	//渲染
	renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(actor);
	renderer->SetBackground(.0, .0, .0);

	//设置渲染窗口
	vtkSmartPointer<vtkRenderWindow> window = vtkSmartPointer<vtkRenderWindow>::New();
	ui.qvtkWidget->SetRenderWindow(window);
	ui.qvtkWidget->GetRenderWindow()->AddRenderer(renderer);

	//ok
	ui.textBrowser->append(QString("upload the file:") + selectFilePath + QString(" succeed !"));

发现加载一些简单的模型,然后移动slider切割很丝滑,但是加载复杂一点就很卡,我这里用多线程解决了,切割模型放在一个线程里,然后显示在另一个线程里
先看效果,我动态的从上往下切割:

在这里插入图片描述

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VTK BoxWidget 是 VTK(Visualization Toolkit 可视化工具包)中的一个工具类,用于在三维空间中创建一个可调整大小的框形边界框。框形边界框可以用来对物体进行选择、平移、旋转、缩放等操作。 要实现 vtk BoxWidget 的切割功能,可以按照以下步骤进行操作: 1. 创建一个 vtk BoxWidget 对象,并将它添加到渲染窗口中。可以设置初始的框边界大小和位置。 2. 为框形边界框的每个面定义一个 vtk BoxSliceCallback 对象。这个回调函数可以在用户调整框边界大小、位置的时候被触发。 3. 将这些回调函数注册到 vtk BoxWidget 对象中的相应面上。可以通过调用 vtk BoxWidget 的 SetHandle0()、SetHandle1() 等函数来指定每个面的回调函数。 4. 在回调函数中,根据用户调整的框边界大小和位置计算切割平面的位置和法向量。可以使用 vtk Box 的 GetFacePlane() 函数来计算。 5. 将切割平面添加到渲染场景中,并通过 renderer->AddActor() 函数将需要切割模型添加到渲染场景中。 6. 最后,通过调用 renderWindow->Render() 函数来刷新渲染场景,并实时显示切割后的结果。 使用 vtk BoxWidget 进行切割操作可以实现对三维模型的选择和操作,例如将对象分割成多个部分,或者只显示部分内容。切割的平面可以根据用户的需求进行调整,实现更加复杂的切割效果。 希望以上的回答能够对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值