# 可视化编程和 Dynamo

#### 什么是可视化编程？ <a href="#what-is-visual-programming" id="what-is-visual-programming"></a>

设计工作经常涉及在设计的各部分之间建立视觉、系统或几何关系。多数情况下，这些关系由工作流开发，工作流按一定规则实现从概念到结果的形成。也许并不了解，其实我们是按一定算法进行工作的 - 定义一组循序渐进的操作，这些操作遵循输入、处理和输出的基本逻辑。编程让我们可以继续通过这种方式进行工作，但采用的方法是对算法进行规范化。

#### 现有算法 <a href="#algorithms-in-hand" id="algorithms-in-hand"></a>

尽管提供了一些强大机会，但**算法**这一术语本身可能会带来一些误解。算法可能会产生意想不到、疯狂或酷炫的效果，但它们并不是魔术。实际上，它们本身平淡无奇。让我们使用一个实例，如折纸鹤。我们从一张正方形纸开始（输入）、遵循一系列折叠步骤（处理操作），然后完成折叠一张纸鹤（输出）。

![折纸鹤](https://primer.dynamobim.org/01_Introduction/images/1-1/00-OrigamiCrane.png)

算法存在于何处？它是抽象的步骤集，我们可以通过两种方式来表示它们 - 文字或图形。

**文字说明：**

1. 从一张正方形纸开始，有颜色的一面朝上。对折，然后打开。换另一方向对折。
2. 翻转纸张，白色一面朝上。将纸张对折、折出折痕并打开，然后换另一方向再次对折。
3. 使用折出的折痕，将模型的 3 个顶角向下折到底角。展平模型。
4. 向中心折叠顶部三角形翼片，然后展开。
5. 向下折叠模型顶部、折出折痕，然后展开。
6. 打开模型最上方的翼片、将它向上翻折，同时向内按压模型两侧。向下展平，折出折痕。
7. 翻转模型，然后对另一侧重复步骤 4-6。
8. 向中心折叠顶部翼片。
9. 对另一侧重复上述操作。
10. 向上折叠模型的两条“腿”、折出折痕，然后展开。
11. 沿刚才折出的折痕向内反向折叠“腿”。
12. 向内反向折叠一侧以制作头部，然后向下折叠翅膀。
13. 现在，已完成制作一个纸鹤。

**图形说明：**

![折纸鹤说明](https://primer.dynamobim.org/01_Introduction/images/1-1/01-OrigamiCraneInstructions.png)

#### 编程已定义 <a href="#programming-defined" id="programming-defined"></a>

使用其中任一组说明都应该可以完成纸鹤制作；如果您按照自己的方式制作，那么您已应用了一种算法。唯一的区别是我们读取该组说明的形式化的方式，该方式会引导我们进行**编程**。编程（通常是 *计算机编程* 的简写）是将一系列操作的处理规范化为可执行程序的行为。如果我们将上述用于制作纸鹤的说明转换为计算机可以读取和执行的格式，那么我们就是在编程。

编程的关键及我们会遇到的第一个障碍是：必须依靠某种形式的抽象形式，才能与计算机进行有效通信。采用任何数量的编程语言（如 JavaScript、Python 或 C）形式。如果我们可以写出一组可重复的说明（如用于折纸鹤），我们只需为计算机转换它即可。我们正在努力让计算机能够制作纸鹤，甚至众多不同的纸鹤（其中每个纸鹤都略微不同）。这就是编程的力量 - 计算机将重复执行我们分配给它的任何任务或任务集，而不会出现延迟和人为错误。

**可视化编程已定义**

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

{% file src="<https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-4579b65294b6edd879b7c8445c1d8b383f58876c%2FVisual%20Programming%20-%20Circle%20Through%20Point.dyn?alt=media>" %}

如果您的任务是为折叠纸鹤编写说明，您将如何处理？您要使用图形、文字还是两者的某种组合来制作它们？

如果您的回答中包含图形，那么**可视化编程**绝对适合您。编程和可视化编程的过程基本相同。它们利用相同的规范化框架；但是，我们通过图形（或“可视化”）用户界面定义程序的说明和关系。我们将预打包的节点连接在一起，而不是键入语法约束的文字。下面是对同一算法（即“通过点画圆”）的比较，分别用节点和代码编程：

**可视化程序：**

!

**文本程序：**

```
myPoint = Point.ByCoordinates(0.0,0.0,0.0);
x = 5.6;
y = 11.5;
attractorPoint = Point.ByCoordinates(x,y,0.0);
dist = myPoint.DistanceTo(attractorPoint);
myCircle = Circle.ByCenterPointRadius(myPoint,dist);
```

我们的算法结果：

!

以此类方式进行编程的可视化特性降低了入门门槛，无需与设计师经常沟通。Dynamo 属于可视化编程范例，但正如我们稍后所见到的，我们仍可以在应用程序中使用文本编程。
