12. Revit API: Document、Element

news2024/11/18 19:33:37

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.coloradmin.cn/o/1890799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛!手机、TV双端聚合,免费可同步!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 有不少小伙伴闲时会选择观看游戏、户外、娱乐等各类的直播,而关注的主播可能驻留在不同直播平台,需要下载多个APP,且切换非常不方便。 所以今天给大…

程序化交易广告及其应用

什么是程序化交易广告? 程序化交易广告是以实时竞价技术即RTB(real-time bidding)为核心的广告交易方式。说到这里,你可能会有疑问:像百度搜索关键词广告还有百度网盟的广告,不也是CPC实时竞价的吗&#x…

永劫无间国服延迟高、报错、卡顿的处理措施一览

永劫无间国服延迟高、报错、卡顿怎么办?快速解决办法分享 第一个办法:改善延迟 如果是一直遇到永劫无间国服延迟高、报错、卡顿的问题,重启游戏也不管用的话,那应该就是网络问题,玩家可以启动雷神,让其快速…

【CV炼丹师勇闯力扣训练营 Day22:§7 回溯1】

CV炼丹师勇闯力扣训练营 代码随想录算法训练营第22天 回溯法其实就是暴力查找,回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合切割…

番外篇 | 手把手教你如何去更换YOLOv5的检测头为ASFF_Detect

前言:Hello大家好,我是小哥谈。自适应空间特征融合(ASFF)的主要原理旨在解决单次检测器中不同尺度特征的不一致性问题。具体来说,ASFF通过动态调整来自不同尺度特征金字塔层的特征贡献,确保每个检测对象的特征表示是一致且最优的。本文所做出的改进是将YOLOv5的检测头更换…

JVM原理(十一):JVM虚拟机六种必需对类进行初始化的情况

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。Java天生可以动态扩展的语言特性就是依赖运行期间动态加载和动态链接这个特…

西藏文旅与薛之谦梦幻联动共赴一场灵魂的西藏之约

【西藏文旅与薛之谦的梦幻联动:共赴一场灵魂的西藏之约】在这个快节奏的时代,每一颗渴望自由与宁静的心在寻找一片净土,而西藏,便是那片无数人梦寐以求的圣地。当西藏文旅以一句“啊啊啊 可以dream一个西藏吗?&#xf…

小米10屏幕录制在哪里?看了这篇就会了!

无论你是想记录手机游戏的精彩瞬间,还是想制作教学视频,或者只是想保存某个应用的操作教程,屏幕录制都能轻松帮你实现。那么,对于小米10用户来说,屏幕录制功能究竟在哪里?又有哪些录屏软件可以选择呢&#…

windows电脑蓝屏解决方法(亲测有效)

如果不是硬件问题,打开终端尝试以下命令 sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth

等保2.0 实施方案

一、引言 随着信息技术的广泛应用,网络安全问题日益突出,为确保信息系统安全、稳定、可靠运行,保障国家安全、公共利益和个人信息安全,根据《网络安全法》及《信息安全技术 网络安全等级保护基本要求》(等保2.0&#x…

如何用Python实现三维可视化?

Python拥有很多优秀的三维图像可视化工具,主要基于图形处理库WebGL、OpenGL或者VTK。 这些工具主要用于大规模空间标量数据、向量场数据、张量场数据等等的可视化,实际运用场景主要在海洋大气建模、飞机模型设计、桥梁设计、电磁场分析等等。 本文简单…

OpenCV直方图计算函数calcHist的使用

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 图像的直方图是一种统计表示方法,用于展示图像中不同像素强度(通常是灰度值或色彩强度)出现的频率分布。具体来说…

居然这么简单就能实现扫雷游戏!

目录 一.思路 1.成果展示 2.思路 二.具体操作 1.创建"棋盘" 2.初始化雷 3.布置雷 4.打印 5.排除雷 三.代码实现 1.test.c文件 2.thunder.h文件 3.thunder.c文件 Hello,大家好,今天我们来实现扫雷游戏,希望这一篇博客能给带给大家一…

Hadoop集群部署【一】HDFS详细介绍以及HDFS集群环境部署【hadoop组件HDFS笔记】(图片均为学习时截取的)

HDFS详细介绍 HDFS是什么 HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一 全称是:Hadoop Distributed File System(Hadoop分布式文件系统);是Hadoop技术栈内提供的分布式数据存储解决方案 可以在多台服务器上构建存储集群&…

对秒杀的思考

一、秒杀的目的 特价商品,数量有限,先到先得,售完为止 二、优惠券的秒杀 和特价商品的秒杀是一样的,只不过秒杀的商品是优惠券 三、秒杀的需求 秒杀前:提前将秒杀商品,存放到Redis秒杀中:使…

小红书“心愿单“薅羊毛活动,亲测有效!不是长期!!

大家好!不知道你们有没有发现,最近小红书的"心愿单"活动在朋友圈都快刷频了,我也好奇点进去看了以下,还真有人通过这个活动以极低的价格甚至免费获得了商品。我也去测试了以下,方法没问题,就是一…

HTTPS数字证书验证论述

1 概述 网络请求方式通常分为两种,分别是HTTP请求和HTTPS请求,其中HTTP的传输属于明文传输,在传输的过程中容易被人截取并且偷窥其中的内容,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的…

技术周总结 2024.06.24~06.30(Python并发执行shell并发执行 Spring Bean)

文章目录 一、 06.26 周三1.1)问题01:怎么在mysql的命令行中查询出来 python能使用的元祖结果集1.2)问题02:python中 set()是什么,怎么使用 二、06.27 周四2.1)问题01:shell 并发执行2.2&#x…

【ARMv8/v9 GIC 系列 5 -- GIC GICD_CTRL 使用详细介绍】

文章目录 GICD_CTRLGICD_CTLR 寄存器结构RWP(Register Write Pending)E1NWF(Enable 1 of N Wakeup Functionality)DS(Disable Security) 亲和性路由(Affinity Routing)ARE_NSARE_S 中…

【分布式数据仓库Hive】常见问题及解决办法

目录 一、启动hive时发现log4j版本和hadoop的版本有冲突 解决办法:删除hive下高版本的slf4j 二、启动hive报错 Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/Object;)V …