VS+QT+VTK三维曲面网格点选切割

news2024/10/6 10:40:50

程序示例精选

VS+QT+VTK三维曲面网格点选切割

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对<<VS+QT+VTK三维曲面网格点选切割>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。

功能:读取三维网格数据,通过单击网格表面点选需要切除的部分


文章目录

一、所需工具软件

二、使用步骤

        1. 引入库

        2. 代码实现

        3. 运行结果

三、在线协助

一、所需工具软件

1. VS, Qt

2. VTK

二、使用步骤

1.引入库

#include <iostream>
#include <fstream>
#include <vtkSelectPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkDataSetMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRendererCollection.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkIdTypeArray.h>
#include <vtkPolyData.h>
#include <vtkCellArray.h>
#include <vtkSphereSource.h>
#include <vtkCellPicker.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkProperty.h>
#include <vtkSelectionNode.h>
#include <vtkSelection.h>
#include <vtkExtractSelection.h>
#include <vtkObjectFactory.h>
#include <vtkPointData.h>
#include <iostream>
#include <vector>

2. 代码实现

代码如下:

class CellPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
	static CellPickerInteractorStyle* New();

	CellPickerInteractorStyle()
	{
		selectedMapper = vtkSmartPointer<vtkDataSetMapper>::New();
		selectedActor = vtkSmartPointer<vtkActor>::New();
		polyData = vtkPolyData::New();

		//xvec.resize(5);
		//yvec.resize(5);
		//zvec.resize(5);
		last_picked_actor = NULL;
	}

	virtual void OnLeftButtonDown()
	{
		//打印鼠标左键像素位置
		if (this->Interactor->GetControlKey())
		{
			std::cout << "Picking pixel: " << this->Interactor->GetEventPosition()[0]
				<< " " << this->Interactor->GetEventPosition()[1] << std::endl;
			//注册拾取点函数
			this->Interactor->GetPicker()->Pick(
				this->Interactor->GetEventPosition()[0],
				this->Interactor->GetEventPosition()[1], 0,  // always zero.
				this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()
			);
			//打印拾取点空间位置
			this->Interactor->GetPicker()->GetPickPosition(picked);
			cout << "Picked value: " << picked[0] << " " << picked[1] << " " << picked[2] << endl;

			//获取此次的标记点。
			this->last_picked_actor = GetActor();
			markPoint.push_back(last_picked_actor);
			if (this->last_picked_actor)
			{
				//标记出来
				this->last_picked_actor->SetScale(0.02);
				this->last_picked_actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
				this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(this->last_picked_actor);
			}

		}
		vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
	}


};

