18. Revit API: 元素位置与变换

前言

很好,这一篇没有用类名来做标题。大进步哇!
这一篇,讲LocationTransformElementTransfornUtilsFrame
这几个都与位置、变换有关系。

前面提示:内容平平,没有看头,顶天了扫一眼得了。


一、Location

Location需要从元素上获取,但并不是所有元素都有Location,DirectShape就没有。
Location上只有两个本身的方法:

// 沿着向量移动
public bool Move(XYZ translation);
// 绕某个轴旋转一定弧度
public bool Rotate(Line axis,double angle);

Location有什么用呢?表示元素位置信息。
它有两个子类,①LocationPoint,②LocationCurve,具体的位置在子类上,所以我们拿到Location时,都需要进行判断。

在这里插入图片描述

2.1. LocationPoint

这个很好理解,位置嘛,一个点。FamilyInstance的位置大多是由点表示的。

它有2个属性:

// 模型位置,可直接设置
public XYZ Point { get; set; }
// 模型的旋转信息,只读
public double Rotation { get; }

2.2. LocationCurve

这个就稍微特别点了,元素的位置是由Curve表示的。这种族一般存在多个控制点。比如墙、梁。
它有3个属性:

public Curve Curve { get; set; }
public ElementArray this[int end] { get; set; }  // ElementsAtJoin
public JoinType this[int end] { get; set; }  // JoinType

后俩个参数啥意思呢?

var curve = wall.Location as LocationCurve;  // 获取墙体的LocationCurve

var j0 = curve.get_ElementsAtJoin(0);  // Curve起点上连接的墙体数目。
var j1 = curve.get_ElementsAtJoin(1);  // Curve起点上连接的墙体数目。

var jt0 = curve.get_JoinType(0);  // 连接类型
var jt1 = curve.get_JoinType(1);

呐,连接数是这样的

在这里插入图片描述

还可以设置连接类型,使墙体不再连接,但是会弹出警告“无法使图元保持连接”。


二、Transform

Transform表示的就是元素的变换信息。系统族是没有Transform的,Transform只存在于FamilyInstance上。

关于FamilyInstance与Transform的关系,看这里

Transform就是对4x4矩阵的封装,作用和一些三维引擎里的是一样一样的,不展开了嗷

MethodsDescription
CreateReflection
CreateRotation
CreateRotationAtPoint
CreateTranslation
创建反射矩阵(镜像)
创建旋转矩阵
创建绕点的旋转矩阵
创建平移矩阵
AlmostEqual几乎相等,阈值1e-9
Multiply矩阵相乘
OfPoint
OfVector
点的变换
向量的变换
ScaleBasis
ScaleBasisAndOrigin
缩放

再看看属性

ProperticesDescription
Identity常量,单位矩阵
Basis
BasisX/BasisY/BasisZ
Origin
Scale { get; }
?
三个向量
表示位置的点
缩放
Determinant行列式的值
Inverse逆矩阵

就这么点东西。

Basis这个属性,还不知道有啥用,看文档也不知道在说什么。


三、ElementTransfornUtils

看名字,元素变换工具类。能够对元素进行 复制、移动、旋转、镜像等操作。

知道有这么个类就行了,具体内容就不看了嗷,就几个方法。

对应“修改”面板上的这几个操作。
image.png


四、Frame

Frame,从使用上讲就是【坐标系】,一个点、三个正交的向量。

有两类使用:一是用于Plane和各种Surface的创建,二是用于GeometryCreationUtilities工具类中旋转体的生成。
而这些用到的地方,都是作为参数使用,都要求Frame是正交的。

属性长这样:BaseX(Y/Z) 加上Origin,和Transform简直一个样。
好,讲完了😎。
使用上,都作为参数了,当然是用到了再讲。

PS:
尽管文档是这么介绍的:
① Frame由三维空间中一个基点上的三个向量组成。
② 这些向量不必是正交的,不必有单位长度,甚至不必是线性无关的,尽管在实践中,Frame通常具有线性无关的向量。
③ Frame可用于表示参考坐标系、曲线上的移动的"frame field"或用于其它目的。

描述一大堆,反正就把它当坐标系就行了😑。
至于描述上说的各种不要求,就不要理会了,使用起来是各种要求。


总结

真就内容平平呗。

下一篇呢,emm…不太想写了,感觉没什么好写的,不如直接看文档来得实在。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值