好好学习,天天向上,机械爱好者欢迎您! (技术交流QQ群:13438135)
当前位置:首页 >  CAD制图 >  CAD技巧 > 内容页

AutoCAD工程绘图中序号标注

2021-12-05 11:36:49CAD技巧访问手机版458
摘要] 简单介绍AutoCAD绘图软件的二次开发方法,并通过利用AutoLISP语言编制的具体应用程序,说明对AutoCAD进行二次开发使得工程绘图效率大为提高。
关键词:计算机绘图;二次开发;AutoLISP语言;
程序编制
中图分类号:TP311.52

A Specific Example Showing the Secondary Development of AutoCAD in Engineering Drawing Making

1 前言
  AutoCAD作为一种通用的绘图软件,在计算机辅助设计中广泛应用。但AutoCAD作为通用的CAD系统虽然具有内部丰富、功能强大的命令集,要满足许多专业方面的需要还存在很多不足,有时仍感到使用不便,需要进行二次开发,针对不同的专业增加一些新的功能,以提高设计效率。比如,在机械设计中常常要标注零部件序号,尽管可以实现,但是由于AutoCAD中没有相应的标注功能,序号标注包括对点圆、线、文字命令的操作,这样标注显然绘图效率很低。在动力系统设计中,经常要绘制各种阀门,如果对AutoCAD进行二次开发,实现使用灵活方便的阀门绘制程序,则可以大大地提高绘图速度,提高设计效率。
  AutoCAD for Windows以 AutoLISP和ADS作为二次开发工具,ADS(Autodesk Development System)是基于C语言的开发环境,它允许C语言程序员开发实用程序以对AutoCAD的充分应用。另外,Microsoft的Visual Basic(VB)是windows下主要的开发工具之一,它以“可视化”和“事件驱动”特性,简化了面对windows的编程。在windows下,VB和AutoCAD都支持强有力的DDE(动态数据交换)功能,可以用VB编写客户程序通过Windows DDE 连接向AutoCAD传送指令和交换各种复杂的数据结构,实现对AutoCAD的控制。尽管AutoLISP运行速度慢,但是它为中高级的用户定制AutoCAD提供了很多便利。AutoCAD软件包提供了许多AutoLISP实现程序。

lod6.gif (2210 bytes)

图1 标注类型

lod7.gif (6731 bytes)

图2 序号标注流程图

3 程序的设计和实现
  在本文中,简要介绍了利用AutoLISP语言编写的序号标注程序,以起抛砖引玉的作用。本程序是在AutoCAD-R12上开发并运行通过的。程序主要包括标注零部件序号、标注支吊架序号、标注分界符、标注文字等功能,如图1所示。同时可以设置文字高度和数字自动赋值。有了“序号标注”功能,你就可以很方便地连续地进行标注。
  其流程图为:
  在标注时首先拾取起始点,程序中设计了功能选项并显示:
  T标注类型/H文字高度/N数字赋值/?帮助/〈起始点〉:
可以通过功能选项改变标注类型、文字高度,以及确定文字高度、序号数字是否连续赋值。其实现程序为
(defun 1b—m1 (/ input)
 (setq temp T)
 (while temp
  (initget″ Type Height Number ?″)
  (setq strtpt (getpoint ″ \nT 标注类型/H文字高度/N数字赋值/?帮助/〈起始点〉:″))
  (cond
  ((= strtpt ″Type″)
   (initget ″Part Brace Delimit Text″)
   (setq input (getkword (strcat ″\nP
零部件序号/B支吊架序号/D分界符/T标注文字〈″1b—typ″>:″)))
   (if input
    (progn
     (if(/=1b—typ input)(setq num 1))
     (setq 1b—typ input)
    )
   )
  )
  ((= strtpt ″Height″)
   (setq input )getdist (strcat ″\n 输入新的文字高度<″(rtos txt—h)″>:″)))
   (if input (setq txt—h input))
)
  ((= strtpt ″Number″)
   (initger ″ON OFf″)
   (setq input (getkword (strcat ″\n序号数字自动连续赋值?OFf/ON <″1b—num″>:″)))
   (if input (setq 1b—num input))

((= strtpt ″?″)
   (1b—hlp)
   )
   ((null strtpt)
    (princ ″\n正常退出LABEL.″)
    (setq temp nil)
    (setq cont nil)
   )
   (T
    (setq temp nil)
   )
  )    ;end of cond
 );end of while

