21. Revit API: 几何对象(二)- Curve

news2024/9/19 8:59:59

上篇讲了Revit几何对象的类层次结构,讲了几何元素和几何实例,简单提到了Solid。

这一篇呢,就从构成Solid的边讲起。


一、Edge(边)

Edge在Revit中就是用来表示边的,并且在各种表示几何结构的类中串门。

前面说,Solid是由Edge和Face组成的。从Solid上拿到的是Edge的集合EdgeArray

P.S. 看到这个EdgeArray,就去到app上看看能不能创建,发现有CurveArray,没有这个。

行吧,没有就没有,老老实实new一个吧。

Edge简单理解就是套了层壳的Curve。其上的大部分方法、属性和Curve是一样的。

当然了,由于边是“具体”的,线是“逻辑”的,所以边上有个别与面相关的方法这些就都不展开了。

var curve = edge.AsCurve(); // 获取描述Edge的曲线

二、Curve

Curve就是曲线,各种线(6类)的基类。

Curve 能做啥?

2.1. 曲线的作用

  1. 曲线之间的关系
    a. 两条曲线的相交
    b. 两条曲线之间最短距离的点
  2. 点与曲线的关系
    a. 点是否在曲线上
    b. 点在曲线上的投影
  3. 曲线自身
    a. 获取曲线上某处的点坐标
    b. 曲线细分,点集化
    c. 长度、是否循环、是否有界
    d. 样式
  4. 曲线的创建
    a. 翻转
    b. Transform变换
    c. 偏移

有3个重点:① 曲线上点的获取,② 曲线的样式设置,③ 曲线的偏移

样式后面专门介绍。

2.2. 偏移原理

Curve上有一个CreateOffset(..)方法,用于创建一个偏移后的曲线。

// offsetDist:距离
// referenceVector:方向
public Curve CreateOffset(double offsetDist,XYZ referenceVector)

之前有写过一篇关于CurveLoop的笔记。有讲Curveloop的偏移,就是对里面每个Curve进行偏移。

偏移方向为:线的切向量 与 指定方向向量 的 叉乘 的方向。

所以:

  • 切向量与指定方向向量同向时,偏移为0。
  • 平移操作,使用CreateTransformed(..)代替,传入平移变换矩阵。

2.3. 曲线参数解释

许多几何库的曲线都有这么个东西:曲线的参数化值(the value of the parameter )。

当把曲线看作由一个函数定义,拿函数中有变量$ u ,通过改变 ,通过改变 ,通过改变 u $,就能得到曲线上不同位置的点。

这个值可以是“标准化”的,即值在区间[0,1]内。也可以是任意的。

有界的曲线,才能获取端点

参数的起始值可能是任何值,这是比较奇怪的地方,它是由Revit决定的。通过函数GetEndParameter(0/1)获取。

var startParameter = curve.GetEndParameter(0);
var endParameter = curve.GetEndParameter(1);
var length = endParameter - startParameter; //  curve.ApproximateLength;
// 起点与重点的参数差,正好是曲线的长度(未标准化)

那么,可以这样获取曲线上的点:

 // 获取 曲线的中间点
 var center = curve.Evaluate(0.5, true);  // 标准化参数
 // 获取 离曲线起点 1/2 长度的点
 var center2 = curve.Evaluate(startParameter + length / 2, false);  // 原始参数

原始参数和标准化参数之间可以相互转换。

虽然了解了这些后,我们可以自己写一个转换方法,但Curve上已经提供了。

var rawParameter = curve.ComputeRawParameter(0.5);  // == startParameter + length / 2
var normalizedParameter = curve.ComputeNormalizedParameter(startParameter + length / 2);  // 0.5

Curve 上还有个比较有用的方法ComputeDerivatives(..),它计算后返回一个Transform类型的结果。

  • transform.Origin:点,相当于Evaluate(…)
  • transform.BaseX:切向量(一阶导)
  • transform.BaseY:二阶导
  • transform.BaseZ:双法向量(切向量 x 法向量)

三、Curve 派生类

3.1. Line(直线)

由 起点、方向 定义。

可由两点构造有界直线,或起点+方向构造无界直线。

3.2. Arc(圆弧)

