Hello大家好!我是九哥~
看到群里有小伙伴询问,如何能像CAD似的,将一张大图快速拆分成多个小图,于是呢,就有了今天这篇文章。
简单测试了下,比较容易就实现了,于是呢,赶紧分享给大家,效果大致如下面视频演示的样子:
Dynamo按分区索引切分视图
接下来,我们简单讲下实现逻辑:
一、确定范围框
首先呢,我们需要按照自己的需求,创建一个矩形,然后将其移动到指定的基点,之后我们的操作,都是根据其进行的。
二、阵列范围框
这步比较简单,通过Geometry.Translate节点,即可进行阵列,只需要将连缀改成差积即可。
然后将这个矩形框转换成Boundingbox,这个是剪裁视图的前期准备之一。
三、复制视图
复制视图这里,我简单示意了一下。
(1)根据列表长度,构造了下视图名称
(2)使用Clockwork节点包中的View.DuplicateAsDependent节点,复制相关视图
当然,也可以直接复制,或者带细节复制,Clockwork包里均有相关节点:
注意:这个节点代码有点问题,运行完没有关闭事务,所以最后连一个Transaction.End节点,把没用的事务关掉。
四、剪裁视图
这里我为了方便,简单写了两行代码,同时将视图属性中的剪裁视图、剪裁区域可见、注释剪裁都给勾上了,之后将Boundingbox应用给了视图,就完成了视图剪裁。
涉及的API主要是View.CorpBox
属性,可get可set:
完成后代码如下:
最后附上完整截图和代码:
import clr
import sys
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
def tolist(x):
if hasattr(x,'__iter__'): return x
else : return [x]
views = UnwrapElement(tolist(IN[0]))
bbox = UnwrapElement(tolist(IN[1]))
t = Transaction(doc, "剪裁视图")
t.Start()
for v,b in zip(views,bbox):
v.CropBoxActive = True
v.CropBoxVisible = True
shapeManager = v.GetCropRegionShapeManager()
shapeManager.RemoveCropRegionShape()
v.CropBox = b.ToRevitType()
t.Commit()
OUT= views
好了,今天的分享就到这里了,小伙伴们快去尝试吧~