12. Revit API: Document、Element

12. Revit API: Document、Element

前言

还是先讲一下Document吧,不然Selection不好讲,那涉及到了挺多东西的,比元素(Element)和各类Filter,这些都与Document有关,所以先简单讲一下这个。


一、Document

在Revit中,名叫Document的类有两个,一个是在DB命名空间下,另一个在Creation命名空间下(前面讲过还有个Application)。这一篇我们讲的是DB下的Document。

UI提供到DB的入口,前面的Demo里早已出现了很多次

 UIApplication uiApp = commandData.Application;
 UIDocument uiDoc = uiApp.ActiveUIDocument;
 Document doc = uiDoc.Document;

这样,我就就获取到了所需要的Document。

1.1. Document的作用

我们知道Document就是Revit中打开的那些.rft.rfa文件。View就是打开后的中各种三维、平面视图。

既然就是项目文件,那么Document自然承担着对项目增删改查的工作,或者说增删改查都是在Document上进行。

  • ,所以要提供创建操作入口。在模型上,就是Creation命名空间下的那些类,和DB各专业中定义的类;在视图上,就是View相关的类。

  • ,便是删。当然这只是直观的体现,Revit定义下的元素(Element)之间是存在各种关联的。

  • ,可以是对项目文档的改,也可以是对族文档的,同样用到上面那些类。

  • ,应该是我们最常用到的。选择,对应UI.Selection;范围查找,对应Filter

可以看到,大部分动作的执行都被细分化了,由其它类承担。

回到Document类本身,其本身的功能就比较有限了,可以说是只“保留”了与文档有关的部分。

1.2. Document类的成员

Document类成员比较多,按功能来划分来看的花还是比较简单的,部分我没有用到的,就不写了,还是需要自己去看看的。

1.2.1. 属性
属性描述
ActiveProjectLocation检索当前活动的项目位置,可能有用,插眼
ActiveView
Application
活动的View
Create
FamilyCreate
Creation下的实例,里面提供了一些创建模型相关的方法,后面专门讲
FamilyManager打开一个族管理器实例,调整族参数(Parameter)时很有用,后面专门讲
DisplayUnitSystem当前的显示单位,比如毫米,这里涉及到单位转换(Unit),后面专门讲
IsFamilyDocument
IsModifiable
当前文档是否为族文档,在修改族时会用到
当前是否可以进行修改。这个与事件(Transaction)有关,后面专门讲
其它关于项目的信息

还是需要自己看看,扫一眼也行,虽然不一定会用到,但也要知道有些什么

比如还可以拿到项目信息(ProjectInformation),就是下面这个,在出分析文档时可能用到。

在这里插入图片描述

1.2.2. 方法

这里就不列表格了。Docuemnt方法总共分为一下几大类:

  1. 特定格式文件的导入/导出/链接,分为Import,Export,Link三种,有很多重载。
  2. 文档本身的关闭、保存。
  3. 关于项目的一些信息检索或调整,如设置显示单位,设置位置。
  4. 对文档中元素(Element)的修改操作。
    • 三种线的转换:模型线(ModelCurve)、详图线(DetailCurve)、符号线(SymbolicCurve)。关于区别,可以参考这个视频
    • 删除元素:Delete(..)
    • 查找元素:GetElement(..)

方法大概就这些了,4是必然要用到的,其它的看需要吧。

1.2.3. 事件

Document上的事件,就文档关闭/保存、文档/视图打印。

那文档变化事件呢?哈哈,它在Application上,很好理解,由更上一级的来监听文档变化,那只有Application了。


二、Element

Element是Revit Document的主要组成部分,是一系列可操作交互实体基类。每个Element都有一个ElementId,其有一个Int类型的值,且不重复。
从API文档中,可以看到Element有极多的子类,所幸的是我们暂时不需要去了解它们,因为Revit API毕竟是太多了,我们按需使用即可。
12.Element.png

2.1. Element常用类成员

我发现Element上有许多我没有了解的东西,这里便不多讲。

此处内容有限,请去查看API文档

