Rhino与Revit API之间的转换

你好,我是九哥~

最近发现Rhino.Inside.Revit的API手册更新了,终于可以开心的写RIR代码了,小伙伴快去试试吧,地址如下:

https://www.rhino3d.com/inside/revit/1.0/reference/rir-api

今天我们先来聊聊 Rhino 与 Revit 之间图元转换的基础知识,这些需要你牢牢记住哦,不然在 GHPython Script节点中写代码,得到的DB图元Rhino是无法处理的~

通常来讲,所有来自 Rhino几何图形和 Revit 几何图形都是无法直接互通的 ,所以它们需要与 Rhino.Inside.Revit API一起使用进行转换。

下面是引入RhinoInside.Revit几何转换的方法:

import clr
clr.AddReference("RevitAPI")
clr.AddReference("RhinoInside.Revit")
import Autodesk.Revit.DB as DB
#引入几何图形转换方法
import RhinoInside.Revit.Convert.Geometry
clr.ImportExtensions(RhinoInside.Revit.Convert.Geometry)

接下来分别列举下一些需要转换的图元:
 

从Revit到Rhino


rhino_point = revit_point.ToPoint()
rhino_point2d = revit_uvpoint.ToPoint2d()
rhino_point3d = revit_point.ToPoint3d()rhino_bbox = revit_bbox.ToBoundingBox()
rhino_box = revit_bbox.ToBox()rhino_vector2d = revit_uvvector.ToVector2d()
rhino_vector3d = revit_vector.ToVector3d() rhino_plane = revit_plane.ToPlane() rhino_transform = revit_transform.ToTransform() rhino_curve = revit_line.ToCurve() 
rhino_curve = revit_arc.ToCurve() 
rhino_curve = revit_ellipse.ToCurve() 
rhino_curve = revit_nurbsspline.ToCurve() 
rhino_curve = revit_hermitespline.ToCurve() 
rhino_curve = revit_helix.ToCurve()
rhino_curve = revit_curve.ToCurve() 
rhino_polylinecurve = revit_polyline.ToPolylineCurve() rhino_brep = revit_solid.ToBrep() rhino_brep = revit_face.ToBrep() rhino_mesh = revit_mesh.ToMesh()rhino_curve = revit_curveloop.ToCurve() 

从Rhino到Revit


revit_uvpoint = rhino_point2f.ToUV()
revit_uvpoint = rhino_point2d.ToUV() revit_uvvector = rhino_vector2f.ToUV() 
revit_uvvector = rhino_vector2d.ToUV() revit_xyzpoint = rhino_point3f.ToXYZ()  
revit_xyzpoint = rhino_point3d.ToXYZ() revit_xyzvector = rhino_vector3f.ToXYZ() 
revit_xyzpoint = rhino_vector3d.ToXYZ() revit_plane = rhino_plane.ToPlane()revit_transform = rhino_transform.ToTransform() revit_bbox = rhino_bbox.ToBoundingBoxXYZ() 
revit_bbox = rhino_box.ToBoundingBoxXYZ()revit_outline = rhino_bbox.ToOutline()revit_line = rhino_line.ToLine()  
revit_polyline = rhino_polyline.ToPolyLine() 
revit_arc = rhino_arc.ToArc() 
revit_arc = rhino_circle.ToArc() 
revit_curve = rhino_ellipse.ToCurve()
revit_curve = rhino_ellipse.ToCurve(interval) revit_point = rhino_point.ToPoint() revit_curve = rhino_linecurve.ToCurve()
revit_curve = rhino_polylinecurve.ToCurve() 
revit_curve = rhino_arccurve.ToCurve()
revit_curve = rhino_nurbscurve.ToCurve()
revit_curve = rhino_polycurve.ToCurve()
revit_curve = rhino_curve.ToCurve()revit_curveloop = rhino_curve.ToCurveLoop()
revit_curvearray = rhino_curve.ToCurveArray()revit_solid = rhino_brep.ToSolid() 
revit_solid = rhino_extrusion.ToSolid() 
revit_solid = rhino_subd.ToSolid() 
revit_solid = rhino_mesh.ToSolid() revit_mesh = rhino_brep.ToMesh()
revit_mesh = rhino_extrusion.ToMesh()
revit_mesh = rhino_subd.ToMesh() 
revit_mesh = rhino_mesh.ToMesh()revit_geomobj = rhino_geom.ToGeometryObject()

