15036188778

您所在位置: 首页> 学习课程> python培训班 | 图元的基本操作(隔离、移动、旋转、删除)

python培训班 | 图元的基本操作(隔离、移动、旋转、删除)

发布百知教育 来源:学习课程 2019-12-04

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


一、隔离墙


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


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



python培训班


所以基本语法就是:

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()


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


二、移动图元


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


































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


连接方式如下:


python培训


三、旋转图元


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


python培训班


 对应的类为:



python培训班


 所以所需语法为:


 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.CreateBound(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.Delete(els.Id)except:  l = NoneTransactionManager.Instance.TransactionTaskDone()
OUT=l


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


python培训班:http://www.baizhiedu.com/python2019













上一篇:最全入门教程:Linux下如何将Python3设置为Python默认版本

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请