Grasshopper 中的物件属性

  • 您是否曾因无法使用自定义属性烘焙几何体而感到沮丧?
  • 关于显示材质呢? 您是否曾经想过能够在 Grasshopper 显示管道中使用原生 Rhino 材质?
  • 您有没有尝试过将文件导入到 Grasshopper 中呢? 当您尝试导入 CAD 文件时,却发现丢失了所有包含在几何图形中的基本元数据时,您是否感到沮丧?

最新版本的 Rhino 8 现在具有新的数据类型和组件,可扩展您的工作方式。

Grasshopper 1 拥有常见的数据类型 - 有些经常使用 (点、曲线、breps、布尔、数字和文本等),而有些不经常使用 (日期/时间、矩阵等)。

然而,在 Rhino 中有许多不同类型的数据以前在 Grasshopper 中是无法访问的。Rhino 图层、线型、剖面线、材质、字体、注解样式等已经作为原生数据类型包含在 Rhino 8 的 Grasshopper 1 中。而且,更多的数据类型即将推出!

GH1 Object Attributes Toolbar

属性是什么?

所有这些新组件都让可以让您获取和/或设置给定数据类型的属性。那么,“属性”究竟是什么呢?属性就是构成该类型或物件的属性或项目。

让我们以 Rhino 图层为例进行说明。一个图层可以由以下属性进行定义:

  • 名称
  • 处于活动状态 (当前的)
  • 可见/隐藏
  • 锁定/解锁
  • 显示颜色
  • 材质
  • 线型
  • 打印颜色
  • 打印线宽
  • 截平面
  • 剖面样式

我们可以在 Rhino 图层对话框中查看和/或编辑这些属性。现在,您也可以在 Grasshopper 1 中做同样的事情!

Layer Attributes

开始

Rhino 8 的 Grasshopper 1 中新增了一个 Rhino 的新工具栏,它分为几个子类别(图层、线型、材质等)。每个子类别通常有两种不同类型的组件。

  • Query Component Query 组件 - 允许您查询活动的 Rhino 文档以获取各种数据类型。这个特定的组件允许您将所有的 Rhino 图层带入到 Grasshopper 文档中,您可以查询文档以获得线型、剖面线、注解样式等。Query 组件通常以放大镜表示。

  • Datatype Component Datatype 组件 - 这些组件允许您构建和/或拆解具有各种属性值的数据类型。这个特定的组件允许您指定新的 Rhino 图层的属性(图层名称、显示颜色、可见性设置等),或者在 Rhino 模型中已定义的图层上查看这些属性值。

Constructor/Deconstructor vs. Pass-through 组件

Grasshopper 1 有许多数据类型(点、向量、平面等),它们使用的是构造/解构模式。这意味着每种数据类型都有两种不同的组件 - 一个用于处理创建数据类型(构造器), 例如一个包含三个数值输入参数的点,另一个用于返回组成该数据类型的值(解构器)。

我们首先考虑了使用上述这种模式来处理 Rhino 工具栏中发现的新数据类型,但最终我们选择了一种称之为“pass-through”的模式。Pass-through 组件将构建和解构属性的功能合并到了一个组件中。

Point Passthrough

下面让我们看看它如何运作。Pass-through 组件各有四个输入和输出端(构造/解构模式各有三个)。主数据类型 (Point3d) 是输入和输出端的第一个参数。

Point Passthrough

如果我们想使用 pass-through 组件创建一个新的点,只需将代表点的坐标的三个数值输入到三个坐标输入端中,然后一个新的点将从点输出端进行输出。同样的,如果我们想将现有的点分解为坐标值,那么只需要将点从点输入端连接,相应的各坐标值就会从各自的输出端输出。

这就是 pass-through 组件的基本设置。现在让我们看一个具体的例子。假设我们想创建一个新的 Rhino 图层并为其分配一些属性。我们只需将一些值传递到输入参数中,图层输出端(主要数据类型始终是第一个输入/输出参数)返回 Rhino 图层及其所有设置。

请注意,我使用了 Query Linetypes 组件来获取 Rhino 模型中存在的一种线型。如果将过滤器留空 (或使用 “*” 通配符),它将返回所有可用的线型。在下面的例子中,我使用过滤器过滤“虚线”,所以它只返回与此名称匹配的线型。

Constructor

同样的,当我们想要引入一个已存在的 Rhino 图层并检查其属性,我们也可以使用 pass-through 组件。这次我们想要将一个已存在的 Rhino 图层传递到图层输入中。请记住,主要数据类型始终是组件两侧的第一个参数。

首先,我们使用 Query Layers 组件来获取现有的图层(只有一个名为“默认”的图层),将其传递到图层输入端。然后通过相应的输出参数传递图层的属性。

