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,一经查实,立即删除!

相关文章

ARM:汇编点灯

.text .global _start _start: 使能GPIOE和GPIOF的外设时钟 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第3/4位设置为1 STR R1,[R0] 将修改后的数值写回设置LED1亮 设置PE10为输出…

Python实战:机器学习算法

本文将详细介绍Python中常用的机器学习算法&#xff0c;包括线性回归、逻辑回归、决策树、随机森林、支持向量机等。 一、引言 机器学习是人工智能的一个重要分支&#xff0c;它使计算机能够从数据中学习并做出决策。Python作为一门流行的编程语言&#xff0c;拥有丰富的机器…

蓝桥杯2023年-阶乘的和(数学推理,C++)

题目描述 给定 n 个数 Ai&#xff0c;问能满足 m! 为∑ni1(Ai!) 的因数的最大的 m 是多少。其中 m! 表示 m 的阶乘&#xff0c;即 1 2 3 m。 思路 我们发现m最大为所有A中的最小值&#xff0c;但是如果有Ai1个Ai相同&#xff0c;则他们可以合并为Ai1&#xff0c; 即…

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

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; ————前言————— RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种距离矢…

hive sql实现查找商品表名称中包含敏感词的商品

背景 用户上传的商品表一般会包含商品名称&#xff0c;由于这些商品名称是用户自己起的&#xff0c;里面可能包含了敏感词&#xff0c;需要通过sql找出来哪些商品的商品名称包含了敏感词汇 hive sql实现查找商品表名称中包含敏感词的商品 实现思路&#xff1a; 1.商品表和敏…

获取指定日期金融期货数据

数据来源&#xff1a;日统计 | 中国金融期货交易所 代码&#xff1a; import akshare as ak from datetime import datetime import pandas as pd pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None)cffex_daily ak.get_cffex_daily(datetime…

利用SpringBoot Actuator 来构造/health /info 等监控接口

当我们用K8S 部署微服务时&#xff0c; 很多时候需要调用 service的/health 等状态接口&#xff0c; 已确定container的运行状态是否健康。 而Spring boot Actuator 就是用来快速构造这些状态接口的工具 引入依赖 <!-- actuator --><dependency><groupId>or…

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…

Grok-1 源码中语法 @dataclass 变量名称:变量类型

Grok-1 源码中语法 dataclass 变量名称:变量类型 flyfish model.py dataclass class Transformer(hk.Module):"""A transformer stack."""num_q_heads: intnum_kv_heads: intkey_size: intwidening_factor: floatinit_scale: floatmesh: Anyat…

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;并演示了如何将现有姿势…

获取A股所有股票实时行情、价格

数据来源&#xff1a; https://quote.eastmoney.com/center/gridlist.html#hs_a_board 代码&#xff1a; import akshare as ak import pandas as pd pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None) pd.set_option(display.width, 1000)s…

【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…

LeetCode 爬楼梯(动态规划题解)

题目链接&#xff1a; https://leetcode.cn/problems/climbing-stairs/ 资源&#xff1a; 关于动态规划和贪心算法的区别&#xff0c;动态规划的常见题型&#xff0c;我总结了一些&#xff08;还有文档哦&#xff09;&#xff0c;大家可移步至&#xff1a;动态规划基础知识点…