> 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).

# 吸引器点

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

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

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-6a23ee59d19d79614f4fc3849246e4914d26de67%2Fattractor1.gif?alt=media)

## 定义目标

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

![手绘圆](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-0c851120218fa8125cf5c42537ed1ca63c2a1ea2%2F00-Hand-Sketch-of-Circle.png?alt=media)

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

## 后续步骤

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

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-12cbb4ec92fb16fedc8b599b3c46ef99baea309e%2Fattractor%20\(2\).png?alt=media)

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

### 使用导线连接节点

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-fa829afd1feadcb460c7b0f774f4751c079f940f%2Fattractor%20\(3\).png?alt=media)

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

### 执行程序

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-571beb8963da660eca3e72cf18f3f19b072f6f9b%2Fattractor%20\(4\).png?alt=media)

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

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

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-e658991f633885817dfda8cc668dfedf552f8250%2Fattractor%20\(5\).png?alt=media\&token=60e5ecdf-762b-4b8d-8a50-ba236059ce42)

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

### 使用序列

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-8fce9ab031045709f62d1042a4dc6362b9a2dfe3%2Fattractor%20\(6\).png?alt=media)

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

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

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-b8884bf6333334299f0fadcd6c73e7faa79780a2%2Fattractor%20\(7\).png?alt=media)

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

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

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-b7093a0e8f84ec78b428ecc4b61670f3a0c8aa51%2Fattractor%20\(1\).png?alt=media)

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