版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章块操作目录CONTENTS01知识讲解02任务一:创建块03任务二:插入块04任务三:属性块PART01知识讲解01知识讲解块的概念块定义块参照属性块块表学习模块简单理解,块就是由简单实体组合而成的一个整体。使用块可以避免重复操作,并且方便修改和编辑,不同的块还可以展示不同属性。块的概念01知识讲解01知识讲解块定义是块的模板,它包含了块的图形实体、属性定义和其他相关信息。块定义中定义了块的形状和属性,可以用于在图纸中创建块参照。所有的实体都保存在块表记录中,而块表记录则存储在块表中。实际上,用户在ZWCAD中定义块相当于增加了一个块表记录,块表记录的名称就是块定义的名称。块定义ZWCAD有块定义和块参照两个概念。块定义不是一个实体,而是一种对实体的描述,通过定义块完成,块参照则是一种实体,图形窗口中显示“块”都是块参照,通过插入块获得。块参照是实际插入到图纸中的块的实例。块参照可以使用预先设置好的块定义创建,并可以在图纸中的多个位置进行插入和放置。块参照是块的副本,它可以独立于块定义进行移动、旋转和修改属性值。插入块参照时,CAD会将块定义的图形实体和属性复制到指定位置。块参照01知识讲解属性块是块的一种特殊实体,它可以包含与块参照关联的文本或值,是与块参照关联的附加信息,包含文本、值、单位等信息。属性块可以用于创建自动化的图纸标注、注释和数据提取,并且可以在块参照中进行编辑和修改。属性块01知识讲解块表是CAD图形数据库中的一个表,用于存储所有的块定义。块表维护着块定义的名称和对应的ObjectId,可以通过块表来获取、创建和管理块定义。块表01知识讲解PART02创建块02创建块块是CAD绘图中的很重要的一部分,学习通过二次开发接口创建块,培养ZRX二次开发的基础能力任务背景任务目标实施思路调用ZRX二次开发接口,自定义函数实现块的创建学习和了解创建块的ZRX二次开发接口设计自定义函数的功能,调用二次开发接口完成块的创建任务实施步骤一:获得当前图形数据库的块表,向其中添加一条新的块表记录创建块就是向块表中添加一个新的块表记录,新的块表记录通过AcDbBlockTableRecord函数创建//创建新的块表记录AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();任务实施步骤二:设计并实现创建块的自定义函数voidCreateBlock(){
//获得当前图形数据库的块表
AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//创建新的块表记录
AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();
//根据用户的输入设置块表记录的名称
TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n输入图块的名称:"),blkName)!=RTNORM) { pBlkTbl->close(); deletepBlkTblRcd; return; } pBlkTblRcd->setName(blkName);
//将块表记录添加到块表中
AcDbObjectIdblkDefId; autoes=pBlkTbl->add(blkDefId,pBlkTblRcd); if(es!=Acad::eOk){ acutPrintf(TEXT("添加块定义失败")); deletepBlkTblRcd; pBlkTbl->close(); return; } pBlkTbl->close(); pBlkTblRcd->close();}成果展示://验证函数功能voidCreateBlock(){
//获得当前图形数据库的块表
AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//创建新的块表记录
AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();
//根据用户的输入设置块表记录的名称
TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n输入图块的名称:"),blkName)!=RTNORM) { pBlkTbl->close(); deletepBlkTblRcd; return; } pBlkTblRcd->setName(blkName);
//将块表记录添加到块表中
AcDbObjectIdblkDefId; autoes=pBlkTbl->add(blkDefId,pBlkTblRcd); if(es!=Acad::eOk){ acutPrintf(TEXT("添加块定义失败")); deletepBlkTblRcd; pBlkTbl->close(); return; } pBlkTbl->close(); pBlkTblRcd->close();}课后思考:调用ZRX二次开发接口创建一个块定义,该块定义中是一个轴承的块。PART03插入块03插入块块是CAD绘图中的很重要的一部分,学习通过二次开发接口插入块,培养ZRX二次开发的基础能力任务背景任务目标实施思路调用ZRX二次开发接口,自定义函数实现块的插入学习和了解创建块的ZRX二次开发接口设计自定义函数的功能,调用二次开发接口完成块的插入任务实施步骤一:学习插入块的ZRX二次开发接口在ZRX编程中,块参照由AcDbBlockReference类来表示AcDbBlockReference(
//position是块参照的插入点constAcGePoint3d&position,//blockTableRec是块参照所参照的块表记录(块定义)的ID。AcDbObjectIdblockTableRec);任务实施步骤二:设计并实现插入块的自定义函数voidInsertBlock(){ //获得用户输入的块定义名称
TCHARblkName[40]; if(acedGetString(0,TEXT("\n输入图块的名称:"),blkName)!=RTNORM) { return; }
//获得当前数据库的块表
AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//查找用户指定的块定义是否存在
if(!pBlkTbl->has(blkName)) { acutPrintf(TEXT("\n当前图形中未包含指定名称的块定义!")); pBlkTbl->close(); return; }
//获得用户指定的块表记录
AcDbObjectIdblkDefId; pBlkTbl->getAt(blkName,blkDefId); pBlkTbl->close();
//获得用户输入的块参照的插入点
ads_pointpt; if(acedGetPoint(NULL,TEXT("\n输入块参照的插入点:"),pt)!=RTNORM) { pBlkTbl->close(); return; } AcGePoint3dptInsert=asPnt3d(pt); //创建块参照对象
AcDbBlockReference*pBlkRef=newAcDbBlockReference(ptInsert,blkDefId);
//将块参照添加到模型空间
UtilsFunc::PostToModel(pBlkRef);}成果展示://验证插入块的函数功能voidInsertBlock(){ //获得用户输入的块定义名称
TCHARblkName[40]; if(acedGetString(0,TEXT("\n输入图块的名称:"),blkName)!=RTNORM) { return; }
//获得当前数据库的块表
AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//查找用户指定的块定义是否存在
if(!pBlkTbl->has(blkName)) { acutPrintf(TEXT("\n当前图形中未包含指定名称的块定义!")); pBlkTbl->close(); return; }
//获得用户指定的块表记录
AcDbObjectIdblkDefId; pBlkTbl->getAt(blkName,blkDefId); pBlkTbl->close();
//获得用户输入的块参照的插入点
ads_pointpt; if(acedGetPoint(NULL,TEXT("\n输入块参照的插入点:"),pt)!=RTNORM) { pBlkTbl->close(); return; } AcGePoint3dptInsert=asPnt3d(pt); //创建块参照对象
AcDbBlockReference*pBlkRef=newAcDbBlockReference(ptInsert,blkDefId);
//将块参照添加到模型空间
UtilsFunc::PostToModel(pBlkRef);}课后思考:结合上一节内容,调用ZRX二次开发接口,插入一个图形为轴承的块参照。PART04块属性03属性块属性块是CAD绘图中的很重要的一部分,学习通过二次开发接口创建和插入属性块,培养ZRX二次开发的基础能力任务背景任务目标实施思路调用ZRX二次开发接口,自定义函数实现属性块的创建和插入学习和了解创建和插入属性块的ZRX二次开发接口设计自定义函数的功能,调用二次开发接口完成属性块的创建和插入任务实施步骤一:创建属性块的自定义函数在ZRX编程中,属性块的创建与块定义的创建类似voidCreateAttBlk(){
//获得当前图形数据库的块表
AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
//创建新的块表记录
AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();
//根据用户的输入设置块表记录的名称
TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n输入图块的名称:"),blkName)!=RTNORM) { pBlkTbl->close(); deletepBlkTblRcd; return; } pBlkTblRcd->setName(blkName);
//将块表记录添加到块表中
AcDbObjectIdblkDefId; pBlkTbl->add(blkDefId,pBlkTblRcd); pBlkTbl->close();
//向块表记录中添加实体
AcGePoint3dptStart(-10,0,0),ptEnd(10,0,0); AcDbLine*pLine1=newAcDbLine(ptStart,ptEnd); //创建一条直线
ptStart.set(0,-10,0); ptEnd.set(0,10,0); AcDbLine*pLine2=newAcDbLine(ptStart,ptEnd); //创建一条直线
AcGeVector3dvecNormal(0,0,1); AcDbCircle*pCircle=newAcDbCircle(AcGePoint3d::kOrigin,vecNormal,6);//创建一个圆
AcDbAttributeDefinition*pAttDef=newAcDbAttributeDefinition(AcGePoint3d(0,0,0),TEXT("20"),TEXT("直径"),TEXT("输入直径"));
AcDbObjectIdentId; pBlkTblRcd->appendAcDbEntity(entId,pLine1); pBlkTblRcd->appendAcDbEntity(entId,pLine2); pBlkTblRcd->appendAcDbEntity(entId,pCircle); pBlkTblRcd->appendAcDbEntity(entId,pAttDef); pLine1->close(); pLine2->close(); pCircle->close(); pAttDef->close(); pBlkTblRcd->close();}任务实施步骤二:插入属性块的自定义函数voidInsertAttBlk(){
//获得用户输入的块定义名称
TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n输入图块的名称:"),blkName)!=RTNORM) { return; }
//获得当前数据库的块表
AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite); //查找用户指定的块定义是否存在
if(!pBlkTbl->has(blkName)) { acutPrintf(TEXT("\n当前图形中未包含指定名称的块定义!")); pBlkTbl->close(); return; }
//获得用户指定的块表记录
AcDbObjectIdblkDefId; pBlkTbl->getAt(blkName,blkDefId); pBlkTbl->close(); //获得用户输入的块参照的插入点
ads_pointpt; if(acedGetPoint(NULL,TEXT("\n输入块参照的插入点:"),pt)!=RTNORM) { pBlkTbl->close(); return; } AcGePoint3dptInsert=asPnt3d(pt); //创建块参照对象
AcDbBlockReference*pBlkRef=newAcDbBlockReference(ptInsert,blkDefId); //创建块属性对象
AcDbAttribute*pAtt=newAcDbAttribute(); pAtt->setTag(TEXT("直径")); pAtt->setTextString(TEXT("50")); pAtt->setPosition(ptInsert); pBlkRef->appendAttribute(pAtt);
//将块参照添加到模型空间
UtilsFunc::PostToModel(pBlkRef);}成果展示://验证插入属性块的函数功能voidInsertAttBlk(){
//获得用户输入的块定义名称
TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n输入图块的名称:"),blkName)!=RTNORM) { return; }
//获得当前数据库的块表
AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite); //查找用户指定的块定义是否存在
if(!pBlkTbl->has(bl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年盐城市口腔医院医护人员招聘考试参考题库及答案详解
- 2026年山东省日照市人民医院医护人员招聘笔试备考试题及答案详解
- (2026年)幼儿园卫生清扫制度
- 2026年南宁市第一人民医院医护人员招聘笔试备考题库及答案详解
- 2026年济南明水眼科医院医护人员招聘笔试参考试题及答案详解
- 2026年辽宁省血栓病中西医结合医疗中心沈阳市苏家屯区中医院医护人员招聘考试备考试题及答案详解
- 2026年华夏银行(哈尔滨分行)人员招聘笔试参考题库及答案详解
- 2026年扬州中医院医护人员招聘考试参考试题及答案详解
- (2026版)酒店安全生产考核奖惩管理制度
- 2026年山西省第二人民医院医护人员招聘考试备考试题及答案详解
- 校园绿地规划设计课件
- 2025年江苏连云港市赣榆农业发展集团有限公司招聘笔试参考题库附带答案详解
- 多囊卵巢综合征李欢玉讲解
- 宁波大学OJ系统C语言题目答案与解析精讲
- 2025年度三方文化艺术交流活动合作协议书范本3篇
- LNG(天然气)供气站(气化站)安全应急救援预案
- 网络协议分析与设计全套教学课件
- 全球供应链的重构与韧性建设
- 磨床操作培训课件
- 汽车电工电子技术PPT(高职)完整全套教学课件
- 人美版小学美术456年级教资面试试讲逐字稿试讲稿
评论
0/150
提交评论