几何辅助类主要是用来帮助表示几何对象,主要分为以下几种类型:

变化矩阵(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