简单翻了翻API,大概列举了这些转换方法,应该还有别的,小伙伴们可以自己翻翻看。
 

接下来,我就简单举个例子,获取图元的BoundingBox转换为可以Bake的RhinoBox:

如下图,默认Revit获取的是DB.BoundingBox,而我们需要的是Rhino的Box:
 

差别就是在DB.BoundingBox后面加一个.ToBoundingBox(),完整代码如下:

import clr
clr.AddReference('System.Core')
clr.AddReference('RhinoInside.Revit')
clr.AddReference('RevitAPI') 
clr.AddReference('RevitAPIUI')
from System import Enum, Action
import rhinoscriptsyntax as rs
import Rhino
import RhinoInside
import Grasshopper
from Grasshopper.Kernel import GH_RuntimeMessageLevel as RML
from RhinoInside.Revit import Revit, Convert
# 还可以添加扩展方法
# 这允许在Revit对象上调用.ToXXX()转换器方法
clr.ImportExtensions(Convert.Geometry)
from Autodesk.Revit import DB
from Autodesk.Revit.DB import *if not hasattr(annotations, '__iter__'):annotations = [annotations]for anno in annotations:bbox = anno.get_BoundingBox(None).ToBoundingBox()

同样的,反过来就可以把Rhino的图元转换为Revit的图元,这里就不在演示了,小伙伴们自己尝试把~
 

好了,今天就是简单整理下,方便大家查找,如果你有好的想法和思路,欢迎投稿分享哦~

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

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

相关文章

华为ensp中rip动态路由协议原理及配置命令(详解)

CSDN 成就一亿技术人! 作者主页:点击! ENSP专栏:点击! CSDN 成就一亿技术人! ————前言————— RIP(Routing Information Protocol,路由信息协议)是一种距离矢…

xss.pwnfunction(DOM型XSS)靶场

环境进入该网站 Challenges (pwnfunction.com) 第一关&#xff1a;Ma Spaghet! 源码&#xff1a; <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams.get(somebody) || "Somebo…

YOLO_you only look once

前言 计算机图形学的课程即将结束&#xff0c;我需要提交一份关于YOLO模型的学习报告。在这段时间里&#xff0c;我对YOLO进行了深入的学习和研究&#xff0c;并记录下了我的学习过程和心得体会。本文将详细介绍YOLO模型的原理、优缺点以及应用领域&#xff0c;希望能够为后续…

css 如何获取分辨率(使用@media查询)

在CSS中&#xff0c;可以使用media查询来应对不同的屏幕分辨率。例如&#xff0c;您可以为不同的屏幕宽度设置不同的样式规则。 /* 针对屏幕宽度小于600px的样式 */ media screen and (max-width: 599px) {body {background-color: lightblue;} }/* 针对屏幕宽度大于或等于600…

spring整合Sentinel

安装sentinel&#xff1a; 执行命令; java -jar sentinel-dashboard-1.8.6.jar 注:sentinel的默认端口为8080&#xff0c;容易出现tomcat的冲突。 当端口冲突&#xff0c;可以使用该指令修改sentinel的端口 默认账号和密码都为sentinel Springcloud整合sentinel&#xff1a;…

首个业内DNA存储技术规范发布

在DNA数据存储的检索过程中&#xff0c;采用了三个输入对应一个输出逻辑实现的算法模式来生成数据表示的模式。这一算法模式的设计是为了有效编码和解码存储在DNA分子上的信息。 其中提到的“扰动比例”δ(n)是一个关键概念&#xff0c;它衡量的是在总的细胞数目&#xff08;此…

UE4_官方动画内容示例1.2_动画蓝图——使用蓝图告知Actor播放动画

展示了两个示例&#xff1a;在其中一个示例中&#xff0c;使用蓝图告知Actor播放动画&#xff0c;在另外一个示例中&#xff0c;展示了告知Actor播放动画的动画蓝图&#xff08;例如&#xff0c;此示例展示了如何将变量从蓝图传递给动画蓝图&#xff0c;并演示了如何将现有姿势…

【LabVIEW FPGA入门】插值、输出线性波形

概述 NI 的可重配置 I/O (RIO) 硬件使开发人员能够创建自定义硬件&#xff0c;以在坚固耐用、高性能和模块化架构中执行许多任务&#xff0c;而无需了解低级 EDA 工具或硬件设计。使用 RIO 硬件轻松实现的此类任务之一是模拟波形生成。本教程介绍了使用 CompactRIO 硬件和 LabV…

