;;;
6 ?3 m K' N1 }( R1 x;;; Add an END to UNDO and return to initial state.; z) `3 p9 H; V _6 Y- b6 v5 E$ O
;;;, @1 q! c4 P, I: f- X- e- v# l
(defun ai_undo_pop()* P: z+ d W0 ?) V5 @. v
(ai_sysvar '("cmdecho" . 0))
! k. }+ G4 e' k2 f (cond ) C$ p& `* o( t& u: C
((and (= 1 (logand undo_init 1)) ; enabled0 w( G* \2 g5 n b+ P3 K4 C
(/= 2 (logand undo_init 2)) ; not ONE (ie ALL is ON)7 j p$ |, v+ E& y* J2 [
(/= 8 (logand undo_init 8)) ; no GROUP active/ x5 R+ K& Q7 y& E4 r% t" f
)6 R b( Q8 r; n4 W
(command "_.undo" "_end")2 N% y: d. x X5 v- m
); [3 m2 O2 x; |8 I* l( A1 U8 P
(T)
' c" J( G$ } I- Z/ F )
( w$ ~3 Q9 [" o) X# _& G/ f ;; If it has been forced off, turn it back on.
4 A0 [' \; N1 q0 e5 w5 { (if (= 4 (logand undo_init 4))
/ A ?0 N, u; j6 O (command "_.undo" "_auto" "_on")
# b( W1 x' }" Z )
' ?6 T! U/ }' F% h( f! l& { w (ai_sysvar NIL), O$ J: G- p2 N
)! z. }# F/ {1 z* ]& c0 d
6 w) r( {( l, [. W# O! \2 g& s
;;;=== Menu Functions ======================================1 |4 ?, H T" L; s- O5 q: ?* C% h8 O
( z, V, a% t3 K6 \, U(defun ai_rootmenus ()
d% o/ |& Y$ f* y6 r0 V/ I6 Z" l: g (setq T_MENU 0)5 I: T) v2 B3 i. v# j$ N0 F
(menucmd "S=S")
$ S( P) u+ Z( x& g" I2 C% {* e (menucmd "S=ACAD.S")
* f* b' Z! v- c' u& d (princ)& v% e, S7 [& Y
)5 P6 E* l' o# V) d3 Z
+ A1 o6 b! K2 t4 s5 [; U) A(defun c:ai_fms ( / fmsa fmsb); j( \. w% [: x" r
(setq m:err *error* *error* *merr*)
/ g' k. y$ Y1 x3 a (ai_undo_push)/ @$ D6 B. F0 }0 _ z) h4 B) N
(if (getvar "TILEMODE") (setvar "TILEMODE" 0))
# X% h6 p; r0 p/ s J (setq fmsa (vports) fmsb (nth 0 fmsa))
7 N* |! T' r% T( i1 w (if (member 1 fmsb)
# b* g r( e! A! v0 k: Q, V! Q1 z (if (> (length fmsa) 1)+ B6 K7 w8 @" G' {: w ^
(command "_.mspace")
$ F- i7 Z, {5 e5 ^5 S (progn: r# \1 r3 L- ]8 y
(ai_sysvar '("cmdecho" . 1))5 P% C+ Q: o" i+ q) g! q
(command "_.mview")
F+ u& M% b& c$ C3 x (while (eq 1 (logand 1 (getvar "CMDACTIVE")))
8 f/ r# M. I7 e (command pause)
) `$ @, K/ g* m8 X )
2 Q) K+ X/ T6 W) ]. T' I7 R4 e (ai_sysvar NIL)0 I# O+ I6 `) W; Z6 l, ?
(command "_.mspace")4 D5 V( C. s4 t% v
)# E9 V' `0 z4 \ g
)9 @' K! j- d* u ]8 V
)7 _3 ^# C6 U3 S. g4 u( G9 H& R/ P
(ai_undo_pop)
& j7 K+ v; @, L9 P' h/ w (setq *error* m:err m:err nil). r, {8 W/ E# }# _" m5 p# T
(princ)
4 r+ l' s; V) G5 ?& ])
, F5 j. D- W% l4 p: i5 g4 }; Y
7 j: X& c# U7 d0 M% t. X(defun ai_onoff (var)
- I( w) u* P/ e, _' i3 P$ j* X (setvar var (abs (1- (getvar var))))8 Z1 S- L! U& `3 N# q6 x
(princ)
" R: y" }: K R: `)* s5 v8 i4 t2 W! r6 e9 U
5 ]# f$ c, J4 X6 V* l6 x
;;; go to paper space
# d8 B( q- m* B1 V6 h(defun c:ai_pspace ()( c. ~1 ~. h* @# V4 a0 V8 u+ }: G
(ai_undo_push)) \% H* @% L/ j S( m: x& |
(if (/= 0 (getvar "tilemode"))
' M1 P; S$ y$ @( M (command "_.tilemode" 0)1 h7 q& [8 a- ?) d- c
)
- A' I/ d/ ?, O" Y5 f3 q% w (if (/= 1 (getvar "cvport"))+ z# Z* a; O1 a) h
(command "_.pspace")
, E; }0 K/ R5 _ r )! N; ?( I* n" l
(ai_undo_pop)
: D0 K" U0 w' }7 E (princ)# H/ H( m# q. F( Q! I! N+ X J5 |# j
)
0 O) l7 h& |, o8 l6 Z
( [2 ?2 P- U" g+ o3 a;;; go to tilemode 1- Y* [+ m/ g3 D. E0 h. ~
(defun c:ai_tilemode1 ()' r2 ]$ `( h+ S8 o6 t3 E
(ai_undo_push)2 @: G; O" d, N- b1 J) ?: C
(if (/= 1 (getvar "tilemode"))6 }1 l8 [( z" Z
(command "_.tilemode" 1) Y7 [3 P; r# K( C9 z4 G& M3 K4 z" K, L
); \/ T9 ?+ ?) D! ]* B6 I' d/ X
(ai_undo_pop)) m9 r1 C. ?* O' t( c
(princ): ^! T6 X" p2 j H
)
+ b/ C$ M4 v" Q) L2 B: N
( p+ T. R% W9 F4 z; t;;; Pop menu Draw/ Dim/ Align Text/ Centered
/ r$ i3 j8 K, c) u; Y;;; Toolbar Dimensions/ Align Text/ Centered9 ], V6 Y9 r6 M# a
, W" z+ D- D& ~0 a/ D9 Y
(defun ai_dim_cen (/ ai_sysvar ai_dim_ss)
- S* b G1 M2 j) M& g- o4 E4 K9 O6 x (setq ai_sysvar (getvar "cmdecho"))
9 ]5 d' J" P/ J4 ]: Q (setvar "cmdecho" 0)
( @) |& B) _3 T( n2 D& ? (cond
# d* v, @$ Q o; _$ l* p9 p4 M ((setq ai_dim_ss (ssget "_P" '((0 . "DIMENSION"))))
) c c3 Z- r# ?, B: }! w+ a (command "_.dimoverride" "_dimjust" 0 "" ai_dim_ss ""
8 Q; P: [3 M v "_.dimtedit" ai_dim_ss "_h")+ @0 \/ S3 S% ~' q" b
)2 n9 I5 K) N, Q' j' h9 R8 x! E
(T nil)
; B7 n4 t& m1 p )
- o3 a; s- C) x4 h) L# A+ U4 Y (setvar "cmdecho" ai_sysvar)
& d/ O, L1 {3 k (princ)
7 K+ x" d, K, I q# X)" L; O& }1 q* Y5 w9 O+ Z
1 V) u' D. `4 Q! z5 X; K
;;; Shortcut menu for Dimension Text Above
9 X" r" K. o8 _1 X2 x9 L% ~" {4 {. q
6 h# P+ J2 x/ @( z& O! s(defun c:ai_dim_textabove (/ ss)
+ g" b. E( x4 ]- [5 D# ~3 c (ai_sysvar '("cmdecho" . 0))
1 n$ H& w, Q5 Y( g (if (setq ss (ssget "_I"))
; p8 s g% _4 K( s* M (command "_.dimoverride" "_dimtad" 3 "" ss "")
F7 `, |1 X* N( ]- i (if (setq ss (ssget))5 s0 v# E) H9 v6 M
(command "_.dimoverride" "_dimtad" 3 "" ss "")
. n# {4 w9 C6 ~4 k4 u O' k )
+ N+ B: w8 x2 t& v3 C V )
1 a6 d( O' u+ o# d* L2 A: y (ai_sysvar NIL)7 A/ W; Y4 n" ]% i' w5 T
(princ)9 {; P$ E+ _# v, j" I
)- F, |) p' G' T' ]( M, _" j
% k8 h R. ?0 a2 M7 K8 F8 k" {) ^! @;;; Shortcut menu for Dimension Text Center
8 t$ t" t1 M1 m8 r; q/ z: S1 |& O8 W' M1 c/ j; {- A
(defun c:ai_dim_textcenter (/ ss)9 h: K# L# ?1 v* ^+ B6 x
(ai_sysvar '("cmdecho" . 0))
* |9 O/ u, j! R$ d! e2 R# S* } (if (setq ss (ssget "_I"))' ]$ B$ x3 H) c# Q% ^* W; V% D. w
(command "_.dimoverride" "_dimtad" 0 "" ss ""). Y, M, P$ _5 I7 d' }5 L, a
(if (setq ss (ssget))0 z, p1 W+ @3 S3 v% D2 Y
(command "_.dimoverride" "_dimtad" 0 "" ss "") , H9 O0 f7 `# d( ^
)) {5 n: {# U' p N3 w
)" Q7 R# O; I2 a: E) T
(ai_sysvar NIL)
& ~; J* R c* c- H" K; y, o (princ)6 Y8 R4 L; v8 ]1 k
)
! B" W$ G" ?: q. L z9 P6 U0 B
; E2 k+ q$ I' Y* k1 V;;; Shortcut menu for Dimension Text Home
. i( z& D8 n/ n4 b1 a! f1 ]( Y+ \( R' ? s3 `
(defun c:ai_dim_texthome (/ ss); v) F# e+ _. _/ d2 D% L* d( G: D
(ai_sysvar '("cmdecho" . 0))
j7 d2 i4 A& J! |6 M5 r; B+ [% E9 B (if (setq ss (ssget "_I"))7 f. _' L. ^: U; `* ?
(command "_.dimedit" "_h")
( k3 J( |7 D0 z8 o" P8 g (if (setq ss (ssget))
% {7 r: r- A# ?+ l (command "_.dimedit" "_h" ss)
6 q) x% F5 |- x% Y) d$ J+ x' D )/ V* d2 h2 _+ Z6 L5 y: o$ C
)8 O, y7 _- h! ~9 T% i# m" S
(ai_sysvar NIL). ?/ m1 c5 @# R
(princ). a) M- w* A! l1 }, i$ N J) ~
)
1 {& t6 {- O4 C
1 g& g5 h: N' y6 j9 U# G' Q
# U, u% F) @+ b& [;;; Screen menu item for CIRCLE TaTaTan option.
) c8 V7 v$ h- E- x3 \ O* m;;; first, get points on entities0 z! M# ]5 f) }- j" |' U, R# J7 D: g* L' i
(defun ai_circtanstart()
: A" n' O0 {! U; G, B4 k (setq m:err *error* *error* *merr*)
/ S% B: b8 j& C2 G (ai_sysvar
3 j0 O4 c9 n M) _3 i+ `$ g (list '("cmdecho" . 0)
0 {! k4 O: K; P: p3 v ;; make sure _tan pick for CIRCLE gets same entity4 \# [: ~6 E- e; X4 P! w& o
(cons "aperture" (getvar "pickbox"))
& b+ d; r. @0 Q5 i$ V8 t )
4 {1 V5 M$ ~8 d" ?- q( ] )$ `7 L; Y% n1 L
;; prompts are the same as CIRCLE/TTR command option. \* S/ ~6 X8 x& z
(setq pt1 (ai_entsnap "\n输入切点定义: " nil))8 D N4 ]; `; Q1 D( }7 O
(setq pt2 (ai_entsnap "\n输入第二个切点的定义: " nil))
. ]; F( @' Z6 G1 n, J (setq pt3 (ai_entsnap "\n输入第三个切点的定义: " nil))' S9 ?/ _+ b; A5 F" d4 x" _3 G% o* `
)
' }! G i! G: Q" U D+ J! v: J;;; Command-line version' Y! m3 t5 J& N# M( D0 i9 G+ V6 G
(defun c:ai_circtan (/ pt1 pt2 pt3) R' s# @" t8 J: R. |$ B9 I
(ai_circtanstart)
( U m& O4 S' N1 ?1 { ^2 k4 w* Q7 v# E+ V
(ai_sysvar '("osmode" . 256)). l# d9 B8 h4 n# s5 O
(command "_.circle" "_3p" "_tan" pt1 "_tan" pt2 "_tan" pt3)
& E: J* Y" y5 R' n7 K $ {. Y* Y7 i0 \
(ai_sysvar nil)
2 X" s. y7 a; F* b; T: S; e (setq *error* m:err m:err nil)) K5 ]+ |. r4 N" ^5 J
(princ)
+ w0 `( U" X# Z)
/ {6 a- U. |' X2 o7 I8 };;; Use this if CMDNAMES == CIRCLE/ q. g2 Q* j3 |1 _5 @
(defun ai_circtan (/ pt1 pt2 pt3)
& c: y; Q- d4 l9 b. k0 Y f k& n (ai_circtanstart)" f0 Y8 t8 v2 |
3 R- \' h m# @ (ai_sysvar '("osmode" . 256))# T0 _/ ?& r- R" R( M; j
(command "_3p" pt1 pt2 pt3)& b: f4 `( i8 @
5 A* M* C; C5 L3 `* E (ai_sysvar nil)! n/ V( u# e2 D) V* B
(setq *error* m:err m:err nil)1 s) d. d$ C* S6 P8 |
(princ)1 u3 b4 ^ a# S. d: o
)
, k; ^+ x) L8 |& [! A4 x+ h+ d3 e5 F( k$ y* _$ X* M( \, ~
# A; P2 x* w3 k& H/ U+ ^# k; @" T8 p, S0 y% E, `
;;;=== Make Object's Layer Current =============================) j2 ^2 I1 s! x' e+ W
% u# G) d) @2 }0 q3 i
;; Makes the layer of the selected object current. If there is one
8 Y; Z; X+ ]. a9 k: L;; object in the pickfirst set, it's layer is made current without. P: g& X% Q# j6 i8 `/ D
;; prompting for an object. Else a prompt is issued.
4 i3 C. o+ o. t" H6 U# n( q3 J(defun c:ai_molc(/ old_error end_undo old_cmdecho set1 ent undo_control)1 w( i& [* y0 d: Q- g' g) ?
% b& O2 A/ I" g3 n$ b- x O
;; Simple error handling.
0 J! R P; g2 [% h. o$ N (defun molc_error (s)* I% C# H) B, X ?* p( q9 [
;; Reset error handling.: R3 ]( Q2 Z% s: E4 |
(if old_error (setq *error* old_error))
3 a5 F! F: M% P. g! m1 ~3 w6 w6 Q ;; End undo if we started one.
0 m8 @" K/ ^) L; U (if (eq end_undo 1) (command "_.undo" "_end"))
' }3 I7 b+ b2 h ;; Reset command echo
6 z4 C; _( k8 P" h; n! h: c3 a/ J (if old_cmdecho (setvar "cmdecho" old_cmdecho))" k+ \, j' ^' |& {5 n4 }
;; Silent exit.
& @) f8 ~ O1 z3 ^; Y (princ)
" m4 F ~' O1 j )
; U* W( |. n4 T: |: S) f
# ?. B2 W8 N# k8 R, N8 ] ;; Save current error function.
/ _" m9 x: B8 V0 x. v# g2 A (setq old_error *error*)+ I2 B, n2 M' M
4 N y, Z/ M: p/ ^/ W$ K) P ;; Set error handling to molc's error function.6 D. i: q6 N Q, i/ `+ F( X
(setq *error* molc_error)
+ N" P6 G m$ u6 l2 e2 y 8 c" h3 |+ j! p; Q3 X& T* T
;; Save cmdecho setting.
' x1 z7 X# `, v% ?; E6 I8 ] (setq old_cmdecho (getvar "cmdecho"))& R& \0 k8 ], Y9 b, i" r
5 `- O4 A( g1 v& S; S4 U8 j
;; Turn off cmdecho) _% @6 D& C5 H- g9 {5 L
(setvar "cmdecho" 0). `2 z% r' u p: B" [
2 F% |* b- ~0 t R4 I
;; If Pickfirst is on and the selction set contains - b6 Y: S* p6 a; @
;; one object, then use it, else prompt for one.2 W* L: l9 T/ b$ f; x6 X9 }, X% T
(if (and (eq 1 (logand 1 (getvar "pickfirst")))
0 Y P( C) h2 w5 P+ e (setq set1 (ssget "_i"))3 P. z0 C8 P3 y
(eq 1 (sslength set1))0 N5 Y* U. w. B; o6 m8 \5 f0 K
)
' f+ |/ G1 r7 k+ D4 h0 z W9 J5 u (progn
, i2 m- k7 D$ [" o (setq ent (entget (ssname set1 0)))
6 Y+ C4 O( I0 @5 t a+ K! b+ K, u (sssetfirst nil nil)) n7 q3 l# m1 k! E- }0 p
), i7 H4 d# ~8 \% Q3 Z5 J+ }, |
(progn 7 f- \* T, c: e& M' D5 d
(sssetfirst nil nil)4 {+ g# f" e s" j# q3 I
(setq ent (entget (car (entsel "\n选择将使其图层成为当前图层的对象: "))))3 U& [) v$ [: Q7 E5 S
)) G# o: r. S0 _9 B# V) R& Q3 \9 [
)
7 j, n) b D$ s2 W6 ]4 L7 _& W, d
! `! s k3 {! V3 o ;; Get undo setting.
0 }+ D" z" H4 @1 _$ `9 L8 c7 O (setq undo_control (getvar "undoctl"))
4 s2 K/ w8 e% r) Z, f
* H& G9 Y5 p/ L8 ?/ q ;; Initialize flag to to end undo.- G* B5 [$ B/ x" E$ Z
(setq end_undo 0)0 l* j6 h- V4 w% ]% `0 L
, `4 g3 E' ]; T, U* m, | ;; Begin Undo group if need be.
: Q: d9 D$ G3 y2 E (if (and (= 1 (logand 1 undo_control)) ; undo on: E- }4 x k0 o* a. Z) C; M
(/= 2 (logand 2 undo_control)) ; not single undo
& s- ~6 X5 e* Z% R9 i+ x& ? (/= 8 (logand 8 undo_control)) ; no active group
* T! t. r' P) k: d1 O6 ] ) G- U5 T! O, {4 {. u \
(progn ' j! Y6 o. z& T
;; Begin a new one% H9 P8 F; c. `/ p
(command "_.undo" "_begin")
" \/ X/ p# @/ V8 q5 j4 T ;; Set flag so that we know to end undo.9 r8 U; q7 O. Q/ w; H; b8 Y, P2 q
(setq end_undo 1)
5 y6 W4 f. M" Q$ Q6 t! S8 ~8 V7 J) m )
3 y* h! Q( o! e7 V% F ). B# G3 X0 i& T$ t2 j
7 @, L H8 T" S: }) Y) L ;; Make object's layer current.) ]) |" G$ `' r1 e
(setvar "clayer" (cdr (assoc '8 ent))): @! N0 b- m% i7 C+ A& Y, g5 f0 D9 `
1 U) k7 M# x" [ ;; Print message1 a! l* `; e9 ]3 N0 m- I3 C
(princ (strcat "\n" (getvar "clayer") " 现在是当前图层。"))
2 V0 O& a3 P3 [# X6 G7 N: c 5 E* {' J2 t; |
;; Undo end! l. o2 d, s/ b( z; Z% } z
(if (eq 1 end_undo)
! R! r: D, ]; Z x (command "_.undo" "_end")% t, q+ h7 j' x* k* B$ o
)
$ D4 U6 u4 }. Z B# E( g- o1 P' i
8 P, V8 W. j8 V, u) N ;; Turn on cmdecho! E6 g; I; {; d* a/ L4 M7 ]# x
(setvar "cmdecho" old_cmdecho)
: [3 K. k* r- a; @0 j# q7 T; `
) n+ }6 T, t. n3 j ;; Reset error function.- P8 D4 q7 i2 q2 p
(setq *error* old_error)/ U6 E) N9 g" z. R' b9 u n" Q
" K+ w# W0 e- P, C# r
;; Silent exit. E& ?+ k$ k4 o
(princ)' e" p# ]9 v- r
)) q2 q- |( P; Q
5 [8 z; W! a+ T7 i: n, i7 k
;;; Shortcut menu Deselect All item.+ e) n+ @6 M% E5 M" g, H! m
$ l/ x2 N. ^! `, e1 f
(defun ai_deselect ()1 V4 S/ ?. H& p$ G" X+ O1 u
(if (= (getvar "cmdecho") 0) ;start if( W- D* P8 N0 g. N5 ]
(command "_.select" "_r" "_all" "")
) g4 |# A2 ^4 _- K/ _" i (progn ;start progn for cmdecho 1
2 }3 S k) n* V6 l$ q' h (setvar "cmdecho" 0); e- s2 H- t: c1 S4 B, C' }! d' F" q
(command "_.select" "_r" "_all" "")5 X) l6 X: W' i, V8 o
(setvar "cmdecho" 1)
. I# w; P/ H: S; w0 [ ) ;end progn for cmdecho 1
9 Y; I0 N2 ~/ K3 L) }( p" [: E4 K ) ;end if
/ u: l" r; R0 Q+ M+ Q (terpri)0 X& t* `. D$ A4 t+ y; V7 E5 L
(prompt "所有对象都已取消选择")
: J) \: a$ d0 W4 } (princ)
& W# {" I: }0 l) S' v' ^' u)
& j0 V. S1 Y7 B& k8 v9 w& D2 F) Z5 g! s) ?0 ~$ u
;;;
" I# G% J. V( Q" ?, H4 O8 T) z;;; Enable Draworder to be called from a menu
1 H- @/ Q. i& e;;; Checks for Pickfirst selected objects* V, i# w/ B$ Q* N" Y. K/ n
;;;1 M! u; m& M( K3 p! z) @) J
1 E# }( l0 Q3 p
(defun ai_draworder (option / ss )
' N- x: U/ u3 V; M
3 v& y+ g2 l! W b/ d- e (setq m:err *error* *error* *merr*)# A/ z1 M( n# i: l
(ai_sysvar '("cmdecho" . 0))& P- B. o& k, J K. p: K
4 _$ \, k& v$ D: h) d3 o r (if (setq ss (ssget "_I"))
$ J3 l$ G9 U, w& Z- u7 x5 Y& _ (command "_.draworder" option)& ]/ I- n' [( @% t# }+ I, F
(if (setq ss (ssget)); R3 ?' [$ `4 C3 ]- `4 Z; I! c
(command "_.draworder" ss "" option)' G* c0 T) x" u& @. J
)
4 f, c2 q- r9 c6 R1 ^ )/ g" V: @1 G' t( Z5 A
(ai_sysvar NIL)& H+ _# N: R# N( v7 E9 C
(setq *error* m:err m:err nil)
, r- O+ V* X/ C# ^* |" B" e
# E( Y( z" }4 @2 K- \2 t# p (princ)
. Z7 y2 a) ?3 |# }! s& S) }6 })
& i( v5 l- m; a, d [% Q. f+ {2 t; m8 Z2 P, t- s" P$ F, p
(defun c:vlisp ()
0 w, r1 i4 A" {0 n (if (/= nil c:vlide) (c:vlide))
- I% l) `0 A# L, h5 t). Z) T; B* b3 Y
' i0 |- `7 I: r# @$ q(princ "已加载。"), O3 |$ A8 U. M, ~$ Y5 K
(princ) |