管道U形翻弯
继上次探讨了电缆桥架快速翻弯后,末尾提到了管道翻U形弯,这种场景主要出现在管道经过局部高度较高的结构梁和大横截面积风管时使用。经过测试后,这一功能也得以实现。
管道翻U形弯避让不仅要考虑机电专业之间的协同(如管道避让管道,电缆桥架,风管),还要考虑机电与土建专业的协同(如管道避让梁)。
某项目喷淋管道避让结构梁
主要思路是:获取到需要翻弯的管道和与之冲突的管道,电缆桥架,风管,结构梁。将管道在与之冲突的图元的交点进行偏移m后进行拆分成A,B,C三段,将有冲突的管道B向上或向下偏移n,再依据拆分点做出两段立管D和E,最后在A,D,B,E,C之间生成弯头。
先是选择图元和与之冲突的图元,第一个要选择的图元是当前项目的图元,第二个要选择的则可能是当前项目图元也可能是连接项目图元通过下面的一段脚本可以实现:
import clr
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
from Autodesk.Revit.UI.Selection import *
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
TaskDialog.Show("提示","请先选择需翻弯图元,再选择与之碰撞图元")
ele_ref = uidoc.Selection.PickObjects(ObjectType.Element)
eles = []
col_eles = []
link_eles = []
for i in ele_ref:
ele = doc.GetElement(i)
eles.append(ele)
if IN[1]==False:
col_ele_ref = uidoc.Selection.PickObjects(ObjectType.Element)
for j in col_ele_ref:
col_ele = doc.GetElement(j)
col_eles.append(col_ele)
OUT = eles,col_eles
else:
link_ele_ref = uidoc.Selection.PickObjects(ObjectType.LinkedElement)
for k in link_ele_ref:
re_link_ins = doc.GetElement(k)
doc_link = re_link_ins.GetLinkDocument()
link_ele = doc_link.GetElement(k.LinkedElementId)
link_eles.append(link_ele)
OUT = eles,link_eles
获得管道Location(Line)与其碰撞图元Geometry(Solid)的交集(Line)
取上步得到的Line的起始点,进行偏移后,作为管道的拆分点:
使用DynaTools节点包中的Tools.SplitPipeByPoints进行管道拆分,之前管道等距拆分中也有用到过:
通过判断相交找到管道B,并对之进行上下偏移:
其余生成两段立管,管道之间连接生成弯头,与之前方法相同。
运行效果:
欢迎阅读,分享,交流,批评指正。
如转载请注明出处,否则追究法律责任(说说而已,全靠自觉)。