打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

你好,这里是BIM的乐趣


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

        然后详细看下:

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

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

doc.Paint(element.Idfacematerial.Id)

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

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

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

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

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

# Copyright(c) 2021, 九哥BIMerimport clrimport syssys.path.append(r'C:\Program Files (x86)\IronPython 2.7\Lib')clr.AddReference('RevitAPI')clr.AddReference('RevitServices')import Autodeskimport RevitServicesfrom Autodesk.Revit.DB import *from RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocumentfaces = 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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring+hibernate+junit的Dao测试
面向方面的Annotation
SpringBoot整合分布式事务,JTA+Atomikos实现多数据源
Spring 注解学习手札(六) 测试
(三)Spring框架之事务管理
Java事务处理全解析(四)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服