【问题标题】:Selecting edge loops选择循环边
【发布时间】:2011-08-26 16:44:59
【问题描述】:

我正在尝试编写一个在网格中进行循环选择的方法。我遵循 Maya 帮助文件中提到的定义作为指导。

http://download.autodesk.com/global/docs/maya2012/en_us/index.html?url=files/Polygon_selection_and_creation_Edge_ring_and_edge_loop_selection_tips.htm,topicNumber=d28e121580

在 Maya 中,边缘循环具有以下属性:

  • 连接边的顶点的化合价必须等于四。效价是指连接到特定顶点的边数。
  • 连接序列的标准是序列中的下一条边是共享顶点的第(i+2)条边,从当前边(i)开始依次确定。李>
  • 边序列(环)可以在多边形网格上形成开放或封闭路径。
  • 开始边和结束边的化合价不必等于四。

我的问题是我现在不知道如何计算边缘的顺序。我一直在寻找没有运气的提示。甚至查看了 Blender 的源代码以尝试弄清楚他们是如何做到的,但这也让我很吃惊。

【问题讨论】:

  • 您使用什么数据结构?这可能有助于构建答案。
  • 我正在使用它的 Ruby API 为 Google SketchUp 编写一个插件。对于每个顶点,我可以获得连接到该顶点的边数组。如果这很重要,我还可以获得一张人脸列表。
  • 我不知道他们使用什么数据结构,但我认为它类似于winged-edge or half-edge setup,它更容易让您执行此类操作。你在用类似的东西吗?
  • hm...我不熟悉这些术语。 Edge 类的 API 文档在这里:code.google.com/apis/sketchup/docs/ourdoc/edge.html

标签: ruby 3d geometry


【解决方案1】:

我从来没有弄清楚如何以 Maya 的方式选择 Edge Loops。在确定边缘的顺序时被踩住了。但进一步挖掘 Blender 源代码,我发现他们使用的方法我能够实现。

# Blender 2.58a
# editmesh_mods.c
# Line 1854
#
# selects or deselects edges that:
# - if edges has 2 faces:
#   - has vertices with valence of 4
#   - not shares face with previous edge
# - if edge has 1 face:
#   - has vertices with valence 4
#   - not shares face with previous edge
#   - but also only 1 face
# - if edge no face:
#   - has vertices with valence 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 2018-12-01
    • 2015-07-03
    • 2023-03-28
    • 2014-10-17
    • 2018-06-25
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多