中望CAD二次开发课件 -第四章几何变换_第1页
中望CAD二次开发课件 -第四章几何变换_第2页
中望CAD二次开发课件 -第四章几何变换_第3页
中望CAD二次开发课件 -第四章几何变换_第4页
中望CAD二次开发课件 -第四章几何变换_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章几何变换01知识讲解02任务一:几何变换03任务二:复制目录CONTENTS04任务三:阵列05任务四:偏移PART01知识讲解01知识讲解几何变换复制阵列偏移学习模块01知识讲解矩阵的直接引用是对实体或者选择集进行几何变换,但是它实际上是一个功能非常完善的类。一般我们在对实体进行变换时会用到AcGeMatrix3d,内部包含了平移、缩放和旋转的数据:setToMirroring:设置以某一点为对称的镜像变换。setToRotation:设置绕某一点旋转一定角度的旋转变换。setToScaling:设置以某一个基点缩放一定比例的缩放变换。setToTranslation:设置以某个矢量为移动基准的移动变换。det:计算矩阵对应的行列式的值。inverse:计算矩阵的逆矩阵,原矩阵不受影响。invert:对矩阵进行逆矩阵操作,返回该矩阵的引用。transpose:计算矩阵的转置矩阵,原矩阵不受影响。transposelt:对矩阵进行转置操作,返回该矩阵的引用。几何变换的概念01知识讲解进行平移、缩放、旋转、镜像变换,首先要选中一个要进行变换的实体,然后再创建一个变换矩阵,设置变换类型和相应参数,变换完成后关闭实体,这样我们就完成了实体的变换。几何变换的流程01知识讲解复制流程复制实体需要调用CAD对象的Clone接口,它可以返回任意一个clone的对象。对于实体对象,我们可以直接使用(AcDbEntity*)(pEnt->clone())的方式获取新克隆出来的实体。最后把实体添加到数据库中。01知识讲解阵列阵列也是对已有的实体进行的变换,在CAD中有以下三种阵列方式,分别是矩形阵列、路径阵列和环形阵列。01知识讲解偏移实体面是指一个实体表面按照指定的距离进行偏移,偏移实体面常用来改变孔的大小,可以选择将面从原始位置向内或向外偏移指定的距离,从而扩大或者缩小孔径。例如下图,该图为一矩形经过向外偏移,得到了一个外边框。偏移的概念PART02几何变换02几何变换几何变换可以应用于各种领域的CAD二次开发,学习几何变换的二次开发方式,培养ZRX二次开发的基础能力任务背景任务目标实施思路调用ZRX二次开发接口,自定义函数实现平移变换、图形缩放、旋转、镜像变换四种几何变换学习和了解几何变换的ZRX二次开发变换矩阵设计自定义函数的功能,调用二次开发变换矩阵完成图形的几何变换任务实施步骤一:学习和了解几何变换的ZRX二次变换矩阵在ZRX中,使用transformMatrix类来表示几何变换的变换矩阵。//创建一个几何变换矩阵AcGeMatrix3dtransformMatrix;//按照变换矩阵方式进行变换transformBy(transformMatrix);任务实施步骤二:给变换矩阵设置不同的变换方式//通过setToTranslation函数,给变换矩阵设置平移变换方式x+100,y+100transformMatrix.setToTranslation(AcGeVector3d(100,100,0));//通过setToRotation函数,给变换矩阵设置旋转方式,该方法的参数分别是旋转弧度-0.5PI、主轴向量(0,0,1),旋转中心点默认为原点。transformMatrix.setToRotation(-PI*0.5,AcGeVector3d(0,0,1));//通过setToMirroring函数,给变换矩阵设置镜像变换方式,该函数的参数做镜像变换需要的镜像线,由mirrorLine方法通过两点(10,10,0),(10,-10,0)生成。AcGeLine3dmirrorLine(AcGePoint3d(10,10,0),AcGePoint3d(10,-10,0));transformMatrix.setToMirroring(mirrorLine);//通过setToScaling函数,给变换矩阵设置缩放变换方式,参数为缩放倍数2,中心点默认为原点。transformMatrix.setToScaling(2);任务实施步骤三:平移函数实现voidEntTranslate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置平移矩阵

AcGeMatrix3dtransformMatrix; transformMatrix.setToTranslation(AcGeVector3d(100,100,0)); pEnt->transformBy(transformMatrix); pEnt->close();}任务实施步骤三:旋转函数实现voidEntRotate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置旋转矩阵

