前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Revit中选取元素(第五期)

从Revit中选取元素(第五期)

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

1.Revit API的交互方式有以下两种:

(1)先选择元素,再执行命令。

(2)先执行命令,再选择元素。

2.选择的方式有以下几种:

(1)单选:只能选取一个元素

(2)多选:可以选择多个元素

(3)框选:选取一定范围内的元素

(4)选点:选择试图中的一个坐标点


下面我们演示一下怎么选择元素,这里用API的第一种交互方式来演示:

代码语言: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();
             Selection selection = uiDoc.Selection;
            ICollection<ElementId> selectedIds = uiDoc.Selection.GetElementIds();
            if (0 == selectedIds.Count)
            {
                //如果选中的构件数量为0既没选中任何构件。
                TaskDialog.Show("Revit", "你没有选择任何元素");
            }
            else
            {
                String info = "所选择的元素ID为: ";
                foreach (ElementId id in selectedIds)
                {
                    info += "\n\t" + id.IntegerValue;
                }
                TaskDialog.Show("Revit", info);
            }
  ts.Commit();
   return Result.Succeeded;
          }
     }
 }

然后我们调试代码,要先选中构件再运行。

运行结果为:


大家看网上的其他教程或者参考卢石碧先生写的那本《Revit二次开发基础教程》的时候会发现和我这有出入,他们是这么写的

然后你会发现这里会提示

一般情况下这种提示首先想到是不是缺少引用,但这里是因为Revit版本变动而它开放的API也在变动,这种写法是Revit2014版本的API写法,只要你用的版本是2015版及以上,他就已经改变了API的写法。


很多人到这可能都会有疑问,那我怎么知道它的API变动了啊,小编这就给新手们提供一个方法,那就是去查阅RevitAPI这个文件。

打开RevitAPI通过检索去查看所有开放的API是目前最好最快速的办法

通过这可以看到所有你想知道的东西哦!


下面演示如何通过框选来选择构件

代码语言: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();
           Selection selection = uiDoc.Selection;
            ICollection<Element> selectedIds = uiDoc.Selection.PickElementsByRectangle();
            if (0 == selectedIds.Count)
            {
                // 如果没有选择构件.
                TaskDialog.Show("Revit", "你没有选择任何元素");
            }
            else
            {
                String info = "所选择的元素名称为: ";
                foreach (Element id in selectedIds)
                {
                    info += "\n\t" + id.GetParameters("族")[0].AsValueString().ToString();
                }
                TaskDialog.Show("Revit", info);
            }
  ts.Commit();
   return Result.Succeeded;
          }
     }
 }

一般会这两种常用的选择方法,在平时的大多数Revit二次开发中都是没问题的哦。下面我们来看演示结果:运行之后需要鼠标框选构件

完成框选后释放鼠标就会弹出对话框

这里的代码都是公开给各位的,粘贴过来可能会出现格式变化,如果截图的话,不方便大家复制代码,请大家理解。


一纸清墨书过往,谁人勘破这离殇。

精讲Revit二次开发,望与君交。

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

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

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

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

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