看到有人给小编的消息说不懂如何去获得构件的参数,这期小编就讲一下如何使用lookup这个工具来获得构件的参数的。
我们知道Revit的每个元素都有一个唯一的ID,用过Navisworks的人都知道我们要查找某一个碰撞的构件是通过它所对应ID的找的,ID就类似我们的身份证号,对应唯一一个元素。让我们先来看看如何找到我们的元素ID吧。
1.打开revit界面,随便画几个构件。
小编这里画了几个机电构件,选择构件后点击Snoop Current Selection(查看当前选择)
2.利用lookup可以查看元素的所有信息
这里大家可以看见它所属的类以及它的类型,元素的ID以及元素的参数。
是不是很简单。现在我们利用这个ID来举一个例子,如何选中这个构件。
还记得这个模板吧,我们继续套用它。
代码语言:javascript复制using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data;
using Autodesk.Revit;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
namespace zpx
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
public class HelloRevit : IExternalCommand
{
public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
{
//创建应用程序对象
Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application;
//创建文档对象
Autodesk.Revit.DB.Document doc = commandData.Application.ActiveUIDocument.Document;
//创建应用程序对象
Autodesk.Revit.UI.UIApplication uiapp = commandData.Application;
//创建文档对象
Autodesk.Revit.UI.UIDocument uiDoc = uiapp.ActiveUIDocument;
//开始事务
Transaction ts = new Transaction(doc, "HelloRevit");
ts.Start();
//创建一个集合来存储构件的ID
ICollection<ElementId> list = new List<ElementId>();
//创建一个收集器
FilteredElementCollector fil = new FilteredElementCollector(doc);
//过滤出桥架类
fil.OfClass(typeof ( CableTray));
//遍历收集器里的每一个元素
foreach(Element id in fil)
{
//如果构件的ID和我们看到的ID(即上面图片里利用lookup看到的构件ID)一致的话把构件的ID放到集合里
if (id.Id.ToString() == "194275")
{
list.Add(id.Id );
}
else
{
MessageBox.Show("没有这个构件");//否则弹框提示没有这个构件
}
}
//UI界面选中集合里的元素ID所对应的构件
uiDoc.Selection.SetElementIds(list);
ts.Commit();
return Result.Succeeded;
}
}
}
我们来调试看一下
我们会发现刚才的那根桥架被选中。
现在我们加几个干扰项,在调试一下。
还是选中了同一个构件。
注意问题:
- 有些小伙伴在写桥架类型的时候会发现有错误提示。 那是因为缺少空间引用,引用using Autodesk.Revit.DB.Electrical;就完美解决了。
- 因为是示意代码,小伙伴们会发现会弹出提示 那是因为在遍历每一个桥架的时候都会进行一次判断,ID不一样就提示一次,最后还是会选择相同ID的构件的哦。
一纸清墨书过往,谁人勘破这离殇。 精讲Revit二次开发,望与君交。