久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 3922|回復: 7

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

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

一、引言

% ~6 g: {6 P* A$ z5 u* O

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

6 P& Q2 h+ t* Z! y, [! E

: }! I. w3 D0 ^! V' o

二、原理及方法

+ C9 S# o. I$ _8 Q) D7 t* S

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

- ]2 H( K, x/ }; x3 b, U

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

+ |0 q. J* u1 ]+ { q

三、程序使用方法

7 t. @. y' j" y2 C; p( d; |8 n3 N

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

! q: w2 m- s, O- e" d

然后將所建立的詞組庫文件及所提供的程序#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以后可直接從菜單中驅動該程序。

, \2 P5 d% d. U. _: N

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

* F1 P* ~" j. P& r& U& V+ _7 r

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

( f( V3 [- K+ [7 e# Y( w

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

: M. [* {: F" o; |* x) b

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

# H9 w6 V1 L8 H* o2 f) d& Q/ `" Q

; 定義錯誤處理子程序

$ g2 K3 v1 o6 t" H' ~

(defun txterr(s)

7 {1 o1 q3 Y# o [

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

+ n/ E" {* k$ q1 m6 i0 K

(/= s "Function cancelled")

: }3 U9 k/ H+ h9 C# t5 z

(/= s "quit / exit abort")

8 H0 R, k3 Z. x# Y) P( f8 z

)

6 u+ K) _8 `8 g( e# z

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

8 |& r, t9 u- h' _) X1 L! ]* y( R" l: L

)

. e- [2 M( ^; h

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

( W8 A" w$ S1 { ]

(if oldcmd (setvar "cmdecho" oldcmd))

5 R% j8 H' _% k$ L

(princ)

`8 Z! S; L1 M z, s2 _

)

2 J2 `1 p" f h3 [/ p8 }

; 對話框顯示及驅動程序

$ c: r3 H5 S9 y7 c3 k0 B& q; V

(defun diag ( / i)

" W7 s& p4 ]7 Q+ u

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

, q( I! D8 h; D+ u0 G

(progn

2 g$ {1 D% c, C" R

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

4 l2 O L( K5 A$ S7 V; I( U

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

6 x) p) v& n$ q; u3 O, |4 \" S

(mapcar 'add_list txt_tb

8 n1 @7 e9 y6 f* J, D

)

Y& e; \4 e: P" t! P

(end_list)

3 p! M( z2 H# S. n+ i. o* o+ K

(setq i 1)

. L% a& X; O! q) w s: r

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

- N# x4 p* H/ u4 ^: s9 Q9 K6 a

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

c. K* C5 t# V l3 a3 Z) m

(setq i (1+ i))

5 Z4 J; `8 [$ |

)

* z4 ]5 m' Y' ]* ?3 }/ B

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

/ W2 p9 d5 ^) O" u1 s7 t

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

$ Y, Q" w" T; E2 K/ R5 g

)

7 L# m. V9 f8 R- g0 Y5 h

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

% a3 O8 E( P7 ]4 I; q/ ]+ h& o

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

, _2 L$ g1 t" R/ _. b4 C! Y! G3 ]

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

# S0 F( @5 i/ U y" }

(start_dialog)

$ Z" f2 E8 Q% f

)

2 s- r' w8 ]" t

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

0 j% A* O8 M8 p5 [8 [

)

' b3 }2 P9 X6 b/ e5 v9 b1 T, z5 U

)

2 t$ U) b% \! i6 Z5 O( h

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

+ o& @! q( p$ C7 x

)

( }' L% k; [; T

)