【Unity】Plastic云同步总是password error

【背景】 Plastic是Unity的项目版本控制功能&#xff0c;可以方便在多个地点同步项目进度。原本用得挺爽的&#xff0c;结果今天遇到糟心事&#xff0c;明明Hub也正常登着&#xff0c;可Plastic的一个update的dll就是不停反复运行并报Password invalid。 【问题分析】 听说I…

简易版 RPC 框架实现 2.0 -netty实现

这一篇理解如果有难度&#xff0c;可能对netty不是很理解&#xff0c; 可以关注我netty专栏&#xff0c;还有另外一篇&#xff1a; 用 Netty 自己实现简单的RPC&#xff0c; 这一篇是学习netty的时候写的&#xff0c;更倾向于分析netty相关的知识&#xff0c; 今天我是学习dubb…

【每日算法】理论:常见AIGC模型; 刷题:力扣单调栈

上期文章 【每日算法】理论&#xff1a;生成模型基础&#xff1b; 刷题&#xff1a;力扣单调栈 文章目录 上期文章一、上期问题二、理论问题1、stable diffusion模型的网络架构2、T5的网络架构&#xff08;Text-To-Text Transfer Transformer模型&#xff09;3、SDXL模型4、DA…

基于FPGA的光纤通信系统的实现的优化技巧与方法

逻辑电路基本框架回顾 跨时钟域同步技术 读写操作相互独立时钟域 A 和 B 不需要一致的相位由专门逻辑控制读写操作的切换 高速数据的乒乓缓存技术

代码随想录(day7)——哈希表

Leetcode.454 四数相加Ⅱ&#xff1a; 454. 四数相加 II - 力扣&#xff08;LeetCode&#xff09; 对于本题&#xff0c;虽然使用四层循环嵌套可以解决&#xff0c;但是效率过慢&#xff0c;为&#xff0c;因此&#xff0c;可以将给定的四个数组&#xff0c;分成两组&#xff…

在服务器上配置源和安装anaconda

在服务器上配置源和安装anaconda解决无法import torch的方法&#xff1a; 一、在 anaconda上创建环境 1、创建环境 conda create -n yourname pythonx.x 2、查看环境 conda info --envs 3、进入环境 source activate your_env_name 4、退出环境 conda deactivate 5、…

程序计数器

程序计数器 JVM中的程序计数器(Program Counter Register)并非是广义上所指的物理寄存器&#xff0c;是对物理PC寄存器的一种抽象模拟 PC寄存器(程序计数器) PC寄存器用来存储指向下一条指令的地址&#xff0c;也即将要执行的指令代码。由执行引擎读取下一条指令。 它是一块很…

Adams Car——Adams car与Simulink联合仿真

1.修改悬架阻尼、刚度 ①先找到车辆悬架阻尼和刚度文件,这里以阻尼显示为例 ②修改阻尼曲线 找到对应车的文件 ③修改完后进行替换,刚度修改同理 2.转动惯量与车的质量修改

【晶振选型】VCTCXO TCXO 布线 参考

一、供电旁路电容 二、使能信号 三、输出的交流耦合 四、输出波形转换 五、压控滤波电容 最后 CTS的是真不错&#xff0c;1K可是-140啊

Linux---基本操作命令之用户管理命令

1.1useradd 添加新用户 root用户&#xff1a;/root 普通用户&#xff1a;/home/ 创建的用户还是david&#xff0c;只是在dave文件夹下 1.2 passwd 设置密码 给用户tony设置密码: 123456 1.3 id 查看用户是否存在 查看有没有这个用户&#xff1a;id 名字 gid&#xff1a;用…

Spring MVC文件下载配置

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 文件下载 在Spring MVC中通常利用commons-io实现文件下载&#xff0c;示例代码如下&#xff1a; Controller RequestMapping("......") public class DownloadC…

外卖项目:使用AOP切面编程实现增删改查的操作日志记录(debug断点调试)

文章目录 一、问题描述二、问题分析三、断掉调试四、代码展示 一、问题描述 需求&#xff1a;将项目中增、删、改相关接口的操作日志记录到数据库表中。 操作日志信息包含&#xff1a; 操作人、操作时间、执行方法的全类名、执行方法名、方法运行时参数、返回值、方法执行时…