int main(int, char* [])
{

	// Read a stl file.
	reader1->SetFileName("bunny.stl");
	reader1->Update();
	TheStlPoly->DeepCopy(reader1->GetOutput());

	// Create a mapper and actor
	vtkSmartPointer<vtkPolyDataMapper> mapper =
		vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputData(TheStlPoly);

	actor->SetMapper(mapper);
	actor->GetProperty()->SetOpacity(1);

	// Create a renderer, render window, and interactor
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();

	renderWindow->Render();
	renderWindow->SetWindowName("PointPicker");
	renderWindow->AddRenderer(renderer);
	vtkNew<vtkNamedColors> colors;
	renderer->SetBackground(colors->GetColor3d("CadetBlue").GetData());
	vtkSmartPointer<CellPickerInteractorStyle> pointPicker = vtkSmartPointer<CellPickerInteractorStyle>::New();
	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderWindowInteractor->SetInteractorStyle(pointPicker);
	renderWindowInteractor->SetRenderWindow(renderWindow);


	// Add the actor to the scene
	renderer->AddActor(actor);
	//renderer->SetBackground(0, 0, 0);

	// Render and interact
	renderWindow->Render();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

3. 运行结果

 

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作

当前文章连接:Python+Qt桌面端与网页端人工客服沟通工具_alicema1111的博客-CSDN博客

博主推荐文章:python人脸识别统计人数qt窗体-CSDN博客

博主推荐文章:Python Yolov5火焰烟雾识别源码分享-CSDN博客

                         Python OpenCV识别行人入口进出人数统计_python识别人数-CSDN博客

个人博客主页:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

博主所有文章点这里alicema1111的博客_CSDN博客-Python,C++,网页领域博主

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAMA学习笔记1:概念模型-逻辑模型篇

A实体的某个字段指向 B实体的主键, 则称A实体的那个字段为该实体的外键, 一个表里可以有多个外键&#xff0c;也可以没有外键&#xff1b; 被指向的实体称为主实体(主表)&#xff0c;也叫父实体(父表)&#xff0c;负责指向的实体称为从实体(从表)&#xff0c;也叫子实体(子表)…

记录好项目D18

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个网上商城 一、系统介绍 前台商城系统&#xff1a;包含首页登录、商…

动态规划——下降路径最小和

题目链接 leetcode在线oj题——下降路径最小和 题目描述 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前…

mmpose冻结参数训练,如何添加find_unused_parameters参数

mmpose冻结参数训练&#xff0c;如何添加find_unused_parameters参数 在backbone下方添加 frozen_stages7即可冻结前7层的参数。要注意对于多卡训练来说还需要添加 find_unused_parameters True。看图片中代码的位置。

回忆雅礼朱哥二三事

少年时代的记忆是最模糊的&#xff0c;却也是最深刻的。一些瞬间在大脑里几十年&#xff0c;那一定是你曾经心动和在乎过的感受。年少求学期间&#xff0c;因对数学的痴迷&#xff0c;和数学有关的一切我都记忆犹新&#xff1a;记得一个人趴在地上解题一下午的投入&#xff0c;…

分析各种富文本框的自动填写方法

怎样自动填写表单中的富文本框&#xff1f; 什么是富文本框&#xff1f;富文本框就是在网页上可以输入带格式的文本输入框。在富文本框中&#xff0c;可以设置使用不同的字体、颜色&#xff0c;可以控制段落、边距&#xff0c;还可以插入图片、表情等。是实现在线编辑不可或缺…

c++ word简单的写文本与画表格只支持docx

简单使用的代码如下所示&#xff1a; #include "stdafx.h" #include <windows.h> #include "minidocx.hpp" using namespace docx; using namespace std; std::string GB2312ToUTF8(const std::string& gb2312) { int len MultiByteToWid…

【ESP32C3合宙ESP32C3】:ESP32C3和合宙ESP32C3的环境搭建与离线包安装

项目场景&#xff1a; 最近买了一块合宙ESP32C3的开发板&#xff0c;于是想要开发一下&#xff0c;当然开发最开始少不掉开发环境的搭建&#xff0c;在这个搭建的过程中&#xff0c;遇到了一些问题&#xff0c;解决了&#xff0c;也希望能帮助到大家。 ESP32C3 和 合宙ES…

Spring Boot 中的 Elasticsearch 的数据操作配置

Spring Boot 中的 Elasticsearch 的数据操作配置 Elasticsearch是一个基于Lucene的搜索引擎&#xff0c;可以快速地存储、搜索和分析大量的数据。Spring Boot是一个开发框架&#xff0c;提供了快速构建基于Spring的应用程序的工具和技术。在本文中&#xff0c;我们将讨论如何在…

GBASE南大通用时代亿信共筑商业秘密防护联合解决方案

当前&#xff0c;数字经济因其覆盖面广且渗透力强&#xff0c;与各行业深度融合&#xff0c;正在逐渐引领新经济发展。另一方面&#xff0c;数据安全已上升为国家战略&#xff0c;中央相继出台政策文件&#xff0c;加强数据安全、商业秘密、个人隐私保护&#xff0c;提高网络安…

聚观早报 | 美团收购光年之外;世卫:可乐中甜味剂或致癌

今日要闻&#xff1a;美团以20.65亿人民币收购光年之外&#xff1b;世卫&#xff1a;可乐中甜味剂或致癌&#xff1b;AI公司融13亿美元&#xff0c;仅次于OpenAI&#xff1b;微信支付就校园支付费率过高致歉&#xff1b;B站回应成立交易生态中心 美团以20.65亿人民币收购光年之…

C# Excel 表列序号

171 Excel 表列序号 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: columnTitle “A” 输出: 1 示例 2: …

11-Vue的diff算法

参考回答&#xff1a;​​​​​​​ 当组件创建和更新时&#xff0c;vue均会执行内部的update函数&#xff0c;该函数使用render函数生成的虚拟dom树&#xff0c;将新旧两树进行对比&#xff0c;找到差异点&#xff0c;最终更新到真实dom对比差异的过程叫diff&#xff0c;vue在…

《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

chatgpt赋能python:如何升级Python包

如何升级Python包 如果你是一名有着10年Python编程经验的工程师&#xff0c;那么你一定知道如何安装和使用Python包。但是&#xff0c;有时候你需要升级一些已经安装的包&#xff0c;以获得更好的性能和新功能。在本文中&#xff0c;我们将讨论如何升级Python包。 什么是Pyth…

GDI MFC抠图贴图

文章目录 抠图贴图添加消息命中 抠图 请添加图片描述 BOOL CPokemonDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 设置此对话框的图标。 当应用程序主窗口不是对话框时&#xff0c;框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon,…

Spring Boot 中的 RabbitMQ 是什么,如何使用

Spring Boot 中的 RabbitMQ 是什么&#xff0c;如何使用 简介 RabbitMQ 是一个开源的消息队列系统&#xff0c;它通过 AMQP&#xff08;高级消息队列协议&#xff09;来实现消息的传递。Spring Boot 是目前非常流行的 Java 开发框架&#xff0c;它提供了很多便利性的功能&…

VS Code C++迎来套件更新,注释定义方便快捷

近日微软对VS Code C进行套件的更新&#xff0c;新加入名为“Call Hierarchy”的功能&#xff0c;而这个**ERP**功能可以让用户更加直观地理解代码函数之间的引用关系&#xff0c;同时该版本还让开发者更容易复制注释与定义&#xff0c;提升此类内容编写时的自由度。 据悉&am…

蓝牙音频数据歌词提取器设计方法

v hezkz17进数字音频系统研究开发交流答疑 解决方法&#xff1a; 通过蓝牙接收来自手机音乐播放器的数据&#xff0c;能得到哪些歌曲信息? 如何获取歌曲名&#xff1f;歌词信息&#xff1f; 2023/6/27 10:21:42 通过蓝牙接收手机音乐播放器的数据&#xff0c;可以获取以下歌曲…

VMware 虚拟机下ubuntu命令行(parted)扩容方法,包括一些坑

前言 搜素了半天关于ubuntu扩容的方法&#xff0c;基本都是用gparted&#xff0c;可是本人的虚拟机抽风无法使用这个工具&#xff0c;提示tmp.mount不存在&#xff0c;同时Can’t connect to “”&#xff0c;找了半天并没有找到好的解决方案&#xff0c;先占坑。使用命令行扩…