首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谁能解释一下vertices.flatten!在SketchUp里对我来说?

谁能解释一下vertices.flatten!在SketchUp里对我来说?
EN

Stack Overflow用户
提问于 2022-03-14 10:02:31
回答 1查看 101关注 0票数 2

下面是一段代码(对Rivera的信用),它在SketchUp中绘制模型顶点的点。

代码语言:javascript
运行
复制
def pointplot
    model = Sketchup.active_model
    entities = model.active_entities
    selection = model.selection
    edges = selection.grep(Sketchup::Edge)

    if edges.empty?
      msg = 'Select one or more edges before using this tool.'
      UI.messagebox(msg)
      return
    end

    vertices = []
    edges.each { |edge| vertices << edge.vertices }
    vertices.flatten!
    vertices.uniq!
    vertices.each { |vertex| entities.add_cpoint vertex.position }
end

def check_line
    sel = Sketchup.active_model.selection
    ok = sel.find { |e| e.typename == "Edge" }
    ok ? MF_ENABLED : MF_GRAYED
end

UI.add_context_menu_handler do |menu|

menu.add_separator
item = menu.add_item("Point Plot") { pointplot }

menu.set_validation_proc(item) {check_line}
end

请有人向我解释一下这一行代码,它实际上做了什么,以及为什么代码需要工作。

vertices.flatten!

我知道什么是".flatten!“在正常情况下。我从rubyapi.org很好地理解了这个例子

代码语言:javascript
运行
复制
a = [ 0, [ 1, [2, 3], 4 ], 5 ]
a.flatten!(1) # => [0, 1, [2, 3], 4, 5]
a = [ 0, [ 1, [2, 3], 4 ], 5 ]
a.flatten!(2) # => [0, 1, 2, 3, 4, 5]
a = [ 0, [ 1, [2, 3], 4 ], 5 ]
a.flatten!(3) # => [0, 1, 2, 3, 4, 5]
[0, 1, 2].flatten!(1) # => nil

但是在SketchUp的世界里,什么是".flatten!“真的有吗?

我将顶点数组“放入”到我的控制台,并将其视为输出。

代码语言:javascript
运行
复制
#<Sketchup::Vertex:0x00000180a0788440>
#<Sketchup::Vertex:0x00000180a0788418>
#<Sketchup::Vertex:0x00000180a07883c8>
#<Sketchup::Vertex:0x00000180a07883a0>
#<Sketchup::Vertex:0x00000180a0788440>
#<Sketchup::Vertex:0x00000180a0788418>
#<Sketchup::Vertex:0x00000180a07883c8>

那么,我到底是在说什么呢?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-14 10:31:45

它所做的与您在flatten中已经观察到的行为完全相同,唯一的区别是它更改了调用对象,而不是返回更改过的对象。

让我们来看看这三行:

代码语言:javascript
运行
复制
vertices = []
edges.each { |edge| vertices << edge.vertices }
vertices.flatten!

首先,创建了一个空数组。然后,通过对所有边进行迭代,将边的顶点(很可能存储在数组中)添加到数组中。这意味着在这一行之后有一个嵌套的顶点数组,如下所示(伪代码):

代码语言:javascript
运行
复制
[[vertice_1, vertice_2], [vertice_3, vertice_4], [vertice_1, vertice_4]]

然后,vertices.flatten!会将vertices压缩为:

代码语言:javascript
运行
复制
[vertice_1, vertice_2, vertice_3, vertice_4, vertice_1, vertice_4]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71465913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档