revit系列-创建族时草图中的约束与公式运用
在revit中,创建族时,如果只追求形似,那就失去族的意义了,只有参变族,才是族的完全体。而创建参变族,就需要了解约束的用法。
草图中的约束捕捉的是线的参照,与与线之间的交点与控制线的点参照,草图外的约束捕捉的是造型拉伸操纵柄,或者参照线。
这里我通过三个案例来讲述描述草图中的约束与草图外的约束的区别。
(在操作中注意,用标注绑定参照与参数后,一定要点击标注再把标注的那个小锁点上)
第一个案例,可更改大小形状的的三角六边形桩基承台。
三角六边形承台是这样的。

看到这个形状,就会想到创建拉伸,画一个这样的草图,然后约束图形,关联参数,使之参变

这里我们先不在草图内进行约束,先直接生成实体来看看

可以看到,这个实体的构件在平面上有六个形状操纵柄,我们能否对这些操纵柄进行约束,进行参变呢,是可以的,但是会出现一些莫名其妙的错误,并且无法解决。并且自由度不高。

这是由于草图已经生成了实体,比在草图阶段,多了很多限制,所以对它进行形状上的改变时,一个参数的更改涉及到了太多已经被锁定的部分,所以会报错。
于是我们就在草图阶段对他进行形状上的改变,现在我们就来构思需要的参数。
首先,这个三角六边形就是把一个等边三角形截去了三个角。所以他的参数有 单边长,截断口长,由于是立体的,还存在一个厚度参数。
这里我们重新画草图。
首先要明白的是,如果线是连在一起时,约束另一条线段的参数的改变会影响这一条线段,然而这种变化是软件算法确定的,它往往不按我们希望的方向去变动。并且在其他线段已经关联了参数时,往往还会引发不满足约束这个错误。所以,这里画图时,我让这个图形的所有线段分开,将它们之间的数据联系好后,再组合起来。

现在来标注它们,三条大边关联同一个参数,三个截断口关联同一个参数。

然后用EQ功能将图形均分,注意,在这一步时要先将角度固定好,固定角度的方法是,用角度标注它,然后点击那个小锁。就固定了这个值了。然后用移动功能连接线条。

这是成品,可以直接通过这两个参数更改平面上的形状,角度被固定住了,对应的边被关联了同一个参数,所以这个图形就在角度固定的情况下按参数三边同步变化。最后再关联一个厚度。这个族就建立完成了。

第二个案例 可以随底边长度更改角度的三角形
如果我们直接使用一个拉伸来创建一个坡道,你会发现,这个坡道根本就没法更改坡度,创建后提供的造型拉伸操纵柄只能更改整体截面的大小而不能更改角度。
如果使用放样来创建,也无非只是能更改载入的轮廓而已,同样不方便。
所以这里同样需要在草图中使用我们的约束来更改形状。这里使用拉伸来创建
同样的,将三条线分开画,

然后标注,这里由于这是直角三角形,只要知道两个参数的值就可以确定其他参数了,所以这里让它能输入的只有高和底边,而其他参数创建后不直接输入数值而是以三角形公式来确定。
这里我先将他们标注好。

然后输入公式,将参数之间的关系确定。(这里的atan等于arctan反正切函数)

用移动功能组合线条

创建后,这就可以随意更改参数来确定坡度了,这个案例中可以更改的两个参数对应以比例形式给出的坡度,如果要以角度对应坡度,改一改公式就可以实现)


第三个案例,可参变的球缺。
首先,球缺就是把球用一个平面切了一块,切分后的两部分都可以叫球缺,而球冠是球缺的曲面部分的面积。现在我们需要这个球缺的形状可变,那我们就需要明确,由那几个参数可以确定一个球缺。
这是百科上球缺的体积公式及其推导

由上图可以得出,把Pi刨开,确定球缺的就是H球缺高和球缺半径R(这个半径是球缺所属圆的半径)。
现在来想,怎么来使用这些参数。第一:在实际上(例如灌注桩扩大头)使用球缺时一般只给出了球缺高R和球缺底面的半径r。所以我们要想办法让族可以只输入这两个值就可以确定球缺。
下面我来推导一下,很简单的推导过程,只需要初高中知识。

这是球缺的的剖面
H球缺高
R球缺半径
r球缺底面半径
设R为未知数,H与r为常量,根据勾股定理,得到等式

化简后得到

现在在创建参数的时候输入公式就可以按H和r的大小来确定R了
现在来创建这个族,使用旋转来创建,旋转轴选球缺高的位置,依旧是先将线分开画,先画弧。

但这里要注意,这段弧使用圆心端点弧来画,画完之后,点击这段弧,在属性栏里将中心标记可见勾上方便我们约束半径。

现在思路有了,但是我们还要先看一看在REVIT中如果对这个弧以及与他相连的线进行约束有什么限制,是更改参数后是怎么改变的。
先约束这一段弧的半径,更改参数后,发现圆心位置没变但整个弧变大了,底面半径也变了


然后我们约束底面半径,由于对弧直接无法约束这一段距离,我们先约束一段线,再将线与参照锁定,再与弧连接,间接约束弧,更改参数后我们发现。圆心位置会随参数更改。


至于与球缺高那段线,由上面可以看出不参与弧线的确定。但是要保证球缺的变化在我们的控制下。所以也对它进行约束与锁定后再连接弧线

这时还不能更改球缺高来改变半径,因为半径已经确定了更改球缺高会更改圆心位置,但球缺底半径不会随着变化。所以我们就要通过公式来确定半径,这个公式说明的是在球缺高和底面半径已经确定的情况下满足条件的半径只有一个。
现在我们就添加公式,这里就可以通过球缺高和底面半径来确定球缺半径了。

成果如下

到了这里,我还想再深化一下,如何对参数添加限制让它满足需求
现在我更改之这个参数的值,使球缺高大于球缺底半径。
可以看到它更接近一个球了,换句话说,就是截面的曲线是一段优弧了,现在我们想让这段曲线永远是劣弧最多是个半圆,怎么办呢。那我就让球缺高永远不大于球缺底半径就可以了。

这里需要使用IF函数,由于输入了公式的参数无法被修改,所以还要创建一个参数用于输入。
If函数的语法:IF(判断条件,为真时执行的式子,为假时执行的式子)
全英文符号,公式中不支持>=或<=符号,注意替代。
可以看到,即使是900,它也只是一个半圆。

到此,由这三个案例,相信你已经明白了revit中,族的约束到底有什么用处了。