您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第8章 编程实例 清华CAD二次开发 LISP
第8章编程实例8.1设置作图环境编程作图和交互作图一样,也需要设置作图的环境,例如图纸的范围、绘图的单位、目标捕捉的类型、图层、颜色、线型、线宽、字样等,如果缺少对作图环境的设置,只能是利用加载程序时AutoCAD提供的默认环境。设置一个合适的作图环境不仅可以提高作图的精度和效率,有时还会影响到所绘制的图纸是否符合企业的规范和满足生产的需要。用程序实现设置作图环境的功能可以通过command函数调用相关的命令,或者通过setvar函数改变相应系统变量的当前值或当前状态。有些功能只能通过上述一种途径实现,有些功能可以通过上述两种途径实现。1.设置图纸的范围例如设置A3图纸的作图范围(1)通过command函数设置图纸的范围(commandlimits0,0420,297)或者(commandlimits'(00)'(420297))或者(commandlimits(list00)(list420297))这时p1、p2分别是作图范围的左下和右上角点,上式可改写为:(commandlimitsp1p2)0,0420,297(2)通过setvar函数设置图纸的范围系统变量limmin和limmax分别对应于图纸的左下和右上角点,只需用setvar函数设置它们以新的值即可。(setvarlimmin'(00))或者(setvarlimmin(list00))或者(setvarlimmin0,0)或者(setvarlimminp1)设置图纸的右上角点的表达式如下:(setvarlimmax'(420297))或者(setvarlimmax(list420297))或者(setvarlimmax420,297)或者(setvarlimmaxp2)2.设置绘图的长度和角度单位例如将绘图的长度单位设置为十进制、3位小数,角度单位设置为十进制的度()十进制、2位小数、X轴正方向为0、逆时针方向为正。(1)通过command函数设置绘图的长度和角度单位(commandunits23120N)command的参数说明如下:units:AutoCAD设置绘图单位的命令;2:长度单位为十进制;3:3位小数;1:角度单位为十进制的度;2:2位小数;0:X轴正方向为0;N:非顺时针,即逆时针为正。(2)通过setvar函数设置设置绘图的长度和角度单位(setvarlunits2);长度单位为十进制(setvarluprec3);长度单位3位小数(setvaraunits1);角度单位为十进制的度(setvarauprec2);角度单位为长2位小数(setvarangbase0.0);X轴正方向为0(setvarangdir0);逆时针方向为正3.设置目标捕捉的类型交互操作时,目标捕捉类型的选项是字符串,它以编码的形式记录在系统变量osmode内,代码的具体含义是:0:NONe(不标捕捉任何类型的对象)1:ENDpoint(线段和圆弧的端点)2:MIDpoint(线段和圆弧的中点)4:CENter(圆、椭圆和圆弧的中心点)ENDpointMIDpointCENter8:NODe(结点,用point命令生成的点)16:QUAdrant(圆和圆弧的象限点)32:INTersection(线段和圆弧的交点)NODeQUAdrantINTersection64:INSertion(图块或字符串的插入点)128:PERpendicular(垂足)INSertionPERpendicular256:TANgent(切点)512:NEArest(对象上的最近点)1024:QUIck(快速捕捉)2048:APParentIntersection(在观察方向上相交的点)4096:EXTension(延长线上的点)8192:PARallel(与所选对象平行的点)TANgentAPParentIntersectionEXTensionPARallel(1)通过command函数设置设置目标捕捉的类型(commandosnapendpoint,midpoint,center);捕捉端点、中点和中心(commandosnapnone);不捕捉任何类型(2)通过setvar函数设置目标捕捉的类型(setvarosmode7);7是捕捉端点、中点和中心的代码之和(setvarosmode0);不捕捉任何类型将osmode设置为0(不捕捉任何类型)是通常的设置。假定osmode的当前值为1,将捕捉直线或圆弧的端点。在这种情况下,如果指定的是p点,而p点处刚好有一条直线,那么实际获取的是该直线距p点较近的那个端点,而不是p点本身。所以应该用setvar函数将osmode设置为0。4.抑制AutoCAD普通命令的提示在运行程序的过程中,可能会显示AutoCAD普通命令的提示。例如command函数在调用line命令绘制直线时,在命令提示区会出现下图的提示。如果不关心这些信息,应该将其关闭,可以提高程序的运行速度。通过setvar函数抑制AutoCAD普通命令的提示,表达式如下:(setvarcmdecho0)cmdecho是控制普通命令提示是否显示的系统变量,当其为1时,照常显示AutoCAD普通命令的提示,将其设置为0,将抑制这样的一些提示,但仍然显示某些AutoLISP函数的提示信息。通常应将cmdecho设置为0。8.2设置图层、颜色、线型和线宽1.创建一个当前图层假定图层的名字是“zhongxin”、颜色为红色、线型为center、线宽为0.2,通过command函数创建一个当前图层表达式如下:(commandlayerMakezhongxinColor1zhongxinLtypeCenterzhongxinLWeight0.2zhongxin)因为在命令行操作时,layer命令需要空回车响应“[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/state]”提示才能结束该命令,所以在右括号前增加一对引号(注意,引号内没有空格)。因为Make、Color、Ltype、LWeight等选项可以简写为M、C、L、LW,所以上式可改为:(commandlayerMzhongxinC1zhongxinLCenterzhongxinLW0.2zhongxin)又因为当前图层的名字是Color、Ltype等选项默认的图层名,所以上式可改为:(commandlayerMzhongxinC1LCenterLW0.2)如果当前图层的颜色、线型、线宽等为默认的选择,表达式如下:(commandlayerMcuxian)图层cuxian是当前图层、颜色号为7(白/黑)、线型为continuous、线宽为当前图形对象的默认线宽。如果某图层已经存在,只是将其改变为当前状态,其表达式如下:(commandlayerMcuxian)或者(commandlayerScuxian)2.设置新图形对象的颜色(1)通过command函数设置新图形对象的颜色(commandcolor3)或者(commandcolorgreen);设置新图形对象的颜色为绿色(2)通过setvar函数设置新图形对象的颜色(setvarcecolor2)或者(setvar“cecolor”“yellow”);设置新图形对象的颜色为黄色3.设置新图形对象的线型(1)通过command函数设置新图形对象的线型(commandlinetypescenterset);设置新图形对象的线型为中心线(2)通过setvar函数设置新图形对象的线型(setvarceltypedashed);设置新图形对象的线型为虚线4.设置线型比例因子的大小除了实线(continuous)之外,每种线型都是由不同长度的短划线、空白段或点组成的。在不同的显示比例下,这些短划线和空白段的视觉效果可能过大或过小。改变线型比例因子的大小并不改变整条线段的长度,只改变短划线和空白段的大小。例如,将线型的短划线和空白段缩小一半。(1)通过command函数设置线型比例因子的大小(commandltscale0.5)(2)通过setvar函数设置设置线型比例因子的大小(setvarltscale0.5)5.设置新图形对象的线宽(1)通过command函数设置新图形对象的线宽(commandlweight0.5);设置新图形对象的线宽为0.5(2)通过setvar函数设置新图形对象的线宽系统变量celweight记录着新图形对象的线宽,它的值是整型的,以1%为单位。例如设置新图形对象的线宽为0.5的表达式如下:(setvarcelweight50)【例8-1】定义绘制图8-1的平键外形轮廓线和中心线的命令,插入点p、键宽b、键长L、旋转角alf是交互输入的参数,要求粗实线所在图层的名字为cuxian、蓝色;中心线所在图层的名字为zhongxin,红色,线型为center(中心线)。1.定义绘制平键轮廓线命令的源程序(defunc:pingjian(/pblalfrl1p1p2p3p4p5p6p7p8p9p10)(setvarosmode0);关闭目标捕捉状态(setvarcmdecho0);抑制普通命令的提示(commandlayermakecuxianc5cuxian);生成粗实线所在的图层,状态为当前层,名字为cuxian,颜色为蓝(setqp(getpoint输入平键的定位点:));以交互方式得到平键的定位点p(setqb(getdistp输入平键的宽度:));以交互方式得到平键的宽度b(setql(getdistp输入平键的长度:));以交互方式得到平键的长度l(setqalf(getanglep输入平键的旋转角:));以交互方式得到平键的旋转角alf(setqr(*0.5b)l1(-lb));r和l1分别是平键宽度b和平键长度l的一半(setqp1(polarp(+alf(*0.5pi))r));p1-p4是多义线的4个顶点(setqp2(polarp1alfl1))(setqp3(polarp2(+alf(*1.5pi))b))(setqp4(polarp1(+alf(*1.5pi))b))(commandplinep1width0.60.6p2arcp3linep4arcclose);绘制平键的外形轮廓线(commandlayermzhongxinc1lcenter);生成中心线所在的图层,状态为当前层,名字为zhongxinxian,颜色为红,线型为中心线(点划线)(setvarltscale0.5)(setqp5(polarp1(+alf(*0.5pi))5))(setqp6(polarp2(+alf(*0.5pi))5))(setqp7(polarp3(+alf(*1.5pi))5))(setqp8(polarp4(+alf(*1.5pi))5))(setqp9(polarp(+alfpi)(+r8)))(setqp10(polarpalf(+(-lr)8)))(commandlinep5p8);绘制中心线(commandlinep6p7)(commandlinep9p10))2.程序说明(1)定义AutoCAD命令与定义函数一样,都是通过defun函数,不同之处是命令名前必须加“C:”。(2)AutoCAD命令的变元表内不能有变元,除号之后的p、b、l等是这个函数的局部变量声明,即使没有局部变量的声明,也不能缺少变元表的一对括号。(3)第3行通过setvar函数和系统变量cmdecho抑制普通命令的提示,但并不抑制get×××函数的提示。(4)第5行getpoint函数的功能是在交互状态下获取一个点,既可以用鼠标在屏幕上指定一个点,也可以通过键盘键入一个点的坐标,如键入100,50,响应输入平键的定位点:的提示。(5)第6行getdist函数的功能是在交互状态下获取一个长度值,既可以通过键盘键入具体的数值,也可以用鼠标在屏幕上指定两个点,两点的长度即为输入
本文标题:第8章 编程实例 清华CAD二次开发 LISP
链接地址:https://www.777doc.com/doc-5081220 .html