4.2.1 点

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

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

主要可以应用于二三维模型创建点对象,进行精准定位。模型坐标查询、坐标系创建等等。具体点的创建可查看示例代码4-2。

表4-1 三维点常用接口

方法 描述
create(double,double,double) 创建一个三维点
createByZero() 创建一个(0,0,0)的三维点
createByUnify() 创建一个(1,1,1)的三维点
swap(GePoint3dR) 交换两个点,该点的值和参数点互换
distance(GePoint3dCR) 获取两个三维点之间的距离
isEqual(GePoint3dCR) 比较两个点是否相等
crossProduct2D(GePoint3dCR) 将该点与参数点在 x,y平面上的投影做叉积
dotProduct2D(GePoint3dCR) 将该点与参数点在 x,y平面上的投影做点积
getAngleTo(GePoint3dCR) 返回以原点旋转中心该点旋转到参数点的旋转角度
signedAngleTo(GePoint3dCR point, GePoint3dCR point1) 以原点为旋转中心,point1为旋转轴的正方向,从该点到point的旋转角度
createByTransform(GeTransformCR, GePoint3dCR) 返还参数点经过变换之后的点
createByInterpolate(GePoint3dCR pointA, double fraction, GePoint3dCR pointB); 在以 pointA 为起点 pointB 为终点的向量上以 一定比例进行插值,返回最后得到的插值点
almostEqual(GePoint3d const&,double) 判断在误差范围内该点和参数点是否相等

表4-2 二维点常用接口

方法 描述
create(double, double) 创建一个二维点
createByZero() 创建一个(0,0)的二维点
negate() 将该点对原点做对称变换
swap(GePoint2dR) 交换两个点,该点的值和参数点互换
distance(GePoint2dCR) 返回该点到参数点的距离
getAngleTo(GePoint2dCR) 返回以原点为旋转中心从该点旋转到参数点的角度
isParallelTo(GePoint2dCR) 判断以坐标原点为起点该点与参数点为终点的向量是否平行
isEqual(GePoint2dCR) 比较该点和参数点是否相等
almostEqual(GePoint2d) 判断在误差容许范围内该点和参数点是否相等

4.2.2 三维向量

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

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

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

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

方法 描述
point3d() 将该向量转换为一个三维点
create(double, double, double) 创建一个三维向量
createByStartEnd(GePoint3d, GePoint3d) 通过起点和终点创建一个三维向量
normalize() 将该向量标准化,并返回其大小
createByStartEnd(GePoint4dCR, GePoint4dCR) 通过起点和终点来创建一个三维向量
negate() 将该向量对原点做对称变换
distance(GeVec3dCR) 返回参数向量端点到该向量端点的距离
crossProduct2D(GeVec3dCR) 将该向量与参数向量在 x,y平面上的投影向量做叉积
getAngleTo(GeVec3dCR) 返回该向量与参数向量之间的夹角
isParallelTo (GeVec3dCR) 判断两个三维向量是否平行
isEqual(GeVec3dCR) 判断该向量和参数向量是否相等

4.2.3 基本曲线(IGeCurveBase)

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

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

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

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

属性/方法 描述
getCurveBaseType 获取曲线类型
getSegment(GeSegment3dR) 将曲线转换为GeSegment3d对象
getEllipse(GeEllipse3dR) 将曲线转换为GeEllipse3d对象
getLineStringCP() 将曲线转换为LineString,并获取LineString所有点
getSegmentInLineString(GeSegment3dR, size_t) 通过点的序号获取曲线中对应点组成的直线段
addPointToLineString(GePoint3dCR) 在LineString里添加点
createSegment (GePoint3dCP, size_t) 通过直线段来创建曲线对象
createSegment (pvector) 通过直线段来创建曲线对象
createEllipse(GeEllipse3dCR) 通过弧线来创建曲线对象
createLineString(pvector) 通过点集来创建曲线对象
proportToPoint(double,GePoint3dR) 获取分数位置对应点的坐标
getLength(double) 获取曲线长度
getRange(GeRange3dR) 获取曲线范围
isEqual(IGeCurveBaseCR,double) 在误差范围内,判断两个曲线是否相等
getStartEndPoint(GePoint3dR,GePoint3dR) 获取曲线首尾点
getStartPoint(GePoint3dR) 获取曲线起始点
setStartPoint(GePoint3dCR); 设置曲线起始点
setEndPoint(GePoint3dCR) 设置曲线终点
setByTransform(GeTransformCR) 设置曲线的变化矩阵

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

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

4.2.4 曲线组(GeCurveArray)

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

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

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

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

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

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

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

表4-5 曲线组常用接口