0 [9 t b. p9 ~( p7 y

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

/ S# G, o, u+ _5 u. J" ]: @2 m

(defun init( / fname fp txt1)

( J/ f! Y' z+ V8 {$ d" X

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

% w% {$ {4 E' H7 N/ A5 q J

(if (not fname)

5 ^8 ^( V: S3 T i% z7 ^& D9 S- D

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

: F( o" P! E! m. V2 E( P

)

7 v. b9 h2 _- t+ p* J* g# {

(setq fp (open fname "r"))

' y2 o6 B [& S# f

(setq txt_tb '())

9 a7 `9 {" u# Y) A3 ?4 }

(while (setq txt1 (read_line fp))

; S2 G4 S- j2 C6 W

(setq txt_tb (cons txt1 txt_tb))

- G L0 _0 l X2 [

)

+ q0 w1 B. E$ @1 [) _! N. A

(close fp)

8 e' G+ ?0 P8 `+ F; e& c) D

(setq txt_tb (reverse txt_tb))

4 h, M+ t. S! B: ^. l% T$ v

(setq old_nn 1);記錄索引號

3 F- [7 U. h4 N, Y2 H( C5 n

)

0 }" o/ j8 G7 R2 ^3 m

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

# K8 z. N/ y% v( }0 \5 d

(defun wr_txt ( / fname fname1 fp txt1 i)

4 b5 g d- q6 G$ W9 t; }$ s

(setq i 1)

P: @" D" }# L

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

! J: t. H1 x! s1 R

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

5 F) j! u! U) Q. \: Z

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

$ I6 S/ o4 y0 ^/ ~7 o9 Y

i nn

& O& k; k/ V/ h# m

)

. ?1 e) v* `* s% ^7 L

)

( E' U- V+ w J7 r4 N

(setq i (1+ i))

% h* i7 a$ ]2 A/ F2 ?. y

)

0 \: d' d5 P( o3 c. h

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

. ]8 M; T8 W& E* X# k6 ~

(progn

- v3 I4 b' A4 c* ]: o' r$ |

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

! Y% ]; c7 `3 T. p9 J6 B- e- b

(setq fp (open fname "r"))

; u/ T7 }+ T+ g6 ]5 Q) Y( y0 e( u ~6 N; z

(setq txt_tb '())

9 q, K; N/ }( S' k/ J

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

. ~7 U4 C* w* Y

(setq txt_tb (cons txt1 txt_tb))

# b5 {$ |+ l* X$ l. ?* S5 Q; N

)

: H! C0 F- y+ o8 W/ l

(close fp)

* R0 h( _0 i2 j9 @

(setq txt_tb (reverse txt_tb))

1 J- r/ E" _( U2 A8 y8 W8 ]

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

$ f; I& G. {. ?2 V0 F8 O

(mapcar 'add_list txt_tb)

7 k3 i: l: f9 m7 l

(end_list)

/ ^! g0 c/ Q" e% N+ ~

) ; progn

7 J% r8 u) N- e6 U- ^0 ~5 G

(progn

, T- I2 R3 T- Y

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

# s1 }( B0 V3 ^0 V4 U. c

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

% Q) J2 R4 ]$ w7 R- R' A

)

+ Y0 g* ]5 w ~

) ; if

9 x- o& i+ h' r

)

2 b8 G- A+ S z

; 主程序開始

9 }5 C- l; h- }* E* W

(setq olderr *error*

2 D! f3 [1 n3 X: H# Y$ o1 @1 O6 V

*error* txterr

, W/ ^' z) [* C" y! m

oldcmd (getvar "cmdecho")

. L& e2 U8 {# @% {2 b

)

. d Z! {& z5 I$ ~ O

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

; \; G4 s8 J. m. F; n

(setq nn 9) ; 詞組分類數

9 G$ Z! s( [0 A: v% f

(init) ; 初始化

. ~1 Q! }) }+ z6 ]5 p% x

(diag) ; 驅動對話框

- a& M- q& m7 k3 r$ \3 S9 z

(if (and ok txt)

0 L5 r- A. r+ G+ h# O

(progn

* D. i$ U6 ?7 M- g# X

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

/ p# w5 S, b. J+ I% ~, M

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

! [5 @, C5 t0 Z8 B+ w6 e

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

. n/ _: S& H+ \- l2 v2 O

)

, }3 f Y/ z, E/ X D

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

, M) G9 R' v. j( v

)

, ^% w* h$ @, {

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

! q0 c+ r0 c0 ^ g2 ~

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

2 y; z2 x- @1 ~) j1 s& N( \! J

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

, g7 C1 t2 U+ D6 E: c" H

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

5 \" o2 d }1 ?- z W9 N1 U

(command "text" pt ht 0 txt)

2 _: ]& S1 l4 i* V# W/ E

)

+ A" ^' F2 J z4 L8 D

)

& ^( S) o9 k/ {; r8 q9 t

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

7 c3 V% E9 a/ c4 V

(setvar "cmdecho" oldcmd)

D+ J7 o/ s3 K& J( @1 U

(princ)

2 K& S' Q9 @: J

)

: S4 R2 r2 n0 z, }9 ^9 p

