Revit二次开发--过滤对象(Revit 2014)

2023-10-26

1.获取元素的ID
通过UIDocument的Selection属性获取当前视图中选中的元素的ID/类型。

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


namespace GetAllElements
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.
    ReadOnly)]
    public class Document_Selection : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            try
            {
                //Select some elements in Revit before invoking this command

                //Get the handle of current document.
                UIDocument uidoc = commandData.Application.ActiveUIDocument;
                //Get the element selection of current document.
                Selection selection = uidoc.Selection;
                ElementSet collection = selection.Elements;

                if (0 == collection.Size)
                {
                    //If no elements selected.
                    TaskDialog.Showing("Revit", "You haven't selected any elements.");
                }
                else
                {
                    String info = "Ids of selected elements in the document are: ";
                    foreach (Element elem in collection)
                    {
                        info += "\n\t" + elem.Id.IntegerValue;//所选元素的ID
                        //info += "\n\t" + elem.GetTypr().ToString(); 此为所选元素的类型
                    }
                    TaskDialog.Show("Revit", info);
                }
            }
            catch (Exception e)
            {
                message = e.Message;
                return Autodesk.Revit.UI.Result.Failed;
            }
            return Autodesk.Revit.UI.Result.Succeeded;
        }
    }
}

2.用过滤器获取元素

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


namespace GetAllElements
{
    [Autodesk.Revit.Attributes.Transaction(TransactionMode.ReadOnly)]
    public class Document_Selection : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document document = revit.Application.ActiveUIDocument.Document;
            //Create a Filter to get all the doors in the document
            ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(FamilyInstance));
            ElementCategoryFilter doorsCategoryfilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
            LogicalAndFilter doorInstancesFilter = new LogicalAndFilter(familyInstanceFilter, doorsCategoryfilter);
            FilteredElementCollector collector = new FilteredElementCollector(document);
            ICollection<ElementId> doors = collector.WherePasses(doorInstancesFilter).ToElementIds();

            String prompt = "The ids of the doors in the current document are: ";
            foreach (ElementId id in doors)
            {
                prompt += "\n\t" + id.IntegerValue;
            }

            //Give the user some information
            TaskDialog.Show("Revit", prompt);
        }
    }
}

3.获取所选元素的全部值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using System.Windows.Forms;
using Autodesk.Revit.UI.Selection;



//如果出现缺少using指令或程序集引用,去API上查

//点击revit中的墙,或者其他东西,会出现这个东西的全部信息

namespace GetAllParamentsValues
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class GetAllParamentsValues : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData CommandData, ref string messages, ElementSet elements)
        {
            UIApplication uiApp = CommandData.Application;
            Autodesk.Revit.ApplicationServices.Application app = uiApp.Application;
            Document doc = uiApp.ActiveUIDocument.Document;

            Selection sel = uiApp.ActiveUIDocument.Selection;

            //please select an element

         //   sel.StatusbarTip = "Please select an element";
            sel.PickPoint("Please select an element");
         //   sel.PickOne();
            Element elemPick = null;

            foreach (Element elem in sel.Elements)
            {
                elemPick = elem;
                break;
            }

            string strParamInfo = null;
            foreach (Parameter param in elemPick.Parameters)
            {
                if(param.AsValueString()!=null)
                    strParamInfo += param.Definition.Name + "value is :" + param.AsValueString() + "\n";
                else
                    strParamInfo += param.Definition.Name + "value is :" + param.AsString() + "\n";
            }
            MessageBox.Show(strParamInfo);
            return Autodesk.Revit.UI.Result.Succeeded;
        }
    }
}

