找回密码
 注册会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 282|回复: 0

AutoCAD内常用术语的自动标注方法

[复制链接]
发表于 2011-6-18 09:25:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转磨削论坛

您需要 登录 才可以下载或查看,没有账号?注册会员

×
  摘要:本文提出了一种用对话框实现AutoCAD内常用术语自动标注的方法。用这种方法,可方便地将各种常用术语标注在图中,为CAD应用提供了方便。
  \: P  Z' l) j8 [+ E1 u3 F  一、引言
+ W$ r5 o. k' y  汉字的标注在CAD设计制图中是一个重要的部分,也是一个较为繁琐、困难的部分。目前,在AutoCAD内汉字的输入大多采用拼音方式,对拼音不熟悉的人来说汉字的输入就很困难。如果能将设计中常用的文字术语直观地显示出来供设计人员调用,将会极大地提高工作效率。本文就此进行研究,提出了一种用对话框(下图)将常用术语显示并供调用的方法,同时给出了源程序,供大家参考。该程序已应用于我院的实际生产中。. E) f1 d' F% A
  二、原理及方法
4 u, L! X9 |5 x4 I& J3 u  AutoCAD对话框结构包含有多种构件,如edit_box(编辑框)、list_box(列表框)、radio_button(多选一按钮)等,利用这些工具,可以开发出界面友好的实用程序。1 E; W5 l, j4 s1 B* D, s+ n
  左图就是用这种方法实现的。将常用词组分类,分别存于不同的文件中。根据多选一按钮中所驱动的分组号分别打开不同的文件,将文件内容读入并显示于列表框内,供设计人员使用。同时,设有一个编辑框,可将所点取的词组显示于编辑框中,便于用户对词组进行适当的修改,如删除或增加字符等。这种方法有一个优点,用户可十分方便地根据自己需要修改或添加词组内容。对话框文件及驱动程序分别见#CAL.DCL及#CAL.LSP。. V/ ?! m# [6 p! ~
  三、程序使用方法$ F5 v3 K$ c6 @: R) T
  先用WPS、EDIT等编辑程序分类建立词组库(注意,需要存成纯文本格式),每个词组占一行。程序要求将"常用术语"、"图纸名称"、"房间名称"等各分类所对应的词组库文件名分别为$TXT1.DAT、$TXT2.DAT、$TXT3.DAT厖。除第一个文件不能少外,其它文件可空缺,但当点取该分类项时,系统会提示有关文件不存在的信息。
