4.2.1 点

点几何元素描述笛卡尔坐标系中二维或者三维点的表达。点是几何表达中的最基本元素。

点的表达包括二维点类GePoint2d和三维点类GePoint3d,通过点的坐标创建点。基本功能包括点与点的、点与向量等基础运算,点与向量位置关系计算,还包括插值运算、旋转变换、投影计算、距离计算等等。

主要可以应用于二三维模型创建点对象,进行精准定位。模型坐标查询、坐标系创建等等。

表4-1 三维点常用接口

方法 描述
createByZero() 创建一个(0,0,0)的三维点
createByUnify() 创建一个(1,1,1)的三维点
createByTransform(GeTransform, GePoint3d) 根据已有点及变化矩阵创建点
createByRotate(GePoint3d,GeRotMatrix, double x,double y,double z) 将点(x,y,z)做matrix定义得旋转变换和点定义的平移变换
createByRotate(GePoint3d,GeRotMatrix, Gevec3d) 将向量vector端点做matrix定义得旋转变换和点定义的平移变换
Swap(GePoint3d) 交换两个点,该点的值和参数点互换
getAngleTo(GePoint3d) 以原点为旋转中心,该点到参数点的旋转角度
isParallelTo(GePoint3d) 以坐标原点为起点,该点和参数点为终点的向量是否平行
rotate2D(GePoint3d,double) 参数点逆时针绕z轴旋转一定角度,将该点设置为结果
pointProject(GePlane3d,GeVec3d) 将该点沿向量投影到平面上,得到投影点
pointMirror(GePlane3d) 获取三维点对平面的镜像点
asVector() 获取三维点转成对应的三维向量
distanceTo(GePoint3d) 获取两个三维点之间的距离
isEqualTo(GePoint3d) 判断两个三维点是否相等
almostEqual(GePoint3d,double) 判断在误差范围两个三维点是否相等

表4-2 二维点常用接口

方法 描述
create(double, double) 创建一个二维点
create(GePoint3d) 三维点在xy平面上的投影点
createByZero() 创建一个(0,0)二维点
createByUnify() 创建一个(1,1)二维点
createByInterpolate(GePoint2d, double, GePoint2d) 获取两点之间的插值点
negate() 将该点对原点做对称变换
normalize() 将该点做归一化
rotate90(GePoint2d) 获取逆时针旋转90度后的点
swap(GePoint2d) 交换两个二维点的值
distance(GePoint2d) 获取两点之间的距离
getAngleTo(GePoint2d) 以原点为中心,旋转到参数点的角度
isEqual (GePoint2d) 判断两个二维点是否相等

4.2.2 三维向量

向量是计算几何中的基本概念,指一个同时具有大小和方向的几何对象。

向量的表达包括二维向量类GeVec2d和三维向量类GeVec3d,可直接通过各分量的值或者起点和终点创建向量。基本功能包括包括点与向量等、向量与向量等基础运算,还包括插值运算、旋转变换、投影计算、距离计算等等。

向量主要可应用于二三维模型进行精准定位。模型坐标查询、坐标系创建等等。

三维向量(GeVec3d):三维空间的向量。

表4-3 三维向量常用接口

方法 描述
createByStartEnd(GePoint3d, GePoint3d) 通过起点和终点创建一个三维向量
createByStartEndNormalize(GePoint3d, GePoint3d) 获取由两点确定方向的单位向量
normalize(GeVec3d) 将该向量标准化
isZero() 判断是否是零向量
transform(GeTransform) 获取矩阵变换后的三维向量
rotate2D(double) 获取旋转变换后的三维向量
mirror(GeVec3d) 获取镜像变换后的三维向量
transform(GeTransform) 将三维向量进行变换矩阵的变换
angleTo(GeVec3d) 获取两个三维向量的角度
isParallelTo (GeVec3d) 判断两个三维向量是否平行
isPerpendicularTo(GeVec3d) 判断两个三维向量是否垂直
dotProduct2D(GeVec3d) 获取两个三维向量点乘的结果
crossProduct2D(GeVec3d) 获取两个三维向量叉乘的结果
almostEqual(GeVec3d) 判断误差范围内两个向量是否相等
distance(GeVec3d) 获取两个三维向量端点之间的距离

