成为Dynamo程序员(一)

基于我们公司在今年Autodesk University(AU大师汇2017)上的分享主题:像程序员一样使用Dynamo,我希望有一个系列文章作为演讲内容的修订、深化与延伸。

这是第一篇。

作为一名程序员,BIM工程师,以及Dynamo primer,我在用编程的方式学习Dynamo,也希望帮助AEC行业的设计师们在学习和应用Dynamo的时候,通过这一工具进入程序员的思维空间,理解编程的本质。

在解释Dynamo编程的过程中,我会同步讲解其引擎脚本Design Script语言的知识,如果能理解Design Script,即使不直接书写Design Script脚本仍使用Dynamo图形节点,也有助于写出更快速、目标更明确的程序。

这篇文章假设你的计算机上已经安装了Dynamo,了解如何打开,创建空白程序,以及了解Dynamo设计空间的基本功能布局。

我们先从第一个案例开始:

1. 起步:第一个Dynamo程序

问题1
有一位跑者,有3秒钟的时间,需要跑完300公里,速度应达到多少。

首先,用Dynamo可视化编程模式来解决。

从节点库中的operators中,选择并放置一个/运算符节点
clipboard.png

clipboard.png

然后,双击空白处,在显示出来的Code Block 节点中,书写2个数值,3003

clipboard.png

输出点分别连接到/ 节点xy上。

clipboard.png

一般来说,Dynamo编程的工作空间会默认为自动运行,所以在我们连接导线的过程中,计算已经自动完成了。

clipboard.png

如果你的程序不是自动运行,把这个位置改为自动,或者点击手动旁边的运行按钮。

clipboard.png

我们从节点库的Core/View中选择并添加一个Watch节点来查看计算结果,同样也是用导线/运算符右侧的>Watch左侧的输入端>相连。运行之后,可以看到结果是符合我们预期的100

clipboard.png

2.Dynamo节点表达式

这个Dynamo程序可以说是非常简单而直观的,数字像电流一样流入一个运算节点,并且输出结果。
我们注意到:

  • 信息从左侧向右侧流动

  • 节点右侧都有一个输出端,允许结果向后传递

这体现了Dynamo程序的一个基本特征,信息从右端输入,层层处理后,流向最右端,从直觉上来说,这是不可逆的,事实也正是这样。

我们用编程的术语来解读一下:

我们刚才通过把两个直接量的数字,传递给运算符/的两个变量xy,完成了一次运算,这就形成了一个基本的Dynamo表达式,可以把表达式看做是程序执行的基本单位,任何已知的计算行为都可以通过这种方式实现。

其中的/属于运算符节点运算符节点是一类特殊节点,有别于Dynamo中的三大类基本节点(创建、操作和查询),用于基本运算.
可想而知,如果一个略复杂的公式用运算符节点实现,会显得非常啰嗦。所以/运算符有另一种实现方式,即Design Script表示法。

3.Design Script:另一种表达式

上面的程序可以改用以下方式书写:

clipboard.png

其中,Code Block中书写的内容,要遵循Design Script语言的语法规则,可以把刚才的两个数字3003也看做是Design Script代码。

Design Script是和Dynamo图形编程模式具备同等能力的另一种实现,大多数Dynamo的图形编程,在运行前都被转换成Design Script再运行,可以把Design Script看作是Dynamo程序的源代码。

作为工程技术人员,没有必要被代码这种形式,或者源代码这种概念吓到,作为领域专用语言Design Script就是为AEC行业工程师、设计师专门打造和准备的。

如果不清楚如何编写,可以通过选择一段Dynamo表达式节点,用节点至代码功能将其转换为Design Script代码,并从中学习。
clipboard.png

转换结果:
clipboard.png

Design Script代码更加紧凑、清晰,并且,在Dynamo中,确实还存在着一些必须使用Design Script来实现的功能。

4.总结

在这一篇里,我们接触到了以下内容:

  • 编程就是用编程语言解决问题

  • Dynamo是一种编程工具

  • 程序以表达式的形式书写

  • 变量和函数是表达式的基本元件

  • Dynamo编程有两种表达式:图形节点和Design Script

5. 额外思考

仔细观察上面自动转换结果和书写代码的区别,不难发现,使用节点至代码功能生成的Design Script代码中,多了一个变量t1。而将鼠标悬停在节点右侧的>输出端会看到t1
再回头观察我们书写300 / 3的这个Code Block节点,将鼠标悬停在节点右侧的>输出端会看到t6BBA4B28C5E54CF89F300D510499A00E_0
查看之前的两个直接量3003的输出端,也是t6BBA4B28C5E54CF89F300D510499A00E_0
这说明,Dynamo环境自动帮我们把一个单行的数字量(如300)或计算式(如300 / 3)转换为一个赋值表达式。

在使用节点至代码功能时,其形式是:

clipboard.png

而我们在Code Block中手动输入300 / 3;时,其显示成:

clipboard.png

相当于:

clipboard.png

其中:

t6BBA4B28C5E54CF89F300D510499A00E_0 t1一样,都是Dynamo环境为我们自动分配的临时变量名。

所以,在Dynamo中,一个实际值总是通过变量来保存和传递的,将来还有两个和变量有关的重要概念:作用域关联式编程

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值