首页 > 其他分享 >Revit二次开发实战02(选择对象Selection)

Revit二次开发实战02(选择对象Selection)

时间:2023-05-20 17:34:21浏览次数:36  
标签:02 Selection return Name 选择对象 二次开发 using Document Revit

Revit二次开发实战

 

Selection主要用于和用户交互,通过用户的选择,设置操作对象,以便进行处理;

Selection属于界面操作的范畴,因此位于UIDocument类下面,而不是Document类下面;

可以选择一个对象、多个对象、选择点、选择矩形框、框选多个对象等;

通过过滤器可以提供一个强大的功能,可以通过各种条件筛选出想要选择的对象;

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RevitHello
{
    //选择一个对象
    [Transaction(TransactionMode.Manual)]
    class CSelectOne : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            //获取UIDocument对象
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            //选择一个元素,并返回该元素的引用
            //这是一个阻塞方法,当没有选择任何对象时,后面的代码不会执行
            Reference reference = uiDoc.Selection.PickObject(ObjectType.Face);
            TaskDialog.Show("GetType().FullName", reference.GetType().FullName);
            //获取Document对象
            Document doc = uiDoc.Document;
            //从引用获取元素对象
            Element element = doc.GetElement(reference);
            //显示元素相关参数
            TaskDialog.Show("element", $"Name={element.Name}\nId={element.Id}\nCategory.Name={element.Category.Name}");
            return Result.Succeeded;
        }
    }
    //选择多个对象
    [Transaction(TransactionMode.Manual)]
    class CSelectMany : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            //获取多个元素引用的列表
            IList<Reference> refList = uiDoc.Selection.PickObjects(ObjectType.Element);
            Document doc = uiDoc.Document;
            StringBuilder sb = new StringBuilder();
            //遍历所有元素
            foreach (var r in refList)
            {
                Element e = doc.GetElement(r);
                string s = $"Name={e.Name},Id={e.Id},Category={e.Category.Name}\n";
                sb.Append(s);

            }
            //显示信息
            TaskDialog.Show("PickObjects", sb.ToString());

            return Result.Cancelled;
        }
    }
    //使用过滤器进行选择
    [Transaction(TransactionMode.Manual)]
    class CSelectFilter : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            //获取文档对象
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            //使用过滤器进行选择
            IList<Reference> refList = uidoc.Selection.PickObjects(ObjectType.Element,new DoorFilter());
            //获取选择对象的信息
            StringBuilder sb = new StringBuilder();
            foreach (var r in refList)
            {
                Element e = doc.GetElement(r);
                sb.AppendLine($"Name={e.Name},Id={e.Id}");
            }
            //显示信息
            TaskDialog.Show(typeof(CSelectFilter).Name,sb.ToString() );

            return Result.Cancelled;
        }
    }

    class DoorFilter : ISelectionFilter
    {
        public bool AllowElement(Element elem)
        {
            if (elem is FamilyInstance) return true;
            return false;
        }

        public bool AllowReference(Reference reference, XYZ position)
        {
            return true;
        }
    }
}

 

标签:02,Selection,return,Name,选择对象,二次开发,using,Document,Revit
From: https://www.cnblogs.com/zhangdezhang/p/17417505.html

相关文章

  • C/C++家谱管理[2023-05-20]
    C/C++家谱管理[2023-05-20]家谱管理中国历史悠久,中华民族有五千年的文明史。从远古的神话传说时代、尧舜禹的禅让、夏商西周、东周春秋战国的百家争鸣、秦汉一统、三国战乱、魏晋南北朝的民族大融合、隋唐五代光辉灿烂的文化直到宋元明清帝制结束。五千年的历史留给我们的是无尽......
  • Revit二次开发实战
    Revit二次开发实战     第一个程序 RevitHello插件安装Revit2019并注册安装、注册教程百度一下;安装VS2019Community安装教程百度一下;安装两个Revit插件RevitLookup和AddInManager;AddInManager.dll、Autodesk.AddInManager.addin、RevitLo......
  • CVPR 2023 | 神经网络超体?新国立LV lab提出全新网络克隆技术
    前言 神经网络开发到100%会发生什么?神经网络的究极形态又是什么?何为网络超体?上述问题的答案可能可以在电影超体(Lucy)中找到。本文转载自机器之心仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息......
  • APP-PER-5002: Oracle 人力资源管理系统无法检索用户类型配置文件选项的值。
    打开设置“职位层次结构"窗体时提示错误:APP-PER-5002:Oracle 人力资源管理系统无法检索用户类型配置文件选项的值。请确保为您的责任正确设置此值。解决方式:为该职责(例如职责全称:PO_超级管理员(CUX)) 设置配置文件(路径:SYSTEMADMINISTRATOR>> 配置文件>>系统。)。 ......
  • 凄凉的世界。-- THUSC2023 游记
    ChangeLog:2023.05.20开坑。2023.05.20基本完稿。书接上回.其实不太想写的。但是还是写一下吧。试机。第一题我用3min就过掉了,比较简单(大雾)。第二题我磕了半天,最后写了个64pts的做法。出来一看发现四个橘子写了100+100+5,好猛。然后摆了一上午,Day1开始......
  • 全新的照片后期处理软件Lightroom Classic 2022(lrc2022)Mac版
    LightroomClassic2022是一款全新的照片后期处理。通过使用其卓越的图形处理功能,该软件不仅可以帮助您轻松地制作出创意的照片,而且还可以为您带来意想不到的效果。对照片,视频和图像编辑工具进行优化。这些新功能使您可以在处理图像时使用编辑器之外的方法进行编辑,从而节省时间并......
  • gmpy2库常用函数------2023.5.20
    1.mpz():初始化大整数importgmpy2gmpy2.mpz(909090)result:mpz(909090)2.gcd(a,b):求大整数a,b的最大公因数importgmpy2gmpy2.gcd(6,18)result:mpz(6) 3.invert(x,m):求大整数x模m的逆元yimportgmpy2#4*6≡1mod23gmpy2.invert(4,23)result:mpz(6)4.is_eve......
  • Revit二次开发 知识点总结(表格)
    Revit二次开发知识点总结(表格) 宏Macro概述宏是一种程序,用来实现重复任务的自动化;宏可以执行一系列预定义的步骤,从而完成特定任务;模块是对宏的分组;实际上是一个编程项目;应用程序级的宏:可以在任何文档中使用,可以自行运行;可以独立于Revit运行;可以向Revit添加工具;......
  • 开源之夏 2023 | 欢迎报名Rust相关项目
    ......
  • 1102 Invert a Binary Tree
    题目:ThefollowingisfromMaxHowell@twitter:Google:90%ofourengineersusethesoftwareyouwrote(Homebrew),butyoucan'tinvertabinarytreeonawhiteboardsofuckoff. Nowit'syourturntoprovethatYOUCANinvertabinarytree!I......