隔离与重设临时隐藏/隔离——Dynamo Python系列教程

Dynamo 案例百解——简单实用的 Dynamo 图文教程已经基本完成了!有兴趣小伙伴,可以私信我购买哦~

 

你好,这里是 BIM 的乐趣

 

前段时间在写一个 Dynamo 小程序的时候,用到 RayBounce.ByOriginDirection 节点,但是发现有遮挡物的时候,很麻烦,于是决定在 Ray Bounce 过程中,把没用的图元关掉,这里有两种选择,一个是关闭图元可见性,一个就是临时隐藏和隔离,本次教程呢,我就来聊聊调用 Revit API 来隔离图元和重设临时隐藏 / 隔离。

 

隔离图元

 

首先需要的就是查 API,但是这个时候第一个问题是,该搜什么,最简单的方式是切换到英文版的 Revit,找到这个命令,看下写的是什么?

 

image

 

如上图,很容易就能找到我们需要的命令,Isolate Element,但是直接搜,发现并没有搜到,这个时候我们需要稍微改下,把中间的空格去掉,再搜下试试:

 

image

 

这样就找到了我们需要,当然如果你熟悉 API,知道我们是要对视图操作,那么我们可以直接搜 View,很容易就能找到下面的方法:

 

image

 

然后点进去,基本语法就很明了了:

 

image

 

核心代码如下:

TransactionManager.Instance.EnsureInTransaction(doc)
view.IsolateElementsTemporary(ielements)
TransactionManager.Instance.TransactionTaskDone()

重设临时隐藏 / 隔离

 

先看下命令,然后到 API 里去搜,发现搜不到重设临时隐藏,这个就比较麻烦了,需要我们反复查看 view 下的方法,:

 

image

 

在反复查看之后,我找到了如下方法:

 

image

 

查看视图是否临时隐藏或隔离了图元,返回结果是一个布尔值:

 

image

 

同时我们还找到了另一个方法,如下:

 

image

 

该方法可以禁用临时视图模式:

 

image

 

然后我们可以进一步查看该方法需要的输入,是 TemporaryViewMode 枚举,然后就找到了我们想要的东西,来确定当前视图处于什么状态:

 

image

 

然后就可以整理出,我们需要的核心代码,如下:

if view.IsTemporaryHideIsolateActive() == True: 
   view.DisableTemporaryViewMode(TemporaryViewMode.TemporaryHideIsolate)

到这里,我们的教程基本上就完成了,最后附上两段完整的代码:

 

隔离图元:

# Copyright(c) 2021, 九哥BIMer
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from System.Collections.Generic import *

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
elements = UnwrapElement(IN[0])
view = UnwrapElement(IN[1])
ids = list()
elementlist = list()
for item in elements:
  ids.append(item.Id)
ielements = List[ElementId](ids)

TransactionManager.Instance.EnsureInTransaction(doc)
view.IsolateElementsTemporary(ielements)
TransactionManager.Instance.TransactionTaskDone()
OUT = (view,elements)

重设临时隐藏 / 隔离:

# Copyright(c) 2021, 九哥BIMer
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
view = UnwrapElement(IN[0])
TransactionManager.Instance.EnsureInTransaction(doc)
try:
  if view.IsTemporaryHideIsolateActive() == True:
    view.DisableTemporaryViewMode(TemporaryViewMode.TemporaryHideIsolate)
    OUT = (view,True)
  else: OUT = (view, False)
except: OUT = (view, False)
TransactionManager.Instance.TransactionTaskDone()

好了,今天的分享就到这里,小伙伴们快去自己尝试吧~

想要入群和小伙伴们一起交流的,可以私信我哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九哥BIMer

予人玫瑰,手有余香

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

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

打赏作者

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

抵扣说明:

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

余额充值