4.2.3基本曲线(IGeCurveBase)

基本曲线主要包括直线段(GeSegment3d),弧线(GeEllipse3d)等类型。

基本曲线类IGeCurveBase主要用于整合线段、多线段、圆、椭圆、圆弧、椭圆弧、B样条曲线的概念。通过相应接口,可创建线段、多线段、圆、椭圆、圆弧、椭圆弧、B样条曲线。主要功能包括重心、法向、面积相关属性计算、与点、角度关系计算、插值计算、与平面、线段、椭圆线相交计算,投影计算等。

二三维应用场景,可单点绘制线段、两点绘制线段、连续绘制线段、三点绘弧、中心点半径绘弧、中心点半径绘圆、中心点长轴短轴绘制椭圆、弧与线段组合曲线、控制点绘制变样线等等。编辑中有属性修改半径、圆心、弧长、扫掠角度等修改圆弧及椭圆弧,修改定位点改变线段定位及长度,在位编辑(夹点)修改弧及线段定位信息及创建信息。

表4-4 基本曲线常用接口

属性/方法 描述
length 曲线长度
fastLength 曲线首尾距离
range 曲线的包围盒
startPoint 曲线起点
endPoint 曲线终点
curveBaseType 曲线类型
getSegment() 将曲线转换为GeSegment3d对象
getLineString() 将曲线转换为Linestring,并获取所有点
getEllipse() 将曲线转换为GeEllipse3d对象
getChildCurveArray() 将曲线转换为GeCurveArray对象
createSegment (GeSegment3d) 通过直线段来创建曲线对象
createLinestring (List< GePoint3d>) 通过点来创建曲线对象
createEllipse(GeEllipse3d) 通过弧线来创建曲线对象
createChildCurveArray(GeCurveArray) 通过曲线组来创建曲线对象
setByTransform(GeTransform) 通过变换矩阵对曲线做变换
proportToPoint(double, GePoint3d) 获取曲线分数位置对应点的左边
proportToTransform(double,GeTransform) 获取曲线分数位置对应的坐标系

线段是指直线上两点和它们之间的部分。线段不能向任何一方无限延伸,能度量长度,两点之间线段最短。

线段通过类GeSegment3d进行表达,可通过线段起点、终点,线段起点、方向向量进行创建。主要功能包括线段相关属性计算、线段与点关系计算、插值计算、线段与线段相交计算。椭圆线需求具体包括圆、椭圆、圆弧、椭圆弧四种类型,通过类GeEllipse3d进行表达,可通过弧上三点,弧的圆心和端点,弧所在圆的参数、弧的起点、扫掠角度等创建椭圆线。基本功能包括重心、法向、面积相关属性计算、与点、角度关系计算、插值计算、与平面、线段、椭圆线相交计算,投影计算等。

4.3.4 包围盒(GeRange3d/GeRange2d)

图素对象的空间范围称之为包围盒,包含三维包围盒(GeRange3d)和二维包围盒(GeRange2d)。三维包围盒是一个各边平行于坐标轴的六面体,用六面体对角线上的两个三维点来表示;二维包围盒是各边都平行于坐标轴的长方形,用长方形对角线上的两个二维点来定义。包围盒可应用于图形空间碰撞检查、图形搜索过滤等。

表4-5 包围盒常用接口

属性/方法 描述
low 设置/获取包围盒下边界点
high 设置/获取包围盒上边界点
xlength 获取包围盒在x方向的长度
ylength 获取包围盒在y方向的长度
zlength 获取包围盒在z方向的长度
set(GePoint3d point) 设置包围盒上下边界点都为point
set(GePoint3d point0, GePoint3d point1) 设置包围盒上下边界点分别为point0,1
set(List points) 设置包围盒能容纳数组所有点的最小范围
set(GeTransform tra, List points) 设置包围盒能容纳数组所有点经过tra变换后点的最小范围
extendRange(GeRange3d range) 拓展包围盒能包含range
extendRange(double extend) 拓展包围盒的上界为high+extend,下界为low-extend
extendRange (List points) 拓展包围盒能包含数组里的所有点
extendRange (GeTransform, List) 拓展包围盒能容纳数组所有点经过tra变换后点的最小范围
getCorners() 获取包围盒上下界为对角线顶点的立方体顶点坐标集合
isEqual() 判断两个包围盒是否相等
setByUnion(GeRange3d, GeRange3d) 设置包围盒为这两个range的并集
setByIntersection(GeRange3d, GeRange3d) 设置包围盒为这两个range的交集

