CAD二次开发之图形数据库解析ppt课件.ppt
《CAD二次开发之图形数据库解析ppt课件.ppt》由会员分享,可在线阅读,更多相关《CAD二次开发之图形数据库解析ppt课件.ppt(34页珍藏版)》请在三一办公上搜索。
1、,第9章 访问和修改图形数据库,9.1 获取图元的名字 AutoCAD的图形是由多个图形对象组成的,最基本的图形对象称作图元。图元之间是以链表的形式存储的。每个图元都有一个用16进制表示的唯一的名字。 entnext函数可以获取图形库第一个图元的名字或指定图元的下一个图元的名字。 entlast函数可以获取图形库最后一个,即最新生成的图元的名字。 通过entnext函数,可以访问到图形库的每一个图元。,假定本作业依次绘制了一条直线、一个圆和一个圆弧。(setq e1(entnext);返回图形库第一个图元即这条直线的图元名,并将其赋给了变量e1。(setq e2(entnext e1);返回图
2、形库e1的下一个图元即这个圆的图元名,并将其赋给了变量e2。(setq e3(entnext e2);返回图形库e2的下一个图元即即这个图弧的图元名,并将其赋给了变量e3。 (setq e4(entlast);返回图形库最后一个图元即这个图弧的图元名,并将其赋给了变量e1。 因为圆弧既是第3个图元,也是最后一个图元,所以e3和e4记录的是同一图元的名字。,【例9-1】绘制下图所示的4个带有中心线的螺纹孔。要求首先获取中心线的螺纹孔的图元名,然后复制这些指定名字的图元。 以下表达式首先生成了两条中心线和1个螺纹孔。在生成这些图元的同时获取并保存了这些图元的名字为e1、e2、e3和e4。,(com
3、mand layer m zhongxin l center )(command line -5,0 5,0 )(setq e1(entlast)(command line 0,-5 0,5 )(setq e2(entlast)(command layer m cuxian lw 0.3 )(command circle 0,0 3)(setq e3(entlast),(command layer m xixian )(command arc -3.5,0 0,3.5 0,-3.5)(setq e4(entlast) 以下表达式调用AutoCAD的copy命令,复制3个带有中心线的螺纹孔。(c
4、ommand copy e1 e2 e3 e4 m 0,0 12,0 24,0 36,0 ),例9-2 定义绘制图b所示图形的命令。插入点p0、直径d、宽度b和h作为绘制该图形时交互输入的参数。该例的主要目的是示范如何利用图元名实现AutoCAD的图形编辑和填充剖面线。,a b(defun c:keyway()(setq pc (getpoint 输入定位点: )(setq d (getdist pc 输入轴的直径:)(setq b (getdist pc 输入键槽的宽度:),(setq w (getdist pc 输入键槽的深度:)(setq r (* 0.5 d)(command circ
5、le pc r) ;绘制圆(setq e1 (entlast) ;将entlast返回的该圆的图元名赋给e1(setq p0(polar pc 0 r) ;p0是圆上一点,将用于修剪该圆(setq p1(list (car pc) (+ (cadr pc) (* 0.5 b)(setq p2(list (+ (car pc) (* 1.2 r) (cadr p1)(command line p1 p2 )(setq e2 (entlast) ;将entlast返回的该直线的图元名赋给e2(setq p3(list (car pc) (- (cadr pc) (* 0.5 b)(setq p4(
6、list (car p2) (cadr p3)(command line p3 p4 ),(setq e3 (entlast) ;将entlast返回的该直线的图元名赋给e3(setq p5(list (+ (car pc) (- r w) (+ (cadr pc) (* 0.5 b)(setq p6(list (+ (car pc) (- r w) (- (cadr pc) (* 0.5 b)(command line p5 p6 )(setq e4 (entlast) ;将entlast返回的该直线的图元名赋给e4;e1、e2等作为剪切边,p0、p1等点确定被剪边和剪去哪一段(comman
7、d trim e1 e2 e3 e4 p0 p1 p2 p3 p4 );e1、e2等作为剖面域的边界绘制剖面线(command hatch ansi31 2 0 e1 e2 e3 e4 ) ;),9.2 图元表 图元表记录着图元的名字、类型、几何数据、图层、颜色等信息。通过修改或创建图元表,可以实现编辑或生成图元。9.2.1 获取图元表 例如输入下面3个表达式:(command text 10,20 5 0 ABCDE);书写文本(setq e(entlast);获取文本的图元名,将图元的名字赋给变量e。(setq elist(entget e) ;获取图元名字为e的图元表。 在Command
8、:提示下键入!elist或在控制台_$提示下键入elist,即可得到以下该图元的图元表。,(-1 . );图元名 (0 . TEXT);图元种类 (330 . );软指针句柄 (5 . 19F);图元描述字 (100 . AcDbEntity);AutoCAD图元 (67 . 0);模型空间 (410 . Model);模型空间标识 (8 . 0) ;所在图层名 (100 . AcDbText) ;AutoCAD文本 (10 10.0 20.0 0.0) ;定位点坐标 (40 . 5.0);文本字高 (1 . ABCDE);文本内容,(50 . 0.0);文本的旋转角度 (41 . 1.0);
9、文字的宽度因子 (51 . 0.0);文字的倾斜角度 (7 . STANDARD);字样的名字 (71 . 0);正常文本(非左右或上下镜像的文本) (72 . 0);左下角点对齐方式 (11 0.0 0.0 0.0);辅助的定位点坐标 (210 0.0 0.0 1.0);厚度方向 (100 . AcDbText) ;AutoCAD文本 (73 . 0);不垂直书写 ),对图元表的补充说明:(1)图元表的每个元素还是表,子表的第一个元素是具有一定含义的整数,其含义与图元在DXF(图形交换文件)中实体代码的含义相同(详见AutoCAD有关DXF文件的介绍)。(2)多数的子表采用了点对结构,这样既
10、节省存储空间,也可以简化运算,详见第2.4节数据的存储结构。(3)其他种类图元的图元表的非几何信息部份基本相同,几何信息部份有些差异。9.2.2 对图元表的操作 假定elist是某图元的图元表。利用AutoLISP有关表处理的函数可以修改图元表。(1)了解图元的种类(cdr (assoc 0 elist),该表达式的内层表达式中,用0作为关键字,在elist表中寻找相关的子表,返回有关图元种类的子表(0 . 图元种类),由于此表为点对,所以cdr函数返回它的第2个元素图元种类。若此图元为直线,则返回LINE,若此图元为单行文本,则返回TEXT。(2)了解图元所在图层的名字(cdr (assoc
11、 8 elist) 该表达式的内层表达式中,用8作为关键字,返回elist表中有关图层名字的子表(8 . 图层名),由于此表为点对,所以cdr函数返回它的第2个元素图层名。 (3)了解圆、圆弧的半径或单行文本的字高(cdr (assoc 40 elist) 该表达式的内层表达式中,用40作为关键字,返回elist表中有关圆、圆弧的半径或单行文本的字高的子表(40 . 数值),由于此表为点对,所以cdr函数返回它的第2个元素具体的数值。,(4)了解直线的起点、圆、圆弧的中心或单行文本的定位点(cdr (assoc 10 elist) 该表达式的内层表达式中,用10作为关键字,返回elist表中有
12、关直线的起点、圆、圆弧的中心或单行文本的定位点的子表(10 数值 数值 数值),注意此表不再是点对,所以cdr函数返回去掉它的第1个元素之后的子表,即点的XYZ坐标。(5)用圆、圆弧的半径或单行文本的新值取代其老值(setq elist (subst (cons 40 h)(assoc 40 elist)elist)(cons 40 h)构造一个新的点对子表,例如(40 . 3.5)。(assoc 40 elist)返回elist表内的点对子表,例如(40 . 5.0)。subst函数用新子表,例如(40 . 3.5),替换elist表内的老子表(40 . 5.0)。最外层的setq函数将替换
13、后的赋给了变量elist。 (6)更新图形库的图元表(entmod elist)entmod函数的功能是更新图形库的指定图元表的图元,即更新了实际图形对象。例如单行文本的字高由5.0改变为3.5。,9.2.3 举例【例9-3】定义将本作业所有的单行文本改变为指定高度的命令。,右图所示为修改图形数据库内单行文本字高的程序流程图,其中e1是用于存放图元名的变量。单行文本的图元种类是TEXT,用MTEXT书写的是段落文本,它的图元种类是MTEXT。因此本程序不能修改用MTEXT书写的文本。,否,否,是,是,以下是定义改变本作业所有单行文本为指定的高度命令的程序代码:(defun c:cth( / h
14、 e el)(setq h(getdist n输入文本新的字高: )(setq e(entnext);得到第一个图元的名字(while e ;当e有定义时做以下运算(setq el(entget e);得到第一个图元的图元表(if (= TEXT (cdr (assoc 0 el) (progn ;如果图元的类型为TEXT时做以下运算(setq el(subst (cons 40 h)(assoc 40 el)el);新字高替换图元表的原字高(if (= 3 (cdr (assoc 72 el);如果文本为Align方式对齐,(setq el(subst (cons 72 0) (assoc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAD 二次开发 图形 数据库 解析 ppt 课件
链接地址:https://www.31ppt.com/p-2002819.html