- Q$ x/ \( f( [0 z6 Q  然后将所建立的词组库文件及所提供的程序#TXT.LSP和对话框文件#TXT.DCL拷贝到AutoCAD所能找到的目录(环境变量ACAD所设置的任一目录如ACAD\SUPPORT或当前目录)中,在Command:命令下键入(LOAD "#TXT")进行程序的加载,即可象其它AutoCAD内部命令一样使用#TXT了。也可在所使用的菜单文件(如ACAD.MNU)中的下拉式菜单或屏幕菜单部分加上下面一行:[常用词组]^C^C^P(if (null c:#txt) (load"#txt")) #txt以后可直接从菜单中驱动该程序。
! i& ?. ?/ p, \( ?) ~$ d6 N  在COMMAND:状态下,键入#TXT后,系统弹出一个对话框,根据需要点取所需的词组类别,再从列表框内选择所需词组。所点取的词组会在编辑框[所选词组]中显示。用户可以在此对词组进行必要的修改,点取[OK]后,根据提示输入字高及起点即可把词组写到图中。: G6 d+ ?% z3 Z& a" P# `
  需要说明的是,本程序中是将文字以"HZ"字型写到图中,要求字体为TXT.SHX及HZTXT.SHX。若您的软件中无这两种字体,可将其它字体改名为该两种字体(要求一个为英文字体,一个为中文字体),或将程序修改为您所具有的字体。但需要注意,也许您的字体在用于设置字型时会多一个选项,询问是否垂直书写文字,此时,可将字型设置一句改为:(command "STYLE"  O0 n% k$ Y: C2 x* J
  "HZ" "txt,hztxt" 0 0.7 0 "n" "n" "n")即可。
2 z/ `' F* n) @" f2 m  本程序在AutoCAD R12.0 FOR DOS及FOR WINDOWS版上均调试通过。
: e& }4 a7 j8 D9 p# P  (defun c:#txt ( / oldcmd olderr ok txt_tb txt dcl_id sty fp nn ht pt txterr diag init wr_txt old_nn): }; _- f: i& Y/ S8 _
  ;定义错误处理子程序2 s: r. p# P5 _
  (defun txterr(s)
# I) b6 @( F7 u- I' n4 E2 l  (if (and (/= s "console break")
0 B/ s0 m7 T* B7 j. W) M8 B  (/= s "Function cancelled")$ Q) ?& w6 m% q; ^; |# r
  (/= s "quit / exit abort"), I+ [+ }. q9 g& ?! N; M" m5 M  I2 \
  )
) X5 g. m1 B$ l$ b! E. r, R8 u  (princ (strcat "\nError:" s))
5 H6 C* Z0 t( {- k  )
3 N3 C9 O/ ]1 d& k1 @) v/ d" y  (if olderr (setq *error* olderr));恢复原系统设置  ~" \( I  d6 m6 @4 j8 ]  A; z
  (if oldcmd (setvar "cmdecho" oldcmd))
; P0 G" q0 O" R8 i- T+ N2 L8 s  (princ)" b8 Z- T8 b7 R0 k% ]) ~6 @4 V
  )9 G6 H* [3 f8 `: g7 E- k, I( \
  ;对话框显示及驱动程序
- V3 g4 T* P" F8 j# [  (defun diag ( / i)& T7 v) _5 S' B: t; f7 [2 ?! V
  (if (> (setq dcl_id (load_dialog "#txt")) 0);加载对话框文件2 k* E: S6 n+ E/ ~' C% a1 P3 ]
  (progn
9 ]5 h( K2 ?! U9 w  (if (new_dialog "filetext" dcl [JX*6]id);显示对话框- f5 Y+ G6 |* v/ Y! Z; _7 U
  (progn start_list "what");将词组显示到列表框内
, s1 c* G) L& z/ g) Z% q  (mapcar 'add_list txt_tb
) @* J1 v8 I( v% F1 F+ P  )+ Z5 F% {( u+ s/ b. C  v6 m6 G
  (end_list)3 K8 S- O" k  z4 [8 P+ B
  (setq i 1)% E# m9 ]/ o9 J
  (repeat nn;点取词组分类项后的操作
: A- V2 g4 x/ C8 t& `3 n% p  (action_tile (strcat "c" (itoa i)) "(wr_txt)")+ k+ V' |% f4 \+ n& G! t/ S5 \
  (setq i (1+ i))" W( i3 p2 |9 V' s0 D, h
  )
1 K" B$ b: x" G0 J3 s1 J  (action_tile "what" "(setq i (atoi $value));选中词组
1 b! `3 c# p" ^: @/ }$ z3 I. ^  (setq txt (nth i txt_tb))(set_tile \"sel_ok\" txt)"
. v, t4 X; b! |" U: `  )8 Q3 A  `' n: Z. b& P3 k: o! _& i' o
  (action_tile "sel_ok" "(setq txt $value)")9 n" j6 @0 O4 r7 {2 u" Q
  (action_tile "accept" "(setq ok T)(done_dialog 1)(unload_dialog dcl_id)")* ?9 W4 {; k5 s5 J: }4 b, v- u
  (action_tile "cancel" "(unload_dialog dcl_id)")
6 T. a' ]' \+ u* p8 R: @- u  (start_dialog)2 [4 d' F: G) _3 B" d2 \
  )
7 w6 d4 h; G, u! |5 ?  (prompt "\n无法显示对话框FILETEXT!请检查对话框内容!")
, P: H( ^" d9 N* x  )3 O8 Z- a8 P! X, g
  )
7 t: h' g' }/ |8 i$ j; l  (prompt "\n无法加载对话框文件#TXT.DCL!请检查文件是否存在及路径是否正确!")
+ p, e3 @$ E+ H  )
6 O4 u2 k$ @9 A& a" x% n  )# I; \2 `" [1 Z. T) b: U. w
  ;初始化程序,把第1个分组项中的词组读入表txt_tb中& ~# L- _- U4 n- g% U0 ~
  (defun init( / fname fp txt1)
/ G+ s8 ^& f' G- f) S/ W  (setq fname (findfile "$txt1.dat"))+ M% ^  z" V' r
  (if (not fname)
3 f3 V0 A% w9 A8 P  (progn (princ "\n文件$TXT1.DAT不存在!") (exit)) ;文件不存在,则退出
  u  w$ Q& X# D- g  )
! x+ W$ k. a8 I  (setq fp (open fname "r"))( W$ C( s& C  R4 b
  (setq txt_tb '())8 R1 e4 I  ^! Q# g
  (while (setq txt1 (read_line fp))
+ f/ B* r! n2 _9 H# A) o- U& b  (setq txt_tb (cons txt1 txt_tb))" Q" A# S1 N$ A4 A, s( Z
  )1 Z7 P% @" ~$ B; l7 v
  (cl  w2 p4 g6 H& j8 c( X( h
  ose fp)
" ]. ~  u. L) L$ Y  (setq txt_tb (reverse txt_tb))5 x) S$ Y$ P2 X1 C2 h0 C  n
  (setq old_nn 1);记录索引号
3 g- O" d3 z& Z" ?3 T% ?- }9 C- t# D2 ]  )
, C$ ~' G- x( r: g% `5 }& F; n1 L  ;更换列表框内词组显示内容
+ X$ ~) u+ N  P4 x$ D6 k  (defun wr_txt ( / fname fname1 fp txt1 i)
$ w: n5 |8 S3 Z  (setq i 1)
0 [5 q9 B/ w4 T
. H3 M: `, P0 Q" G" g  (while (
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

中国磨床技术论坛
论 坛 声 明 郑重声明:本论坛属技术交流,非盈利性论坛。本论坛言论纯属发表者个人意见,与“中国磨削技术论坛”立场无关。 涉及政治言论一律删除,请所有会员注意.论坛资源由会员从网上收集整理所得,版权属于原作者. 论坛所有资源是进行学习和科研测试之用,请在下载后24小时删除, 本站出于学习和科研的目的进行交流和讨论,如有侵犯原作者的版权, 请来信告知,我们将立即做出整改,并给予相应的答复,谢谢合作!

中国磨削网

QQ|Archiver|手机版|小黑屋|磨削技术网 ( 苏ICP备12056899号-1 )

GMT+8, 2024-12-23 03:33 , Processed in 0.144896 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表