概述

如果你在Twitter或社交媒体上,你可能听说过/看过一个名为ChatGPT的工具。它是一个人工智能系统,允许你(人类)和人工智能之间进行对话(🤖)。

人们用它来在AEC世界中生成各种很酷的东西。

除了这些交互之外,编码社区中的人们还要求 ChatGPT 为他们编写代码。这导致像Stack Overflow这样的网站实施了新的政策,围绕基于ChatGPT生成的代码提问。

我们在 Dynamo 论坛上也有通过 ChatGPT 引发的问题。

考虑到这一点,我认为尝试该工具值得我花时间。所以我做到了。结果让我有点惊讶。

我要求 ChatGPT 为 Dynamo for Revit 生成一个 Python 脚本,以删除 Revit 模型中的所有墙壁。这是它想出的:

import clr
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory
clr.AddReference(‘RevitServices’)
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
walls = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).ToElements()
TransactionManager.Instance.EnsureInTransaction(doc)
for wall in walls:
doc.Delete(wall.Id)
TransactionManager.Instance.TransactionTaskDone()

在大多数情况下,此脚本是完整的。它导入所有 Python 引用,收集所有墙(类型和实例),并将删除内容包装在事务中。

但是,它在 #10 行中遗漏的一点是我们无法真正从 Revit 模型中删除所有墙类型(因为它不知道 Revit 或 API)。这是因为堆叠墙依赖于这些类型(堆叠墙类型在模型中至少需要一种其他主墙类型)。

这是使用脚本的人需要知道发生了什么的例子之一。就我而言,我使用了Revit API,所以我知道情况确实如此(尽管谷歌搜索收到的错误也会启发我们)。

因此,要使用生成的 Python,我们必须再添加一块代码,WhereElementIsNotElementType()。这迫使收集器仅关注模型中放置的实例,这非常适合此用例。

结果为以下代码:

import clr
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory
clr.AddReference(‘RevitServices’)
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
walls = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType().ToElements()
TransactionManager.Instance.EnsureInTransaction(doc)
for wall in walls:
doc.Delete(wall.Id)
TransactionManager.Instance.TransactionTaskDone()
OUT = “Success”

思潮

与任何新技术一样,你会看到人们抱怨它,滥用它,或者嘲笑它。

但是,我相信,如果您以适当的期望来对待这项技术,那么这项技术将是非凡的。

以Python的Dynam为例:去问它如何编写脚本,但不要只是复制和粘贴并期望它100%的工作。这不公平。这就像在没有你的研究的情况下谷歌搜索某些东西并将其视为真理一样。

我建议的流程如下:

问ChatGPT你的问题。

使其简洁,不要过于复杂。表现得像你在 Dynamo 论坛上向某人提问一样。好例子:“在Python中向我展示如何使用Dynamo固定Revit中的元素。不好的例子:“给我写一个python脚本来自动标注我模型中的所有计划,并将它们放在一张纸上,然后将图纸打印成PDF”

如果你在论坛上问这两个问题,你可能会得到#1的答案,而不是#2的答案。你可能会被告知要对#2做更多的研究。

研究。

APIDocs.co 搜索正在生成的 API 调用。它们存在吗?如果没有,还有另一个听起来相似的吗?如果什么也没找到,ChatGPT 可能为你编造了 API,不幸的是,这是不可能的*。

*如果你认为我错误地使用了不可能这个词,那么你不认识辛普森一家,这让我为你感到难过。

但是John,如果我不知道在API中寻找什么或在Dynamo 中寻找Python怎么办?

嗯,首先,我完全理解这种感觉。几年来,我一直在与在 Dynamo 和 Revit 中工作作斗争,并且知道在查看这些 AI 生成的 Python 脚本时要注意什么。这是我可以让该脚本合理快速地工作的部分原因。

如果你还没有完全到达那里,并且正处于Dynamo之旅的“我想学习一些Python”部分,我鼓励你查看我的课程“Dynamo for Revit:Programming with Python”。

https://learn.designtechunraveled.com/p/dynamo-for-revit-programming-with-python

本课程是为Revit用户设计的,其结构旨在将您从从未编写过python的人带到可以搜索API文档,使用代码并在Dynamo中获得一些工作python的人。

我计划在 ChatGPT 上制作一些视频并使用 Dynamo 中的代码,因为我认为只要我们明智地使用它,它就是添加到我们工具箱中的宝贵工具。

如果您错过了它,请在此处查看脚本的完整视频:

(3) How to use Chat GPT to Delete All Walls in a Revit Model (with Python) – YouTube

结语

我鼓励你在人工智能中测试和检查这些令人兴奋的新事物(带着适当的期望),同时保持乐观,不要过于挑剔。

而且,最重要的是,玩得开心!

-John

0

评论0

请先
23J909 工程做法高清无水印彩色(加官方更正信息版,注意不同于其他的简化版),444页下载(代替05J909)
23J909 工程做法高清无水印彩色(加官方更正信息版,注意不同于其他的简化版),444页下载(代替05J909)
1分钟前 有人购买 去瞅瞅看

社交账号快速登录

微信扫一扫关注
扫码关注后会自动登录网站