由 中心、半径,法向、X向、Y向 定义。

后面三个,用来确定坐标系。

但有点奇怪的是,看不到圆弧转过的弧度(没有弧度属性),这个需要通过计算才能得到。

emm…奇怪。

// 计算圆弧的弧度
var dir1 = arc.Evaluate(0, true) - arc.Center;  // 圆心到弧起点
var dir2 = arc.Evaluate(1, true) - arc.Center;  // 圆心到弧终点
var red = Vector2.a

3.3. Ellipse(椭圆)

由 中心、X半径、Y半径,法向,X向,Y向 定义。

后三个,依旧是确定坐标系。

当X半径与Y半径相等时,就是一个圆了。

3.4. CylindricalHelix(螺旋线)

弹簧玩过没有,那就是个CylindricalHelix。

这里是Wiki,或者看这里。

我就跳过了嗷,太菜了,看不懂。

3.5. HermiteSpline 和 NurbSpline

“叮又叮不懂,鞋又鞋不废”.jpg

用倒是直接用,没毛病。·

至于其函数定义,实现方式,以后再看吧。插眼。


四、总结

这篇是在很久之前写的,后面还写了篇关于IUpdater 的,都没有发出来。

Revit没有在看了,最近在看SolidWorks,然后看着也烦,就写了几何对象(三),这篇就发出来吧。

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

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

相关文章

使用 Elementary 实现开源数据可观测性 — 从零到精通(第一部分)

欢迎来到雲闪世界。我希望在我还是初学者时能有一份循序渐进的实践指南 数据可观测性及其重要性经常被讨论和撰写为现代数据和分析工程的一个重要方面。市场上有许多工具,具有各种功能和价格。在这篇由两部分组成的文章中,我们将重点介绍 Elementary 的…

(k8s)kubernetes 挂载 minio csi 的方式

一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客) 生成accessKeyID和secretAccessKey: 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载…

论文阅读:RGBD GS-ICP SLAM

目录 概要 Motivation 整体框架流程 技术细节 小结 论文地址:[2403.12550] RGBD GS-ICP SLAM (arxiv.org) 代码地址:https://github.com/Lab-of-AI-and-Robotics/GS-ICP-SLAM 概要 RGBD GS-ICP SLAM 是一种结合通用迭代最近点算法(Ge…

【基础算法总结】前缀和

目录 一,前缀和算法介绍二,算法原理和代码实现【模板】前缀和【模板】二维前缀和724.寻找数组的中心下标238.除自身以外数组的乘积560.和为k的子数组974.和可被k整除的子数组525.连续数组1314.矩阵区域和 三,算法总结 一,前缀和算…

可能一拆为二,英特尔为何走到今天这一步?

【科技明说 | 科技热点关注】 近来看到外媒消息说,英特尔迫于经营压力,也不得不铤而走险,欲将英特尔一分为二,即芯片制造与芯片设计分离开,互相剥离,独立发展。 于是乎,英特尔将分拆…

图卷积神经网络GNN(一)

