Revit SDK 介绍:RayTraceBounce 光线反弹

news2024/11/27 22:34:21

前言

这个例子模拟光线反弹。

内容

通过修改参数,从(0,0,0)点向(1,0,0)方向射出光线,经过若干次反弹之后的结果。如图所示:
在这里插入图片描述

在Revit API 中,用 ReferenceIntersector::Find 来计算射线上相交的几何。

核心逻辑,简化了代码,只保留重要部分:

// 从起点 startpt 出发,做 rayLimit 次射线
Autodesk.Revit.DB.XYZ startpt = m_origin;
for (int ctr = 1; ctr <= rayLimit; ctr++){
   // 通过 ReferenceIntersector::Find 查找相交几何
   ReferenceIntersector referenceIntersector = new ReferenceIntersector(m_view);
   IList<ReferenceWithContext> references = referenceIntersector.Find(startpt, m_direction);
   m_rClosest = null;
   // 遍历找到最近的几何,获取相交点
   FindClosestReference(references);
   Reference reference = m_rClosest.GetReference();
   Element referenceElement = m_doc.GetElement(reference);
   GeometryObject referenceObject = referenceElement.GetGeometryObjectFromReference(reference);
   Autodesk.Revit.DB.XYZ endpt = reference.GlobalPoint;
   // 绘制一条线段表示光线
   MakeLine(startpt, endpt, m_direction, "bounce");
   // 计算反射光线的防线
   m_face = referenceObject as Face;
   Autodesk.Revit.DB.UV endptUV = reference.UVPoint;
   Autodesk.Revit.DB.XYZ FaceNormal = m_face.ComputeDerivatives(endptUV).BasisZ;  // face normal where ray hits
   FaceNormal = m_rClosest.GetInstanceTransform().OfVector(FaceNormal); // transformation to get it in terms of document coordinates instead of the parent symbol
   Autodesk.Revit.DB.XYZ directionMirrored = m_direction - 2 * m_direction.DotProduct(FaceNormal) * FaceNormal; //http://www.fvastro.org/presentations/ray_tracing.htm
   m_direction = directionMirrored; // get ready to shoot the next ray
   // 重置光线起点
   startpt = endpt;
}

FindClosetReference 核心逻辑:

double face_prox = Double.PositiveInfinity;
double edge_prox = Double.PositiveInfinity;
foreach (ReferenceWithContext r in references){
   Reference reference = r.GetReference();
   Element referenceElement = m_doc.GetElement(reference);
   GeometryObject referenceGeometryObject = referenceElement.GetGeometryObjectFromReference(reference);
   m_face = null;
   m_face = referenceGeometryObject as Face;
   Edge edge = null;
   edge = referenceGeometryObject as Edge;
   if (m_face != null){
      if ((r.Proximity < face_prox) && (r.Proximity > epsilon)){
            m_rClosest = r;
            face_prox = Math.Abs(r.Proximity);
      }
   } 
}

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

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

相关文章

通过 http-server 运行刚打包出来的脚手架项目

这里 我打包了自己的vue项目 react其实也一样 如果我直接 打开打包出来的 dist 下面的index.html 会出现白屏资源找不到 或者跨域等问题 这个问题其实配个nginx也能解决 但是其实如果只是想做个测试 nginx就太麻烦了 我们可以通过npm指令 全局安装一个http-server 终端执行 …

每日刷题|回溯法解决全排列问题第二弹之解决字符串、字母大小排列问题

食用指南&#xff1a;本文为作者刷题中认为有必要记录的题目 前置知识&#xff1a;回溯法经典问题之全排列 ♈️今日夜电波&#xff1a;带我去找夜生活—告五人 0:49 ━━━━━━️&#x1f49f;──────── 4:59 …

OpenRoads Designer道路旁添加公交车停车区

在道路工程建模时如果需要在路旁添加公交车停车区&#xff0c;如下图所示&#xff0c;可通过对道路轴线进行局部偏移的方式实现。 在道路旁添加如上图所示的公交车停车区操作步骤&#xff1a; 1、使用Geometry下的Single Offset Partial将路线中的一段进行偏移&#xff1a; 参数…

亚马逊、ManoMano等跨境电商平台测评还能做吗?

亚马逊测评是卖家通过真实购买商品并撰写评价来获取评价权利的过程 卖家账号发布产品后&#xff0c;测评买家账号进入商铺进行购买并对商品质量、外观、卖家服务态度和物流体验等方面进行点星留评 在亚马逊卖家运营中&#xff0c;评论是一个关键而必不可少的环节&#xff0c;…

本地起一个VUE 前端项目

#安装 安装 Vue CLI 3&#xff1a; Vue CLI是一个用于创建和管理Vue项目的命令行工具 npm install -g vue/cli#查看更详细的告警信息 npm install -g vue/cli --verbose#检查项目的依赖关系 ,保持项目的依赖关系最新和安全 npm audit npm audit fix#查看版本 vue --version#创建…

oled或数码管点阵的字模矩阵的原理讲解

通过取模软件得到的T字符的矩阵分析 字模选项中常用的设置的意义&#xff1a; **字宽和字高&#xff1a;**显示字符能够使用的长宽灯数量&#xff0c;也可以理解为像素 **点阵格式&#xff1a;**需要考虑实际焊接电路。阴码&#xff1a;灯共阴极&#xff0c;控制器输出高电位&…

Linux权限问题

