调整线条宽度的实用工具.doc
调整线条宽度的实用工具 在使用AutoCAD绘图软件绘制各类图形的工作中。最后一个阶段是将图形文件最终在打印机、绘图机上输出为图纸。其中图形线条的粗细划分是一项必须认真对待的工作。由于一般图纸上的图形不能像在彩色显示器上可用颜色及深浅区分图素、结构,而只能以改变线条的粗细的方法来达到这个目的。因此,划分好图形中线条的粗细既有利于区分图形要素,又有利于准确表达设计意图及方便识图。尤其是工程图纸,应按照国家制图标准,将图中的各图素划分出明显的粗细来。这样图纸方能满足标准化的要求。 实际上线条的粗细从粗到细有多种变化,在计算机图形文件中则体现在线条的线宽值上。常见的譬如,图形中各实体外轮廊线、图形符号及表格外框线等均为粗线,剖面线、尺寸界线、符号引线、中心线、点划线等应为细线,而虚线又介于粗细线之间。且根据需要粗、中、细线还可以在一定的范围内变化线宽。通常设计人员或绘图人员在计算机上使用AutoCAD绘图软件时,会经常使用到像COPY、OFFSET、MIRROR等组图命令,为提高绘制的效率,组图时并不太考虑线条的粗细及线型问题,而是将这个问题放在最后出图纸考贝时才一同进行调整解决。由于这时图中图素多,如靠交互操作命令来调整很繁杂、费时,其它的方法又难以圆满地解决问题。这样就有必要在AUTOCAD交互操作功能外提供一种方便的工具,使其能够方便、快捷地完成这项工作,以达到快速、准确、高效、全面的目的。保证屏幕上的图形视图清晰、层次分明。 通常来说,图形中线宽的调整有两种办法一种方法是在绘制时,分层放置线宽不同的线条,或者按粗细不同设置成不同的颜色,再配合使用笔式或高档喷墨绘图仪的线宽设置参数调整来得到所需要的硬拷贝图纸。该种方法的缺点是输出设备条件要求高,对出图设备的参数设定要熟练。然而人们在屏幕上并不能看到输出后图纸的真实效果。况且设计人员在绘制图形时,所考虑的分层、分色管理并不能只以线条的宽度为依据。当出现同一图层及颜色的图素中因为线型、结构等原因还要区分线宽时,就得逐一分别进行调定。这样就会使得调定输出图纸线宽任务变得十分繁杂。 第二种方法是,在任何图形输出设备绘图机、打印机、照相、摄影制片设备条件下,先在屏幕上将要输出的图形显式地调整好每一图素线条的粗细,然后再输出。这样屏上所看到的,就是你所得到的一个真实反映。且不必要对输出设备的参数进行与线宽变化的相关调定,对输出设备无任何特殊要求。这在目前因高档绘图仪价高而大量使用普通打印机出图的状况下具有实用意义。 本文介绍一个为此编写的小段AutoLISP程序,使操作人员能以十分方便、快捷的手段来完成图形中图素线条粗细的调定工作。 该程序所能处理的线条种类包括直线、多义线、圆弧、椭圆弧、样条曲线,线型可以处理实线、虚线、中心线、点划线、边界线等。操作人员可以在交互状态下,随时调入该程序运行,来完成当前图形中线条粗细的调整。 为了方便操作,提高图素选择效率,程序设计了几种调定线宽过程的实施方式。但任何方式下都必须首先确定所需调定的范围包括分图层、分颜色、分线型。如果某图层上图素的线宽不需要调整或已调整好,则可以先行关闭OFF,以缩小选择的范围。 下面是三种方式的具体操作过程 一、选择图素调整 1方式选择[Select\ayer\Color\LType]回答SSelect 2选定调定线宽的图素范围 3给出新的线宽值 4自动完成按新线宽值调定所有包括在选择范围内的图素线宽 二、分图层调整 1方式选择回答LLayer 2选择调定图素的范围可以是全部或部分 3在[Entity\Name]中可选择两种确定层名的方法。回答E则可以从图中选择一图素,以此图素所在的层的层名为依据;回答N则需键入调定层的层名 4给出新的线宽值 5按新的线宽值在所确定的层上自动调定位于选择范围内的图素线宽 三、按颜色调整 1方式选择回答CColor 2选择调整作用的范围 3在[Entity\Number]中可用两种方法确定颜色。回答E则可以图中选一个颜色与所需调整颜色一样的图素回答N就要给出所需调整颜色的号码 4给定新的线宽值 5程序按新的线宽值,依据所选定的颜色自动地在所确定的作用范围内调整颜色相符图素的线宽 四、按线型调整 1方式选择回答LTLType 2选择调整的作用范围 3在[Entity\Name]中回答E可以从图中选择一线型吻合的图素;回答N则给出[Continuous\Denter\Center\Phantom\DIvide\Hidden\DOt\DAshdot\Border]中的任一类型英文名的前面大写字母则可 4给定新的线宽值 5程序按新的线宽值、依据选定的线型自动在所确定的作用范围内调整图素的线宽 使用的几点说明 1 程序对选择范围内的诸如剖面线、尺寸线、尺寸界线、文字、符号不起作用。这样确定选择调定范围时,不必顾及这些图素的变化。 2 程序不能调整块内的图素,如需调整,先EXPLORING块中元素。如希望保持原有图形文件结构的话,调定线宽后的图形文件可以不存盘覆盖原有图形文件。 3 选择时可用窗口选择方法及逐个选择等多种方法,还可以用SHIFT选择掉已选中的图素。 4 所有改变线宽的图素,除粗细变化外,其它属性如层、颜色、线型均不发生变化。 5 如果原有图层中图素的颜色或线型值是按揃YLAYER斈J较氯范*绘制的, 那么这些图素此时在按颜色Color或线型LType方式调整线宽时,不属于程序作用范围内图素。也不能在上述两种方式下取这些因素作为依据,选择实体来确定颜色、线型。这在程序运行过程中遇到此类情况均有提示。这种情况下,就可以考虑优先用选择Select的方式或分层Layer的方式来调整。因为按颜色或线型方式下能调定的图素是由COLOR命令或SET LINETYPE命令确定的那些图素,不论这些图素位于那一层都可以自动搜索进行调整。 6 本程序适合AUTOCAD R12版本。针对该版本中图形文件中图素圆的变线宽处理有三种方法一是在某一点处切断使其变成闭合弧进行处理;二是先画一个相同大小的闭合圆弧、再消去原先的圆;三是用DNOUT形成的圆环代办替。这里是用第二种方法实现。如果到AUTOCAD R13版本绘制的图形,对椭圆的处理也必须采取类似的措施。 源程序 chwd.lsp defun cwidth setq bb 1 setq w 0 initget 1“Select Layer Color LType“ prompt“\n调整方式选择“ setq t getkword “[Select\\Layer \\Color\\LType“] prompt“\n选择调整范围“ setq objssget ift “Layer“ progn initget 1“Entity Name“ prompt“\n选择实体确定图层或给出图层名“ setq 1b getkword“[Entity\\Name]“ if 1b “Entity“ progn prompt“选择所需变化图层图素“ setq 1e ssget setq 1p ssname le 0 setq 11cdrcarcdrcdrentget 1p if1b“Name“ progn setq 111getstring“给出所需变化的图层名“ setq 11strcase 111 setq obj1ssadd setq j 0 whilejsslength obj setq plssname obj j setq j j 1 setq py cdrcarcdrcdrentget pl ifll py ssadd pl obj1 if t “Color“ progn initget 1 “Entity Number“ prompt“\n选择实体确定颜色或给出颜色号“ setq lb getkword“[Entity\\Number]“ if lb “Entity“ progn prompt“\n选择实体确定所需变化线宽图素的颜色“ setq le ssget setq lp ssname le 0 setq lc car car cdrcdr cdrentget lp if lc 62 setg 11cdrcdrcdrcdrcdrcdrentget lp if1c 66 progn prompt“\n该实体的颜色是随图层确定的Bylayer“ setq bb 0 setq kkgetstring“\n终止处理过程“ iflc 6 setq ll cdrcar cdrcdrcdrcdrentget lp iflb“Number“ setq llgetstring“\n给出颜色号“ setq objlssadd setq j 0 whilejsslength obj setq plssname obj j setq j j 1 setq pc cdrcarcdr cdrcdrentget pl setq lcccarcarcdrcdrcdrentget pl iflcc 6 setq pc cdrcarcdrcdrcdrcdrentget pl ifll pc ssadd pl obj1 ift“LType“ progn initget 1“Entity Name“ prompt“\n选择实体确定线型或给出线型名“ setq lbgetkword“[Entity\\Name]“ iflb “Entity“ progn prompt“\n选择线型实体确定所需变化线宽图素的线型“ setq le ssget setq lpssname le 0 setq lccarcarcdrcdrcdrentget lp iflc 6 setq ll cdrcarcdrcdrcdrentget lp if/lc 6 progn prompt “\n该实体的颜色是随图层确定的Bylayer“ setq bb 0 setq kk getstring“\n终止处理过程“ iflb “Name“ progn initget 1“Continuous Dashed Center Phantom DIvide Hidden DOt DAshdot Borde r“ prompt“给出需要变化的线型名“ setq lllgetkword“\n[Continuous \\Dashed\\Center\\Phantom\\DIvid e \\Hidden\\DOt\\DAshdot\\Border]“ setq llstrcse lll setq objlssadd setq j 0 whilejsslength obj setq pl ssname obj j setq jj 1 setq pccdrcarcdrcdrcdrentget pl ifll pc ssadd pl objl ifbb 1 progn setq cpp ssadd setq w getreal“\n给定新的线宽值[0.00]“ setq i 0 setq ii sslength obj if/t“Select“ setq iisslength objl whilei ii setq p ssname obj i if/t“Select“ setq pssname objl i setq py cdrcarcdrcdrentget p setq ii l setq objentcdrcarcdrentget p setq ppcdddrentget p ift“color“ setq ppcdrcdddrentget p ift“LType“ setq ppcdrcdddrentget p ifobjent“LINE“ command“pedit“p“y““w“w““ ifobjent“POLYLINE“ command“pedit“p“w“w““ ifobjent“CIRCLE“ progn setq p0cdar pp setq rcdadr pp setq plpolar p0 0.0 r setq and 359.99 command“layer““s“py““ ift“Color“ command“color“ll command“pline“pl “w“w w “a““ce“p0“a“and ““ ssadd p cpp ifobjent “ARC“ command“pedit“p“““w“w““ command“erase“cpp““ command“redraw“