图卷积神经网络GNN 研究学习的背景 对于图神经网络(GNN)来输入的数据是图。(解决输入数据不规则情况)输入的格式不是固定的 研究涵盖:节点分类(nodeclassification)、边预测(link…

​ArcGIS Pro和ArcGIS的10大区别

本文来源:水经注GIS公众号 如果你经常使用ArcGIS 进行制图和分析,那么你一定听说过ArcGIS Pro,这款软件是Esri未来主打的一款桌面GIS软件,那么这款软件和ArcGIS相比有什么不同呢,这里为你列举了两款软件的10大区别&am…

海康威视相机在QTcreate上的环境配置教程(qt+opencv+海康SDK)

环境配置教程 前言:环境配置:1.海康SDK2.opencv 参考导入文件 前言: 配置环境是编程的第一步,所以写这篇文章来指导环境的配置。如果已经配置好了,想在qt上使用海康的摄像头,可以参考这篇文章:…

骨传导耳机哪个品牌好用?良心测评推荐5大高分骨传导耳机!

在快节奏、数字化的生活时代,耳机成为连接外界与个人世界的桥梁,尤其在户外运动和健身场景中更是不可或缺。传统入耳式耳机虽然携带方便、音质优秀,但长时间佩戴会对耳道和鼓膜造成压力,甚至引发耳部不适。为解决这一痛点&#xf…

windows下自启springboot项目(jar+nginx)

1、将springboot项目打包为jar 2、新建文本文档 test.txt,并输入 java -jar D:\test\test.jar(修改为自己的jar包位置) 保存 然后修将后缀名改为 .bat 3、在同一目录再新建 文本文档test.txt,输入以下内容,&…

Meme“淘金”热潮下:Meme发射平台的安全风险分析

2023年,Meme赛道成为加密市场和各大公链生态的重点关注板块之一,尤其是在Solana等公链上,Meme代币迎来了爆发。许多Meme代币的交易量飙升,年初Solana生态中的Meme代币交易额甚至达到百亿美元。乘着Meme代币的东风,Meme…

VSCode配置 C/C++ 开发环境

目录 1.概述 2. 安装 C/C 扩展 3. 安装编译器 3.1.Windows 3.2.macOS 3.3.Linux 4. 配置 VSCode 5. 构建和运行 1.概述 在 Visual Studio Code (VSCode) 中配置 C/C 开发环境,需要安装一些扩展和正确配置编译器。以下是详细的步骤: 2. 安装 C/C…

Agilent MSO7104A安捷伦示波器1G 4通道

Agilent MSO7104A安捷伦示波器1G 4通道 附加功能: 带宽:1 GHz 通道:4 个模拟和 16 个数字 采样率:4 GSa/s 记录长度:标准 8 Mpts MegaZoom III 深存储器 垂直分辨率:8位 自动缩放和峰值检测 有见地的…

数据分类:成功DLP的基本要求

现如今我们存储数据的方式发生了巨大变化,从优质硬盘到今天的云存储解决方案,存储技术的进步大幅削减了成本,并使组织能够呈指数级增长的数据,我们都在利用这一点。 事实上,数据每年以惊人的 25% 的速度增长&#xff…

顶级PCVR头显具备什么配置?清晰度如何?

头戴式显示器是VR体验中用户与虚拟现实环境交互不可或缺的一部分。高端的头显通常可为使用者提供具有超高分辨率的高清画面,因此当你拥有一部高端的VR头显,虚拟世界将如真实世界一样呈现在你眼前。 说到顶级头显我们就不得不提到Varjo,Varjo是…

最全的性能测试性能诊断工具清单

给做性能问题的诊断需要用到的工具分一下类的话,主要有以下类,网络通信报文抓取工具、基础软件监控工具、第三方资源监控工具、专业性能诊断工具和反编译工具。 接下来我们就分别说说,每类里面都有哪些工具。首先第一类是网络通信报文抓取工…

【CanMV K230 AI视觉】人脸3D网格

【CanMV K230 AI视觉】人脸3D网格 人脸3D网格 (动态测试效果可以去下面网站自己看。) B站视频链接:已做成合集 抖音链接:已做成合集 人脸3D网格 人脸3D网格,在检测到人脸后用多个点描绘整个脸,从而把人脸…

Java导入、导出excel保姆级教程(附封装好的工具类)

前言 我们在日常开发中,一定遇到过要将数据导出为Excel的需求,那么怎么做呢?在做之前,我们需要思考下Excel的组成。Excel是由四个元素组成的分别是:WorkBook(工作簿)、Sheet(工作表)、Row(行)、Cell(单元格)&#xff…

深度学习-目标检测(四)-Faster R-CNN

目录 一.模型框架 二:步骤详细 1.conv layers 2.RPN 3.anchors 4.cls layer分类 5.reg layer回归 6.Proprosal 7.Rol pooling 8.Classification 三.训练 1.训练RPN网络 2.全连接层部分训练: 都看到这里了,点个赞把!&a…

adb有线连接正常,adb connect失败

adb connect失败 1. 确认两个设备在同一个局域网 2. 确认此网络是否有adb连接的权限(有的公司网络不允许adb) 3. 确认防火墙设置 如果前面3步都确认没问题,Ping ip也能成功,那么有可能就是端口的问题: step1: 先用有线连接设备&#xff0…