文章目录 前言一、shell 命令1、什么是 shell?2、什么是 shell 脚本&#xff1f;3、shell环境4、总结 二、Linux权限1、su命令2、Linux文件类型3、Linux文件权限4、文件访问权限的相关设置4.1 chmod指令4.2 chown指令4.3 chgrp指令4.4 总结 前言 一、shell 命令 1、什么是 sh…

Android开发之lint代码检测编写和使用方法

文章目录 前言项目结构待检测项目lint检查器 依赖方式待检测项目lint检查器 代码编写方法调用检测Detector注册Detector编写 Toast硬编码检测Detector注册Detector编写 使用壳工程打包待检测项目使用kotlin代码java代码 AS识别结果kotlin代码java代码 命令行检测 参考文献 前言…

Fushion 360齿轮组制作教程

本教程总结 Kevin小哥的教程&#xff0c;原视频教程点击这里&#xff0c;笔者录制的教程视频见fushion 360齿轮制作 Fushion 360齿轮组制作教程 基本步骤添加齿轮工具相关设置绘制底板创建演示动画掏空较大的齿轮 视频教程及成品展示 基本步骤 添加齿轮工具 选择使用工具&…

【深度学习】 Python 和 NumPy 系列教程(三):Python容器:1、列表(初始化、索引和切片、常用操作、常用函数、拆包、遍历)

目录 一、前言 二、实验环境 三、Python容器 0. 容器介绍 1. 列表 1. 初始化 a. 创建空列表 b. 使用现有元素初始化列表 c. 使用列表生成式 d. 复制列表 2. 索引和切片 a. 索引 b. 负数索引 c. 切片 3. 常用操作&#xff08;更新、删除&#xff09; a. 更新单个…

【漏洞复现】Tenda路由器存在密码泄露

漏洞描述 腾达W15E路由器外置4根增强型360全向天线&#xff0c;苛刻调校到0.01毫米级的零干扰间距&#xff0c;科学独立布局的信号放大器PA&#xff0c;穿墙性能更强劲&#xff0c;覆盖范围更广&#xff0c;在哪都有好信号。 该型号的路由器系统存在密码泄露漏洞&#xff0c;…

【MySQL】聊聊数据库高可用

对于任何一个互联网公司来说&#xff0c;必定涉及到存储系统&#xff0c;而一般主流的使用MySQL进行存储数据&#xff0c;但是如果只是部署一台数据库&#xff0c;数据丢失的话&#xff0c;其实没有办法进行有效的恢复&#xff0c;那么就会造成一定的损失。要么就是直接的损失&…

pc端字体为什么到12像素以后不生效

pc端字体为什么到12像素以后不生效&#xff1f; 因为谷歌浏览器默认的最小字体是12像素&#xff0c;如果去‘设置’里面修改最小字体&#xff0c;是可以达到修改效果的&#xff0c;但是&#xff0c;你不能解决用户的浏览器设置 解决办法如下 <p class"font">…

SG-Former:具有进化Token重新分配的自引导Transformer

摘要 https://arxiv.org/pdf/2308.12216.pdf Vision Transformer在各种视觉任务中展示了令人印象深刻的成功。然而&#xff0c;其沉重的计算成本相对于Token序列长度呈二次增长&#xff0c;在很大程度上限制了其处理大型特征映射的能力。为了降低计算成本&#xff0c;以往的研…

华为云云耀云服务器L实例评测|服务器实例基础使用实践

&#x1f996;我是Sam9029&#xff0c;一个前端 Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-JS学习,CSS学习,Vue-2领域博主 **&#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;恭喜你&#xff0c;若此文你认为写的不错&#xff0c;不要吝啬你的赞扬&#xff0c;求…

常见的图像格式介绍:RAW、RGB、YUV

常见的图像格式有RAW、RGB、YUV这三大类 1. RAW raw图像指的是sensor输出的原始数据&#xff0c;常见的有8位、10位、12位之分&#xff0c;分别表示一个像素点所占的字节数为8bit、10bit、12bit。 raw数据常见的有四种Bayer模式&#xff1a;GRBG、RGGB、BGGR&#xff08;下图…

苹果计划2024年AirPods引入新接口,后续升级体温测量、听力测试

据彭博社马克・古尔曼&#xff08;Mark Gurman&#xff09;报道&#xff0c;苹果公司计划在最早2024年为其旗舰无线耳机AirPods和AirPods Max引入USB-C端口&#xff0c;并试图将其所有基于Lightning接口的配件改用USB-C接口。 据古尔曼表示&#xff0c;AirPods Pro将率先改用新…

学校ROS培训项目记录

项目内容&#xff1a; 在linux上安装ROS&#xff08;可以使用虚拟机&#xff09;编写ROS程序&#xff0c;实现话题的订阅和发布基于松灵小车硬件&#xff0c;显示雷达数据、图像数据移动松灵小车&#xff0c;绘制小车的运动轨迹 实现过程记录 1.ubuntu22.04上安装ros2 ubun…

Cookie、Session、Token、JWT

文章目录 1. 认证(Authentication) & 授权(Authorization) & 凭证(Credentials)1.1 认证(Authentication)1.2 授权(Authorization)1.3 凭证(Credentials) 2. Cookie & Session2.1 什么是 Cookiecookie 重要的属性 2.2 什么是 Session2.3 Cookie 和 Session 的区别 …

来看看Python编码规范(PEP 8)

在讲解具体的​ Python 编 ​码规范之前&#xff0c;先来看看图 1 中的代码&#xff1a; 图 1 两段功能相同的 Python 代码 对比图 1 中的两段代码你会发现&#xff0c;它们所包含的代码时完全相同的&#xff0c;但很明显&#xff0c;右侧的代码编写格式看上去比左侧的代码段更…