方法 描述
getCurveBasePointerByIndex(size_t) 获取子曲线
getNumOfCurveBases() 获取曲线组中基本曲线的数量
create(BoundaryType) 根据类型创建曲线组
create(BoundaryType, IGeCurveBasePtr) 根据类型和基本曲线创建曲线组
add(IGeCurveBasePtr) 向曲线组中添加曲线
getCentroidAndArea2D(GePoint3dR,double) 获取曲线组投影到二维的重心、面积
createLinestringArray(pvector, BoundaryType) 根据类型和点集创建曲线组
createRectangle(double,double,double,double,double) 根据矩形上起始点的值和对角坐标值,所有点z值去创建一个矩形
create(pvector) 根据线段组创建曲线组
createEllipseCurve(GeEllipse3dCR) 根据弧线创建曲线组
create(IGeCurveBasePtr) 根据子曲线创建曲线组
getStartEndPoint(GePoint3dR,GePoint3dR) 获取曲线起点和终点
getStartPoint(GePoint3dR) 获取曲线起始点
getLength() 获取曲线长度
getNumOfCurveBases() 获取曲线组中基本曲线的数量
getIntersectionLocationTypeWithRay(GeRay3dCR, GeSolidLocationInfoR) 判断GeCurveArray对象与一个unbounded ray的相交情况
getClosestPointBounded(GePoint3dCR) 获取曲线和该点最近的位置信息

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-6 几何实体常用接口

方法 描述
createGeTorusPipe(GeTorusPipeInfoCR) 由一个圆管对象创建一个三维实体
getGeTorusPipeInfo(GeTorusPipeInfoR) 将三维实体转换为圆管对象
createGeCone(GeConeInfoCR) 由一个柱台锥对象创建三维实体
getGeConeInfo(GeConeInfoR) 将三维实体转换为柱台锥
createGeBox(GeBoxInfoCR) 由一个盒体对象创建三维实体
getGeBoxInfo(GeBoxInfoR) 将三维实体转换为盒体
createGeSphere(GeSphereInfoCR) 由一个球/椭球对象创建三维实体
getGeSphereInfo(GeSphereInfoR) 将三维实体转换为球/椭球
createGeExtrusion(GeExtrusionInfoCR) 由一个拉伸体对象创建三维实体
getGeExtrusionInfo(GeExtrusionInfoR) 将三维实体转换为拉伸体
createGeRotationalSweep(GeRotationalSweepInfoCR) 由一个旋转体对象创建三维实体
getGeRotationalSweepInfo(GeRotationalSweepInfoR) 将三维实体转换为旋转体
createGeRuledSweep(GeRuledSweepInfoCR) 由一个扫掠体对象创建三维实体
getGeRuledSweepInfo(GeRuledSweepInfoR) 将三维实体转换为扫掠体
getRange(GeRange3dR) 获取三维实体的包围盒
isSameType(IGeSolidBaseCR) 判断两个三维实体类型是否相同
isClosedSolid() 判断该三维实体是否是闭合的
getFace(GeFaceIndices) 获取索引值对应的实体面的数据
getFaceIndices(pvector) 获取实体所有面的索引

4.2.6 网格实体(PolyfaceHandle)

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



图4-4 网格实体
主要功能包括网格实体创建,求体积面积,获取几何点线面等计算。满足网格实体创建及基本计算要求。
三维应用场景,创建中有通过网格面创建地形等复杂曲面。属性编辑中,通过修改控制点等修改已创建的网格实体。同时也可通过在位编辑(夹点)修改已创建体参数信息。

表4-7 网格常用接口

方法 描述
addPolygon(List< GePoint3d> ) 增加三维点
getPoints() 获取所有三维点
getPointsIdx() 获取所有三维点的序号

4.2.7 几何集合(BPGraphics)

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

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

方法 描述
getAsGeCurveBaseP() 获取当前图素类型为基本曲线
getAsGeCurveArrayP() 获取当前图素类型为曲线组
getAsPolyfaceHandleP() 获取当前图素类型为网格
getAsGeSolidBaseP() 获取当前图素类型为三维实体
getSymbology() 获取当前图素符号类型
setSymbology(BPSymbologyCR) 设置当前图素符号类型
getTransparency() 获取当前图素透明度
setTransparency(double) 设置当前图素透明度
getMaterial() 获取当前图素材质
setMaterial(BPMaterialCP) 设置当前图素材质
isEmpty() 判断当前图素是否为空
getEntityR() 获取实体对象的引用
updateEntityWithGraphics(BPEntityP) 更新实体对象的内部几何
setTransform(GeTransformCR transform, bool) 将当前图素进行坐标变换
addGeCurve(IGeCurveBaseCR) 向图素里添加曲线
addGeCurveArray(GeCurveArrayCR, BPSymbologyCR) 向图素里添加曲线组
addText(BPTextCR) 向图素里添加文本
addGeSolidBase(IGeSolidBaseCR) 向图素里添加实体
addPolyface(IPolyfacePipeOperatorCR) 向图素里添加多面体
finish() 完成素里添加
save() 保存图素到文件
getGraphicsFromEntity(BPEntityCR) 根据实体获取对应的图素
getModel() 获取图素所在的模型
setModel(BPModelPtr) 设置图素所在的模型
getLayerId() 设置图素所在图层ID