> For the complete documentation index, see [llms.txt](https://primer2.dynamobim.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://primer2.dynamobim.org/zh-cn/10_sample_workflow/10-1_getting-started-workflows/2-attractor-points.md).

# 吸引器点

吸引器点非常适合试验几何图案。它们可用于根据对象的距离创建这些对象的渐变。

此工作流将指导您如何操作：

* 创建、管理和编辑列表。
* 在三维预览中，使用直接操纵移动点。
* 更改执行模式。

![](/files/oENucYAov8DR1XUC9JBj)

## 定义目标

在本练习中，我们要创建一个圆（*“目标”*），其中半径输入由距邻近点的距离定义（*“关系”*）。

![手绘圆](/files/n7jXL7Q3tb5rkH8sEwTR)

> 定义基于距离关系的点通常称为“吸引器”。此处，将使用距吸引器点的距离来指定圆应该有多大。

## 后续步骤

> 单击下面的链接下载示例文件。
>
> 可以在附录中找到示例文件的完整列表。

现在，我们已经绘制了“目标”和“关系”，可以开始创建图形。我们需要节点来表示 Dynamo 将执行的操作序列。首先，我们添加以下节点：**“Number”**、**“Number Slider”**、**“Point.ByCoordinates”**、**“Geometry.DistanceTo”、“Circle.ByCenterPointRadius”**。

![](/files/fuoxgcv6cou3JKBQMmkc)

> 1. “输入”>“基本”>**“Number”**
> 2. “输入”>“基本”>**“Number Slider”**
> 3. “几何图形”>“点”>“点”>**“By Coordinates(x,y,z)”**
> 4. “几何图形”>“修改器”>“几何图形”>**“DistanceTo”**
> 5. “几何图形”>“曲线”>“圆”>**“ByCenterPointRadius”**

### 使用导线连接节点

现在，我们有几个节点，我们需要将节点端口用线连接起来。这些连接将定义数据流。

![](/files/Ag7XNdQBTdpONjJ2kXmk)

> 1. **“Number”** 连接到 **“Point.ByCoordinates”**
> 2. **“Number Sliders”** 连接到 **“Point.ByCoordinates”**
> 3. **“Point.ByCoordinates”** (2) 连接到 **“DistanceTo”**
> 4. **“Point.ByCoordinates”** 和 **“DistanceTo”** 连接到 **“Circle.ByCenterPointRadius”**

### 执行程序

在完成定义程序流后，我们只需告知 Dynamo 执行它即可。在执行程序（“自动”或在“手动”模式下单击“运行”）后，数据将流经这些线，并且我们应该可以在三维预览中看到结果。

![](/files/2ANaPJuIUJZ4K6pijhbM)

> 1. （单击“运行”）- 如果“执行栏”处于“手动”模式，则需要单击“运行”才能执行图形
> 2. 节点预览 - 将鼠标光标悬停在节点右下角的框上会弹出结果
> 3. 三维预览 - 如果有节点创建几何图形，我们将在三维预览中看到它。
> 4. 创建节点上的输出几何图形。

### 添加 **“代码块”**

如果程序正常运行，我们应该会在三维预览中看到一个穿过吸引器点的圆。这很棒，但我们可能想要添加更多详细信息或更多控件。我们将调整对圆节点的输入，以便可以校准对半径的影响。将另一个 **“Number Slider”** 添加到工作空间，然后双击工作空间的空白区域以添加 \*\*“Code Block”\*\*节点。编辑“Code Block”中的字段，以便指定 `X/Y`。

![](/files/IItG8jeg89IP8I2500fu)

> 1. **代码块**
> 2. **“DistanceTo”** 和 **“Number Slider”** 连接到 **“Code Block”**
> 3. **“Code Block”** 连接到 **“Circle.ByCenterPointRadius”**

### 使用序列

简单开始后增加复杂性是循序渐进开发程序的有效方法。在一个圆正常工作后，让我们将程序的强大功能应用于多个圆。如果我们使用点栅格（而不是一个中心点）并适应结果数据结构中的变化，那么程序现在将创建多个圆 - 每个圆的唯一半径值由距吸引器点的校准距离进行定义。

![](/files/6O6ZpijVZjK0d2kt9jXb)

> 1. 添加 **“Number Sequence”** 节点并替换 **“Point.ByCoordinates”** 的输入 - 在“Point.ByCoordinates”上单击鼠标右键，然后依次选择“连缀”>“叉积”
> 2. 在“Point.ByCoordinates”后添加 **“Flatten”** 节点。要完全展平列表，请将 `amt` 输入保留为默认值 `-1`
> 3. 三维预览将使用圆栅格进行更新

### 使用“直接操纵”调整

有时，数字操作并不是正确的方法。现在，可以在后台三维预览中导航时手动推拉点几何图形。我们还可以控制由点构建的其他几何图形。例如，**“Sphere.ByCenterPointRadius”** 也可以直接操纵。我们可以使用 **“Point.ByCoordinates”**，通过一系列 X、Y 和 Z 控制点的位置。但是，使用“直接操纵”方法，可以通过在 **“三维预览导航”** 模式下手动移动点来更新滑块的值。这提供了一种更直观的方法，来控制一组用于标识点位置的离散值。

![](/files/CgMX0fKvAItaO90Aa21J)

> 1. 要使用 **“直接操纵”**，请选择要移动的点面板 - 箭头将显示在选定点上。
> 2. 切换到 **“三维预览导航”** 模式。

> 1. 将光标悬停在点上，X、Y 和 Z 轴将显示。
> 2. 单击并拖动彩色箭头以移动相应的轴，**“Number Slider”** 值将使用手动移动的点实时更新。

![](/files/IgNe0SngKU3yAtuzQBUs)

> 1. 请注意，在 **“直接操纵”** 之前，仅有一个滑块连接到 **“Point.ByCoordinates”** 组件。当我们在 X 方向上手动移动点时，Dynamo 将自动为 X 输入生成新的 **“Number Slider”**。
