国产精品乱码一区-性开放网站-少妇又紧又爽视频-西西大胆午夜人体视频-国产极品一区-欧美成人tv-四虎av在线-国产无遮挡无码视频免费软件-中文字幕亚洲乱码熟女一区二区-日产精品一区二区三区在线观看-亚洲国产亚综合在线区-五月婷婷综合色-亚洲日本视频在线观看-97精品人人妻人人-久久久久久一区二区三区四区别墅-www.免费av-波多野结衣绝顶大高潮-日本在线a一区视频高清视频-强美女免费网站在线视频-亚洲永久免费

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 4003|回復: 7

AutoCAD內常用術語的自動標注方法

[復制鏈接]
1#
發表于 2006-8-29 08:47:37 | 只看該作者 |倒序瀏覽 |閱讀模式
摘要 [HT5SS]本文提出了一種用對話框實現AutoCAD內常用術語自動標注的方法。用這種方法,可方便地將各種常用術語標注在圖中,為CAD應用提供了方便。 , U$ [. [. `0 Q9 p, a

一、引言

- ] {. ~- C6 s# V F0 r

  漢字的標注在CAD設計制圖中是一個重要的部分,也是一個較為繁瑣、困難的部分。目前,在AutoCAD內漢字的輸入大多采用拼音方式,對拼音不熟悉的人來說漢字的輸入就很困難。如果能將設計中常用的文字術語直觀地顯示出來供設計人員調用,將會極大地提高工作效率。本文就此進行研究,提出了一種用對話框(下圖)將常用術語顯示并供調用的方法,同時給出了源程序,供大家參考。該程序已應用于我院的實際生產中。

; d K8 v' x+ J+ x

# B1 P" j( K+ T) r% V! e# K1 g

二、原理及方法

" u) }1 I: j; K, T) g) Z

  AutoCAD對話框結構包含有多種構件,如edit_box(編輯框)、list_box(列表框)、radio_button(多選一按鈕)等,利用這些工具,可以開發出界面友好的實用程序。

- A& l* l" d' a5 K3 Q$ `( |

  左圖就是用這種方法實現的。將常用詞組分類,分別存于不同的文件中。根據多選一按鈕中所驅動的分組號分別打開不同的文件,將文件內容讀入并顯示于列表框內,供設計人員使用。同時,設有一個編輯框,可將所點取的詞組顯示于編輯框中,便于用戶對詞組進行適當的修改,如刪除或增加字符等。這種方法有一個優點,用戶可十分方便地根據自己需要修改或添加詞組內容。對話框文件及驅動程序分別見#CAL.DCL及#CAL.LSP。

# f' L/ q, K4 D6 ?% m+ h6 [

三、程序使用方法

5 z2 G" h2 i+ K5 X; ?* I5 x( W

先用WPS、EDIT等編輯程序分類建立詞組庫(注意,需要存成純文本格式),每個詞組占一行。程序要求將"常用術語"、"圖紙名稱"、"房間名稱"等各分類所對應的詞組庫文件名分別為$TXT1.DAT、$TXT2.DAT、$TXT3.DAT厖。除第一個文件不能少外,其它文件可空缺,但當點取該分類項時,系統會提示有關文件不存在的信息。

+ [, w, u- {+ Q9 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以后可直接從菜單中驅動該程序。

8 \( ?0 A, q; H

在COMMAND:狀態下,鍵入#TXT后,系統彈出一個對話框,根據需要點取所需的詞組類別,再從列表框內選擇所需詞組。所點取的詞組會在編輯框[所選詞組]中顯示。用戶可以在此對詞組進行必要的修改,點取[OK]后,根據提示輸入字高及起點即可把詞組寫到圖中。

. C V. w- q4 v) J7 c

需要說明的是,本程序中是將文字以"HZ"字型寫到圖中,要求字體為TXT.SHX及HZTXT.SHX。若您的軟件中無這兩種字體,可將其它字體改名為該兩種字體(要求一個為英文字體,一個為中文字體),或將程序修改為您所具有的字體。但需要注意,也許您的字體在用于設置字型時會多一個選項,詢問是否垂直書寫文字,此時,可將字型設置一句改為:(command "STYLE" "HZ" "txt,hztxt" 0 0.7 0 "n" "n" "n")即可。

6 T& N# H1 }9 k( ], e

本程序在AutoCAD R12.0 For DOS及For WINDOWS版上均調試通過。

) {+ W( z8 h! A. u7 E# ]( s

(defun c:#txt ( / oldcmd olderr ok txt_tb txt dcl_id sty fp nn ht pt txterr diag init wr_txt old_nn)

$ H% b; j/ J! u" h8 q# e! Q- ~

; 定義錯誤處理子程序

- e( n) d3 w& U4 A3 v. ~' }7 ]5 M2 y

(defun txterr(s)

0 N6 `: ^# w v) N; O: T' z' h

(if (and (/= s "console break")

9 x# `3 n2 L! e+ C0 h% t; y

(/= s "Function cancelled")

( S6 g$ T# W" k

(/= s "quit / exit abort")

6 J/ W8 l: _, }. N- \9 i

)

5 x9 ?- k, t9 c# Q+ r s

(princ (strcat "\nError:" s))

4 I8 @1 c2 F0 C" X3 |# D

)

" U; H( p+ Y7 `% Y. V8 m

(if olderr (setq *error* olderr)); 恢復原系統設置

2 U3 {' R6 l$ o0 v# [+ A

(if oldcmd (setvar "cmdecho" oldcmd))

0 N4 b3 \) r$ P1 v8 o* Z3 x

(princ)

4 Z% v) o' Z0 j) w; d( r

)

7 T" r" _4 z" N" {* R3 }3 s

; 對話框顯示及驅動程序

" L" }8 a) C$ h$ n

(defun diag ( / i)

( |4 ~( o8 Z- O0 Q- j/ T* Q) c

(if (> (setq dcl_id (load_dialog "#txt")) 0);加載對話框文件

' S' l; G1 {$ u& }! N

(progn

8 v' O# c& L& [* a; C+ O3 b

(if (new_dialog "filetext" dcl [JX*6]id); 顯示對話框

5 v" b6 t6 @+ D) W

(progn start_list "what");將詞組顯示到列表框內

8 g: r3 Y- b3 H' u" f) n

(mapcar 'add_list txt_tb

( B) {% O" t' e5 a- l4 \

)

4 y; G. E! A+ o' a

(end_list)

7 t; i' v# R1 F0 x8 v

(setq i 1)

# N; n$ C0 a- K$ b4 q5 i

(repeat nn;點取詞組分類項后的操作

# @% o0 J1 Z8 `9 W* ^' r: Q

(action_tile (strcat "c" (itoa i)) "(wr_txt)")

h/ K2 x/ I' y: I4 _* r

(setq i (1+ i))

# S s8 e G! c2 R; `9 S

)

% }4 ?' k9 L" u

(action_tile "what" "(setq i (atoi $value));選中詞組

& G g! `8 j# n7 n" b' G( X

(setq txt (nth i txt_tb))(set_tile \"sel_ok\" txt)"

* M4 K9 b& x$ t9 o+ T

)

* {9 m v- D" g

(action_tile "sel_ok" "(setq txt $value)")

' m" _2 u9 `8 V) J

(action_tile "accept" "(setq ok T)(done_dialog 1)(unload_dialog dcl_id)")

7 `4 |2 X! T; A" i3 C( ?

(action_tile "cancel" "(unload_dialog dcl_id)")

9 a5 B" D- D$ r. O% B5 P2 a

(start_dialog)

) x$ I. o$ k- O6 W

)

/ s' E2 N# i; c. P) H; I- ^" F d

(prompt "\n無法顯示對話框FILETEXT! 請檢查對話框內容!")

( b, ], i4 F, w- E" Y: Y2 h

)

! r( C4 }& n) C: T- h! f+ ^' \- [$ \

)

# G- H$ C- l: e% X* w6 d. B. ]* V

(prompt "\n無法加載對話框文件#TXT.DCL! 請檢查文件是否存在及路徑是否正確!")

2 a" Y0 E9 \0 F0 { Q9 g' L- r. V

)

2 X( q: `0 _0 y8 h8 {

)

7 H; \1 A+ `( m" [, p$ E4 E; s

; 初始化程序, 把第1個分組項中的詞組讀入表txt_tb中

! [' V3 V0 ~9 q1 L1 b8 g% B: L

(defun init( / fname fp txt1)

4 M$ r' \; C7 Y/ v! U

(setq fname (findfile "$txt1.dat"))

* i, s2 _6 j1 `/ |

(if (not fname)

K: S$ g7 @- o% r

(progn (princ "\n文件 $TXT1.DAT 不存在 !") (exit)) ; 文件不存在, 則退出

4 C5 u, Y; x3 }7 P

)

( }: ^( S$ q9 g

(setq fp (open fname "r"))

! X% j- ^& ` |* `

(setq txt_tb '())

8 F' ~+ a, n7 ~; t% \

(while (setq txt1 (read_line fp))

6 X3 Q( K' T+ e. A8 j+ T' R# l7 ~

(setq txt_tb (cons txt1 txt_tb))

! y, g6 B+ U/ \2 D

)

& Q+ B x4 u2 t: Z

(close fp)

5 P0 s/ V: K# I! l6 q

(setq txt_tb (reverse txt_tb))

+ z& Y6 P; g# i2 g% J6 r$ n

(setq old_nn 1);記錄索引號

: o2 G+ b3 }* ?6 r& `6 t& [

)

4 o4 {: I) G- q8 K+ O

; 更換列表框內詞組顯示內容

. k! R4 G5 ^6 Q6 T9 C+ {

(defun wr_txt ( / fname fname1 fp txt1 i)

& n# T9 T; l( d& }4 G

(setq i 1)

' P- }2 g0 ?* B

(while (<= i nn); 判別哪個詞組項被點中

6 i5 L$ O% E) m. z& D: E! v

(if (= (get_tile (strcat "c" (itoa i))) "1")

2 }+ P0 r6 R+ U4 R4 l4 l

(setq fname1 (strcat "$txt" (itoa i) ".dat")

$ Q: p1 d$ m1 a+ b- z, }1 `

i nn

7 O* z5 b: S9 N/ ~) T

)

) d3 R- ?1 R! S

)

1 g/ t) j T5 }. f- \/ ^" L& g

(setq i (1+ i))

4 @8 p3 C+ s+ M4 r% p) W- W: }

)

