X
返回顶部
当前位置: 首页> BIM资讯> BIM技术

Revit图元怎么移动?图元的基本操作(隔离、移动、旋转、删除)——Dynamo Python系列教程

发布:中文网小编3号 浏览:4231人 分享
发布于:2020-06-16 14:56

    今天,我们来分享几个简单的代码块,分别是隔离、移动、旋转和删除图元,都是比较简单的代码,可以通过简单的查询API得到我们所需的方法,当然这些操作Dynamo里都有现成的节点,我们主要是为了练习。

    一、隔离墙

    隔离比较复杂,我们就先以隔离墙为例,简单学习一下这个方法。

    首先,我们查询API手册,里面有关于隔离的方法,我们查询Isolae,可以得到View.IsolateCategoriesTemporaryMethod这个方法,是隔离当前视图里的图元类别,那么我们就通过这个,来隔离墙类别,从底部的方法,我们看到他的类是ViewClass:

image.png

    所以基本语法就是:

    view.IsolateElementsTemporary(elementIds)

    于是我们就通过获取当前激活视图,然后收集所有的图元,隔离出墙类别即可,代码如下:

# Copyright(c) 2019, 九哥BIMerimport clr
clr.AddReference("RevitServices")import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
clr.AddReference("RevitAPI")import Autodeskfrom Autodesk.Revit.DB import *
import Systemfrom System.Collections.Generic import *
doc = DocumentManager.Instance.CurrentDBDocumentActiveViewElements = FilteredElementCollector(doc, doc.ActiveView.Id).OfClass(Wall).ToElements()elements = UnwrapElement(ActiveViewElements)view = UnwrapElement(doc.ActiveView)
ids = list()
for items in elements:    ids.append(items.Id)
idElements = List[ElementId](ids)
TransactionManager.Instance.EnsureInTransaction(doc)view.IsolateElementsTemporary(idElements)TransactionManager.Instance.TransactionTaskDone()

    注:此处PythonScript节点,不需要输入和输出,运行后直接隔离墙图元。

    二、移动图元

    接下来是移动图元,我们查询API手册,搜索MoveElement,得到Move的方法,参考C#的语法,如下:

image.png

    我们需要提供document,ElementId和新的位置,从底部查询出对应的类为:

image.png

    所以相应的语法为:

    ElementTransformUtils.MoveElements(Document,ElementId,XYZ^translation)。

    相应的代码如下:

import clr
clr.AddReference('RevitServices')import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
clr.AddReference("RevitNodes")import Revitclr.ImportExtensions(Revit.Elements)clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitAPI")import Autodeskfrom Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("System")from System.Collections.Generic import *
elements = UnwrapElement(IN[0])newLocation = IN[1].ToXyz()
Ids = List[ElementId]()for e in elements:    Ids.Add(e.Id)
TransactionManager.Instance.EnsureInTransaction(doc)ElementTransformUtils.MoveElements(doc, Ids, newLocation)TransactionManager.Instance.TransactionTaskDone()
OUT = Ids

    连接方式如下:

image.png

    三、旋转图元

    同样的,我们查询API首层,搜索RotateElement方法,得到参照语法:

image.png

    对应的类为:

image.png

    所以所需语法为:

    ElementTransformUtils.RotateElement(doc,e.Id,rot_axis,angle)

    参考代码如下:

import clr
clr.AddReference('RevitServices')import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
clr.AddReference("RevitNodes")import Revitclr.ImportExtensions(Revit.Elements)clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitAPI")import Autodeskfrom Autodesk.Revit.DB import *doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("System")from System.Collections.Generic import *
elements = UnwrapElement(IN[0])angle = IN[1]
for e in elements:    ref_location = e.Location.Point    rot_axis = Line.Bound(ref_location, XYZ(ref_location.X, ref_location.Y,ref_location.Z+1.0))
   TransactionManager.Instance.EnsureInTransaction(doc)    ElementTransformUtils.RotateElement(doc, e.Id, rot_axis, angle)    TransactionManager.Instance.TransactionTaskDone()

    四、删除图元

    通过查询API手册,我们得知,删除图元,可以直接删除图元Id,所以我们只需要获取图元,然后删除对应Id就行,代码如下:

# Copyright(c) 2019, 九哥BIMerimport clrclr.AddReference("RevitServices")import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocumentels=UnwrapElement(IN[0])
TransactionManager.Instance.EnsureInTransaction(doc)try:  l = doc.(els.Id)except:  l = NoneTransactionManager.Instance.TransactionTaskDone()
OUT=l

    好了,今天得分享就到这里,都是比较简单的代码,参考Dynamo自带的节点,多加练习即可。


BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.wanbim.com),一起共同探讨学习BIM技术,了解BIM应用!