OpenMesh入门,安装,运行示例Hello World
安装
环境 win10,qt5
源码下载编译
进入OpenMesh官网OpenMesh官网 https://www.graphics.rwth-aachen.de/software/openmesh/download/

使用cmake gui

注意:先安装qt5
-
使用 CMake-Gui 构建 vs 2019 项目
- 注意 where is the source code 是<project 路径>,下边的路径是 <project 路径>/build
- 首次点击 configure 默认就是 vs2019 和 x64,这两者都是必要的
第一次configure 会报错,需要你填写QT5_DIR,如上图
然后再次点击configure
接着点击 generate
然后用vs2019打开项目,生成
Hello World
vs2019 新建一个工程
第一步会生成lib,我的在这里

需要的头文件在这里

配置工程属性



添加附加库目录OpenMeshCored.lib和 OpenMeshToolsd.lib
打开项目属性-V/c+±预处理器,添加附加宏_USE_MATH_DEFINES
代码
#include
// -------------------- OpenMesh
#include <Core/IO/MeshIO.hh>
#include <Core/Mesh/PolyMesh_ArrayKernelT.hh>
using namespace std;
typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
int main()
{
MyMesh mesh;
MyMesh::VertexHandle vhandle[8];
vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, -1, 1));
vhandle[1] = mesh.add_vertex(MyMesh::Point(1, -1, 1));
vhandle[2] = mesh.add_vertex(MyMesh::Point(1, 1, 1));
vhandle[3] = mesh.add_vertex(MyMesh::Point(-1, 1, 1));
vhandle[4] = mesh.add_vertex(MyMesh::Point(-1, -1, -1));
vhandle[5] = mesh.add_vertex(MyMesh::Point(1, -1, -1));
vhandle[6] = mesh.add_vertex(MyMesh::Point(1, 1, -1));
vhandle[7] = mesh.add_vertex(MyMesh::Point(-1, 1, -1));
// generate (quadrilateral) faces
std::vectorMyMesh::VertexHandle face_vhandles;
face_vhandles.clear();
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[3]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[7]);
face_vhandles.push_back(vhandle[6]);
face_vhandles.push_back(vhandle[5]);
face_vhandles.push_back(vhandle[4]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[4]);
face_vhandles.push_back(vhandle[5]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[5]);
face_vhandles.push_back(vhandle[6]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[6]);
face_vhandles.push_back(vhandle[7]);
mesh.add_face(face_vhandles);face_vhandles.clear();
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[7]);
face_vhandles.push_back(vhandle[4]);
mesh.add_face(face_vhandles);// write mesh to output.obj
try
{if (!OpenMesh::IO::write_mesh(mesh, "output.off")){std::cerr << "Cannot write mesh to file 'output.off'" << std::endl;return 1;}
}
catch (std::exception& x)
{std::cerr << x.what() << std::endl;return 1;
}return 0;
}
输出 "output.off 用meshlab打开

