所有由The Geek发布的文章

[翻译] Dynamo:远不止是Grasshopper简化版

原文链接:http://case-inc.com/blog/revit-dynamo-more-than-grasshopper

大家都在纷纷议论,Revit上的开源插件Dynamo,跟Rhino上的插件Grasshopper孰优孰劣。因为两个插件都可以让设计师用可视化编程界面开发自己的设计工具,很自然地,Dynamo经常被说成是Revit上的Grasshopper。这种比较看似精确,其实却掩盖了RhinoRevit这两种平台在更深层次上的差别。

Rhino的强项在于生成复杂几何形体,这在Grasshopper的扩展工具集中体现地淋漓尽至。而Dynamo要想在这方面跟Grasshopper做到类似程度,还有很长很长的路要早,因为创建自由几何形体并不是Revit的强项。Revit出色之处在于管理建筑信息,而且Dynamo可以在这方面让Revit做得更好。

这里提供三个案例,可以展示Dynamo在建筑信息管理方面的出色能力。

1. 创建智能、自我调节的建筑模型

在建筑项目中,我们经常要在空间、几何形体、模块功能之间创建一些简单的逻辑关系。比方说,一个办公室的大小决定了可以放置多少张办公桌。同时,这也决定了办公室人员密度。根据建筑规范或者设计规范,这些因素又决定了应该使用何种类型的房门。

在某项目中,我们有这样一条规则:如果办公室超过一定大小,房门必须加上安全锁。通常这件事情是手工完成的 手工计算一个房间中有多少张办公桌,据此决定是否使用有安全琐的门 繁琐而容易出错。

其实这个任务可以用Dynamo自动化起来。Dynamo可以确定每个门与哪个房间关联,计算该房间内有多少家具,然后把家具数量写到门的一个自定义参数上。有了这样的信息,我们就可以据此设计门族(door family)的行为,使之根据参数来选择正确的门锁类型。如果房间大小变化了,或者家具的排布变化了,我们都可以重新运行Dynamo脚本,更新所有的门锁设置。

Furniture-Counting_620

把门的类型和周围家具数量联系起来,我们其实是在利用BIM数据,让建筑构件获得更多的周围环境信息,从而表现地更加“智能”。这种方法可以被用在很多常见问题上。比如说,复核一个房间是否有合适数量的门窗或电器设备以满足光照和通风要求。

2. 自动化数据录入和文档编制

虽然Revit非常强调全方位的建筑信息,可它自身提供的数据录入工具实在非常有限。在Revit中作批量编辑通常是件很痛苦的事,特别是跟Excel的数据处理能力相比,更是一声叹息。这也可以解释为什么有那儿多受欢迎的Revit插件,全是用来跟Excel表格交换数据的。

问题是,并非所有的建筑信息数据都可以转化成一张Excel二维表格。比如说,我们经常需要在一张楼层平面图上对大量的房间作命名和标号,而依据的是它们的排列顺序。这种空间信息其实从几何上很容易理解,却很难转化成数据表格进行处理。

为了解决这个问题,我们开发了一个Dynamo脚本。设计师只要在平面图上画一根路径,穿过所有需要命名的房间,Dynamo就可以依次对每个房间进行顺序的命名和编号。用户也可以选择在处理中跳过某些特定名称的房间,比如大堂或走道。如果在设计过程中有房间发生调整,只要重新运行这个脚本就行了。

Numbering_620

这个动画中,我们画了一根穿越一系列房间的曲线。当运行Dynamo脚本后,所有的房间都会依次序编号。同时我们在脚本设置中明确跳过了环形走道。

3. 提升设计质量

下一个脚本会抽取一些Revit外部工具无法取得的数据。在建模过程中,Revit的一些建筑构件会丢失它们的主体信息,以至于最后有成千上百个悬空的灯具或水管配件。没有任何内置的工具可以检查丢失主体的物体,但是我们可以使用Dynamo来抽取这一信息,并且写到一个自定义的项目参数里。这样,建筑构件的主体信息就可以在清单中查看,成为我们在建模过程中做质量检查的一个步骤。