Deconstruct

现在假设我们将现有的图层作为模板,但是需要复制并更改一些属性。这时用 pass-through 组件将变得十分有用。如果使用构造器/解构器模式,我们将不得不手动连接构造器组件的每个输出到解构器组件的相应输入端。

Copy / Modify

这对于具有多个属性的数据类型来说,相当繁琐。因此,我们需要使用一个 pass-through 组件来进行这个操作。

与之前操作一样,我们将现有 Rhino 图层传递到图层输入端,这样它所有属性将传递到相应的输出端。然而,如果另一个值连接到其他输入之一,那么该值将替代从现有 Rhino 图层传入的属性。

这里我们将文本“MyLayer”连接到 Full Path 输入端,则它会覆盖现有 Rhino 图层中的图层名称。而其它值将保持不变。

这种仅使用一个单向组件可以使操作更简单,也节省了空间,避免了必须将所有输出参数连接到它们对应的输入端的繁琐操作。

Copy / Modify

构建属性

上面的示例中,我们展示了如何使用模型图层 pass-through 组件构建 Rhino 图层。然而,创建的图层在烘焙之前还不是 Rhino 文档的图层。我们仍在开发自定义烘焙组件,但目前您可以右键单击模型图层组件并选择烘焙。在弹出的对话框中单击确定,然后您创建的图层将被添加到 Rhino 中。

Construct Layer Panel

现在,假设我们想要向 Rhino 文档添加一些几何图形,但要确保它们被分配到我们刚刚创建的图层中。我们可以简单地使用 Model Object 组件来为几何物件分配各种属性。

Construct Layer Panel 2

Construct Layer Panel 3

这里,我们创建了一个球体并将其命名为“MySphere”。我们还将刚刚创建的图层分配给了物件属性。现在,如果我们右键单击模型物件组件并选择烘焙,则球体将以这些属性添加到 Rhino 文档中。

选择已经添加到 Rhino 文档中的球体,然后查看其物件属性。检查球体是否有正确的名称和图层分配。

您可以为几何物件分配任意数量的属性。这只是一个非常简单的例子,您还可以试试其它的组件,看看还有哪些好用的设置。

解构属性

正如您所想,我们也可以将数据类型分解为其组成的属性。Query 组件是一个很有用的组件,它可以将各种 Rhino 数据类型(几何、图层、线型等)引入到您的 Grasshopper 定义中。而且每个都相对简单。

我们可以在参数选项卡和输入子类别下找到新的 Import Model 组件。有了这个新组件,我们可以导入任意 3D 模型(不仅仅是 Rhino 模型),并将其分解为各种属性。

这个新组件的一个有用特性是它还提供了一种以一致的方式将导入的模型转换为活动文档单位的方法。让我们通过一个示例来解释这是如何工作的。

假设您已经下载了一些想要在项目中使用的紧固件的 3D CAD 模型。其中一个文件(法兰六角螺栓)保存时单位设置为英寸。另一个文件包括一个翼螺母和一个垫圈,其单位设置为毫米。而您正在处理的活动文档单位被设置为厘米。

Bolts & Nuts

如果我们以传统方式导入该模型,则必须计算出转换因子才能使模型正确对齐。但是,如果使用导入模型的属性之一(变换),我们可以轻松地将导入的几何图形与活动文档的比例进行匹配。

Scaled Model

Transform Geometry

此外,我们可以检查导入模型的其他属性。在这个文件中,保存了多种材质。我们现在可以在 Grasshopper 的自定义预览显示中使用任意的 Rhino 材质!

上述字体加粗是因为这是一件相当重要的事情。您不再受到 Grasshopper 传统上依赖的简化显示图形的限制。您现在可以导入(或使用 Query Materials 组件)将原生 Rhino 材质引入,并使用标准的 Custom Preview 组件将其应用于 Grasshopper 几何体。

以下示例是使用导入的 Rhino 材质的各种显示模式的截图。

Bolt-Nut Render

Material Display

更多新功能即将呈现!

值得注意的是,这只是这些新工具的第一个版本。该工具集并不完整(远远不够),您可能偶尔会发现一些 bug。如果您发现某些功能不太正常或有疑问,请告诉我们。我们会随时为您提供帮助。

我们希望得到您的反馈,以确定接下来应该包括哪些数据类型。哪些类型对您的工作流程最有用?您是否需要图块、灯光、尺寸标注、截平面、已命名图纸视图?我们有一个长远的组件开发计划,我们将在未来几个月内开发这些组件,但我们会根据用户的反馈来确定哪些功能应该优先。

试试看!

下载并打开 ConstructObjectAttributes.gh 定义。