开发面向对象的CAD图形“格式刷”
2000/12/2 来源:工程设计CAD及自动化 作者:周 平

    核心提示: 一、引 言,二、设计思想与实现, 1. 面向对象的设计思想 ,2. 程序识别的实现方法 ,3. 程序的调用方法,三、结束语,

    摘要:本文研究提出了一种面向对象的CAD图形“格式刷”功能,以解决图面上图形的颜色、线型、图层、字体、字高等图形特性或特征的快速匹配问题,省去了对菜单的频繁调用,从而大大提高了CAD应用效率。

    一、引 言

  用AutoCAD设计图纸,在各种图层、颜色、线型以及字体、字高等的编辑操作方面,用户可能会消耗许多时间。可视化地管理这些对象的特性,如微软的office95软件中大量的特性控制“格式刷”那样,可以有效地利用初始绘图环境或设计图形过程中逐步产生的那些实体基础信息,再通过面向对象的程序设计,将待编辑的图形实体识别出来并快速匹配到某一种实体上去,对于提高设计绘图的效率无疑是非常重要的,由此可起到事半功倍的作用。这种直观便捷的功能在最新的AutoCAD R14版中被称为“对象特性工具栏”,而在作者所写的MDT-v1.7(Mechanical Drawing Tools)软件系统中则称为“图形特性格式刷”,在此介绍给大家参考。

    二、设计思想与实现

    1. 面向对象的设计思想
  微软的office95软件中提供了一个新颖的“格式刷”,以将文字处理的编排风格纳入灵活而又直观的面向对象的轨道,充分体现了当今最先进的软件设计思想。受这一软件思想的影响,本CAD图形“格式刷”则是作用于CAD数据特征,它之所以也体现了面向对象的设计思想,是因为其将已存在的对象库(图形实体)作为操作命令识别的基础,具有对事实的继承性、对复杂事物的既抽象又灵活的表达能力。既然在AutoCAD中几乎所有的图形实体都可以通过DXF群组码来识别,那么,通过识别所需复制的图形实体的特性格式,比如:图层、颜色、线型以及字体、字高等等,就可轻而易举地将大量待改变的图形特征复制过去。这好比你拿着一把带有一定特征的“格式刷”去刷希望得到该特性的图形实体,使它们变得一致起来。与采用以往的AutoCAD命令(如:CHANGE/CHPROP/DDCHPROP/DDMODIFY)相比,这显得更为快捷,有关的操作仅需一步即可完成,给用户带来了更为友好的图形操作界面。
  有了[图形特性格式刷]功能,你就可以不必通过另外的对话框来选择和编辑图形中一连串的实体特性,而只须在图面上用窗口拾取待改变的对象,然后点选任意一个所需的图形,立刻,所选实体集中的所有图形的数据特性便被复制成与该图形相统一的图形格式了。

    2. 程序识别的实现方法
  以下结合程序概要地说明【图形特性格式刷】功能的实现方法,以起到抛砖引玉的作用。程序名为MBRUSH.LSP(在AutoCAD-R12上开发)。
 ;; 1997.6.10. first written and last modified by zhou ping.
  初始化…
 (defun chpw (ssen w / n m ed ent) ;;改变POLYLINE的线宽
  (setq n (sslength ssen) m 0)
  (while (< m n)
  (setq ent (ssname ssen m))
  (setq ed (entget ent))
  (if (= (cdr (assoc 0 ed)) "POLYLINE") (progn
      (setq ed (subst (cons 40 w)(assoc 40 ed) ed))
  (setq ed (subst (cons 41 w)(assoc 41 ed) ed))   (entmod ed)
  ))
  (setq m (1+ m))
  )
 )
 (defun chl-pl (ss w / n slen en etype d pb) ;; 改变为POLYLINE线
  (setq n 0 slen (sslength ss))
  (while (< n slen)
  (setq en (ssname ss n) etype (sld_val 0 en nil))
  (if (or (= etype "LINE")(= etype "ARC")(= etype "CIRCLE"))
  (if (= etype "CIRCLE")
      (progn
  (setq pb (sld_val 10 en nil)
  d (* 2.0 (sld_val 40 en nil))
  cl (sld_val 62 en nil))
  (command "donut" (- d 0.35) (+ d 0.35) pb "")
  (entdel en))
  (command "pedit" en "y" "w" w "" )
  )
  )
  (setq n (1+ n)......点击查阅全文......↓