QAQC_620_3

Dynamo脚本会把主体信息写到一个自定义参数中,并且在清单里显示出来。这里Dynamo没有改动任何的模型数据,只是作为信息提取工具。

QAQC_04_cropped

最后的清单清晰地显示了那些悬空构件,这些都是在建模过程中要更正的错误。

清单一直是Revit用户的重要工具,可以分析建筑模型和追踪错误。遗憾的是很多构件信息没有在Revit清单功能中开放出来,而Dynamo可以帮助抽取这些数据,组织成有意义的格式,并且添加到Revit清单中。

看看Revit内部有什么

Dynamo提供给设计师一些Revit内部的东西,让用户可以在不借助API编程的情况下开发Revit插件。这使得用户可以更加轻松地定制自己的Revit,而不用先花两年时间学习怎么写代码,编译和调试。

如果发现Dynamo自带的结点无法满足需求,Dynamo还允许我们用Python脚本直接调用所有的Revit API。这跟Autodesk以往的做法有很大不同。以前“易用性”被定义为用户无需更多的定制化即可顺利使用软件。现在的“易用性”则是指定制化可以有多方便。

很长一段时间以来,Dynamo一直被诟病为Grasshopper的粗劣仿制品。在CASE咨询公司,我们发现,如果把DynamoRevit的优势领域结合起来,可以显著提高工作效率。现在我们有了很好的机会定制Revit,使之更符合我们的需求。我们也希望Dynamo能帮助大家思考,如何让Revit成为一个建筑信息管理的优秀平台。

Dynamo发布0.7.4版

原文作者:Zach Kron

原文链接:http://dynamobim.com/dynamo-0-7-4-release/

翻译:The Geek

欢迎使用最新的Dynamo升级版!我们已经作好了Autodesk University的各项准备工作,努力让基于Dynamo开发其它功能的同事满意,同时升级版包含 一些Bug修正和功能改进。不要忘了抽空读一下Dynamo功能的扩展延伸文章,比如OptimoUnfolding。随时关注Package Manager,那上面经常有好东西。

如果需要完整的版本更新列表,请参阅Readme文档。已知问题列在这篇文章的末尾部分。以下是一些特别希望关注的内容。

文件读取

0.7.3及以前版本中,Dynamo会一次性地从磁盘读取文件,以后运行时不会再次检测文件是否被修改。被Dynamo读取的文件同时会被锁定,运行过程中没法更改文件,带来很多不便。在Dynamo0.7.4中,我们新增了监测文件改动的功能。如果文件有改动,Dynamo会自动更新相应数据,且不会锁定文件。为了做到这一点,对已有的结点不得不做一些改动。以前读取数据的结点可以直接输入一个文件路径,现在必须传入一个文件对象。比如说,在0.7.3中读取Excel数据是这样的:

read_excel_file

现在Excel结点以及其它读取数据的结点都需要一个中间结点,用来监视对应的文件内容是否被改动:

read_file_from_disk

老文件里如果使用了这些结点,在升级到0.7.4时会有警示,告知用户应该使用新的连接方式。老结点仍然保持跟以前一样的行为,即只读取一次文件。

结构杆件:

structural_framing_old

创建结构杆件比以前会容易很多。在0.7.3中创建结构杆件需要5个输入参数,其中至少有两个对非程序员来说很不直观,另外还有一个不起作用(UpVector,至少不会起明显的作用)。这个旧结点依然会被保留,因为极少数情况下确实会用到那几个参数。同时我们把这个功能分拆为三个更加具体的结点:创建梁,杆,柱。每个结点都只需要3个输入参数。

如果需要旋转结构杆件,以前是通过UpVector来控制的(虽然大部分情况下不管用)。现在用户可以直接修改“Cross-Section Rotation”参数来控制旋转角度。这是结构杆件的一个内置参数。