选择标注类型也是通过功能选项进行的,其显示选项为:
  P零部件序号/B支吊架序号/D分界符/T文字标注:
如果起始点空输入,则退出标注功能。在完成起始点选择后,紧接着要求拾取文字标注的位置,显示功能选项:
  H文字高度/N数字赋值/U退回/?帮助/〈终止点〉:
在该过程中仍可以设置文字高度和数字自动赋值开关。实现程序为
(defun 1b—m2 (/ input)
 (setq temp T)
 (while temp)
  (menucmd ″S=labe12″)
  (initget ″Height Number Undo ?″)
  (setq nextpt (getpoint strtpt ″\nH 文字高度/N数字连续/U退回/?帮助/〈终止点〉:″))
  (cond
   ((= nextpt ″Height″)
    (seta input (getdist (strcat“\n输入新的文字高度<“(rtos.txt—h″:)>″)))
    (if input (setq txt—h input)))
    ((=strtpt “Number″)
    (initget ″ON OFf″)
    (setq input (getkword (strcat ″\n序号数字自动连续赋值?OFf/ON <″ 1b_num″>:″)))
    (if input (setq lb_num input))
 )
  ((= nextpt ″Undo″)
    (command ″—.U″)
    (setq temp nil)
   )
   ((= strtpt ″?″)
    (lb—hlp)
   )
   (T
    (if (null nextpt)
     (setq temp T)
     (progn
      (cond
      ((= lb—typ ″Part″) (lb—part))
      ((= lb—typ ″Brace″) (lb—brace))
      ((= lb—typ ″Delimit″) (lb—deli))
      ((= lb—typ ″Text″) (lb—text))
      )
      (setq temp nil)
     )
    )
   )
  )    ;end fo cond
 )end of while

在选择好终止点之后,要求输入相应的标注内容。例如,零部件序号和分界符标注过程分别表达为
(defun lb—part(/ ang endpt midpt)
 (setq ang (angle strtpt nextpt))
 (if (and (> ang (/ pi 2))(<ang (* pi 1.5)))
  (setq endpt (polar nextpt o (* txt—h-1.6)))
  (setq endpt (polar nextpt o (* txt—h 1.6)))
 )
 (command ″donut″ 0 0.3 strtpt ″″ ″line″)
strtpt nextpt endpt ″″)
 (setq midpt (mapcar' + nextpt endpt)
midpt (mapcar'/midpt'(2 2 2))midpt (mapcar'/midpt'(0 4 0)))
 (if (=lb—num ″OFf″)
  (\progn
   (setq temp (getint (strcat ″\n 请输入零部件序号〈″rtos num)″>:″)))
   (if temp (setq num temp))
  )
 )
 (command ″text″ ″J″ ″M″ midpt txt—h 0 num ″change″ ″L″ ″″ ″P″ ″C″ 6 ″″)
 (setq num (1+num))
(defun lb—del(/ txt ang radius centpt)
 (setq radius txt—h)
 (setq ang (angle strtpt nextpt))
 (setq centpt (polar nextpt ang radius))
 (command ″donut″ 0 0.3 strtpt ″″ ″line″ strtpt nextpt″″)
 (command ″circle″ centpt radius)
 (setq txt (getstring ″\n 请输入分界符序号:″))
 (command ″text″ ″J″ ″M″ centpt txt—h o txt 0 txt ″change″ ″L″ ″″ ″P″ ″C″ 6″″)

程序通过循环语句实现多次标注,当起始点空输入时退出标注。
在运行程序功能之前,必须将其调入AutoCAD中。只要在Command状态下,键入(Load″C:/SUBDIR/lABEL″)即可。对于常用的功能,可以把它放入菜单文件中。可在所使用的菜单文件(如ACAD.MNU)中的下拉式采单或屏幕菜单部分加入一句:

TAG标签: 序号标注