4.2.4 曲线组(GeCurveArray)

在几何表达上,既能表示一组曲线的集合,也能表示三维表面的区域,还可以用于描述截面,轮廓等参数。基本曲线和曲线组可以互相嵌套,曲线组主要包括以下几种类型:

None:对于数组中的曲线不做任何处理。

Open:自动连接数组中曲线。

Outer:曲线是逆时针方向加入曲线组中,自动连接数组中曲线,并最后做闭合处理,形成一个闭合的面域。

Inner:曲线是顺时针方向加入曲线组中,自动连接数组中曲线,并最后做闭合处理,形成一个闭合的面域。

ParityRegion:各个面域重叠部分会做处理,偶数重叠会裁剪,奇数重叠会合并。

UnionRegion:无论各个面域是否重叠,都不做处理。

表4-6 曲线组常用接口

属性/方法 描述
boundaryType 曲线类型
length 曲线长度
fastLength 曲线首尾距离
isStartEqualEnd 曲线的起点和终点是否相等
numOfCurveBases 曲线组中曲线的数量
startPoint 曲线起点
endPoint 曲线终点
range 曲线包围盒
create(BoundaryType) 通过类型创建曲线组
create(BoundaryType,ICurveBase) 通过类型和基本曲线来创建曲线组
createLinestringArray(List< GePoint3d>) 通过点来创建曲线组
createEllipseCurve(GeEllipse3d, BoundaryType,bool) 通过弧线创建曲线组
setByTransform(GeTransform) 对曲线做变换
setByReverse() 将曲线反向
isOpenBoundaryType() 判断曲线是否为开放曲线
isClosedBoundaryType() 判断曲线是否为闭合曲线
isParityRegionBoundaryType() 判断曲线类型是否是ParityRegion
isUnionRegionBoundaryType() 判断曲线类型是否是UnionRegion
isValidBoundaryType() 判断曲线类型是否是有效类型
isEqual(BPGeCurveArray , double) 判断两个曲线组在容差内是否相等
getLengthAndCentroid(double,GePoint3d) 获取曲线组长度和重心
getCentroidAndNormalAndArea(GePoint3d,GeVec3d,double) 获取曲线组的重心,法向量,面积
getIndexByCurveBasePointer(IGeCurveBase) 获取曲线的index
getCentroidAndArea2D(GePoint3d,double) 获取曲线组投影到二维的重心,面积
isEqual(GeCurveArray,double) 判断两个曲线容差范围内是否相等
getClosestPointBounded(GePoint3d) 获取曲线和该点最近的位置信息
isSegmentInCurveArray(GeSegment3d, GeCurveArray) 判断该线是否在该曲线区域内

4.2.5 几何实体类(IGeSolidBase)

三维实体,主要包括:圆管(GeTorusPipeInfo),柱台锥(GeConeInfo),盒体(GeBoxInfo),球/椭球(GeSphereInfo),拉伸体(GeExtrusionInfo),旋转体(GeRotationalSweepInfo),扫掠体(GeRuledSweepInfo),如图4-3所示。

图4-3 几何实体

盒体,也为六面体,就是有六个面的空间形体,共分为正六面体(也叫正方体)、平行六面体、不规则六面体三类。盒体通过类GeBoxInfo进行表达,主要功能包括盒体创建,求体积面积,获取几何点线面等计算。

球体为空间中到定点的距离等于定长的所有点组成的图形。球体通过类GeSphereInfo进行表达,主要功能包括球体创建,求体积面积,获取几何点线面等计算。

柱台锥包括圆柱、圆台、圆锥三类形体。柱台锥通过类GeConeInfo进行表达,主要功能包括柱台锥创建,求体积面积,获取几何点线面等计算。