- Q- i) V8 }) m$ y3 Y2 F' k

(if (setq fname (findfile fname1)); 查找文件是否存在

( x6 ]) @2 s1 X; H5 x3 L

(progn

5 v% p) P F1 b: r s* o! {

(setq old_nn (atoi (substr fname1 5)));記錄索引號

: N* ^$ \1 g& e$ E+ ~( v; M# l

(setq fp (open fname "r"))

7 j5 K( \. b9 G9 T; p- y

(setq txt_tb '())

G5 c k2 t' K

(while (setq txt1 (read_line fp));依次讀出各詞組

2 c+ \8 \: ^: C6 s1 I2 S, o

(setq txt_tb (cons txt1 txt_tb))

/ f0 G5 K- |) [, O1 N6 x1 p8 T t

)

N! G2 [$ L3 a3 D. b2 ^! [( M. `

(close fp)

* S! W) p. ]' G& t4 {

(setq txt_tb (reverse txt_tb))

4 W" h; X& e& l0 A* n% @

(start_list "what");在列表框內顯示詞組內容

5 N) {4 F- R7 S; B8 V/ M

(mapcar 'add_list txt_tb)

" [7 v3 G0 `6 I* w; _

(end_list)

4 D6 ?9 j, _! k; A/ ?

) ; progn

6 K0 U& K. E7 C

(progn

6 X% c A7 q0 J* {: S/ Y3 p

(alert (strcat "文件" fname1 "不存在!"))

2 C F* h" C2 U( t8 l% m) R% j( Z

(set_tile (strcat "c" (itoa old_nn)) "1");恢復原記錄號

2 Y9 a% c% }6 G, [$ r

)

* ?+ v- v0 `. @! F6 F6 a

) ; if

) r. a6 @+ n: O: v

)

+ O5 ~% x) z! ]8 J. e

; 主程序開始

/ i4 x& F1 b8 j5 ?4 Q( z8 y

(setq olderr *error*

$ F, q" g4 y* r+ {" j# n& D

*error* txterr

p$ e1 w8 U$ Q5 w, m" O

oldcmd (getvar "cmdecho")

; S, E/ V' p2 M& Y

)

! [, z/ d2 y, D, S5 k

(setvar "cmdecho" 0) ; 命令不回顯

2 c y9 Q% ?# e- x- ]5 e

(setq nn 9) ; 詞組分類數

9 m5 b* {0 i. \3 |8 x) ?

(init) ; 初始化

) x0 ]- @) w' N0 b( L

(diag) ; 驅動對話框

$ h) ] A4 r: S8 H( U+ t7 ?5 ?6 l! R

(if (and ok txt)

; D8 i, r7 i% [4 q. G

(progn

& X3 g# l5 q1 x# h# _, O0 n( A, A3 i

(if (or (= (setq sty (tblsearch "STYLE" "HZ")) nil); "HZ"字型是否存在

7 S4 x. H& `. c+ l* X1 \

(/= (cdr (assoc 40 sty)) 0) ; 字高是否為定值

" v$ Z) j8 s1 e0 H! j' t

(/=(getvar "TEXTSTYLE") "HZ"); 當前字型是否為"HZ"

1 | G4 C9 w: ]$ V/ a3 \$ K

)

6 F s! [. E5 r4 `

(command "STYLE" "HZ" "txt,hztxt" 0 0.7 0 "n" "n") ; 設置"HZ"字型

# L0 o$ B: J7 [0 ?' a) Z$ }

)

( u! ^3 x/ V' h( C+ K1 Y

(initget (+ 2 4));下面的輸入值要求大于0

6 W* j5 ~ r7 ]! E' c% A: I

(setq ht (getreal "\n請輸入字高<500>:"))

8 @% ^8 O7 z- U- I2 j6 d

(if (not ht) (setq ht 500))

! L* K" ^8 T+ _1 \/ k, P2 U( S

(setq pt (getpoint "\n請點取文字起點:"))

8 x; Y7 }" B+ B- Y; C: d

(command "text" pt ht 0 txt)

2 e2 B% R* [) K& v

)

: S1 o# o& p7 x9 h: G7 X

)

5 n3 b P. k/ n6 ^& C7 B4 w

(setq *error* olderr);恢復原設置

7 N7 G- X$ B! g: s8 F

(setvar "cmdecho" oldcmd)

( Z M- z- J& B- ~; f

(princ)

' E( H1 a) O: V) M" \; n+ n7 h. H. q" G

)

1 Y( x5 h2 U" f& z: M1 C

// #txt.dcl

4 r% ^ |/ `. Q( A% w0 t$ b9 ^3 J

// 供#txt.lsp調用

; n! m6 b+ @3 t2 a' d6 l* z

filetext : dialog { // 對話框名稱

: y2 d; K: i8 L) M2 J

label = "常用詞組"; // 對話框標識

' E8 `7 _6 u4 w$ }( i

: row {

" {1 m& w8 i* Q( K

: boxed_column {

! p1 _ A$ `- B$ G6 C+ G5 z( A

label = " 索 引 ";

9 `' @" ~, B+ _& I" p: w( p

: radio_button {

4 Y9 a, r* @: M) m w

label = "常用術語"; // 多選一按鈕

: Z% c/ P3 s9 E0 y

key = "c1";

% u7 {6 g0 ?% ^& v

value = "1"; // 初始值為"1", 表示選中

1 p3 |3 b, r9 g' R( B

}

9 F' H" o) @- p4 v9 v+ a

: radio_button {

8 I/ }* O7 ] h1 B8 F

label = "圖紙名稱";

. C; J4 \" m9 c4 R

key = "c2";

* _2 ]' @3 U4 O

}

8 }- h4 H/ a; }& x

: radio_button {

# p6 v9 j$ M1 G5 W0 P H

label = "房間名稱";

7 Q; c4 L* I" o3 G: U% ~( s \

key = "c3";

8 @) G, Y( L4 w( Y8 b! H E0 x

}

) b" V6 P( F" }$ v' D. m& a, n, L

: radio_button {

# Y" {4 u S2 k7 b8 v

label = "衛生器具";

# G) [( ^/ q; @2 _3 T

key = "c4";

3 A" M! l* E R+ ?0 j/ B) H i7 G5 m

}

; t- ?* V# m, m% X+ C

: radio_button {

3 h" z- c3 h$ h! A

label = "管材配件";

' M, N- R# ~! N% \1 F

key = "c5";

$ G/ b6 H2 E7 C4 v5 S" S

}

* j' I: e' o9 _+ G: n

: radio_button {

- r: B! c" |. P7 l- B4 Z

label = "器材儀表";

- B( e P" T! A1 [( o

key = "c6";

; f, @) ?( N$ M: _+ A, i! J& y( ?

}

9 |; w a, q: i( Z' k7 O

: radio_button {

1 h7 a' N% U4 c* ~7 R; ?/ q

label = "常用設備";

: Q% n9 H: c5 _0 m

key = "c7";

! n1 q" `) I2 {0 @

}

* f& S; ?' m) r' ?0 q1 l3 z

: radio_button {

. o5 ^* c a- V& ~; `; B1 |: L

label = "構筑物";

8 ~+ P' R q. l1 {0 v0 O

key = "c8";

! C( }$ h" b9 q. F3 R

}

- J/ k! Z3 _" q+ o( G

: radio_button {

" q) l3 s* i- @/ ?

label = "其它";

/ p! K! ?# l6 _

key = "c9";

7 |1 Y: _8 {( S$ ], K8 G* p/ T" s

}

! Z9 \1 T' F0 k5 N" l2 M

}

1 H, u5 Z ^& S5 Z- N) v

: list_box {

$ p& O$ j. @: [, _+ e9 ~

label = "詞組內容";

8 r" O: }. _0 m1 S( @( X

key = "what";

/ i5 U8 v G) ^% w6 j

height = 15;

7 I2 q. k* ?# m, R9 b! n9 V

width = 26;

. d' \1 i. s# N) w

allow_accept = true; // 可雙擊鼠標選取

, U6 e z% y6 y

}

8 I' n- R! v2 L! e# O" q4 w

}

, l! T7 H' O+ y5 d( a! A! i

spacer_1;

3 h; Y$ L' Q6 p. ~+ a* [7 {9 I5 ~8 u

: edit_box {// 編輯框

" B: u4 r p/ a8 S8 u+ O

label = "所選詞組:";

2 h4 Y3 @. Y6 j Y& `* }( u

key = "sel_ok";

% I7 [5 ? n2 ~& F

}

0 Z+ N( O% e4 ~+ B9 f0 Q/ U: r

spacer_1;// 增加間距

6 \5 _! P6 ^) O4 T8 K) ]: H# ^

ok_cancel;

4 }- s4 g6 [! h5 ~% @+ h+ J

}

回復

使用道具 舉報

2#
發表于 2010-1-22 11:01:09 | 只看該作者
就是啊,有點過于專業了,能不能淺顯易懂的講解一下,謝謝
3#
發表于 2010-8-3 19:09:08 | 只看該作者
有點過于專業了,能不能淺顯易懂的講解一下
4#
發表于 2010-9-29 10:44:49 | 只看該作者
程序設計專用詞匯。使用者不用看
5#
發表于 2010-9-29 20:33:09 | 只看該作者
這個不太懂,如果解決完,可以共同探討一下嗎?
6#
發表于 2010-9-29 20:59:32 | 只看該作者
不太懂啊·············
7#
發表于 2010-10-17 23:45:11 | 只看該作者
有對話框,挺高級的,不過這是機械社區,樓主是搞建筑滴
8#
發表于 2012-5-30 11:12:57 | 只看該作者
這個很專業啊。。。。謝謝!
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

Archiver|手機版|小黑屋|機械社區 ( 京ICP備10217105號-1,京ICP證050210號,浙公網安備33038202004372號 )

GMT+8, 2025-9-10 12:47 , Processed in 0.068017 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表