structural_framing_new

还有两个东西也希望能看一眼:

Package Manager改进:对发布和使用共享工具包的用户,我们做了一些用户界面上的改进。现在只有指定的结点才会被显示出来(以前辅助库里的东西也会被搜索出来,使得搜索结果乱七八糟的)。

可以通过Package Manager发布的数据类型:这个功能在0.7.3里已经有了,这里再重点推荐一下。现在用户可以通过Package Manager发布dyn文件,rvt文件,或者其它格式的文件,以便向使用者解释你的发布功能。我们希望Package Manager的这个功能可以成为一个很好的教学工具。这些额外的数据存放在%AppData%\Roaming\Dynamo\0.7\packages下。

已知且正在解决中的问题:

Element.GeometryRevit 2015下,Dynamo 0.7.2-0.7.4版本中可能会引发Crash,特别是处理大量Revit几何数据时。

Excel.Write结点在升级后会显示为“Unresolved”。用户可以用新的输入文件对象的Excel.Write结点替换它。

View.ExportAsImage只能导出{3d}视图。

Cancel按钮在执行云渲染和日照分析时无效。

Revit2015中,如果UnifiMaxwellKiwi Bonu Tools插件已经被安装,Dynamo可能无法启动。如果你发现了这样的问题,可以试试最新的预发布版:http://dynamobim.org/download/

老文件中的代码块可能会存在跟新安装结点有命名冲突的情况。比如,Point.ByCoordinates会跟Rhynamo工具包中的Point操作冲突,并且弹出警告框“Warning: Dereferencing a non-pointer. Dereferencing a non-pointer.”。如果遇到这种情况,需要在代码块中重新输入方法名称。自动完成功能会提示出一个更加具体的引用名称。

dereferening_non_pointer

0..4 小技巧

原文链接: http://dynamobim.com/0-4_tips/

为祝贺这周的Autodesk University 2014活动(有几百人在拉斯维加斯参加Dynamo学习活动),我会分享一些小技巧,帮助大家更好地使用Dynamo。敬请期待后续的更多内容。

[0] 快捷键

[0] 按F5运行Dynamo程序… 只是起个头,你懂的。
F5ToRun-300x171
[1] 按住ESC键可以浏览视图中的形体,或者用CTRL + G来切换形体观察模式/结点编辑模式。
[2] 按ESC键可以清空工具箱搜索框中的文字。
[3] 一些常用的组合键:

[0] CTRL + C 拷贝结点或者文字
[1] CTRL + N 创建新文件
[2] CTRL + O 打开一个已有文件
[3] CTRL + S 保存,CTRL + Shift + S 另存为
[4] CTRL + V 粘贴结点或文字
[5] CTRL + X 剪切结点或文字
[6] CTRL + Y 重做
[7] CTRL + Z 撤销

[4] 使用 CTRL + L 自动整理所有结点
[5] 使用 CTRL + W 创建注释
note
[6] 使用 CTRL + Shift + UP 显示或隐藏控制台输出窗口(或者直接拖动顶部的分隔条)

[1] 创建列表

[0] 使用Number SequenceNumber Range
ranges
[1] 使用范围语义。现在你明白文章标题是什么意思了吧?(标题取自Dynamo帮助文档,参见 Help/Samples/Core/CoreRangeSyntax)
ranges2
[2] 使用List.Create。也可以使用一系列列表来创建嵌套列表。
lists4
[3] 使用List.Join。这个结点和List.Create不一样,它不会在连接多个列表再创建上一级列表结构。
lists5
[4] 在代码块(Code Block)中使用 { } 。记得在一行代码的末尾加上分号 。使用嵌套的大括号来创建嵌套列表。
lists6

[2] 存取列表中的元素

