Revit二次开发之——lookup的使用方法(第七期)

2022-04-21 12:06:12 浏览数 (2)

看到有人给小编的消息说不懂如何去获得构件的参数,这期小编就讲一下如何使用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;
          }
     }
 }

我们来调试看一下

我们会发现刚才的那根桥架被选中。

现在我们加几个干扰项,在调试一下。

还是选中了同一个构件。


注意问题:

  1. 有些小伙伴在写桥架类型的时候会发现有错误提示。 那是因为缺少空间引用,引用using Autodesk.Revit.DB.Electrical;就完美解决了。
  2. 因为是示意代码,小伙伴们会发现会弹出提示 那是因为在遍历每一个桥架的时候都会进行一次判断,ID不一样就提示一次,最后还是会选择相同ID的构件的哦。

一纸清墨书过往,谁人勘破这离殇。 精讲Revit二次开发,望与君交。

0 人点赞