问题标签 [openmesh]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
openmesh - OpenMesh 恢复删除的元素
根据文档,在网格元素上调用 delete ( delete_face()
, delete_vertex()
, delete_edge()
) 只会通过设置适当的状态标志在内部删除它们。只有当垃圾收集器被调用时,这些元素才会被永久删除。我的问题是,是否可以有针对性地恢复已删除但尚未被垃圾收集的项目?我想可以通过重置它们的状态属性来恢复所有标记为删除的项目,但是是否可以通过它们的句柄取消删除特定的面/顶点/边缘?
在我看来,仅仅重置要取消删除的项目的状态属性是不够的,因为由于项目的删除而设置为删除的所有连接元素也必须取消删除。
旁注:我使用术语取消删除而不是恢复,因为后者是指从文档中的文件恢复。
编辑:我也对一次有效地取消删除所有标记为删除的项目的方法感兴趣。智能标记器提供了一种 O(1) 的方法来取消标记所有元素。有没有办法以 O(1) 的效率取消删除所有元素?
computational-geometry - 在 OpenMesh 中哪里存储 VertexHandle 的 id?
我正在从 OpenMesh 结构构建索引和顶点缓冲区,我将把它们输入我的渲染引擎。在这里,我迭代我的元素(未显示)并为我的每个点创建 VertexHandles,然后添加面。
a 的顶点缓冲区Point
出现在下面,我将 vhandles 数据复制到此结构中,然后构建这些数组以提供给图形引擎。
当我构建vhandles
上面的向量时,我没有向 VertexHandle 添加索引/ID。
我需要在某个地方存储并使用 VertexHandle 本身访问该点的 id。我会在哪里存储它?我还没有在 VertexHandle 的源代码中找到用于此目的的字段,但似乎需要一些东西。
openmesh - 属于不同网格的元素之间的 OpenMesh copy_all_properties()
OpenMesh 中有没有办法在不同的网格实例之间复制元素属性?确实如此处copy_all_properties()
所述将所有元素属性从一个元素复制到另一个元素,但是,它绑定到一个网格实例,并且如果两个元素属于不同的网格对象,它似乎不会复制任何内容。
我尝试了以下方法:
输出:
所以该属性不会被复制。
openmesh - OpenMesh 几何矢量运算
OpenMesh 有它的VectorT 类,我相信它用于执行各种位置向量操作(加法/减法、内积和外积等)。有没有关于如何实际使用它的示例?我会特别感兴趣
- 如何定义和初始化 3D 坐标向量
- 如何正确地将(Point 类型的)顶点位置转换为 VectorT 类型,或者,如何立即将顶点位置作为 VectorT 类型。到目前为止,我正在使用
mesh.point(vhandle)
which,但是,它返回一个Point()
类型。
编辑:显然Point
是某种VectorT
本身,因为VectorT
成员函数也适用于Point
对象。
graphics - 计算有符号的二面角
OpenMesh 具有计算两个面之间的二面角的calc_dihedral_angle()
功能。是否有此功能的签名/定向等价物?面的半边是定向的,因此面的法线被很好地定义。因此,谈论凸性是有意义的。
考虑以下简单情况,只有两个连接的面。从零二面角(平面内相邻面)开始,可以沿任一方向围绕公共边旋转其中一个面。在一种情况下,表面将是凸面的,在另一种情况下,它将是凹面的。calc_dihedral_angle()
不区分两者。我正在寻找一个考虑这种方向性并根据凸度给出正或负二面角的函数。
computational-geometry - OpenVolumeMesh,如何从 VertexHandle 获取坐标?
我正在使用 OpenVolumeMesh,到目前为止还无法弄清楚如何从 VertexHandle 获取实际的 x、y、z 坐标。我有以下内容:
在 OpenMesh 中,我可以使用以下方法获得一点:
我将如何在 OpenVolumeMesh 中做同样的事情?
c++ - OpenMesh:快速搜索公共相邻顶点
我有一个函数可以找到两个顶点v1
和的共同邻居v2
,即那些连接到 v1
和的顶点v2
:
该函数简单地遍历 和 的邻域v1
并v2
检查是否找到出现在两个邻域中的任何顶点。不幸的是,这个函数似乎是我代码的瓶颈,因此我的问题是在 OpenMesh 中是否有更优化的方法来完成这个?
c++ - 在 OpenMesh 中按名称删除属性
在 OpenMesh 中,一旦将命名属性添加到元素中,它将是永久的,因为该属性在属性管理器的范围内仍然存在,如此处所述。我的问题是,如何按名称删除此类属性?
到目前为止,我尝试由物业经理删除,甚至这个失败:
有错误
是否有remove_property
我可以编写remove_property("face_props")
(或类似的)删除属性的函数?
编辑:以下给出了相同的错误:
我怀疑它mesh.remove_property()
需要一个属性句柄对象,但getProperty()
返回一个属性管理器。我不知道如何解决这个问题。
Edit2:我想另一个问题是:如何从物业经理那里获得物业的物业句柄?
Edit3:查看源代码,它似乎PropertyManager
有一个成员函数deleteProperty()
,但 a) 是私有的,b) 如果未设置,它只会删除属性retain
,我假设将为命名属性设置。
openmesh - 添加元素时是否更改了 OpenMesh 迭代器?
当我添加元素时,现有的 OpenMesh 迭代器会改变吗?
示例代码:
我在文档中没有找到有关此的内容。
示例似乎有效,但我想知道它是否是未定义的行为,或者 OpenMesh 是否承诺确保迭代器在循环期间不会改变。