[0] Dynamo跟大多数程序设计语言一样,以零作为列表元素的起始序号。所以列表的第一个元素称为0号元素,而最后一个元素是第(元素总个数 – 1)号元素。
fingers-300x200
[1] 使用结点List.GetItemAtIndex
lists1
[2] 使用范围表达式获取多个元素。
lists2
[3] 在代码块中使用中括号[ ]
lists3

[3] 结点选项

[0] 右键菜单中可以切换是否显示当前结点的形体预览(starShape.dyn)
preview
[1] 右键菜单中可以显示形体预览的元素序号 (circlePacking.dyn)
showLabels

[4] 自动完成

[0] 双击工作区可以创建一个代码块。你可以在代码块中直接用其它结点的名字来调用它们,而不需要直接创建那些结点。下面这篇文章里有更详细的解释:

http://dynamobim.com/cbns-for-dummies/

[1] 代码块中的自动完成功能可以帮助你找到正确的方法名称,避免拼写错误。按Enter键接受当前的自动完成建议。按ESC键忽略建议。
autocomplete1
[2] 使用点号(跟结点名称中的点号类似)可以浏览某个类的所有可用方法
autocomplete2
[3] 现在代码块中会提示同一方法名的不同输入参数形态。这可以帮助你找到正确的参数输入类型和顺序。
autocomplete3

Rhynamo工具包发布了!

原文链接:http://www.theprovingground.org/2014/11/get-rhynamo-package.html

RhynamoPackageManager

Rhynamo终于结束Beta版,作为一个正式的Dynamo工具包发布了!跟Dynamo一样,Rhynamo是完全免费的。

虽然作者还在最后完善源代码的过程中,但是您已经可以放心地下载工具包,在实际工作中使用起来了。

之前的非公开内测非常成功,超过300位用户测试Rhynamo并且提供了很有价值的反馈。这个工具仍在不断的完善中,但是我们正在CASE自己的项目中积极使用它。我们觉得现在已经可以把这个工具开放出来,让更多的人在计算式设计方面获益。

试一下吧!Rhynamo对应的Dynamo版本是当前的最新稳定版(0.7.4或以后版本)。
• 请确保使用的是Dynamo最新版本(作者本人正在使用0.7.5开发版)。
• 您可以在Dynamo的工具包管理器(Package Manager)里下载Rhynamo。
• Rhynamo自带了一些示例文件和一个介绍文档帮助您学习使用方法。
RhynamoStandardSetup
RhynamoSample_ReadBREP-1

Code Block 宝典(转载&翻译)

原文链接:http://dynamobim.org/cbns-for-dummies

简单地说,Code Block就是个大杀器。如果你在关注最近半年的Dynamo开发状态,就知道我在说什么了。那一个个小方块里头名堂可大了。以下是一篇关于它的速成宝典。

“这东西从哪来的?”你问道。Dynamo和DesignScript,一个是可视化编程工具,一个是计算式设计语言。两者强强联合,结果就是,我已经算不清楚有多少种创建三维点阵的方法了。当然还有更多其它的好东西。

这两样好东西放在一块儿,就好像把巧克力和花生酱放在一块儿,又好像布拉德·皮特和安吉丽娜·朱莉的孩子,反正就是配的好!

everything-about-code-block-chocobutter

在0.7.0或以后的版本中,你都可以在工作区中双击创建Code Block。

继续阅读Code Block 宝典(转载&翻译)

专家会诊:如何在Revit中快速标记Navisworks的碰撞检测结果

问题描述
Navisworks可以将碰撞检测的结果,即所有冲突点导出为Excel表格。导出的数据分为四列:冲突名称,X坐标,Y坐标,Z坐标。有没有办法使用Dynamo将冲突名称标识在Revit项目中的实际三维空间中呢?比如用Model Text或者其它类型的物体。

解决方案
大体的思路很简单,从Excel表格读取数据,提取其中的冲突名称和三维坐标点,并且创建Model Text。不幸的是有个地方要绕一下:Revit API暂时还不支持在项目环境中创建Model Text,所以Dynamo也做不到。我们可以先在一个族文件中创建对应的Model Text,然后在项目文件中创建族实例。