球的代码
#pragma once
// 生成球 n 最好输入偶数 10 或者 100
#include
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
#include
#define pi 3.1415926
using namespace std;
typedef OpenMesh::TriMesh_ArrayKernelT<> sphereMesh;
void sphereDemo()
{
sphereMesh mesh;
int n, count = 10000, k = -1;
cout << “n:”;
cin >> n;
sphereMesh::VertexHandle* vhandle = new sphereMesh::VertexHandle[count];
std::vectorsphereMesh::VertexHandleface_vhandles;
for (int j = 0; j < n; j++) {
double distance = cos(j * pi / n);// 原先是 sin
double r_circle = sin(j * pi / n);
for (int i = 0; i < n; i++) {
++k;
vhandle[k] = mesh.add_vertex(sphereMesh::Point(r_circle * cos(2 * i * pi / n), r_circle * sin(2 * i * pi / n), distance));
// 对网格添加顶点
}
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n; j++) {
int topRight = i * n + j;
int topLeft = i * n + (j + 1) % n;
int bottomRight = (i + 1) * n + j;
int bottomLeft = (i + 1) * n + (j + 1) % n;
face_vhandles.clear();
face_vhandles.push_back(vhandle[bottomRight]);
face_vhandles.push_back(vhandle[bottomLeft]);
face_vhandles.push_back(vhandle[topRight]);
mesh.add_face(face_vhandles);
face_vhandles.clear();face_vhandles.push_back(vhandle[bottomLeft]);face_vhandles.push_back(vhandle[topLeft]);face_vhandles.push_back(vhandle[topRight]);mesh.add_face(face_vhandles);}
}
//vhandle[k+1] = mesh.add_vertex(sphereMesh::Point(0, 0, 1));
vhandle[k + 1] = mesh.add_vertex(sphereMesh::Point(0, 0, -1));
for (int i = 0; i < n; i++) {//face_vhandles.clear();//////face_vhandles.push_back(vhandle[i]);//face_vhandles.push_back(vhandle[(i + 1) % n]);//face_vhandles.push_back(vhandle[k + 2]);//mesh.add_face(face_vhandles);face_vhandles.clear();face_vhandles.push_back(vhandle[k - i]);face_vhandles.push_back(vhandle[k - (i + 1) % n]);face_vhandles.push_back(vhandle[k + 1]);mesh.add_face(face_vhandles);
}
try
{if (!OpenMesh::IO::write_mesh(mesh, "sphereDemo .off")) {std::cerr << "Cannot write mesh to file ' output5 .off ' " << std::endl;return ;}
}
catch (std::exception& x) {std::cerr << x.what() << std::endl;return ;
}
}

