Dynamo
Primer for v2.0
简体中文
简体中文
  • 关于
  • 简介
    • 什么是 Dynamo 以及它是如何工作的?
    • Primer 用户手册、Dynamo 社区和平台
  • Dynamo 设置
  • 用户界面
    • 工作空间
    • 库
  • 节点和导线
  • 基本节点和概念
    • 节点索引
    • 计算设计的几何图形
      • 几何图形概述
      • 向量、平面和坐标系
      • 点
      • 曲线
      • 曲面
      • 实体
      • 网格
    • 程序的构建块
      • 数据
      • 数学
      • 逻辑
      • 字符串
      • 颜色
    • 使用列表进行设计
      • 什么是列表
      • 使用列表
      • 列表的列表
      • n 维列表
    • Dynamo 中的词典
      • 什么是词典
      • 词典节点
      • 代码块中的词典
      • Revit 使用案例
  • 自定义节点和软件包
    • 自定义节点
      • 自定义节点简介
      • 创建自定义节点
      • 发布到库
    • 软件包
      • 软件包简介
      • 软件包案例研究 - Mesh Toolkit
      • 开发软件包
      • 发布软件包
      • Zero-Touch 输入
  • 适用于 Revit 的 Dynamo
    • Revit 连接
    • 选择
    • 编辑
    • 创建
    • 自定义
    • 记录
  • Dynamo for Civil 3D
    • Civil 3D 连接
    • 快速入门
    • 节点库
    • 样例工作流
      • 道路
        • 灯杆放置
      • 浇口面
        • 服务设施放置
      • 公共设施
        • 重命名结构
      • 轨道
        • 间隙包络
      • 勘测
        • 点编组管理
    • 高级主题
      • 对象绑定
      • Python 和 Civil 3D
    • Dynamo Player
    • 有用的软件包
    • 资源
  • Forma Beta 版中的 Dynamo
    • 在 Forma 中设置 Dynamo Player
    • 在 Dynamo Player 中添加和共享图形
    • 在 Dynamo Player 中运行图形
    • Dynamo 计算服务与 Desktop Dynamo 的差异
  • 在 Dynamo 中编码
    • 代码块和 DesignScript
      • 什么是代码块
      • DesignScript 语法
      • 简写
      • 函数
    • 使用 DesignScript 的几何图形
      • DesignScript 几何图形基础知识
      • 几何基本体
      • 向量数学
      • 曲线:内插和控制点
      • 平移、旋转和其他变换
      • 曲面:内插、控制点、放样、旋转
      • 几何参数化
      • 相交和修剪
      • 几何布尔
      • Python 点生成器
    • Python
      • Python 节点
      • Python 和 Revit
      • 设置自己的 Python 模板
    • 语言更改
  • 最佳做法
    • 图形策略
    • 脚本编写策略
    • 脚本参考
    • 管理您的程序
    • 在 Dynamo 中高效处理大型数据集
  • 样例工作流
    • 快速入门工作流
      • 参数化花瓶
      • 吸引器点
    • 概念索引
  • 开发人员入门
    • 从源代码构建 Dynamo
      • 从源代码构建 DynamoRevit
      • 在 Dynamo 中管理和更新依赖项
    • 为 Dynamo 开发
      • 快速入门
      • Zero-Touch 案例研究 - 网格节点
      • 在 Zero-Touch 节点中执行 Python 脚本 (C#)
      • 进一步了解 Zero-Touch
      • 高级 Dynamo 节点自定义
      • 在 Dynamo 软件包中使用 COM(互操作)类型
      • NodeModel 案例研究 - 自定义 UI
      • 更新 Dynamo 2.x 的软件包和 Dynamo 库
      • 更新 Dynamo 3.x 的软件包和 Dynamo 库
      • 扩展程序
      • 为 Dynamo 2.0+ 定义自定义软件包组织
      • Dynamo 命令行界面
      • Dynamo 集成
      • 为 Dynamo For Revit 开发
      • 发布软件包
      • 从 Visual Studio 构建软件包
      • 软件包形式的扩展
    • 拉取请求
    • 测试期望
    • 示例
  • 附录
    • 常见问题解答
    • 可视化编程和 Dynamo
    • 资源
    • 发行说明
    • 有用的软件包
    • 示例文件
    • 主体集成图
    • 下载 PDF
    • Dynamo 键盘快捷键
Powered by GitBook
On this page
  • 简写
  • 其他语法
  • 范围和序列
  • 高级范围
  • 生成列表并从列表中获取项目
  • 练习:正弦曲面
Edit on GitHub
Export as PDF
  1. 在 Dynamo 中编码
  2. 代码块和 DesignScript

简写

简写

简单来说,代码块中有一些基本的简写方法,这些方法使数据管理 更加 容易。我们将详细介绍下面的基础知识,并讨论如何使用此简写来创建和查询数据。

数据类型

标准 Dynamo

等效代码块

编号

字符串

序列

范围

获取索引处的项目

创建列表

连接字符串

条件语句

其他语法

节点

等效代码块

注释

任何运算符(+、&&、>=、Not 等)

+、&&、>=、! 等

请注意,“Not”变为“!”,但该节点被称为“Not”以区分“阶乘”

布尔值 True

true;

注意小写

布尔值 False

false;

注意小写

范围和序列

定义范围和序列的方法可缩减为基本简写。使用下图作为“..”语法的指导,以使用代码块定义数值数据列表。在完成此标记法后,创建数值数据是一个非常有效的过程:

  1. 在本例中,数字范围会替换为定义 beginning..end..step-size; 的基本 “代码块” 语法。通过以数字表示,可以得到:0..10..1;

  2. 请注意,语法 0..10..1; 等同于 0..10;,步长 1 是简写表示法的默认值。因此,0..10; 将给出一个从 0 到 10 的序列(步长为 1)。

  3. “序列” 示例类似,除了我们使用“#”来指明我们希望列表中包含 15 个值,而不是列表中的最大值为 15。在本例中,我们将定义:beginning..#ofSteps..step-size:。序列的实际语法为 0..#15..2

  4. 使用上一步中的 “#”,我们现在将其放置在语法的 “step-size” 部分中。现在,我们有一个 数字范围,从 “beginning” 到 “end”,“step-size” 表示法指示两者之间均匀分布多个值:beginning..end..#ofSteps

高级范围

创建高级范围后,我们即可简单地处理列表的列表。在下面的示例中,我们将隔离主要范围表示法的变量,并创建该列表的另一个范围。

1.创建嵌套范围,将带“#”的表示法与不带符号的表示法进行比较。相同逻辑在基本范围中都适用,但它稍显复杂。

2.我们可以在主范围内的任意位置处定义子范围;请注意,我们也可以有两个子范围。

3.通过控制范围中的“end”值,我们可以创建多个长度不同的的范围。

作为逻辑练习,请比较上述两个简写,并尝试解析 “subranges” 和 “#” 表示法如何驱动结果输出。

生成列表并从列表中获取项目

除了使用简写生成列表外,我们还可以即时创建列表。这些列表可以包含多种元素类型,也可以进行查询(请记住,列表本身就是对象)。总之,使用代码块时,可以创建列表,并从带括号的列表中查询项目(即“方括号”):

1.使用字符串快速创建列表,并使用项目索引进行查询。

2.使用变量创建列表,并使用范围简写表示法进行查询。

管理嵌套列表的过程类似。请注意列表顺序,并使用多组方括号进行调用:

1.定义一列列表。

2.使用单括号表示法查询列表。

3.使用双括号表示法查询项目。

练习:正弦曲面

单击下面的链接下载示例文件。

可以在附录中找到示例文件的完整列表。

在本练习中,我们将调整新的简写技能,以创建由范围和公式定义的精美蛋壳曲面。在本练习中,请注意我们如何串联使用代码块和现有 Dynamo 节点:我们将代码块用于繁重的数据提升,而 Dynamo 节点以可视方式布局来使定义清晰易读。

首先,通过连接上述节点创建曲面。请勿使用数字节点定义宽度和长度,而是双击画布并在代码块中键入 100;

  1. 通过在 “代码块” 中键入 0..1..#50,定义一个介于 0 和 1 之间的范围(其中包含 50 个划分)。

  2. 将该范围连接到 “Surface.PointAtParameter”,它会在曲面上提取介于 0 和 1 之间的 u 和 v 值。请记得通过在 “Surface.PointAtParameter” 节点上单击鼠标右键,将“连缀”更改为“叉积”。

在此步骤中,我们会使用第一个函数以在 Z 方向上向上移动点栅格。此栅格将基于底层函数驱动生成的曲面。添加新节点,如下图所示

  1. 我们使用带有以下行的码块:(0..Math.Sin(x*360)..#50)*5;。为了对该内容快速详细介绍,我们定义了一个内部带有公式的范围。此公式为正弦函数。在 Dynamo 中,正弦函数接收度数输入,因此为了获得完整正弦波,我们将x 值(这一范围输入介于 0 到 1 之间)乘以 360。接下来,我们希望每行都具有与控制栅格点相同数量的划分,因此我们用 #50 定义了 50 个细分。最后,乘数 5 只会增加平移幅度,因此我们可以在 Dynamo 预览中查看效果。

  1. 虽然上一个 “代码块” 正常工作,但它并非完全参数化。我们希望动态驱动其参数,因此我们会将上一步中的代码行替换为 (0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;。这使我们可以根据输入定义这些值。

通过更改滑块(范围介于 0 到 10 之间),我们会得到一些有趣的结果。

  1. 通过对数字范围执行转置,我们会反转幕墙波的方向:transposeList = List.Transpose(sineList);

  1. 如果添加 sineList 和 tranposeList,我们会得到一个扭曲的蛋壳曲面:eggShellList = sineList+transposeList;

我们会更改下面指定的滑块值,以“平静地控制”该算法。

最后,让我们使用“代码块”查询数据的隔离部分。要使用特定范围的点重新生成曲面,请在 “Geometry.Translate” 和 “NurbsSurface.ByPoints” 节点之间添加上述代码块。这包含以下文本行:sineStrips[0..15..1];。这将选择前 16 行点(共 50 行)。通过重新创建曲面,可以看到我们已生成点栅格的隔离部分。

  1. 在最后一步中,为了提高此 “代码块” 的参数化,我们使用介于 0 到 1 之间的滑块来驱动查询。我们使用以下代码行来执行此操作:sineStrips[0..((List.Count(sineStrips)-1)*u)];。这看起来可能会令人困惑,但代码行提供的方法让我们可以快速地将列表的长度缩放为 0 到 1 之间的乘数。

滑块上的值 0.53 会创建刚好经过栅格中点的曲面。

如预期的一样,值为 1 的滑块会基于完整的栅格点创建曲面。

通过查看可视图形,我们可以亮显代码块并查看其每个函数。

1.第一个 “代码块” 替换 “Number” 节点。

2.第二个 “代码块” 替换 “Number Range” 节点。

3.第三个代码块替换 List.Transpose、List.Count 和 Number Range 节点。

4.第四个 “代码块” 查询一列列表,以便替换 “List.GetItemAtIndex” 节点。

PreviousDesignScript 语法Next函数

Last updated 1 month ago

20KB
Obsolete-Nodes_Sine-Surface.dyn