例如,在revit中选取一面墙,就会得到以下信息:
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Revit二次开发--过滤对象(Revit 2014) 的相关文章

  • 在 Java 中使用 class 关键字

    我真的不明白如何class关键字在某些情况下有效 例如 get ClientResponse class 方法采用ClientResponse class 当它获取它时如何使用它 与仅传递它的实例相比有什么优点 SomeClass clas
  • C# 为什么使用静态类? [复制]

    这个问题在这里已经有答案了 可能的重复 何时在 C 中使用静态类 https stackoverflow com questions 241339 when to use static classes in c sharp 我经常将我的类设
  • Python 中的方法参数[重复]

    这个问题在这里已经有答案了 假设我有这样的代码 class Num def init self num self n num def getn self return self n def getone return 1 myObj Num
  • 为什么Django的Meta是一个旧式类?

    我注意到在 Django 模型中 有一个class Meta这对模型做了一些额外的定义 我的问题是 为什么这是一个老式的课程 即不子类化object 这是有原因的还是这只是一种习俗 我可以在我的项目中将其作为新式课程吗 我相信没有真正的原因
  • Java:一个文件中的多个类声明

    在 Java 中 您可以在单个文件中定义多个顶级类 前提是其中最多有一个是公共的 请参阅JLS 7 6 http docs oracle com javase specs jls se8 html jls 7 html jls 7 6 参见
  • 在 Node.js 中反序列化后重新将对象与其类关联

    我正在为一些特定于应用程序的对象编写一个简单的序列化 反序列化框架 考虑以下 use strict function Dog name this name name Dog prototype constructor Dog Dog pro
  • C++ 输入运算符重载

    我正在尝试重载我创建的 UserLogin 类上的输入运算符 不会引发编译时错误 但也不会设置值 一切都在运行 但 ul 的内容仍然存在 字符串 id 是 sally 登录时间为00 00 注销时间为 00 00 入口点 include
  • 使用 Pyside + Python 中的类进行样式设计

    如何使用类更好地设计该应用程序的样式 而不是为每个看起来相同的标签重新定义相同的样式 更改样式变得很痛苦 因为我必须仔细检查每个看起来相同的标签并粘贴代码以进行匹配 usr bin python coding utf 8 import sy
  • 从 Java 内部编译外部 .java 文件

    我正在制作一个工具 可以编写 java 文件 然后 希望 将这些文件编译为 class 文件 在整个过程中 用户选择写入多个 java 文件的文件目录 现在我想让程序编译这些Java文件 JavaCompiler是你的朋友 检查文档here
  • Typescript 类可以实现可调用接口吗?

    Typescript 接口允许定义函数风格的调用签名 因此 interface A x number number 这可以通过例如一个函数 const a A function x number number return 1 是否可以使用
  • C26444 避免使用自定义构造和销毁未命名对象(es.84)

    谁能帮我解决问题吗 以前我只有一种类方法 它是无效的显示 向量与列表 字符串和过滤器 get display函数在里面 然后我决定将这些函数分成矢量 get 和 void display 但是当我返回一个新的修改向量时向量获取 出现错误 C
  • C++、多态性和迭代器

    我想要一个存储接口 抽象类 和一组存储实现 SQLite MySQL Memcached 用于存储已知类的对象并从存储中检索子集 对我来说 清晰的界面是 class Storable int id blah blah blah string
  • 将类型包装在结构中会导致额外的填充吗? [复制]

    这个问题在这里已经有答案了 可能的重复 具有单个元素的结构体的大小 https stackoverflow com questions 3585033 size of struct with a single element 给定任何类型A
  • 返回修改后的类和使用 type() 之间的区别

    我想这更像是一个 python 问题 而不是 django 问题 但我无法在其他地方复制这种行为 所以我将使用无法按预期工作的确切代码 当我发现这个工厂函数片段时 我正在 django 中处理一些动态表单 def get employee
  • 如何在 CodeIgniter 中创建库类的多个实例?

    我想在 CodeIgniter 中创建一个类的多个实例 我已将我的类创建为一个库 但无法弄清楚用于创建多个实例的语法 来自 CodeIgniter 用户指南 CI 用户指南 加载器类 http codeigniter com user gu
  • 在 PHP 中使用自动加载类时是否存在性能下降?

    目前 我通过在网站的每个页面上包含 all inc php 文件来加载所有类 然后该文件继续包含我将在整个网站上使用的所有配置 类 函数等 我的问题是 我经常使用仅与网站的某些页面 部分相关的类 因此我经常在页面开头包含一堆不会使用的类 显
  • PHP5。将数组声明为类成员的两种方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当将数组声明为类成员时 应该采取哪种方式 class Test1 private paths array public function con
  • 如何找到调用该方法的ABAP程序/FM?

    我是SAP SD模块专家 经常需要调试代码 有时我需要知道哪些程序 FM 地址特定的表 我用使用地点在 SE11 中的表中 它会找到寻址该表的类方法 但是当我使用使用地点对于类方法 系统找不到任何内容 你知道如何找到调用此方法的程序或FM吗
  • 初始化类成员向量的大小失败

    我是 C 新手 遇到了这个问题 这是我的代码 class A std vector
  • 尽管导入了类,但未定义类

    我似乎遇到了一个非常令人困惑的错误 尽管导入了包含我的类的 py 文件 Python 仍然坚持认为该类实际上并不存在 testmodule py中的类定义 class Greeter def init self arg1 None self

