Revit中圆弧的轨线分割(分段、分节)逻辑

问题由来

早先开发一个插件,有个为风管模型内外都套一层模型的(内衬、外衬)的需求。

Revit管类(管道、风管)模型本身就有添加内外衬的功能,但是对于复杂的族,添加的就有问题了,可能无法将模型包裹,也可能会出现突出的边角。而且Revit管类模型是实心表示的,生成的覆盖模型也是实心的(数值上是空心计算的),这也是上面需求的由来。
在这里插入图片描述

回到问题,那这与圆弧的轨线分割逻辑什么关系呢?

嘿,一些管道进行了分段(分节),也就是其放样路径勾选了轨线分割,那我们自己生成的内外衬自然是也需要进行分段的。

轨线分割:Revit放样中,圆弧(Arc)部分可以进行轨线分割,其它类型线条不支持。


分段逻辑

分段逻辑如下图,看图就行。

在这里插入图片描述

分段数计算

轨线分割中,有个叫“最大分段角度”的属性,设置这个属性可以改变管道分段的数目。

PS:作为不会操作Revit的开发者,我不太理解为啥用角度来控制分段数,因为分段数对应的是一个角度区间

分段数 = (圆弧角度 / 分段角度)向上取整

int arc_segment_count = (int)Math.Ceiling(arc_angle / angle);

如圆弧总150°,这样分段角度设定在[50°,75°)区间内的,都是分3大段。

注意弧线端点处是“半段”,所以总体可以视为 2倍的“半段”。

分段路径计算

我们知道半径,知道“半段”的角度,就可以算到图中点P了。
而路径就是由原弧线一个端点经由转折点(点P),到达另一个端点的线段组成。

// 伪代码
double L = r / Math.Cos(segment_angle_half);  
XYZ B = arc.Evaluate(i / segment_count); // segment_count 半段数
XYZ normal = (B - O).Normalize();
XYZ P = O + noraml * L;

XYZ是Revit API 中的三维点,同Vector3;

i :“半段”的下标。i为奇数时,计算到转折点;为偶数时,计算到切点

算到各转折点后,把点串起来,就行了。

Over!

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值