// #txt.dcl

+ l/ u/ k& E" C0 Z, C" e3 y) g

// 供#txt.lsp調用

1 f0 l5 }8 Y6 f4 @9 t$ \

filetext : dialog { // 對話框名稱

8 J: F1 z/ X" Z8 p G' o6 ?8 J# z! n) z

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

5 o5 F8 A% P: N

: row {

9 K1 L$ T- {4 ]- L9 [2 F

: boxed_column {

1 R- u% e! ^8 K

label = " 索 引 ";

! h& \" X& x5 v0 F. V

: radio_button {

2 m9 @' O+ C2 G: X- j7 r( p

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

, r8 W F7 q+ _: a

key = "c1";

( O" y e& R e" T7 @

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

9 M) M+ G. \( k* T( c

}

$ \, B& J% d7 U; z" z2 Z

: radio_button {

1 r9 v" F2 i# P* A" w2 N5 Y

label = "圖紙名稱";

( o# i: n5 }( E8 q$ z

key = "c2";

7 Y, }8 ^) C+ e) m, [6 ]

}

4 r1 d# l3 }+ _% w

: radio_button {

9 c$ C+ P% [& ], H3 Z2 a# F9 G

label = "房間名稱";

7 {% _7 m6 V5 `- t/ B G# W

key = "c3";

. e6 H, i, r4 v5 G

}

1 r8 j+ {- b- l$ g$ U" Q& O0 D# J

: radio_button {

3 O5 d! @! `* }4 t0 H

label = "衛生器具";

# \3 F3 u* J8 c: D; n$ h

key = "c4";

0 v+ p* b3 d3 z9 J1 [

}

( V- l g2 B# G& ~8 E, `' f- R4 @7 w

: radio_button {

; G2 {; D* S! k

label = "管材配件";

& E& ~$ M! \$ N

key = "c5";

7 y2 M* N6 y2 ^1 E" ?! _5 @

}

2 Z" d, q- b( }" X

: radio_button {

" e# w( Y q% F' f9 L

label = "器材儀表";

4 X, F8 J- M2 V0 [

key = "c6";

: Q, j4 X! E* ~/ l+ H1 X

}

; ~! |9 b3 `. H8 s% I& v" R

: radio_button {

: I* T! \: W/ n* ]+ P, }! H

label = "常用設備";

+ b5 ?8 L0 N( L2 T

key = "c7";

* T2 r, e) E% J5 Y4 O! @3 L0 I5 r

}

6 T7 t1 p" c& D" W+ S6 A: K/ d

: radio_button {

! \9 _6 Z+ M1 v; j9 r( A3 B/ p

label = "構筑物";

7 a' z7 |8 h/ ?: v l0 Q/ `, N

key = "c8";

; t2 E, X3 T( J6 I2 f' T

}

6 S5 w* T+ F( B! N+ p# h

: radio_button {

; Z5 ~5 Q" {+ d4 s, U* H' U

label = "其它";

3 J l; p% S. i( {3 J \

key = "c9";

$ f1 c7 a+ p7 b# h7 P4 B" p

}

5 _ O9 p P+ u ]- c; {8 c

}

8 p$ a) K3 b3 x _ G3 P J+ r* X6 L

: list_box {

$ \6 D# J6 ?( T( O5 K5 a

label = "詞組內容";

0 W/ c/ ?' p$ F* Q! ^8 V

key = "what";

# f& i( z4 k: {+ q

height = 15;

' n3 ~! Z: \3 z2 a0 M7 H) j

width = 26;

2 A( t! P% K1 \/ c: ~

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

' d- w; S& j) k. d! ~6 @- u. Q

}

; A& V5 r1 }! V4 I

}

" R; p" C* h: X! c+ n

spacer_1;

. t: \3 ?2 I# d% a. G8 Z

: edit_box {// 編輯框

+ o% n L$ J' A( t5 {' H

label = "所選詞組:";

0 g; X' A- M% c7 l" ?0 K

key = "sel_ok";

, _8 K, @; f0 |0 G3 Q1 A/ q

}

. y3 I D* U Q: i7 b e" l

spacer_1;// 增加間距

* }6 K- J, [8 X; o9 O

ok_cancel;

* L, S9 b% n" W- \

}

回復

使用道具 舉報

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-7-20 18:05 , Processed in 0.071916 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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