随机推荐

  • jvm堆大小的设置

    问题引入 Xmx10240m Xms10240m Xmn5120m XXSurvivorRatio 3 其最小内存值和Survivor区总大小分别是 10240m 2048m 解析 Xmx 最大堆大小 Xms 初始堆大小 Xmn 年轻代大小
  • es6常见的相关问题

    文章目录 ES6常见的相关问题 1 var let const之间的区别 1 var 注意点1 变量提升 注意点2 块级作用域 注意点3 重复声明 2 let ES6 注意点1 变量提升 不存在 注意点2 块级作用域 注意点3 重复声明 注
  • ICCV2019 oral papers

    ICCV2019 oral papers Exploring Randomly Wired Neural Networks for Image Recognition Paper Video Progressive Differentiab
  • 10个良心网站推荐

    对效率工具感兴趣的可以看一看我的往期视频 10个良心网站推荐第三期 10个良心网站推荐 10个良心网站推荐第二期 av76255938 13个逆天网站工具 av70359966 10个改变生活的网站 10个改变生活的网站 本期推荐 1 Vi
  • ctf从零开始学0x02 ctf的逆向reverse 常见思路和如何入门(文末)

    逆向是啥 很多人一开始都感到很糊涂 下面给出相关的概念 对于相关如何打逆向的基础可以看 https blog csdn net qq 43504939 article details 90246409 其中 80 的题目都与crypto结合
  • 005-1基于深度优先搜索查找图中连通路径

    基于图的深度优先搜索 图学习笔记索引 本文参考 算法 第4版 基于图的深度优先搜索 1 自定义输入流In 2 定义背包类Bag 3 无向图G的构造 4 深度优先搜索DepthFirstSearch 5 使用深度优先搜索查找连通路径Depth
  • Win7 X86上搭建Android开发环境

    Android SDK有Mac Linux和Windows三个平台的版本 处于个人习惯 决定在Win7 X86的电脑上搭建Android开发环境 windows平台搭建Android开发环境 需要以下相关安装包 1 JDK6 需下载并安装
  • Apollo 应用与源码分析:CyberRT-protobuf

    目录 概念 特点 优点 缺点 文件的创建 1 字段规则 2 数据类型 3 字段名称 4 字段编号 文件的编译 protobuf 编译命令编译 protobuf cmake 方式编译 使用bazel 编译 在protobuf 文件夹下创建bu
  • python实现超市商品销售管理系统

    class Goods object def init self id name price self id id self name name self price price def str self info 编号 s t商品名称 s
  • 使用VirtualBox安装Ubuntu虚拟机 - 完整教程

    前言 本教程将演示通过 VirtualBox 安装 Ubuntu 请提前下载好以下文件哦 VirtualBox 软件 Ubuntu 的 镜像文件 iso 下载地址 VirtualBox 版本 VirtualBox 7 0 2 官网链接 ht
  • eclipse常用快捷键

    Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合 通过这些组合可以更加容易的浏览源代码 使得整体的开发效率和质量得到提升 1 ctrl shift r 打开资源 这可能是
  • 如何安装iGG

    优点 1 安装 iGG 不能访问视频网站 但可以支持GG学术 GG搜索进行学术研究 2 作为GG扩展程序客户端只用登陆一次 非常便捷 3 性价比高 充值会员手机端也可以安装使用 步骤
  • 学习大数据所需的关键知识

    在人工智能领域 学习大数据技术是一项重要的任务 随着数据的快速增长和各行各业对数据的需求不断增加 掌握大数据技术可以帮助我们有效地处理 存储和分析海量数据 本文将介绍学习大数据所需的关键知识 并提供相应的源代码示例 数据存储和处理 在学习大
  • 【背包问题】之01背包和完全背包

    文章目录 1 01 背包 1 1 题目描述 1 2 基本思路 1 3 空间上的优化 1 4 算法实现 1 5 递归版本 1 6 按照递归修改的动态规划版本 1 7 总结 2 完全背包 2 1 题目描述 2 2 基本思路 2 3 优化一下 2
  • C语言:冒泡排序法:将若干字符串按字母顺序(由小到大)排序输出

    include
  • 大二上详细计划(量化到周)

    目录 前言 统筹安排 每周量化 每周进度 总体 花絮 前言 1 思来想去 决定对大二上的四个月进行一个安排 量化每周任务 具体到一本书看多少页 一套视频学多少 每个节点任务完成度 2 我们都是思想上的巨人 行动上的矮子 各种各样的欲望会阻碍
  • SpringCloud:Gateway之StripPrefix使用

    StripPrefix 过滤配置 很多时候也会有这么一种请求 用户请求路径是 api goods 而真实路径是 goods 这时候我们需要去掉 api才是真实路径 此时可以使用StripPrefix功能来实现路径的过滤操作 如下配置 ser
  • c语言时间序列预测,2.5.2 扩展案例:预测离散值时间序列

    2 5 2 扩展案例 预测离散值时间序列 假设我们观察到取值为0或1的数据 每个时刻一个值 为了了解具体应用 假设这是每天的天气数据 1代表有雨 0代表没有雨 假设已经知道最近几天是否下雨 我们希望预测明天是否会下雨 具体而言 对于某个k值
  • C++指针

    指针是一个存放内存地址的变量 通过指针 可以间接操作其它变量 指针的常用操作 int a 0 定义一个变量 int p a 定义一个指针 并指向a p 1 通过指针间接操作a 此时a 1 注意 p的类型是int 访问区域为4字节 Ps in
  • Revit二次开发--过滤对象(Revit 2014)

    1 获取元素的ID 通过UIDocument的Selection属性获取当前视图中选中的元素的ID 类型 using System using System Collections Generic using System Linq usi