前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Revit二次开发之——lookup的使用方法(第七期)

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

作者头像
一席青衣卧龙城
发布2022-04-21 12:06:12
9390
发布2022-04-21 12:06:12
举报
文章被收录于专栏:Revit二次开发Revit二次开发

看到有人给小编的消息说不懂如何去获得构件的参数,这期小编就讲一下如何使用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二次开发,望与君交。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 精讲Revit二次开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档