Element上有几个比较有用的东西:

  1. IdUniqueId:元素ID,唯一。

    前者在文档中易变,不稳定。后者样式是Guid ,稳定不变,可用于外部存储。

  2. Location:元素的位置。

    可以获取到的值有3种:nullLocationCurveLocationPoint
    这里解释一下:
    ①当元素是可以由线表示的,如梁、直管道,获取到的就是curve,可以拿到两个点操作点。
    ②当元素是那种放上去就行了的,基本就是用点表示位置,这类占了大部分。
    ③部分模型是没有位置信息的,它们没有位置的概念。如DirectShape,或者是体量族?我接触到的一些体量族是没有位置信息的。

  3. Parameters:元素的参数,很有用。

    元素的参数是很有用的,Revitbi’j

  4. Geometry:元素的几何结构。

    所谓几何结构,在Revit中可以简单的理解为就是Solid,就是GeometryObject派生出的那些。
    当然,Geometry还包含的材质信息,这个我目前还没有使用,不过后面会写。
    12.GeometryObject.png

  5. BoundingBox:元素的包围盒,包围盒是轴对齐的(AABB)。

    包围盒这样直接获取的可能不是预期的(刚刚包裹可见的模型),关于如何获取刚好包裹住模型的包围盒,请看Revit获取元素Solid和计算包围盒。

总结

这篇几乎没有写运用相关的东西,大部分API文档上直接摘的,还远不够详细,还是需要去看文档的。
上面新提到了Parameter、GeometryObject等,后面会详细得写一写。
至于下一篇,先写过滤器(Filter),然后接着写选择器(Selection),暂定这样吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/768242.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解码AWS EC2:塑造云服务器新标杆的五大核心优势

在云计算领域,亚马逊弹性计算云(Amazon Elastic Compute Cloud, 简称EC2)作为AWS的明星服务,凭借其卓越的性能、灵活性和广泛的生态系统,已经成为企业构建云上基础设施的首选。EC2不仅仅是一个简单的云服务器租用服务&…

【C++】多态详解

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 一、多态概念 二、多态的定义及实现 1. 多态的构成条件 2. 虚函数 2.1 什么是虚函数 2.2 虚函数的重写 2.3 虚函数重写的两个…

【坚果识别】果实识别+图像识别系统+Python+计算机课设+人工智能课设+卷积算法

