社区
Civil 3D, Infraworks 等基础设施产品讨论区
欢迎访问欧特克Civil 3D, Infraworks论坛!分享知识,发帖提问,浏览论坛热帖。
取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

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

22 条回复22
已解决
回复
1 条消息(共 23 条)
TiStars
1343 次查看, 22 条回复

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

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

 

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

 

 

 

TiStars_1-1716249834393.png

 


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



标签 (4)
22 条回复22
2 条消息(共 23 条)
TiStars
回复: TiStars

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

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

 

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

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


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



3 条消息(共 23 条)
TiStars
回复: TiStars

学习资源

 

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

 

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

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


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



4 条消息(共 23 条)
TiStars
回复: TiStars

一点个人心得和踩的坑:

 

  • 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中输出,就无法反映在C3D中。现象就是程序看上去正常运行了,但什么也看不到。
      • Python Script中有些用法非常容易导致C3D崩溃,很多时候可能只是语法错误,甚至打错字也会引发同样的后果。特别坑爹的地方是,这不是一般的崩溃,而是需要把C3D整个重启。   所以昨天和今天有很多时候我为了摸索某个对象的正确用法,不得不花很多时间在重启C3D。     对此持怀疑态度的同学,我可以告诉你我在C3D2022/2023/2024上都体验过了。    唯一没有尝试的,是重新建一个Python Script节点。    对此,我的建议是,尽量把上面的基础知识学得扎实一些,如果你有时间的话。我得时间不多,所以只能快速尝试排错,取得一点突破。后果就是走了很多弯路。

天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



5 条消息(共 23 条)
TiStars
回复: TiStars

这个视频提到了Civil 3D API,它的内容简介如下,打算深入研究Dyanmo+C3D的同学有望从中获益。

 

 

### 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

 

 

 


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



6 条消息(共 23 条)

感谢Sam老师的分享!建议写成博客发表。





Lynn Zhang
Community Manager


7 条消息(共 23 条)

学习软件操作,我认为,最好不要购买图书,图书的弊端太明显了。

 

Dynamo的开发者只懂技术,不懂用户需求。对中文用户来说,Dynamo for Civil3D注定更为小众。

8 条消息(共 23 条)

如果想快速尝试一下它可以做什么,看到一些直观体验,可以这样做。

如果想要走得远一些,那么基本的概念语法还是需要刷一遍的。

就像任何一门编程语言,总要刷一遍语法。

对于Dynamo来说,就我的不成熟的经验来说,没有从头到尾学完语法,确实让我浪费了不少时间。

 

从你的帖子来看,你对软件和业务都有很多问题和思考,这非常好。像Dynamo这样类似瑞士军刀的利器,应该对你的工作很有帮助。


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



9 条消息(共 23 条)

你的目标高,奔二次开发节点去的

10 条消息(共 23 条)

其实二次开发节点并不是我的目标,只是遇到循环无法用原生节点实现,不得已为之的。

 

我自己对List及相关节点接触不多研究不深,我总觉应该是有办法不需要Python脚本就能实现,可惜我还没能深度研习官方文档。

 

话说Python语言可以适当学习一下,现在连Excel都整合了进去,有些场景几句脚本可能提高工作说不定呢。


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



11 条消息(共 23 条)

谢谢张老师建议,刚刚发了


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



12 条消息(共 23 条)

官方自称,拥有500个节点。我想,Dynamo发展了几年了,自带节点,能够解决常见的95%以上的问题吧。除非你追求以最少的节点来解决问题,提高运算。

 

我不知道你是怎么来学习和熟悉既有官方节点的。之前,我尝试学习了一下节点。

如图所示

案例一节点,我不知道如何运用使用它,在脑海里,建立不起逻辑思维关系。

案例二节点,节点注释更为明了,知道绘制圆的节点,需要哪些参数,就可以对应去搜寻相关节点。

微信图片_20240528094246.png

官方词典,也已经长久没有更新官方节点介绍了。

我本想基于官方节点,来做一下简单的事情,门槛感觉有点高,迟迟没有去学习这个

13 条消息(共 23 条)

山姆老师,我这边好像并没有收到你的投稿。请问你的文章名称是啥?





Lynn Zhang
Community Manager


14 条消息(共 23 条)

我比较懒,名字就是《关于最近研究Dynamo for Civil 3D的一点心得和避坑指南》

找了半天终于找到,还以为丢了,说是在审阅中?

 

 

TiStars_0-1716977847571.png

 


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



15 条消息(共 23 条)

案例二看来你已经操作得很好了。

 

案例一,这个看上去是检测文件夹是否存在的。输入是Path,应该是一个字符串,比如"C:\temp\",那么就把你要检测的路径字符串传给它,它的输出,就是布尔型,ture/false。 如果"C:\temp\"这个文件夹存在就返回ture,反之就返回false.

 

左边输入,经过处理,从右边输出。

如此串起来,就是一个程序。

就像案例二那样。

 

官方文档建议通读一下,尤其是最初的部分,可以帮助理解整个体系。

对于某个特定节点,如果官网没有说明,或说说明不足以帮助理解,可以上网搜索,可以问AI,可以到论坛提问。

 

B站上好像也有不少教学视频,建议找个播放量高的刷一下基础概念。视频讲解一般来说也比图文更加容易理解,尤其是入门时。


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



16 条消息(共 23 条)

案例一的使用场景,应该是在某些功能需要输出/写文件时,先使用该节点判断目标文件夹(传入文件夹路径给它)是否存在

如果不存在(输出为false)的情况,就先创建该文件夹。

反之(输出为ture),就直接写文件。

 

这个节点和它背后的逻辑,其实是软件开发中非常常见的功能。因为一般的软件都需要读写文件。但初学者一般用不到,尤其是毫无编程经验的用户。所以你上来选这个节点来研究,自然比较费解。

 

建议先从那些操作基本图形的节点开始,很容易看到结果。

如果稍有头绪,建议研究一下读入Excel文件。我个人感觉这个功能非常实用,很容易就实现一些能解决实际问题的小程序。


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



17 条消息(共 23 条)

山姆老师,投稿已收到,谢谢!已经提交给技术团队进行审核,应该下周会有结果,请耐心等待。





Lynn Zhang
Community Manager


18 条消息(共 23 条)

例二是能理解的,绘制一个圆,你肯定会想到需要圆心坐标、半径、直径等节点,才能实现你的需求。

输入的数据类型肯定也是数字。

所有理解节点运用节点比较容易上手。

 

例一,这类的节点,有点点难以理解。不知道这个节点和哪个节点配合使用。官方帮助资料也比较少,所有不愿意去学习它,使用它。

19 条消息(共 23 条)

例一这一类的节点,就像CAD中的很多功能,在日常工作中也可能用不到。

 

用不到的就先不学呗,等需要了,自然就有动力去查找资料。

 

论坛上,AI等,都是很好的帮手。

 

下面是微软的Copilot给出的回答,看来它还给出了一个更好的选择Directory.FromPath节点:

 

TiStars_0-1717212478948.png

 


天涯海角的山姆


您认为此帖子是否有用?欢迎为此帖点赞。

您的问题是否已得到解答?请点击“接受解答”按钮。


EESignature



20 条消息(共 23 条)

点燃了我的学习欲望

找不到想要的内容?向社区提问或分享您的知识。

到论坛发帖  

”