CAD系统二次开发-ObjectARX中的实体造型技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可以由多个自封闭对象或者端点相连构成封闭对象创建多个面域, 如果边界对象内相交,就不能形成面域。可以给面域填充图案和着色, 同时还可以分析面域的特性。AcDbRegion类主要成员函数有:
Acad::Errorstatus createFromCurves(const AcDbVoidptrArray& curveSegments, AcDbVoidptrArray& regions); virtual void *body() const; //返回指向面域对象的指针 Acad::Errorstatus booleanOper(AcDb::BoolOperType operation, AcDbRegion* pOtherRegion); //对面域进行布尔运算
②、平截头体:生成一个质心在WCS坐标原点的圆柱体或圆锥体,函数 原型如下: virtual Acad::ErrorStatus createFrustum (double height,double xRadius, double yRadius,double topXRadius); 其中xRadius、yRadius分别表示X、Y方向半径,topXRadius代表顶端半径。
⑤、楔体:生成一个质心在WCS坐标原点的楔体, 长、宽、高分别与X、Y、 Z轴平行。函数原型如下: virtual Acad::ErrorStatus createWedge(double xLen,double yLen,double zLen); 其中xLen、 yLen、 zLen分别表示楔体的长、宽和高。
一、基本三维实体生成技术
1、基于ObjectARX的三维实体造型技术概述
AutoCAD提供了三种三维造型方法,包括线框造型、表面造型和 实体造型,①、线框模型:描述三维实体对象的骨架,线框模型中没有 面,只有描绘对象边界的点、直线和曲线,AutoCAD提供了一些三维线 框对象,三维多义线和样条曲线,由于构成线框模型的每个对象都必须 单独绘制和定位,因此这种建模方法最为耗时;②、曲面模型:比线框 造型更为复杂,它不仅定义三维对象的边而且定义面,AutoCAD的曲面 模型使用多边形网格定义镶嵌面,由于网格面是平面,所以网格只能近 似于曲面,使用Mechanical Desktop可创建真正的曲面;③、实体造型: 实体模型是最容易使用的三维模型,利用AutoCAD的实体模型,可以通 过创建长方体、圆锥体、圆柱体、球体和圆环体等来创建三维对象,然 后对这些形状进行合并,找出它们的差集或交集部分,结合起来生成更 复杂的实体,也可以将二维对象沿路径延伸或绕轴旋转来创建实体。
一、基本三维实体生成技术
2、基本三维实体的生成方法
在ObjectARX应用程序中,实体造型可以通过直接调用AutoCAD系统 本身提供的有关实体造型和编辑命令来实现,也可以通过直接生成数据库 对象及调用相关的成员函数来进行造型。在AutoCAD数据库中,三维实体 属于AcDb3dSolid类对象,该类从AcDbEntity类派生而来的。调用 AcDb3dSolid类的成员函数可生成各种基本的三维实体以及实现实体的布 尔运算 。生成三维实体的基本步骤为:
一、基本三维实体生成技术
3、生成基本三维实体的函数
基本的三维实体是指长方体(Box)、平截头体(Frustum)、球体(Sphere)、 圆环体(Torus) 、契体(Wedge)等,生成向营实体的AcDb3dSolid函数原型为: ①、长方体:生成一个中心在坐标原点,长、宽、高分别与X、Y、Z轴平 行的长方体,函数原型如下: virtual Acad::ErrorStatus createBox(double xLen,double yLen,double zLen); 如果长方体的边长小于1E-6,函数返回Acad::eOutOfRange,如果生成失 败,函数返回Acad::eGeneralModelingFailure。
一、基本三维实体生成技术
4、生成基本三维实体的程序设计实例
① 程序实现的主要功能:用交互式形式生成长方体、球体和圆环体。生成 实体的算法是:以实体的中心点、长方体的边长、球体的半径等几何参数为 输入数据,在此基础上分别调用AcDb3dSolid类的成员函数createBox()、 createSphere和createTorus()创建实体。
1)在程序中用AcGeVector3d类的对象定义变换后的X、Y和Z轴方向矢量如:
2)三维几何变换矩阵用AcGeMatrix3d类的setCoordSystem()成员函数设置, 函数原型为:AcGeMatrix3d& setCoordSystem(const AcGePoint3d& origin,
二、基于二维对象生成三维实体技术
2、将二维对象挤出成三维实体
所谓挤出是指在圆、椭圆、封闭二维多段线等二维对象的基础上, 按挤出高度或指定路径生成新的三维实体。在ARX应用程序中利用挤出 技术生成新的三维实体是通过调用AcDb3dSolid类的成员函数来实现的, 有下列两种形式: ①、按指定高度挤出,函数原型如下: virtual Acad::ErrorStatus extrude(const AcDbRegion* pRegion,double height,double taper); 参数pRegion表示指向面域对象的指针;height为挤出高度;taper为挤 出锥角(单位为弧度)
3、将二维对象旋转成三维实体
所谓的旋转是指在圆、椭圆和封闭的二维多段线等二维对象的基础 上按指定轴旋转,从而生成新的三维实体。函数原型如下: virtual Acad::ErrorStatus revolve(const AcDbRegion* pRegion,const AcGePoint3d& axisPoint, const AcGeVector3d& axisDir,double angleOfRevolution); 参数pRegion表示指向面域对象的指针;axisPoint为旋转轴上的一点; axisDir为轴的方向矢量;angleOfRevolution为旋转角度(弧度)。 二维对象的面域指针的获得分为三步:
例:AcGePoint3d pc; acedGetPoint(NULL,”\n中心点:”,asDblArray(pc)); double length; acedGetDist(asDblArray(pc),”\n长度:”,&length);
ObjectARX中的实体造型技术
一、基本三维实体生成技术 二、基于二维对象生成三维实体技术 三、三维实体的布尔运算和查询技术
ObjectARX中的实体造型技术
一、基本三维实体生成技术 二、基于二维对象生成三维实体技术 三、三维实体的布尔运算和查询技术
二、基于二维对象生成三维实体技术
1、面域表示类
面域是以封闭边界创建的二维封闭区域,边界可以是一条曲线或一 系列相连的曲线,组成边界的对象可以是直线、多段线、圆、圆弧、椭 圆、椭圆弧、样条曲线、三维面、宽线或实体。这些对象或者是自行封 闭的,或者与其他对象有公共的端点从而形成封闭的区域,但它们必须 共面,即在同一个平面上。
①、获得指向封闭边界的无值型指针数组; ②、根据封闭边界生成面域对象,如: AcDbRegion::createFromCurves(lines,regions); lines表示指向封闭边界的指针, regions为返回面域对象的指针数组。 ③、获得指向面域的指针。
二、基于二维对象生成三维实体技术
const AcGeVector3d& e0,const AcGeVector3d& e1,const AcGeVector3d& e2); 参数origin表示新坐标系统原点; e1 、e1和 e2分别表示坐标轴的方向矢量; 3)ransformBy()是AcDbEntity类的成员函数,其原型为: virtual Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform); 该函数将生成的三维实体按三维几何变换矩阵xform进行变换。
4、用挤出方法生成三维实体的实例
① 程序实现的主要功能:用挤出的方法生 成A型键模型和L型弯头模型。其中A型键 三维实体模型是在用AcDbPolyline类生成的 俯视图(键长L和键宽b方向构成的平面) 基础上,沿键高h方向挤出生成三维实体。
② 程序中用到的主要技术: 1)AcDbPolyline类的构造函数原型为: AcDbPolyline(unsigned int num_verts=0); 成员函数addVertexAt()用于添加顶点,原型为: Acad::ErrorStatus addVertexAt(unsigned int index,const AcGePoint2d& pt, double bulge=0.0,double startWidth=0.0,double endWidth=0.0);
ObjectARX中的实体造型技术
王淑营
补充知识
1、点对象和数组的相互转换方法
inline AcGePoint3d& asPnt3d(const double* pnt); //将一个三维数组转化为一个三维点 inline AcGeVector3d& asVec3d(const double* vec); //将三维数组转化为三维矢量 inline double* asDblArray(const AcGePoint3d& pnt); //将点对象转化为一个数组对象 inline double* asDblArray (const AcGeVector3d& vec); //将三维矢量转化为三维数组
① 调用AcDb3dSolid类创建一个容器对象,如: AcDb3dSolid *p3dObj=new AcDb3dSolid; ② 调用AcDb3dSolid类的成员函数创建基本三维实体对象,一般形式为: 指向AcDb3dSolid类对象的指针->创建基本的三维三体对象成员函数。 ③ 将AcDb3dSolid类对象写入当前图形数据库的块表记录中。
②、按指定路径挤出,函数原型如下: virtual Acad::ErrorStatus
extrudeAlongPath(const AcDbRegion* pRegion,const AcDbCurve* path);
Fra Baidu bibliotek
path是挤出路径,必须是直线、圆、椭圆、圆弧、样条曲线等对象。
二、基于二维对象生成三维实体技术
一、基本三维实体生成技术
3、生成基本三维实体的函数
③、球体:生成一个质心在WCS坐标原点的球体。函数原型如下:
virtual Acad::ErrorStatus createSphere(double radius);
④、圆环体:生成一个质心在WCS坐标原点的圆环体,Z轴为圆环中心线。 函数原型如下: virtual Acad::ErrorStatus createTorus(double majorRadius,double minorRadius); 其中MajorRadius、minorRadius分别代表圆环半径和圆管半径。
二、基于二维对象生成三维实体技术
4、用挤出方法生成三维实体的实例
参数index为顶点序号(从0开始计数);pt为顶点坐标;bulge为凸度值; startWidth和endWidth分别 表示该顶点的起始和终止位置的线宽。
2)成员函数setClosed()用来设置多线的开或闭状态,参数Adesk::kTrue 表示闭,Adesk::kFalse表示开。 3)成员函数setNormal()用来设置多线的法向矢量。 4)二维对象的面域指针的获得分为三步: A、获得指向封闭边界的无值型指针数组; B、根据封闭边界生成面域对象,如:
② 程序主要界面:
一、基本三维实体生成技术
4、生成基本三维实体的程序设计实例
③ 程序中用到的主要技术:由于createBox()、createSphere和createTorus()只 能创建中心点在WCS坐标原点的简单实体,因此要将实体在指定的位置生 成,必须进行坐标变换。 AcGeVector3d x(1,0,0),y(0,1,0),z(0,0,1);//表示定义新坐标系统与原系统平行;