Dynamo快速为不同的房间墙面填色

本文介绍了如何使用RevitAPI中的Paint方法为BIM模型中每个房间的墙壁指定不同材质,包括获取房间边界墙和face的方法,以及如何解决多房间共享面的填色问题。作者提供了一个IronPython脚本示例来实现这一功能。
摘要由CSDN通过智能技术生成

你好,这里是 BIM 的乐趣


之前有小伙伴留言,可不可以按房间为每面墙填色,答案是肯定的,我们可以利用填色功能,对每面墙,单独赋予材质,不过搜了下,似乎没找到现成的节点,然后就在 API 里搜了下,doc 下有个 paint 方法,很容易就能实现,我们来看下:

然后详细看下:

特别注意这个 face,是 DB 下的:

然后很容易就能写出核心代码:

doc.Paint(element.Id, face, material.Id)

那么接下来的问题就是如何获取房间边界墙和墙面的 face 了。

不过简单搜了下,发现 Clockwork 里有个现成的节点,可以获取房间的边界墙和 face,于是就简单多了。

☆提示:这里有个问题,如果一段墙的相同面,如果同时有两个房间,获取的 face 就是相同的,这样填色就会有问题,这里我没深入探究,只是在墙交点处均做打断处理。

那么剩下的就简单了。就是获取所有房间并按名称分组,之后再为每一种房间单独赋材质就好了(我就是根据房间种类数量,随便获取了几个材质,这里就不做赘述了,大家按照需求给材质即可),附上完整截图:

并附上我 paint 节点的完整代码:


import clr
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7\Lib')
clr.AddReference('RevitAPI')
clr.AddReference('RevitServices')
import Autodesk
import RevitServices
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc =  DocumentManager.Instance.CurrentDBDocument
faces = UnwrapElement(IN[0])
elems = UnwrapElement(IN[1])
material = UnwrapElement(IN[2])
output = []

TransactionManager.Instance.EnsureInTransaction(doc)
for m,n,o in zip(faces, elems,material):
  for i,j in zip(m,n):
    doc.Paint(j.Id, i, o.Id)
TransactionManager.Instance.TransactionTaskDone()

OUT = elems

好了,今天的分享就到这里,只是回答下之前小伙伴的问题,就不做详细讲解了,快去自己尝试吧~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九哥BIMer

予人玫瑰,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值