前言
很好,这一篇没有用类名来做标题。大进步哇!
这一篇,讲Location
、Transform
、ElementTransfornUtils
、Frame
。
这几个都与位置、变换有关系。
前面提示:内容平平,没有看头,顶天了扫一眼得了。
一、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矩阵的封装,作用和一些三维引擎里的是一样一样的,不展开了嗷
Methods | Description |
---|---|
CreateReflection CreateRotation CreateRotationAtPoint CreateTranslation | 创建反射矩阵(镜像) 创建旋转矩阵 创建绕点的旋转矩阵 创建平移矩阵 |
AlmostEqual | 几乎相等,阈值1e-9 |
Multiply | 矩阵相乘 |
OfPoint OfVector | 点的变换 向量的变换 |
ScaleBasis ScaleBasisAndOrigin | 缩放 |
再看看属性
Propertices | Description |
---|---|
Identity | 常量,单位矩阵 |
Basis BasisX/BasisY/BasisZ Origin Scale { get; } | ? 三个向量 表示位置的点 缩放 |
Determinant | 行列式的值 |
Inverse | 逆矩阵 |
… | … |
就这么点东西。
Basis
这个属性,还不知道有啥用,看文档也不知道在说什么。
三、ElementTransfornUtils
看名字,元素变换工具类。能够对元素进行 复制、移动、旋转、镜像等操作。
知道有这么个类就行了,具体内容就不看了嗷,就几个方法。
对应“修改”面板上的这几个操作。
四、Frame
Frame
,从使用上讲就是【坐标系】,一个点、三个正交的向量。
有两类使用:一是用于
Plane
和各种Surface
的创建,二是用于GeometryCreationUtilities
工具类中旋转体的生成。
而这些用到的地方,都是作为参数使用,都要求Frame是正交的。
属性长这样:BaseX(Y/Z)
加上Origin
,和Transform简直一个样。
好,讲完了😎。
使用上,都作为参数了,当然是用到了再讲。
PS:
尽管文档是这么介绍的:
① Frame由三维空间中一个基点上的三个向量组成。
② 这些向量不必是正交的,不必有单位长度,甚至不必是线性无关的,尽管在实践中,Frame通常具有线性无关的向量。
③ Frame可用于表示参考坐标系、曲线上的移动的"frame field"或用于其它目的。
描述一大堆,反正就把它当坐标系就行了😑。
至于描述上说的各种不要求,就不要理会了,使用起来是各种要求。
总结
真就内容平平呗。
下一篇呢,emm…不太想写了,感觉没什么好写的,不如直接看文档来得实在。