在族文件中创建Model Text的Dynamo文件见下图和附件。

Create Model Text from Excel
Create Model Text from Excel

Create Model Text from Excel (DYN file)

示例Excel数据

此文件可以在族文件(比如Generic Model)环境下运行并且创建出Model Text。在项目文件中创建族实例还会碰到一个小问题:如何确保族实例创建在项目文件的坐标原点,以保证所有Model Text的位置是正确的?

Revit没有绝对坐标的概念,所以这时候又要用到Dynamo了。具体见下图和附件。
Create Family Instance at Origin

Create Family Instance at Origin (DYN File)

总结
这样直接在给定坐标下创建的Model Text的方法,不能非常精确地标示出冲突坐标。如果有需要,可以用Model Line创建一些引线作为辅助标注,这里不再具体演示。
Model Text在族环境中创建,好处是可以统一隐藏或显示,坏处是不能一个个标记处理状态。如果确实需要单独标记,可以尝试创建Text Note。Dynamo中没有现成结点创建Text Note,但我们可以通过Python脚本定义自己的结点。会在下一篇文章中深入讨论。

如果有其它方面的改进意见,欢迎评论留言,或者发邮件到我们的邮箱。

“初识Dynamo”系列大结局:西雅图未眠夜

a4这是一部让人无法忘怀的经典之作,片中的帝国大厦成了80后文艺男女青年最为推崇的表达爱意的浪漫建筑。作为“初识Dynamo”系列的收宫之作,不如将这部电影结尾中让安妮惊呼“O, that must be a sign”的帝国大厦的美丽灯光,作为一个小礼物送给大家吧!

继续阅读“初识Dynamo”系列大结局:西雅图未眠夜

“Dynamo的今世前生”——Dynamo问答(转载&翻译)

原文链接:Q&A about Dynamo

有一回,Marcello Sgambelluri AutodeskMatt JezykZach Kron译注:这两位是Dynamo在市场和产品功能方面的主要负责人逼到角落里,用一大堆关于Dynamo起源和未来方向的问题把他们搞得焦头烂额。我们觉得把这段故事拿出来跟大家分享应该会很有趣。你也可以从Marcello 博客中找到更多好东西。

为什么会想到开发Dynamo?

[Matt] Ian Keough(译注:Dynamo创始人)在纽约的Buro Happold公司工作时,经常需要在RhinoRevit之间交换数据。为了让这一繁琐的工作变得更有效率,他编写了Dynamo。当时的基本想法是:既然Grasshopper可以用参数化,计算生成的方式驱动Rhino中的形体,我们应该完全可以在Revit里做类似的事。

继续阅读“Dynamo的今世前生”——Dynamo问答(转载&翻译)

基本概念——Lacing

在Dynamo中运行与数组、数列等相关结点时,右键点击结点,将出现“Lacing”的选项,其中默认有三种选项“Shortest,Longest和cross product”,这些选项对于创建数列有着非常重要的作用。以下就逐一对于这些概念做一个整体的说明:

首先,如果我们想在Dynamo里创建一个点,用Point.ByCoordinates结点,那么大致是这样子的:

b1

如果我们想创建一列点,它们的Y坐标都是5,而X坐标是从5到10,该怎么做呢(关于Code Block里如何定义数列,请见相关博文):

b2

继续阅读基本概念——Lacing

基本概念——单位转换

Dynamo和Revit结合地很好,除了。。。内部单位悲摧地不一致。

简单地说,所有在Dynamo里不带单位的数值(最常见的就是坐标点),Dynamo都会把它们认为是以“米”为单位。所以,如果你想创建两根距离10英尺的轴网,这样做是不行的:

a1

无论在项目模板中“单位”设置是英制还是公制,是“厘米”还是“毫米”,所创建的两个轴网之间的间距永远是10米。

a2

继续阅读基本概念——单位转换