参考
https://blog.csdn.net/qq_43331089/article/details/125087965#%E5%BF%83%E5%BE%97
meshlab使用教程: https://blog.csdn.net/qq_15262755/article/details/80352867
相关文章:
OpenMesh入门,安装,运行示例Hello World
安装 环境 win10,qt5 源码下载编译 进入OpenMesh官网OpenMesh官网 https://www.graphics.rwth-aachen.de/software/openmesh/download/ 使用cmake gui 注意:先安装qt5 使用 CMake-Gui 构建 vs 2019 项目 注意 where is the source code 是<project…...
std::env是什么库?|Python一对一教学答疑
你好,我是悦创。 std::env 是 Rust 标准库中的一个模块,提供了访问操作系统环境的功能,比如处理环境变量、程序参数等。这个模块包含了一系列的函数和类型,用于管理与程序执行环境相关的信息。以下是 std::env 模块提供的一些主要…...
Go语言--广播式并发聊天服务器
实现功能 每个客户端上线,服务端可以向其他客户端广播上线信息;发送的消息可以广播给其他在线的客户支持改名支持客户端主动退出支持通过who查找当前在线的用户超时退出 流程 变量 用户结构体 保存用户的管道,用户名以及网络地址信息 typ…...
Spring MVC 全注解开发
1. Spring MVC 全注解开发 文章目录 1. Spring MVC 全注解开发2. web.xml 文件 的替代2.1 Servlet3.0新特性2.2 编写 WebAppInitializer 3. Spring MVC的配置3.1 Spring MVC的配置:开启注解驱动3.2 Spring MVC的配置:视图解析器3.3 Spring MVC的配置&…...
MQTT——Mosquitto使用(Linux订阅者+Win发布者)
前提:WSL(Ubuntu22)作为订阅者,本机Win10作为发布者。 1、Linux安装Mosquitto 命令行安装。 sudo apt-get install mosquitto 以上默认只安装了mosquitto的服务,不带测试客户端工具mosquitto_sub和mosquitto_pub。如…...
ArcGIS识别不GDB文件地理数据库显示为空?
点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 我们经常会碰到拷贝的GDB文件ArcGIS无法识别,软件只是把他当做普通的文件夹去看待&am…...
uniapp微信小程序 TypeError: $refs[ref].push is not a function
我的写法 this.$refs.addPopup.open();报错 打印出来是这样的 解决 参考未整理 原因 在当前页面使用的v-for循环 并且循环体内也有组件使用了ref(而我没有把每个ref做区别命名) 这样就导致了我有很多同名的ref,然后就报错了 解决办法&a…...
Django任务管理
1、用django-admin命令创建一个Django项目 django-admin startproject task_manager 2、进入到项目下用命令创建一个应用 cd task_manager python manage.py startapp tasks 3、进入models.py定义数学模型 第2步得到的只是应用的必要空文件,要开始增加各文件实际…...
Hive 常见问题
Hive 内部表和外部表的区别 外部表在创建时需要加关键字 external;创建内部表时,会将数据移动到数据仓库指定的路径;创建外部表时,不会移动数据,只会记录数据所在的路径;删除内部表时,会删除元…...
51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动大屏_硬件SPI4_参考代码(v1.3)
单片机实际不限,这里采用的STC最新、主推的型号,比如STC8H8K64U、STC8051U34K64进行实验测试,您可以换用不同型号。目前测试这两个系列,显示速度均相当不错,软件设计也是极为简单。各篇文章下方均提供源码供参考下载。…...
实习随笔【前端技术实现全局添加水印】
有一些数据比较重要的项目,往往需要对数据进行保护措施,本文介绍常见策略——全局添加水印。 1、创建水印组件 <template><div class"water-mark"><div class"water-mark-content"><span class"phone&qu…...
【软件测试】编写测试用例篇
前面部分主要是编写测试用例的方法和方向,后面一部分是编写出具体的测试用例 目录 什么是测试用例 1.设计测试用例的万能公式 1.1.从思维出发 1.2.万能公式 1.3.弱网测试 1.4.安装与卸载测试 2.设计测试用例的方法 2.1.基于需求的设计方法 2.2.等价类 2.3…...
转型AI产品经理需要掌握的硬知识(二):AI常见概念和算法梳理
上一篇文章介绍AI产品经理能力模型,人工智能的发展历史,人工智能常见概念的结构梳理,也简要做了BAT人工智能的优势分析,感兴趣的朋友可以点击链接查看上文。转型AI产品经理需要掌握的硬知识一:AI产品能力框架和看待AI的…...
mysql-connector-java 8.0.33 反序列化漏洞
前言 经过与oracle官方沟通,在最新的mysql-connector-j 9.0.0里不存在这个问题,所以他们不认为这是个漏洞 不过确实,mysql-connector-java这个分支已经迁移到mysql-connector-j了,当时没注意,交的时候只注意了mysql-c…...
基于Faster R-CNN的安全帽目标检测
基于Faster R-CNN的安全帽目标检测项目通常旨在解决工作场所,特别是建筑工地的安全监管问题。这类项目使用计算机视觉技术,特别是深度学习中的Faster R-CNN算法,来自动检测工人是否正确佩戴了安全帽,从而确保遵守安全规定并减少事…...
linux中vim切换输入中文
linux中vim切换输入中文 遇到问题 在虚拟机linux下vim 编辑器中注释的时候无法使用中文 解决方案 Linux系统中的vim编辑器中安装中文输入法软件包 1.在终端中输入以下命令 sudo apt-get install fcitx fcitx-bin fcitx-table-wubi fcitx-table-wbpy2. 安装完成后…...
嵌入式C++、Qt/QML和MQTT:智能工厂设备监控系统的全流程介绍(附代码示例)
1. 项目概述 本项目旨在开发一套先进的智能工厂设备监控系统,集成嵌入式技术、工业通信协议和人机界面等多项技术,实现对工厂设备的全方位实时监控、高精度数据采集和智能化分析。该系统将显著提升工厂设备的运行效率,大幅降低维护成本&…...
监控易V7.6.6.15升级详解8:机房动环管理功能
随着企业IT基础设施的不断发展,机房动环管理成为保障系统稳定运行的关键环节。为了满足广大用户对于机房动环管理的高效、精准需求,监控易系统近期完成了一次重要版本升级。本次升级不仅优化了原有功能,还新增了一系列实用特性,旨…...
C++ | Leetcode C++题解之第232题用栈实现队列
题目: 题解: class MyQueue { private:stack<int> inStack, outStack;void in2out() {while (!inStack.empty()) {outStack.push(inStack.top());inStack.pop();}}public:MyQueue() {}void push(int x) {inStack.push(x);}int pop() {if (outStac…...
Git-Updates were rejected 解决
Git-Updates were rejected 解决 文章目录 1. 杂话2. 问题3. 解决3.1 拉取远程的最新版本(AC)3.2 解决可能的冲突3.3 提交3.4 再次推送 1. 杂话 大伙儿应该都用过Git吧,具体是个啥东西我就不说了哈。之前我在用git push的时候遇到了这个报错&…...
三自由度机械臂DH参数建模常见误区盘点:你的Xi-1轴方向真的设对了吗?
三自由度机械臂DH参数建模常见误区盘点:你的Xi-1轴方向真的设对了吗? 在机械臂运动学建模领域,DH(Denavit-Hartenberg)参数法堪称经典,但看似简洁的四个参数背后藏着无数"坑"。尤其当面对三自由度…...
后端架构:事件驱动架构设计与实现
后端架构:事件驱动架构设计与实现 大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊事件驱动架构这个重要话题。作为一个全栈开发者,事件驱动架构已经成为现代后端系统的重要设计模式。今天就来分享一下事件驱动架构的设…...
代码质量与代码审查
代码质量与代码审查 1. 技术分析 1.1 代码质量概述 代码质量是软件维护的关键: 代码质量维度可读性: 易于理解可维护性: 易于修改可测试性: 易于测试性能: 运行效率质量指标:圈复杂度代码覆盖率代码重复率1.2 代码审查流程 审查流程提交代码: PR/MR自动检查: CI/CD人…...
企业AI项目紧急叫停!DeepSeek许可证新增限制条款(2024.06.18生效)及72小时补救路径
更多请点击: https://kaifayun.com 第一章:DeepSeek许可证紧急变更事件全景速览 2024年7月12日,DeepSeek官方突然宣布对其开源模型系列(包括DeepSeek-V2、DeepSeek-Coder、DeepSeek-MoE等)的许可证进行紧急修订&#…...
【产品发布】建享云智能单据扫描仪正式上线,一站式解决单据数字化处理难题
建享云正式推出全新智能单据扫描仪,聚焦各行业单据数字化处理的核心痛点,无需复杂部署流程、无需专业技术支撑,轻松适配个人办公与企业级各类场景。本文将简洁明了地介绍产品核心功能、操作方法及适配范围,帮助用户快速了解产品价…...
Vue3组件传参大全,各种传参方式的对比
在 Vue3 的日常开发中,组件间的数据传递与通信是最基本的操作。面对不同的组件关系(父子、祖孙、兄弟、任意组件)和不同的交互需求(单向、双向、共享状态、跨层级透传),Vue3 提供了丰富而灵活的传参方案。本…...
面试必问:RAG准确率提升实战:从60%到85%的全链路优化
✅ 面试官您好,关于如何将 RAG 系统的准确率从 60% 提升到 85%,我认为这不是一个简单的调参问题,而是一场贯穿数据、检索、生成、评估全链路的系统性工程。我通常会按照“诊断 → 优化 → 验证”三步走策略来推进,具体如下&#x…...
三分钟永久备份你的QQ空间:告别数据丢失的终极解决方案
三分钟永久备份你的QQ空间:告别数据丢失的终极解决方案 【免费下载链接】QZoneExport QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存 项目地址: https:…...
如何用My-TODOs打造高效跨平台待办清单:免费开源桌面应用终极指南
如何用My-TODOs打造高效跨平台待办清单:免费开源桌面应用终极指南 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 在现代快节奏的工作生活中,高效…...
嵌入式开发为何首选C语言?深入解析其核心优势与实战应用
1. 项目概述:嵌入式世界的“通用语”如果你刚踏入嵌入式开发的大门,或者正从其他编程领域转过来,可能会有一个疑问:为什么满世界都在用C语言?从你手上那块小小的单片机,到家里的智能路由器,再到…...
