摘 要: 三维实体模型是建立三维可视化信息系统的基础,通过对几何造型及图形处理基本理论和方法的研究,基于构造实体几何法的理论,对ObjectARX工具中三维图形接口和实体造型方法进行了探讨,用Visual C++ 和ObjectARX工具进行二次开发,实现了三维实体自动建模、图形变换和布尔运算等操作方法,并以桥梁结构为例进行了的参数化建模,为桥梁信息化平台的建设提供素材。
关键词:计算机应用;实体建模;ObjectARX开发工具;图形变换;布尔运算
0 引言
几何造型的基本理论和方法自20世纪70年代开始创立,经过几十年的发展和研究,现已广泛地应用在土木建筑、动画制作、人体造型等领域的三维设计和立体图形显示。它是计算机及其图形工具描述物体形状、设计几何形体、模拟物体动态处理过程的一门综合技术。几何造型主要包括曲面造型、实体造型、特征造型等[1]。
参考文献[2-4]对OpenGL建模技术进行了研究,参考文献[5-8]对三维建模技术、桥梁设计及可视化进行了研究。本文通过对实体模型构造方法的研究,探讨工程物的参数化建模、图形变换、集合运算等方法,运用Visual C++2005语言和ObjectARX开发工具包,对AutoCAD进行二次开发,建立实体图形数据库接口,实现工程物的参数化自动建模,为三维可视化和信息化平台的建立奠定图形及数据基础[9]。
1 基于ObjectARX的实体构造方法
构造实体几何法(Constructive Solid Geometry,CSG)是当前许多CAD/CAM系统采用的表示三维形体的一种方法[10]。CSG用系统定义的简单几何形体及正则集合运算,可构造出复杂实体。其基本思想是:一个较复杂三维形体可以通过一些基本形体的并、交、差集等集合运算来正确表示。
1.1 基本体造型方法
在ObjectARX中,三维实体属于AcDb3dSolid类对象,对于一个几何实体,AcDb3dSolid实体是一个容器和接口,通过AcDb3dSolid类的成员函数可以生成多种基本实体,通过布尔运算可生成复杂的组合体[11]。生成三维基本体的方法如下:
(1)用AcDb3dSolid类创建一个容器对象:
AcDb3dSolid p3dObj;
AcDb3dSolid*p3dObj=new AcDb3dSolid;
(2)建立基本体对象的一般形式:
指向AcDb3dSolid类对象的指针->创建基本三维实体对象成员函数;
如创建长方体的方法为:
p3dObj->createBox(xLen,yLen,zLen);
(3)将三维实体用AddEntityToDbs()数据库接口写入当前图形数据库中。
1.2 由二维对象用推移表示法创建三维实体
将物体A沿空间一条轨迹P推移时,A的轨迹定义了一个新的物体B,则物体B可以由物体A与轨迹P共同表示,这种方法称为推移表示法。
除了用AcDb3dSolid类的成员函数创建基本体外,也可在二维封闭图形的基础上,通过指定高度、路径用推移法创建立体,或绕轴旋转封闭区域生成三维实体。
1.2.1 按指定的高度拉伸立体的方法
若将一个平面区域沿着垂直于该平面的直线段推移得到一个柱体,称为平移扫掠,也叫拉伸。这种方法可用于生成棱柱、圆柱等立体,如桥梁的墩台基础、桩柱及其他等截面结构。由平面区域拉伸生成三维立体的AcDb3dSolid类成员函数为:
extrude(const AcDbRegion*pRegion,double height,double taper);
其中,pRegion为面域;height为推移高度;当沿高度推移时,参数taper为0,则为柱体,非零时沿高度为呈线性递减截面。
1.2.2 按指定路径扫掠形成立体
如果平面区域沿任意曲线推移,则称为扫掠。这种方法将二维平面区域沿轨迹形成等截面实体,可应用于形成等截面梁体、拱桥和钢结构杆件等。注意,在路径和实体创建后,要分别将对象添加到图形数据库中。
2 三维实体的图形变换和布尔运算
2.1 基于ObjectARX的三维实体图形变换方法
复杂工程物是由简单体通过叠加、穿孔、截切等方式构成的,而由AcDb3dSolid类的成员函数形成简单体的质心在WCS坐标的原点,所以,要用图形变换方法,根据变换方式和顺序形成变换矩阵,从而将立体变换到复杂体中确定的空间位置,然后用布尔运算形成复杂体。
在ObjectARX中,图形变换的主要方式和变换矩阵形成方法如下:
(1)平移变换:mat_move.setCoordSystem(moveBy,x,y,z)。
(2)比例变换:mat_scale.setToScaling(scale,moveBy)。
(3)旋转变换:mat_rotate.setToRotation(α,y,moveBy)。
(4)镜像变换:是以某坐标面为对称面对实体进行对称变换。
(5)由变换矩阵进行实体模型变换。
确定图形变换矩阵后,即可对类AcDb3dSolid的成员函数创建的实体进行变换,再将实体添加到图形数据库的块表中。实现立体变换的方法为:
transformBy(const AcGeMatrix3d& xform);
2.2 复杂三维实体的布尔运算
由基本体函数或二维对象拉伸、扫掠、旋转只能生成一些单个的简单体,由简单体形成复杂形体必须通过布尔运算才能实现。布尔运算有并(UNION)、交(SUBTRACT)、差(INTERSECTION)3种[12]。
在ObjectARX的编程中,对实体进行布尔运算使用AcDb3dSolid类的成员函数:
booleanOper(AcDb::BooloperType operation,AcDb3dSolid*pSolid);
其中,布尔运算类型operation取值为AcDb::kBoomlUnite(并集)、AcDb::kBoolIntersect(交集)和AcDb::kBoolSubtract(差集);pSolid表示另一个参与布尔运算的实体的指针。
3 拱桥建模实例
图1(a)为纵梁和横梁断面图,图1(b)为拱形桥梁上部结构立体图,拱形为钢管拱,直径800 mm,由设计图可获取各部分结构的截面定形尺寸参数,拱桥的三维建模方法如下。
(1)拱形立体建模
拱形结构用扫掠方法进行建模。方法如下:
①扫掠对象定义:拱截面为圆,则扫掠对象定义为:AcDbCircle*pCirc=new AcDbCircle(center,normal,800);
②由封闭边界生成面域:封闭边界是圆,形成面域的方法见1.2.1。
③生成扫掠路径:拱形建模时,圆截面的扫掠路径为拱轴线,采用AcGePoint3dArray类定义三维坐标数组pt3d,存储拱轴线各顶点的坐标,并用setLogicalLength(n)成员函数定义数组长度,然后对数组赋值,用AcDb3dPolyline类成员函数AcDb3dPolyline()创建空间扫掠路径。
④创建三维实体。先创建实体的容器和接口,再通过类的成员函数extrudeAlongPath()生成三维实体,然后将实体添加到图形数据库中,最后用delete删除面域指针pRegion。
(2)梁体结构建模
梁体包括纵梁、端横梁、中间横梁及桥面板等结构,梁体拉伸方法如下:
①如图1(a)所示,分别创建纵梁与横梁二维多段线封闭图形。
②将梁体截面图形生成面域,沿Z轴方向拉伸立体长度。
③采用旋转、平移等变换将立体放在指定位置。
④用布尔运算的并集形成桥梁整体,如图1(b)所示。
另外,若梁截面沿长度方向为非线性变化的变截面连续梁时,可采用放样的方法形成梁体模型。
4 结论
计算机技术和几何造型理论的发展,推动了设计领域由二维向三维的转变,为三维可视化和信息化提供了立体模型和数据信息。研究构造实体几何造型理论和方法,运用Visual C++语言和ObjectARX开发工具包,在AutoCAD环境下探讨参数化自动建模方法,可为工程物快速建模提供便捷途径。工程物三维模型的建立、设计参数和属性信息的存储,为工程技术人员提供了直观研究设计方案、工程结构的平台,也为工程物三维可视化信息系统的建立奠定了基础。本文的立体建模和ObjectARX三维开发技术可给相关研究人员提供建模新思路。
参考文献
[1] 王汝传,黄海平,林巧明.计算机图形学教程(第2版)[M].北京:高等教育出版社,2009.
[2] 张志华,程耀东,张新秀.基于OpenGL和MFC的三维建模教学实践与改革[J].微型机与应用,2014,33(3):88-90.
[3] 马林,程耀东,朱宗喜,等.基于OpenGL的TIN构建方法研究[J].微型机与应用,2014,33(14):42-44.
[4] 扈春霞,王子茹.基于OpenGL的参数化斜拉桥三维可视化的研究[J].江汉大学学报(自然科学版),2008,36(2):47-49.
[5] 马林,李兴田.三维可视化方法研究与应用[J].兰州交通大学学报,2013,32(6):110-113.
[6] 刘榕,刘海波,龙海滨.山店江大桥高墩连续刚构桥设计与关键技术[J].公路工程,2013,38(2):125-128,136.
[7] 陆铁坚,蒋友良,余志武.桥梁三维造型及其视景仿真[J].中南大学学报(自然科学版),2005,36(3):501-505.
[8] 毕硕本,张国建,侯荣涛,等.三维建模技术及实现方法对比研究[J].武汉理工大学学报,2010,32(16):26-30,32.
[9] 李世国.AutoCAD高级开发技术-ARX编程及应用[M].北京:机械工业出版社,1999.
[10] 程耀东,赵建昌,徐军.图形数据库应用技术研究[J].工程图学学报,2006,27(1):143-148.
[11] 程耀东,徐斐,董明才.基于ObjectARX 2007的地质断面自动填充方法[J].物探与化探,2010,34(5):681-685.
[12] 程耀东,张丽萍,韩进,等.计算机绘图与二次开发方法[M].兰州:甘肃科学技术出版社,2009.