CGAL:从网格中读取顶点和三角形

2024-04-30

我只是花了几个小时在 Visual Studio C++ 中使用 CGAL 来尝试了解网格的工作原理。我想要得到的是对顶点和三角形列表的访问(顶点以 double[3] 形式,三角形以 int[3] 形式)。这是我正在编写的脚本:

http://doc.cgal.org/latest/Surface_mesher/Surface_mesher_2mesh_a_3d_gray_image_8cpp-example.html http://doc.cgal.org/latest/Surface_mesher/Surface_mesher_2mesh_a_3d_gray_image_8cpp-example.html

重点是——功能CGAL::output_surface_facets_to_off (out, c2t3);以 .off 格式向我输出一个不错的文件(可通过 MeshLab 访问),但我不能仅通过操作来执行任何类似的操作c2t3 or tr多变的。我所期待的是这样的:

c2t3.vertices(从 0 到 N)和 c2t3.triangles(从 0 到 M),其值为三倍整数。我得到的是顶点列表、面列表、单元列表、边列表...除了在未排序的顶点列表中查找每个顶点编号之外,没有其他方法可以从面中获取顶点编号。

有人能解决我的问题并指出我做错了什么吗?另外,CGAL 的 API 非常...原始。使用源代码进行挖掘也非常困难——以至于我找不到output_surface函数体。


好的,我找到了答案Complex_2_in_triangulation_3_file_writer.h文件。显然 CGAL 库正在创建整个顶点图并在该图中寻找面顶点。代码部分:

using CGAL::Surface_mesher::number_of_facets_on_surface;

typedef typename C2t3::Triangulation Tr;
typedef typename Tr::Finite_facets_iterator Finite_facets_iterator;
typedef typename Tr::Finite_vertices_iterator Finite_vertices_iterator;
typedef typename Tr::Facet Facet;
typedef typename Tr::Edge Edge;
typedef typename Tr::Vertex_handle Vertex_handle;

std::map<Vertex_handle, int> V;
int inum = 0;
for(Finite_vertices_iterator vit = tr.finite_vertices_begin();
vit != tr.finite_vertices_end();
++vit)
{
    V[vit] = inum++;
}

