Announcements
Due to scheduled maintenance, the Autodesk Community will be inaccessible from 10:00PM PDT on Oct 16th for approximately 1 hour. We appreciate your patience during this time.

关于最近研究 Dynamo for Civil 3D 的一点心得和避坑指南

TiStars_1-1716249834393.png

Dynamo对于没有编程经验的Civil 3D使用者来说,可能是一个比较容易入门的、直观的工具,用于一些枯燥的重复性工作。通过把一些叫做“节点”的块拖拖拉拉,用线连起来,就可以完成一小段程序,解决“最后一公里”的难题。

 

如下面的Dynamo的图标所示,它就像一个瑞士军刀,并不是用来建造高楼大厦,而是把一些边角的东西修修补补,让生活更加轻松。

TiStars_0-1716844363505.png

 

 

下面是几个我能想到的,适合用Dynamo来解决的问题,各位老师可以补充一下:

  • 从Excel/CSV文件中读入点,然后生成对象,或者根据Excel中的数据对dwg图形对象进行批量属性更新
  • 沿道路放置对象这样的,可能需要动态调整的场景
  • 批量预处理dwg图形
  • 自动化地形处理
  • 实现复杂形状

 

其中第一个,借助Excel的强大编辑能力,可以把Civil 3D中非常难以调整的某些属性进行快速更新。

一个场景是,SheetSet字段的更新,用Civil 3D的话,一次修改一个,要打开点击很多次。但如果和Excel建立起连接的话,只需要改动Excel内容就好了。

 

学习资源

 

  • Dynamo从零入门的话,官网的中文教程自然是不二法门。没有编程基础的话,到最终能做出自己想要的东西之前可能要稍微花点时间。不过按照例子应该能很快见到一些效果,这对初学者来说可以快速增强信心。总之Dynamo比传统编程语言更能迅速搭建一个可以工作的东西,学习曲线平缓得多。
  • 摘自官网的一些学习资源

 

话说上面的资源我自己也没有全部用到,尤其是大师汇和书籍,是今天在编辑这个帖子的时候才发现,感觉捡到宝了。

所以,建议大家也多分享一些心得,其实也是在帮助自己。

 

 

一点个人心得和踩的坑:

 

  • Dynamo和传统的编程语言最大的区别,就目前我的有限的经验来讲,是它的循环遍历机能不太一样,就是没有For语句。 它的循环是通过把list(可以理解为数组)赋给相应的Node来实现的。比如Point.ByCoordinates这个Node,输入是X,Y,Z坐标,乍一看以为是只接收三个数字作为坐标,然后创建一个点。 而实际上,可以把三个List作为输入给它,从而实现循环功能,一次创建多个点。

 

  • 同样是上面的循环功能,如果是嵌套list,就不好对子list实现循环,因为你需要通过指定levels来取到子list。可能是我学艺不精,目前尚未找到不用编码的解决办法。

 

  • 还是List,需要深入学习理解它的用法。基本上很多时候都需要设计它的操作。程序比人工强大的原因之一,就是它的循环遍历,根据条件选择需要的对象,然后对其进行(批量)操作。而它的基础就建立在对List的理解和操作上。 对于其他语言,用循环语句就可以了。

 

  • Dynamo的短板,可以用Python Script来弥补,中文叫做代码块,比如我就不得不用Python Script来对嵌套的List进行循环处理,然后再传递给下一个Node。
    • 这个有我刚刚花了几天时间学习到的:
      • 在Python Script内部创建的对象,如果不放在OUT中输出,就无法反映在Civil 3D中。现象就是程序看上去正常运行了,但什么也看不到。
      • Python Script中有些用法非常容易导致Civil 3D崩溃,很多时候可能只是语法错误,甚至打错字也会引发同样的后果。特别坑爹的地方是,这不是一般的崩溃,而是需要把Civil 3D整个重启。所以昨天和今天有很多时候我为了摸索某个对象的正确用法,不得不花很多时间在重启Civil 3D。对此持怀疑态度的同学,我可以告诉你我在Civil 3D 2022/2023/2024上都体验过了。唯一没有尝试的,是重新建一个Python Script节点。对此,我的建议是,尽量把上面的基础知识学得扎实一些,如果你有时间的话。我的时间不多,所以只能快速尝试排错,取得一点突破,后果就是走了很多弯路。

 

关于 Civil 3D API 下面有一个视频,我用Chrome 插件 Glarity ChatGPT这个插件做了一个总结贴在下面,希望有所帮助:

### Summary
本次演讲介绍了Dynamo和Civil 3D的API,包括以下几个方面:
1. API是如何工作的,以及如何在Dynamo中使用Python节点访问API。
2. 介绍了AutoCAD和Civil 3D各自的API结构和层级关系。
3. 演示了如何使用Python代码访问和修改Civil 3D对象的属性。
4. 分享了一些调试和错误处理的技巧。

### Highlights
- :钥匙: API(应用程序编程接口)是程序之间交互的方式,可以是进程内或进程外集成。Dynamo使用.NET API与AutoCAD和Civil 3D进行交互。
- :文件夹: AutoCAD和Civil 3D有各自独立的API,需要分别引用相应的DLL文件。可以在帮助文档中查找API的详细信息。
- :扳手: 使用Python节点可以更快地进行API开发和迭代,但需要注意版本兼容性。
- :向左倾斜的放大镜: 在使用API时,需要先获取活动文档、数据库,然后开启事务来安全地读写数据。可以使用try-except块来处理错误。
- :随机播放按钮: 可以通过unwrap方法访问API对象的底层实现,并对其进行修改,如更改corridor的名称。

### Keywords
- Dynamo
- Civil 3D
- API

 

抱歉下载的视频前两天删除了,请移步到我的论坛帖子观看:链接在此