几何辅助类主要是用来帮助表示几何对象,主要分为以下几种类型:
变化矩阵(GeTransform
):变化矩阵是一种仿射变换,主要对几何对象进行旋转,平移,镜像,缩放的操作,可以改变几何对象的形态和位置;
位置信息(BPPlacement
):位置信息是一种刚体变换,主要是平移变换和欧拉角旋转变换,描述几何对象所在的局部坐标系;
旋转矩阵(GeRotMatrix
):旋转矩阵提供一种仿射变换,主要对几何对象进行旋转操作;
包围盒(GeRange3d
/GeRange2d
):几何对象的范围;
角度(GeAngle
):弧度;
三维平面(GePlane3d
):可以通过原点和向量设置一个三维平面对象。
4.3.1 位置变换矩阵(GeTransform)
位置变换矩阵GeTransform
主要是由两个部分组成,分别是三维矩阵,和三维点的平移变化。
前三列构成的3X3矩阵是旋转矩阵,第四列构成的3X1矩阵是平移矩阵。BIMBase提供了丰富的变换矩阵的构造方式。
表4-10 变换矩阵常用构造方式
方法 | 描述 |
---|---|
create(double x, double y, double z) | 创建一个变化矩阵的平移部分为(x, y, z)的平移变化矩阵 |
createByLineAndRotationAngle(GePoint3d point0, BPGePoint3d point1, double radians) | 创建一个以点point0和点point1构成的轴线,radians为旋转角度的旋转变换 |
createByOriginAndVectors(GePoint3d ori,GeVec3d x, GeVec3d y, GeVec3d z) | 将全局坐标系变换到以ori为原点、以x为x轴、以y为y轴、以z为z轴的局部坐标系的变换 |
createByProduct(GeTransform transform1, GeTransform transform2) | 设置该变化矩阵为两个矩阵 transform1 和 transform2 相乘的结果,变换结果与两个变换叠加的效果一致 |
示例代码4-1是通过GeTransform类对文字对象进行旋转平移操作。
BPDocument doc = BPApplication.singleton().activeDocument);
BPGraphics gra = new BPGraphics();
BPTextProperties pro2 = BPTextProperties.create("黑体","", new GePoint2d(100,100), doc.modelManager.activeModel;
GeRotMatrix matrix = GeRotMatrix.createByVectorAndRotationAngle( new GeVec3d(0,0,1),1);
GeTransform trans = GeTransform.createByMatrixAndFixedPoint(matrix,new GePoint3d(1000,1000,0));
matrix = trans.getMatrix();
BPText text = BPText.create("文字范例", new GePoint3d(1000,900,0),matrix,pro2);
gra.addText(text);
gra.save();
代码4-1 文字旋转平移操作
4.3.2 位置信息(BPPlacement)
位置信息对象(BPPlacement
)是描述几何对象空间位置信息的,包含局部坐标基点信息以及局部坐标轴与世界坐标轴的角度关系,包括偏航角(Yaw
)、俯仰角(pitch
)、翻滚角(roll
)。
位置信息对象(BPPlacement
)主要有以下几种构造方式:
表4-11位置对象的构造方式
属性/方法 | 描述 |
---|---|
origin | 基点 |
angles | 旋转角度 |
setPlacement(GePoint3d pos1, GePoint3d pos2, double dRotate) | 通过两点位置pos1和pos2形成轴向,dRotate为绕该轴旋转一定角度,计算位置信息 |
setPlacement(GePoint3d pos1, GePoint3d pos2, int nAxis, double dRotate) | 点pos1和pos2定义局部坐标轴,该坐标轴由nAxis参数指定具体的坐标轴(0-X轴,1-Y轴,2-Z轴),dRotate为绕该轴的旋转角度 |
setPlacement(GePoint3d origin, GeVec3d normalVec, GeVec3d axisYVec) | origin为对应的局部坐标的基点,normalVec为局部坐标的Z轴,axisYVec为局部坐标的Y轴 |
位置信息(BPPlacement
)与位置变换矩阵(GeTransform
)可以通过以下接口相互转换。
表4-12 位置信息和位置变换矩阵互相转换方式
方法 | 描述 |
---|---|
toTransform () | BPPlacement转成GeTransform |
fromTransform(GeTransform) | 将GeTransform转成BPPlacement |
4.3.3 旋转矩阵(GeRotMatrix)
旋转矩阵是一个3X3的矩阵,是位置变换矩阵(GeTransform
)的前三列,可以通过createByTransform
接口从位置变换矩阵提取出来。
表4-13旋转矩阵常用接口
方法 | 描述 |
---|---|
createIdentityMatrix() | 创建单位旋转矩阵 |
createByTransform(GeTransform) | 创建与GeTransform的matrix部分相同的旋转矩阵 |
createByColumnVectors(GeVec3d, GeVec3d, GeVec3d) | 列向量构造旋转矩阵 |
createByRowVectors(GeVec3d, GeVec3d, GeVec3d) | 行向量构造旋转矩阵 |
createByRotate90(GeVec3d) | 创建绕轴旋转90度的旋转矩阵 |
createByVectorAndRotationAngle(GeVec3d,double) | 创建绕轴旋转一定角度的旋转矩阵 |
createByNonUniformScale(double ,double ,double ) | 创建一个旋转矩阵 |
createByNonUniformScale(double x) | 创建一个旋转矩阵 |
setByZeroMatrix() | 设置一个旋转矩阵为零矩阵 |
getColumn(int) | 获取矩阵的列向量 |
4.3.5 角度(GeAngle)
BIMBase中的角度对象是GeAngle
,是以弧度制定义的。该对象支持以弧度值、角度值、正切值等方式进行实例化,同时也支持常见的加减乘除等运算符。BPGeAngle
对象中封装常见的角度计算方法,比如正弦值、余弦值等。
表4-14角度常用接口
方法 | 描述 |
---|---|
createByDegrees(double) | 由角度值创建一个角度对象 |
createByRadians(double) | 由弧度值创建一个角度对象 |
createByAtan2(double y, double z) | 由正切值为y/x的角度创建一个角度对象 |
createByCircleAngle() | 创建弧度值为2pi的一个角度 |
sinValue() | 获取该角度的正弦值 |
cosValue() | 获取该角度的余弦值 |
getRadians() | 获取该角度的弧度值 |
getDegrees() | 获取该角度的角度值 |
4.3.6 三维平面(GePlane3d)
BIMBase中三维平面(GePlane3d
)是通过平面上的一个点及平面的法向量来定义,GePlane3d
对象中提供了常见的三维平面的构造方法。
表4-15 三维平面常用接口
属性/方法 | 描述 |
---|---|
position | 设置/获取三维平面的原点位置 |
normal | 设置/获取三维平面的法向量 |
isZero | 判断平面是否为0 |
normalize() | 对平面的法向量做归一化 |
setByZero() | 设置平面为0 |