AcGeMatrix3dtransformMatrix; transformMatrix.setToRotation(-PI*0.5,AcGeVector3d(0,0,1)); pEnt->transformBy(transformMatrix); pEnt->close();}任务实施步骤三:镜像函数实现voidEntMirror(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置镜像矩阵

AcGeMatrix3dtransformMatrix; AcGeLine3dmirrorLine(AcGePoint3d(10,10,0),AcGePoint3d(10,-10,0)); transformMatrix.setToMirroring(mirrorLine); pEnt->transformBy(transformMatrix); pEnt->close();}任务实施步骤三:缩放函数实现voidEntScale(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置缩放矩阵

AcGeMatrix3dtransformMatrix; transformMatrix.setToScaling(2); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://验证平移函数功能voidEntTranslate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置平移矩阵

AcGeMatrix3dtransformMatrix; transformMatrix.setToTranslation(AcGeVector3d(100,100,0)); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://验证旋转函数功能voidEntRotate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置旋转矩阵

AcGeMatrix3dtransformMatrix; transformMatrix.setToRotation(-PI*0.5,AcGeVector3d(0,0,1)); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://验证镜像函数功能voidEntMirror(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置镜像矩阵

AcGeMatrix3dtransformMatrix; AcGeLine3dmirrorLine(AcGePoint3d(10,10,0),AcGePoint3d(10,-10,0)); transformMatrix.setToMirroring(mirrorLine); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://验证缩放函数功能voidEntScale(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //设置缩放矩阵

AcGeMatrix3dtransformMatrix; transformMatrix.setToScaling(2); pEnt->transformBy(transformMatrix); pEnt->close();}课后思考:在zwcad中创建一个复杂图形,调用ZRX二次开发接口,对这个图形以不同顺序进行四种几何变换,看看得到的结果是否一样。PART03复制03复制复制可以应用于各种领域的CAD二次开发,学习复制的二次开发方式,培养ZRX二次开发的基础能力任务背景任务目标实施思路调用ZRX二次开发接口,自定义函数实现实体的复制学习和了解复制变换的ZRX二次开发接口设计自定义函数的功能,调用二次开发变换矩阵完成实体的复制任务实施步骤一:学习和了解复制的ZRX二次开发接口在ZRX中,使用clone()方法来表示实现实体的复制。//使用AcDbEntity的clone()方法对实体进行克隆//因为这个方法是写在基类AcDbObject里的,所以要将其转换成AcDbEntity类型使用。AcDbEntity*newEnt=(AcDbEntity*)(pEnt->clone());任务实施步骤二:设计并实现克隆的自定义函数voidEntClone(){

//首先要选中实体 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//选中实体后,使用clone方法进行实体复制 AcDbEntity*newEnt=(AcDbEntity*)(pEnt->clone());

//关闭实体 pEnt->close();}成果展示://验证复制函数功能voidEntClone(){

//首先要选中实体 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//选中实体后,使用clone方法进行实体复制 AcDbEntity*newEnt=(AcDbEntity*)(pEnt->clone()); pEnt->close();

//复制后的实体坐标与原实体一样,这里平移操作便于验证 AcGeMatrix3dtransformMatrix; transformMatrix.setToTranslation(AcGeVector3d(100,100,0)); newEnt->transformBy(transformMatrix); UtilsFunc::PostToModel(newEnt);}课后思考:在zwcad中创建一个圆,调用ZRX二次开发接口,结合上一节内容,综合运用几何变换和复制,利用这个圆,画出一个基本的轴承图形。PART04阵列04阵列阵列变换可以应用于各种领域的CAD二次开发,学习阵列变换的二次开发方式,培养ZRX二次开发的基础能力任务背景任务目标实施思路调用ZRX二次开发接口,自定义函数实现实体的阵列变换学习和了解复制变换的ZRX二次开发接口设计自定义函数的功能,调用二次开发变换矩阵完成实体的复制任务实施步骤一:学习和了解阵列变换的ZRX二次开发接口在ZRX中,使用AcAxArrayRectangular方法来表示实体的阵列变换。AcAxArrayRectangular(){AcDbObjectId&objId,//代表要阵列的实体的IDLPDISPATCHpAppDisp, //代表当前文档的IDispatchintnumRows, //代表阵列的行数intnumCols, //代表阵列的列数 intnumLvls, //代表阵列的层数doubledisRows, //代表行间的距离doubledisCols, //代表列间的距离doubledisLvls, //代表层间的距离VARIANT*pArrayObjs //代表阵列后的物体}任务实施步骤二:设计并实现克隆的自定义函数voidEntRectArray(){ //选中实体 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//获取实体ID AcDbObjectIdid=pEnt->objectId(); pEnt->close();

//构造好pDisp参数和pArrayObjs参数

LPDISPATCHpDisp; VARIANTpArrayObjs; VariantInit(&pArrayObjs); V_VT(&pArrayObjs)=VT_ARRAY|VT_DISPATCH; HRESULThr; pDisp=acedGetAcadWinApp()->GetIDispatch(true); hr=AcAxArrayRectangular(id,pDisp,1,3,1,1,200,1,&pArrayObjs);}成果展示://验证阵列函数功能voidEntRectArray(){ //选中实体 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//获取实体ID AcDbObjectIdid=pEnt->objectId(); pEnt->close();

//构造好pDisp参数和pArrayObjs参数

LPDISPATCHpDisp; VARIANTpArrayObjs; VariantInit(&pArrayObjs); V_VT(&pArrayObjs)=VT_ARRAY|VT_DISPATCH; HRESULThr; pDisp=acedGetAcadWinApp()->GetIDispatch(true); hr=AcAxArrayRectangular(id,pDisp,1,3,1,1,200,1,&pArrayObjs);}课后思考:在zwcad中创建一个圆,调用ZRX二次开发接口,利用环形阵列的方式,画出一个基本的轴承图形。PART05偏移05偏移实体偏移可以应用于各种领域的CAD二次开发,学习偏移变换的二次开发方式,培养ZRX二次开发的基础能力任务背景任务目标实施思路调用ZRX二次开发接口,自定义函数实现实体的偏移学习和了解实体偏移的ZRX二次开发接口设计自定义函数的功能,调用二次开发变换矩阵完成实体的偏移任务实施步骤一:学习和了解阵列变换的ZRX二次开发接口在ZRX中,实体的偏移是通过getOffsetCurves函数实现的。virtualAcad::ErrorStatusgetOffsetCurves(

//offsetDist代表偏移的距离 doubleoffsetDist,

//AcDbVoidPtrArray实体指针的集合 AcDbVoidPtrArray&offsetCurves)const;任务实施步骤二:设计并实现克隆的自定义函数voidCurveOffset(){

//选中实体 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//将实体类型转换为曲线类型 AcDbCurve*pCurve{nullptr}; pCurve=dynamic_c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论