一、介绍 坚果识别系统,使用Python语言进行开发,通过TensorFlow搭建卷积神经网络算法模型,对10种坚果果实(‘杏仁’, ‘巴西坚果’, ‘腰果’, ‘椰子’, ‘榛子’, ‘夏威夷果’, ‘山核桃’, ‘松子’, ‘开心果’, ‘核桃’&a…

C++基础(三):C++入门(二)

上一篇博客我们正式进入C的学习,这一篇博客我们继续学习C入门的基础内容,一定要学好入门阶段的内容,这是后续学习C的基础,方便我们后续更加容易的理解C。 目录 一、内联函数 1.0 产生的原因 1.1 概念 1.2 特性 1.3 面试题 …

nohup java -jar 启动java项目

hi,我是程序员王也,一个资深Java开发工程师,平时十分热衷于技术副业变现和各种搞钱项目的程序员~,如果你也是,可以一起交流交流。 今天我们聊聊linux中运行java jar包的问题~ 理解nohup命令 nohup命令的基本概念 noh…

Flutter Navigator.popUntil 参数传递

Flutter 使用页面传参 以下是 在flutter 中页面传参的常用形式,都可以有有直接的传值参数提供。 Navigator.push #跳转到指定页面 压栈路由表Navigator.pushReplacement #关闭当前页面 跳转到指定页面压栈路由表Navigator.pus…

[单master节点k8s部署]16.监控系统构建(一)Prometheus介绍

prometheus prometheus是继k8s之后,第二个被托管到CNCF的项目,是一个开源的监控报警系统。 1.prometheus支持多维数据模型,每一个时间序列数据都由metric度量指标名称和它的标签label组成一组键值对。 2.Prometheus有自己的PromQL查询语言…

【刷题汇总--简写单词、dd爱框框、除2!】

C日常刷题积累 今日刷题汇总 - day0031、简写单词1.1、题目1.2、思路1.3、程序实现 - 思路11.4、程序实现 - 思路2(优化) 2、dd爱框框2.1、题目2.2、思路2.3、程序实现 - 蛮力法2.4、程序实现 - 同向双指针(滑动窗口) 3、除2!3.1、题目3.2、思路3.3、程序实现 4、题目链接 今日…

Trident Dehazing Network

Trident去雾网络 【Trident:三齿的,三叉戟】 摘要 针对现有的去雾方法对非均匀雾霾的鲁棒性差,以及高雾霾区域的信息未知且难以估计,导致去雾效果模糊的问题,提出了一种由粗到精的模型Trident Dehazing Network&…

基于iview.viewUI实现行合并(无限制/有限制合并)【已验证可正常运行】

1.基于iview.viewUI实现行合并(列之间没有所属对应关系,正常合并) 注:以下代码来自于GPT4o:国内直连GPT4o 只需要修改以下要合并的列字段,就可以方便使用啦 mergeFields: [majorNo, devNam, overhaulAdvic…

查找python包的安装路径

前提:自己已经安装过的包 1、打开任一python解析器,如VSCode 2、 以matplotlib为例,敲下面命令 import matplotlibprint(matplotlib.path) 3、运行代码就可以了 需要注意: 部分包没有path(比如time)&am…

使用 Java Swing 和 XChart 创建多种图表

在现代应用程序开发中,数据可视化是一个关键部分。本文将介绍如何使用 Java Swing 和 XChart 库创建各种类型的图表。XChart 是一个轻量级的图表库,支持多种类型的图表,非常适合在 Java 应用中进行快速的图表绘制。 1、环境配置 在开始之前&…

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下…

韩语日常口语留学韩语旅游韩语口语柯桥语言培训

韩语每日一词打卡:행정적[행정적]【名词】行政 原文:나라는 항상 행정적 명령을 통해 경제운행을 조절합니다. 意思:国家经常通过行政命令去调节经济的运行。 【原文分解】 1、항상[항상]总是 ,经常 2、나라[나라]国家 3、명령[명:녕]命令 …

计算机网络——数据链路层(点对点协议PPP)

点对点协议PPP的概述 对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。 它主要应用于两个场景: 用户计算机与ISP之间的链路层协议就是点对点协议 PPP,1999年公布了回以在以太网上运行的PPP协…

JAVA每日作业day7.1-7.3小总结

ok了家人们前几天学了一些知识,接下来一起看看吧 一.API Java 的 API ( API: Application( 应用 ) Programming( 程序 ) Interface(接口 ) ) Java API 就是 JDK 中提供给我们使用的类,这些类将底层 的代码实现封装了起来&#x…

10 docker 安装 mysql详解

目录 一、安装mysql 1. 镜像获取 2. 简单版 2.1. 使用mysql镜像 2.2. 建库建表插入数据 2.3. 外部win 连接并插入中文数据测试 2.4. 简单版本问题 3. 创建容器-实战版 3.1. 新建容器实列并挂载卷 3.2. 新建my.cnf , 解决中文乱码 3.3. 重启容器验证 3.4. 总结 一、…

2024年精选推荐的16个向量数据库:提升你的AI应用性能

在人工智能时代,向量数据库已成为数据管理和AI模型不可或缺的一部分。向量数据库是一种专门设计用来存储和查询向量嵌入数据的数据库。这些向量嵌入是AI模型用于识别模式、关联和潜在结构的关键数据表示。随着AI和机器学习应用的普及,这些模型生成的嵌入…

聊一聊领域驱动和贫血

写在前面 前段时间跟领导讨论技术债概念时不可避免地提到了代码的质量,而影响代码质量的因素向来都不是单一的,诸如项目因素、管理因素、技术选型、人员素质等等,因为是技术债务,自然就从技术角度来分析,单纯从技术角…

UOS系统中JavaFx笔锋功能

关于笔锋功能,网上找了很久,包括Java平台客户端,Android端,相关代码资料比较少,找了很多经过测试效果都差强人意,自己也搓不出来,在UOS平台上JavaFX也获取不到压力值,只能用速度的变…