for( Finite_facets_iterator fit = tr.finite_facets_begin();
fit != tr.finite_facets_end(); ++fit)
{
const typename Tr::Cell_handle cell = fit->first;
const int& index = fit->second;
    if (cell->is_facet_on_surface(index)==true)
    {
    const int index1 = V[cell->vertex(tr.vertex_triple_index(index, 0))];
    const int index2 = V[cell->vertex(tr.vertex_triple_index(index, 1))];
    const int index3 = V[cell->vertex(tr.vertex_triple_index(index, 2))];
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CGAL:从网格中读取顶点和三角形 的相关文章

  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • “必须声明标量变量”错误[重复]

    这个问题在这里已经有答案了 必须声明标量变量 Id SqlConnection con new SqlConnection connectionstring con Open SqlCommand cmd new SqlCommand cm
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资

随机推荐

  • 当我运行 C# 参数化查询时,它超时。具有硬编码参数的相同查询工作正常

    我想获取文本列包含字符串过滤器的所有 ID 当我运行此参数化查询时 它超时 SqlCommand cmd new SqlCommand SELECT ID FROM TableName WHERE Text LIKE filter conn
  • 下面的代码是如何工作的?

    众所周知 cout 在 VS2010 中是无缓冲的 参见 Stephan Lavavej 的帖子 here http connect microsoft com VisualStudio feedback details 642876 st
  • 是否可以将 RSA Archer 与多个 Active Directory 集成?

    是否可以将 RSA Archer 与多个 Active Directory 集成 一切皆有可能 只是你愿意付出多少努力 Option 1 推荐 RSA Archer v5 x 支持多种 LDAP 同步配置 因此 您可以拥有多个 AD 服务器
  • 使用 python 登录 Instagram 时出错

    我正在尝试使用 argparse 通过 python 脚本登录我的 Instagram 似乎已连接 但打印出 无法加载该页面 如果您的浏览器禁用了 cookie 或者您正在以私人模式浏览 请尝试启用 cookie 或关闭私人模式 然后重试您
  • 有没有办法让特定的 div 忽略它的父 div 的位置?

    我有一个 div 其位置因其包含的 div 的相对定位而偏离 虽然删除父级的相对定位可以解决问题 但我们宁愿不将其作为解决方案来实现 因为它可能会破坏其他内容 有没有办法强迫孩子忽略父母的定位 不幸的是 没有办法让一个元素通过 CSS 动态
  • 合并来自 ffmpeg 的两个视频

    我想使用 ffmpeg 将两个 mp4 视频组合成一个 mp4 视频 到目前为止我尝试过的是 ffmpeg i input1 mp4 i input2 mp4 output mp4 但是 每次我获取带有第一个输入的视频编解码器的视频而不是另
  • iPhone X - 设置主页指示器周围区域的颜色

    当我尝试将工作表与 iPhone X 的安全区域对齐时 我对 Xcode 还很陌生 它在工作表下方留下了一个透明区域 有没有办法设置该区域的填充而不扩展纸张或在安全区域之外对齐 这是我的小扩展 如果有人可以建议改进以不通过 幻数 标签访问添
  • 如何找到与一个变量中的最大值相对应的所有变量的最大值?

    我有一个包含许多变量的每日数据 xarray 我想提取最大q routed每年及最大当日其他变量的对应值q routed发生
  • 什么是 NullPointerException,如何修复它?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 什么是空指针异常 java lang NullPointerException 以及是什
  • 了解 C++0x lambda 捕获

    在最近的一份 C 0x 草案 n3225 pdf 中 我们可以找到 5 1 2 10 使用非限定名称查找的常用规则来查找捕获列表中的标识符 3 4 1 每个此类查找都应找到在本地 lambda 表达式的到达范围中声明的具有自动存储持续时间的
  • 如何查询 USB Root Hub 中未列出的 USB 设备

    查询适用于在以下位置找到的某些设备Win32 USBHub SELECT FROM Win32 USBHub WHERE DeviceID 0 这是代码上下文 Check if USB device is plugged in string
  • 如何在 Mongoose 中使用正则表达式查找项目[重复]

    这个问题在这里已经有答案了 在 Mongoose 文档中我没有找到等效的 regex https docs mongodb com manual reference operator query regex MongoDb 的 你能提供一个
  • 使用 KDE Kirigami 时未找到 QML 模块

    所以我决定在我的应用程序中使用 KDE Kirigami UI 框架 所以我按照说明进行操作here https api kde org frameworks kirigami html index html 我将存储库克隆到我的应用程序目
  • 另一个 MinGW“gcc:错误:CreateProcess:没有这样的文件或目录”

    我已经通过 GUI 安装程序在 Windows 8 64 位 中安装了 MinGW C 编译器 但是当我尝试编译 C 程序时 gcc 说 gcc CreateProcess 没有这样的文件或目录 这是一个常见的错误 我已经尝试了我找到的所有
  • 查找数组中的 K 个最小值(堆 vs QuickSelect)

    假设我们有一个数组 我们希望找到它的 K 个最小值 有两种方法 1 使用快速选择算法 O n 时间复杂度和O 1 空间 2 使用最小堆数据结构 O NlogK 时间复杂度和O K 空间 我想知道什么时候一个比另一个更受青睐 我想这两个都可以
  • 如何实现有效的 Java 特征?

    请告诉我这是否不合适 特别是 Programmers SE 或其他东西是否更适合这个问题 好吧 因此 我目前将许多 特征 表达为接口 我们称它们为 可更新 和 可破坏 将它们表达为接口的缺点是我无法在所有 可破坏 组件之间共享行为 另一方面
  • 用 C 将位写入文件

    我有这个字符串 101 我想用 C 语言将其写入文件 而不是文本 101 等 8 位 x 字符 但直接使用字符串作为位 位 1 位 0 和位 1 这样文件将是3位 有可能吗 我在网上搜索并尝试这样做 char c 25 101 FILE b
  • 在 Vue.js 中,如何防止子路由的导航?

    好的一点是beforeRouteLeave是你可以防止在某些情况下导航离开 我有一个使用子路由来渲染页面的一部分的设置 我希望在子路线上设置一个导航守卫 以防止在未保存数据的情况下切换到另一条路线 path customers view c
  • 如何在 JIRA Script Runner 中通过电子邮件获取用户

    编写 Groovy 脚本时JIRA 脚本运行器 https marketplace atlassian com plugins com onresolve jira groovy groovyrunner server overview 如
  • CGAL:从网格中读取顶点和三角形

    我只是花了几个小时在 Visual Studio C 中使用 CGAL 来尝试了解网格的工作原理 我想要得到的是对顶点和三角形列表的访问 顶点以 double 3 形式 三角形以 int 3 形式 这是我正在编写的脚本 http doc c