圆环相当于一个空心的圆,空心圆拥有一个小半径(r),整个圆有一个大半径(R),整个圆的半径减去空心圆半径就是环宽。生活中的例子有空心钢管,甜甜圈,指环,游泳圈等,截取圆环一部分的叫扇环。圆环体通过类GeBoxInfo进行表达,主要功能包括盒体创建,扇环创建,求体积面积,获取几何点线面等计算。

拉伸体主要通过定义的截面沿向量方向拉伸形成的几何形体。拉伸体通过类GeExtrusionInfo进行表达,主要功能包括拉伸体创建,求体积面积,获取几何点线面等计算。

扫掠体主要通过定义的多个截面进行扫掠形成的几何形体。扫掠体通过类GeRuledSweepInfo进行表达,主要功能包括扫掠体创建,求体积面积,获取几何点线面等计算。

一条平面曲线绕着它所在的平面内的一条定直线旋转所形成的曲面叫作旋转面;该定直线叫做旋转体的轴;封闭的旋转面围成的几何体叫作旋转体。旋转体通过类GeRotationalSweepInfo进行表达,主要功能包括旋转体创建,求体积面积,获取几何点线面等计算。

表4-7 几何实体常用接口

属性/方法 描述
solidType 获取实体的类型
range 获取实体的包围盒
getFaceIndices(List) 获取实体所有面的索引
getFace(GeFaceIndices) 获取索引值对应的实体面的数据
createTorusPipe(GeTorusPipeInfo) 由一个圆管对象创建一个三维实体
createCone(GeConeInfo) 由一个柱台锥对象创建一个三维实体
createBox(GeBoxInfo) 由一个盒体对象创建一个三维实体
createSphere(GeSphereInfo) 由一个球/椭球对象创建一个三维实体
createExtrusion (GeExtrusionInfo) 由一个拉伸体对象创建一个三维实体
createRotationalSweep(GeRotationalSweepInfo) 由一个拉伸体对象创建一个三维实体
createRuledSweep(GeRuledSweepInfo) 由一个扫掠体对象创建一个三维实体

4.2.6 网格实体(PolyfaceHandle)

网格实体用于描述三维面的形状,通过网格划分构建复杂几何形体,如图4-4所示。

图4-4 网格实体

主要功能包括网格实体创建,求体积面积,获取几何点线面等计算。满足网格实体创建及基本计算要求。

三维应用场景,创建中有通过网格面创建地形等复杂曲面。属性编辑中,通过修改控制点等修改已创建的网格实体。同时也可通过在位编辑(夹点)修改已创建体参数信息。

表4-8 网格常用接口

方法 描述
initialize() 初始化一个网格实体
addPolygon(List< GePoint3d> ) 增加三维点
getPoints() 获取所有三维点
getPointsIdx() 获取所有三维点的序号

4.2.7 几何集合(BPGraphics)

几何集合(BPGraihics)用于构造各种几何图形,是各种几何对象的集合,可将线、组合线、面、三角面片、实体类、文字等集成为一个复杂图形。

表4-9 几何图素常用接口

属性/方法 描述
size 获取图素中包含的几何对象的个数
id 获取图素对象id
symbology 获取图素对象符号类型
defaultSymbology 获取图素对象默认符号类型
transparency 获取图素对象透明度(0:不透明 1:完全透明)
isEmpty 判断图素对象是否为空
range 获取图素对象包围盒
getGraphicElement() 获取图素对象对应构件的key值
deleteFromModel() 删除图素对象
getType (int) 根据序号返回对应几何对象的类型
save() 保存图素对象到模型中
setTransparency/getTransparency(int) 设置,获取图素中对应几何对象的透明度
setSymbology/getSymbology (int) 设置,获取图素中对应几何对象的颜色
addCurve(IGeCurveBase) 将曲线对象加入到图素中
addCurveVector(GeCurveArray) 将曲线组对象加入到图素中
addPolyface(PolyfaceHandle) 将网格对象加入到图素中
addSoild(IGeSoildBase) 将实体对象加入到图素中
addText(BPText) 将文字对象加入到图素中