Revit CurveLoop、Plane和多边形面积比(一)

本文讲述了Revit开发过程中的技术挑战,涉及CurveLoop的使用、面和边的处理,以及如何通过BRep构造几何体。作者探讨了CurveLoop的创建条件,以及如何通过计算和偏移方法处理曲线。后续将深入讨论Plane的GetPlane和HasPlane方法。
摘要由CSDN通过智能技术生成

Revit CurveLoop、Plane和多边形面积比(一)

前言

同前几篇一样,还是记录一些开发过程中遇到的问题,给出一些处理方法。

与前几篇相比,这篇可能要杂乱许多。

本来是想分几篇来写,每个点都写详细一些,但想想还是就这么写吧。一是由于近来事儿较多,想写的一些东西在脑袋里一闪而过,不记下来就要忘记了。二是这些在我的开发过程中是有些许关联的,索性就一块儿写了。


CurveLoop

上一篇中,写了获取元素Solid和计算其包围盒相关的内容,在获取元素Solid的部分,提到了不能使用Solid.Edges来过滤空Solid,得使用Solid.Faces。这节要写的CurveLoop,便能够从中获取。

我们知道,Revit中模型使用B-Rep表示法表示,一个Solid由面+边构成,如果要自己完全按面、边生产一个Revit Solid还是比较困难的,Revit也提供相关构造器BRepBuilder ,感兴趣的小伙伴可以去看看。

一个Face,由其Surface确定表面,由其EdgeLoops确定范围。

CurveLoop:主要在创建几何体时使用,用以表示轮廓,如GeometryCreationUtilitiesFamilyCreate

EdgeLoops:一般是获取几何体结构时使用,其类型为 EdgeArrayArray,一个EdgeArray对应一个CurveLoop

由曲线集合创建CurveLoop

无论是从Solid.Faces中,还是从族的拉伸、放样、融合中,我们都能很轻易的拿到组成面的曲线集合,但是需要注意的是直接拿到的曲线集合不一定能够直接组成CurveLoop。我们必须对曲线集合进行处理。

CurveLoop需要满足条件:① 必须连续(曲线之间首位相连),② 不能自交

这里解释,为什么拿到的曲线集合不能直接使用。

如下图:AB-BC-CA组成一个面Ⅰ,BD-DC-CB组成另一个面Ⅱ,其中BC共线。显然若面Ⅰ的曲线是直接可以使用的(B->C),那面Ⅱ的BC边就需要翻转(C->B)。

可以肯定的是,Revit是记录了这种曲线翻转信息的,但遗憾的是,我们似乎并不能获取到。

// BRepBuilder.AddCoEdge Method 
public BRepBuilderGeometryId AddCoEdge(
	BRepBuilderGeometryId loopId,
	BRepBuilderGeometryId edgeId,
	bool bCoEdgeIsReversed  // 共边是否翻转
)

计算方法Curve.GetEndPoint(0|1) 获取曲线的两个端点,按端点相等(需添加误差)拼接即可。

在这里插入图片描述

CreateViaOffset方法

该方法用于对CurveLoop曲线轮廓进行放大、缩小

对于曲线上一点,其偏移方向为:该点切向量与(CurveLoop)法向量的叉乘方向。

看图理解,清晰易懂。

CurveLoop打括号,不一定是用这个,若不存在平面,可能会用到曲线本身的法向量。Curve上也存在计算偏移的方法CreateOffset(),推测CurveLoop偏移,就是调用了各个曲线的偏移方法。

// Curve.CreateOffset Method 
public Curve CreateOffset(double offsetDist,XYZ referenceVector) // 偏移量,参照向量

在这里插入图片描述

GetPlane方法

好了,总算讲到题目上写的Plane了,上面提到CurveLoop法向量,可以使用GetPlane()方法获取,也可以先用HasPlane() 方法判断是否存在平面。

但是这里,要讲的显然不是这么点东西,具体的我们第二篇讲。


写在后面

怎么就这么结束了呢,晚了,有点困了,有空再写。

我的猫猫前几天做了绝育,带着脖套,一直冲着我喵喵叫(⓿_⓿),想让我给摘下来。

叫一下就要摸摸脑袋,写得慢了点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值