;;;
( Y: U/ _2 [( a+ c* b8 h; ~;;; Add an END to UNDO and return to initial state.
& }& ^5 {; j, Z; c! o! g+ u/ W;;;4 I: h0 x* D6 |+ q) t
(defun ai_undo_pop()
( b% b+ U! e/ d) d% R5 A/ c, w2 S1 L (ai_sysvar '("cmdecho" . 0))( t( h1 J( O' u, Y
(cond - t5 W, A6 S0 f. D! l0 O! U
((and (= 1 (logand undo_init 1)) ; enabled" x8 W$ ?5 G! o: Q
(/= 2 (logand undo_init 2)) ; not ONE (ie ALL is ON)
+ j$ S) P$ i6 A+ Y& l& j1 p# `$ t (/= 8 (logand undo_init 8)) ; no GROUP active
' p3 ~/ w# W9 u# Z- O0 J$ ^" o )
& T' \* e% T. |6 F; y1 g$ P; l9 a (command "_.undo" "_end")8 T: ^ m0 _' W% C5 ~* }
)
9 c! M+ D; E" n @* _ (T)0 ~ v$ V1 t; ~( H
) $ X& Q# B- z4 {7 \1 H4 x1 q
;; If it has been forced off, turn it back on.) e- A* l) {" [
(if (= 4 (logand undo_init 4))4 }% _5 d5 ]8 ]! `' N( p( x
(command "_.undo" "_auto" "_on"), E. y9 f& d# L$ @4 x4 o2 q
)
2 j, n2 c; y$ Z" Y% C (ai_sysvar NIL)
( J! H9 L; Y/ I3 m" p- N( J)
; K% o3 d# E8 k; ]* E; y- o( L# ]6 N' f" |! `# M4 r
;;;=== Menu Functions ======================================* F3 I2 {- x8 g# x$ r F! o
' L/ g6 B j' W4 E" r. B2 p(defun ai_rootmenus ()6 f! K" n6 B+ f; k: Y; k3 t/ W
(setq T_MENU 0)
# e& y0 B$ Q6 W; Q (menucmd "S=S")7 o( W7 |, ]# d: F- ~% o) @% n
(menucmd "S=ACAD.S")( Z$ F9 q- z9 M6 j
(princ)/ \4 |# v' }% W$ j" v
)
3 Y$ y" M* D) U2 l" o7 Y
2 v: _+ X7 Z. j" a7 S(defun c:ai_fms ( / fmsa fmsb)- h, d- p/ Q7 G, U' N# v( B3 O, t
(setq m:err *error* *error* *merr*)2 {7 @4 p! U7 z$ N- t
(ai_undo_push)
( N& Q6 G, T) M5 A (if (getvar "TILEMODE") (setvar "TILEMODE" 0)): H1 n; S# n, a7 `7 U/ q
(setq fmsa (vports) fmsb (nth 0 fmsa))1 C( a+ F9 G( f9 O3 U
(if (member 1 fmsb)1 l. ^+ }, Y+ @# S5 f
(if (> (length fmsa) 1) X7 Z* V7 [. F6 v7 K
(command "_.mspace")
/ E; Q6 y" i5 y. W) H! r' ~ (progn4 m3 v$ a/ G/ H3 ^, U: X& F
(ai_sysvar '("cmdecho" . 1))
f: O- F; P! _' I (command "_.mview")
1 q& L2 W# o+ c% z8 p! P6 y0 l (while (eq 1 (logand 1 (getvar "CMDACTIVE")))
5 I, L5 u, `. D& y0 R* K% u (command pause)2 W6 r [+ s3 m
)
0 k% s: R6 E% F (ai_sysvar NIL)% c7 t4 E4 C9 G& ^
(command "_.mspace")
0 c0 E* M |9 W8 |. m% k# M )
8 ~: j$ ~ h6 t )4 s2 c B- V$ }$ C
)8 c" X% t7 J) u/ U4 `% Q
(ai_undo_pop)! n! C% X/ C* T* ?* C* x) ]
(setq *error* m:err m:err nil)
3 R" H1 u" J) J (princ)
/ x3 K) w1 j! D, K)
) d, g( N( L* B" M6 y' L9 d$ g. {0 y; v/ }
(defun ai_onoff (var), _, Z& |) U) G2 ]/ O- ^2 U0 \
(setvar var (abs (1- (getvar var))))9 Z1 y$ a* p: G; A$ F
(princ)
6 X6 m0 z; T+ t! j" T( ^7 w& H3 ?)
% C' J: h3 W2 ~; s$ g' ]$ }& |) W3 @. k) Q
;;; go to paper space
; F! Y- w& ]/ F5 [& ^(defun c:ai_pspace (); J2 U7 c9 Z, B9 q3 s( @
(ai_undo_push)& i6 \% r. m. k
(if (/= 0 (getvar "tilemode"))6 @ b0 L; R% i" X
(command "_.tilemode" 0)
, x8 w- R% V) B )9 r0 p8 M7 ~8 X( e6 _3 B
(if (/= 1 (getvar "cvport")); s6 A# H" j8 T9 P s! ^
(command "_.pspace")
5 t4 {; S- l1 ?2 R )
9 h5 E( M, p3 O! F% U (ai_undo_pop)5 R* M% f) j K8 G) c
(princ)& t7 I9 O" A+ V; p5 w3 |# I
)
) U% K- X9 v( `- w, b) Y
8 @5 p" L6 D* _# B. \;;; go to tilemode 1! y/ P' ~" C8 p1 A4 ?; o
(defun c:ai_tilemode1 ()
4 n5 W) w. H, |4 j. p- v (ai_undo_push)
3 J( n! Q. }0 [% g( { (if (/= 1 (getvar "tilemode"))& V: a- k7 E. a2 }% P6 U0 S% S( ` A
(command "_.tilemode" 1)
. v) t3 X/ _: X% Z1 F& Y# D0 T* y ): U5 `7 s' e$ @# }5 z$ C
(ai_undo_pop)
* B# w; f8 x. M/ P! J7 T (princ)
. s5 q6 P! o9 h)
: r9 r7 z; H. V
1 F w8 J$ ~9 i' K `8 W;;; Pop menu Draw/ Dim/ Align Text/ Centered$ W8 l0 ?2 w7 Z0 X% f. p8 j
;;; Toolbar Dimensions/ Align Text/ Centered! ^3 J, v) P6 j% v: [
$ |" M: ` {: p(defun ai_dim_cen (/ ai_sysvar ai_dim_ss)9 T. Z( r! x. H" d/ `( g6 p
(setq ai_sysvar (getvar "cmdecho"))/ X) A% W5 |. Y0 k* h, P: |
(setvar "cmdecho" 0)* }, D9 U) p$ L3 }
(cond G3 R, \4 g m' `; [- ]$ G
((setq ai_dim_ss (ssget "_P" '((0 . "DIMENSION"))))4 w7 `5 \) K2 Y. s& A' R) J
(command "_.dimoverride" "_dimjust" 0 "" ai_dim_ss "" - i7 }1 l6 m9 V$ w" x, X5 o4 i
"_.dimtedit" ai_dim_ss "_h"); c' {" G" E/ Y1 o0 {% ~
)
+ ?" ?2 B6 S/ E& c0 @ (T nil)" b4 e! Y1 t" w. x, @: N
)
# T+ |3 n, i2 I# V- M: `' |7 P7 H (setvar "cmdecho" ai_sysvar)7 C* i9 \4 h* H) P2 B6 Z% |1 i
(princ)
8 M2 p) @$ A+ o* Z# Q8 k7 O)4 ~. g+ N) _5 e! f2 l) l
2 \# p6 \% I) p;;; Shortcut menu for Dimension Text Above * x0 u8 K' k. u" E) k3 T# ?
% _+ s5 S: n; y) s' D(defun c:ai_dim_textabove (/ ss)
7 W. _8 z6 z! Z* m/ h (ai_sysvar '("cmdecho" . 0)): E5 _# _% Y5 g, S7 z9 c# t7 r1 L
(if (setq ss (ssget "_I"))! w) A& ~2 X4 v, Y
(command "_.dimoverride" "_dimtad" 3 "" ss "")
) F t9 ^4 D9 f4 j* F; w m (if (setq ss (ssget))
0 n! D/ \5 t5 { (command "_.dimoverride" "_dimtad" 3 "" ss "")
3 P/ ], S' g3 w$ ?1 v$ ]- ^2 v )
* E9 ]1 ^8 Q5 M- l )
5 C" h* @% Y0 l4 I8 r' P0 n (ai_sysvar NIL)
8 R' O/ x: Z4 n (princ)$ D4 b# Q7 ^6 x+ j! @$ a; E) m
)
/ Y4 ^ W1 J8 q8 E0 G1 z) D) s- g" M. s& _
;;; Shortcut menu for Dimension Text Center # o) [1 k% B0 q/ m9 B
; [# S4 X) {" P
(defun c:ai_dim_textcenter (/ ss)
5 }9 L+ A! q2 u7 M& z8 p. ? (ai_sysvar '("cmdecho" . 0)), n* A- Z2 V" T6 e% i/ b+ l3 K
(if (setq ss (ssget "_I"))* \' R6 n; z- U* g- q! s( V
(command "_.dimoverride" "_dimtad" 0 "" ss "")5 h- O4 C: }, |/ Y' E2 j: O
(if (setq ss (ssget))1 V4 f/ V3 d1 ]9 Q" r+ e
(command "_.dimoverride" "_dimtad" 0 "" ss "") 1 A& H6 Y' e) S4 b+ g7 U
)
. {, e0 C& }7 I7 c+ g )
8 t ~% i, \# f9 x (ai_sysvar NIL), ^3 }5 f- v& g2 p
(princ)" ^1 t: |: m! O6 p
)
1 ]2 J3 g8 `% T4 c" l- w" R8 C8 N5 p2 o7 Z
;;; Shortcut menu for Dimension Text Home
( G$ A3 {' ~8 E$ ^
+ B5 o; V) d' ?6 X3 Q- x2 s' m. a(defun c:ai_dim_texthome (/ ss)
, Y. _3 b8 n3 [& X" m. r2 j (ai_sysvar '("cmdecho" . 0))$ P2 I9 H) v. U# F6 Z
(if (setq ss (ssget "_I"))- |2 h: q, o, ]7 B0 A6 U' P
(command "_.dimedit" "_h")
+ H. Y' O' }/ K& Q6 I (if (setq ss (ssget))
3 Y* A# b7 S0 h# O$ r0 b* U (command "_.dimedit" "_h" ss)
- n! m, w% f5 G9 h3 Z )
% Q0 E2 [" `5 m, Q1 ~, X )4 m+ I7 @% `8 I! N$ c! G' j: f: {% [
(ai_sysvar NIL)
2 [5 P6 b. ]; Y0 ^8 l (princ)
# o* [) r' f" O+ p+ a+ U4 W( ])& T' ?& q$ x2 e3 H. X' N* j& Q$ n
5 V l- }. _! i C9 n
" @/ K7 i# h- v- a9 r5 w$ A, ` z& Y;;; Screen menu item for CIRCLE TaTaTan option.0 {9 S& K) e6 b, g9 }
;;; first, get points on entities
: ]) ` d6 T9 c( }" Z(defun ai_circtanstart()
7 \$ n' ]$ Y4 A$ k6 I7 ? (setq m:err *error* *error* *merr*)
6 v7 d# x4 {7 o) J4 o- \ (ai_sysvar
" v$ l! H: o) L, g I (list '("cmdecho" . 0)
~7 P- j$ R6 T, d( R! g( i ;; make sure _tan pick for CIRCLE gets same entity
2 e+ N# Z6 k, L; i (cons "aperture" (getvar "pickbox"))+ F2 ~2 w8 c* V# S) W7 \6 o* k
)
) l1 ~3 N' R: M! [& L) [ E$ a# Z )
% \0 N0 V7 b6 _/ D1 I3 Q ;; prompts are the same as CIRCLE/TTR command option8 W* s O+ D6 z) y6 X# U
(setq pt1 (ai_entsnap "\n输入切点定义: " nil))
3 ~: X' T5 t; X- N1 b (setq pt2 (ai_entsnap "\n输入第二个切点的定义: " nil))
. `7 h% d# N1 I/ P L (setq pt3 (ai_entsnap "\n输入第三个切点的定义: " nil))
: \5 i/ }+ R4 U, i2 x1 ~)
; G; Z8 R4 y( v X P* U3 l' e B;;; Command-line version
, V' m, ^- r, f ^6 t(defun c:ai_circtan (/ pt1 pt2 pt3)3 ~( G. V# z/ A
(ai_circtanstart)
- A; R( S {6 d8 V; H3 \) q. r6 w% a% _8 q, ]
(ai_sysvar '("osmode" . 256))
8 U8 w" v+ [* _& a$ g7 J (command "_.circle" "_3p" "_tan" pt1 "_tan" pt2 "_tan" pt3)
% A# J, ~3 } u 9 m- p6 [$ B" c4 m+ G. K
(ai_sysvar nil)
% o1 l# R, d, N1 q6 ^, R/ h (setq *error* m:err m:err nil)7 b. k! P+ i1 ?$ d/ m
(princ)
$ {2 I- O2 {; e7 @5 o)5 X& \) F0 K: k; B- P) G' J
;;; Use this if CMDNAMES == CIRCLE0 z2 }: S L z* j8 ^; A6 K$ l" e
(defun ai_circtan (/ pt1 pt2 pt3)
j" n( |. v1 |' j7 Y (ai_circtanstart)
0 J7 y5 H' n% _9 G+ A* n
: |, H4 M, C U t3 T (ai_sysvar '("osmode" . 256))
. I4 N. ]7 \$ Q; Q! ` (command "_3p" pt1 pt2 pt3)- v% ^ x9 W+ D* R" s
' n7 T4 L I( ?) ?( t
(ai_sysvar nil)1 b! G) T$ ]7 y; V% U
(setq *error* m:err m:err nil)' e& G0 K# u1 r* ^
(princ)! {8 B" j" c8 K, e
). y2 t! ]: U7 q7 A; B3 ^! r2 B- ]
% g2 T2 K6 u8 l. n% M( |7 x0 ?
d/ ~# }1 C$ J4 q P% f( R1 E$ y
; w; {3 D" p, E& ^6 T;;;=== Make Object's Layer Current =============================4 F3 q! B+ ?$ C
1 x" S. z: G: |) B;; Makes the layer of the selected object current. If there is one
# G$ T9 z+ l6 t2 K9 n/ P2 M;; object in the pickfirst set, it's layer is made current without7 [" H* ? p4 p& Y! A
;; prompting for an object. Else a prompt is issued.
]7 V# n: y4 J(defun c:ai_molc(/ old_error end_undo old_cmdecho set1 ent undo_control)9 y7 N* E; D; s4 I) L b8 f% r( n
5 i5 N5 T1 K( @# Z
;; Simple error handling.2 J3 t$ E) e! W8 P
(defun molc_error (s)
5 H: }7 M/ F" f ;; Reset error handling.: A% k/ D1 ?( Y/ G2 B- K
(if old_error (setq *error* old_error))
! u( F- C% M1 C/ }. H \6 u/ ~ W ;; End undo if we started one.
5 |) [3 L0 d) K, j6 K+ F (if (eq end_undo 1) (command "_.undo" "_end"))6 u. C# d2 k7 [' {; m
;; Reset command echo, f& q8 F3 y; Y: E4 N9 O4 I6 V
(if old_cmdecho (setvar "cmdecho" old_cmdecho)); z! J* M# x1 L0 E
;; Silent exit.
9 c9 D& F" `& @1 a5 d- g; c* @' D6 ] (princ)0 V/ q1 M( {8 w; t+ n2 S0 f
)9 l6 a1 U2 L. j+ s7 ~
8 f* _4 M0 ~4 p ;; Save current error function.
P# z! ]; T' @' D3 N, j (setq old_error *error*) r; ]* N0 S w, w/ A. x; c
& y" H1 f+ w6 B ;; Set error handling to molc's error function.
, x! r* N8 G: P2 v5 w3 a (setq *error* molc_error)2 Q& I$ l( |4 Q' M
h! z5 ~6 I' O5 _* A3 L- y ;; Save cmdecho setting.
# O/ W* s$ m, b1 _ (setq old_cmdecho (getvar "cmdecho"))+ u" O2 p8 W, K1 m. g: V( {( K4 y$ P
" ~9 D, T. k& B$ d0 A% C! l! w
;; Turn off cmdecho( G; w2 s6 p2 q0 h
(setvar "cmdecho" 0)
_8 g$ V, { e6 ^+ O5 i. p0 B- s
1 P% G& G& ~1 y9 }' e* o ;; If Pickfirst is on and the selction set contains
6 g+ K: r; W0 H6 G4 d( O1 w ;; one object, then use it, else prompt for one.0 v( R2 A8 Y- |. F3 B$ }) T2 J+ \# H
(if (and (eq 1 (logand 1 (getvar "pickfirst")))
% m: U. d- K! H( \& U (setq set1 (ssget "_i"))
4 U& [/ j, {1 g. S0 F5 t (eq 1 (sslength set1))( b- x, K; Q! l1 K/ S& f
)
$ q" ]5 J, {5 E- P5 s9 K: x( o (progn ; f+ U; V" P+ r4 E8 M9 L
(setq ent (entget (ssname set1 0))) ' i* z8 `( v/ Q2 u
(sssetfirst nil nil)
" ~, D* w! P" B )3 N( H, \4 d! |; h
(progn
* X( W" @ E; ^1 T# r+ l" d) i5 } (sssetfirst nil nil): z; R" V/ P _' O; B
(setq ent (entget (car (entsel "\n选择将使其图层成为当前图层的对象: "))))/ M/ a! H7 b8 K
)) |% m S( J1 S1 W% }
)" y5 g# W; \0 i8 |' G4 G, C2 W
4 |, g# b8 Y& x9 z. a5 A/ y ;; Get undo setting.
; S8 b# I# a& t+ ^1 q (setq undo_control (getvar "undoctl"))
. _2 z* ?3 u4 T+ T- P . X" b8 m% w7 W* @2 Q" S2 u& _0 u
;; Initialize flag to to end undo.9 G2 m- M& d8 Y7 a, X3 t5 M r- w
(setq end_undo 0)
3 O9 N3 m" j; q) g+ `, d 0 n# s( H! y- t/ J5 u) v/ s) _2 t& {
;; Begin Undo group if need be.
! W' ^( }. y- u8 Z (if (and (= 1 (logand 1 undo_control)) ; undo on
8 r1 i2 ?5 B8 k- x (/= 2 (logand 2 undo_control)) ; not single undo, H `# U; g9 B6 _
(/= 8 (logand 8 undo_control)) ; no active group! ]! H+ a/ R! i% K+ \
)
+ Y7 _* g5 v- [+ }0 K (progn + ~$ \9 h6 Y$ o5 x$ z8 c$ r/ Q
;; Begin a new one
1 N8 S: O/ ?, o7 ~4 c4 { (command "_.undo" "_begin")9 y0 ]; l* ^* }7 F0 r3 P: m+ j
;; Set flag so that we know to end undo.5 a9 ~& K3 p( N/ [% I N
(setq end_undo 1)
7 c( k \* t. Z3 j! G )
3 N$ o$ N4 G6 G8 y )% J# i5 u# W9 L* t
4 @0 ? v# D9 P! i3 ~: S! Z
;; Make object's layer current.1 }. e* ^" \. i: ^! J- y
(setvar "clayer" (cdr (assoc '8 ent)))) i: L/ \8 M; J( r
* F+ w* t) j' P. [
;; Print message) P8 F; A. ~ r1 ~
(princ (strcat "\n" (getvar "clayer") " 现在是当前图层。"))
$ y" z8 H: e5 L& ?2 H
2 _6 l. h4 F! H, Q8 X+ U. n/ j ;; Undo end
9 s! Q7 |( j7 d" E1 U7 K' N (if (eq 1 end_undo)/ M+ T6 T, C& E" B' D
(command "_.undo" "_end"), Q; m3 T7 X- k! g. _1 j3 E
)9 E0 i( P) A4 a2 Z& u9 w+ t
- j. X8 I: ]" H: R# } ;; Turn on cmdecho5 m; g9 j5 s, T& v2 m' M5 }
(setvar "cmdecho" old_cmdecho); y6 O7 E7 z/ {/ ]5 L
7 E/ d5 K v/ d, I3 P ;; Reset error function.0 p! y& t! Y6 P: ~
(setq *error* old_error)
! m% }/ v, Q6 k2 C
, A- E1 e! k( g: h$ J; W ;; Silent exit.6 Y. U) J6 Q/ i# \) |
(princ)
& P3 t3 u, a1 w( w6 C8 |)7 m/ n3 w4 Z2 y- N
# A7 ], h' g, ~$ y1 [4 W# R: z& R;;; Shortcut menu Deselect All item.! Q9 p; G. O) U: f# U8 I/ W, K
1 {5 W. ^, V" F/ w# z
(defun ai_deselect ()& r9 c- ~: i) d
(if (= (getvar "cmdecho") 0) ;start if
& S, T7 l8 Q( [* `& W! N1 B (command "_.select" "_r" "_all" "")
5 c0 S4 u* {" F) z. { (progn ;start progn for cmdecho 1% K9 q' ^0 l3 X
(setvar "cmdecho" 0)5 T% y$ V$ T4 {. m, A0 `
(command "_.select" "_r" "_all" "")
0 ~# Q m; ~% {% Q (setvar "cmdecho" 1)
- o% L3 B6 V4 ?& ^- s. A ) ;end progn for cmdecho 1$ w& l1 T7 S2 W) M6 v/ L
) ;end if
& f' T( y7 v4 ~; R8 Q6 [ (terpri)
8 I8 }! \9 Q6 x% }) S1 z (prompt "所有对象都已取消选择"), |+ t' m+ H: ?; u$ F6 l
(princ)
' g, e. H6 J* }' l, K)
0 t& }4 D$ j0 s* C/ Y9 H
8 p+ x' [, _6 x5 W6 e+ l, x, f;;;
. X p2 l7 S; J: h;;; Enable Draworder to be called from a menu
, S5 X/ m! x# y; @& o+ N;;; Checks for Pickfirst selected objects( I7 K1 \5 O7 O- K3 m/ Z" h+ G" D
;;;
6 s2 ~! M6 @* Y
, ]7 M% V3 n% ^3 Z; z% W! Z(defun ai_draworder (option / ss )0 _" W3 j& I# y, A8 \% V
- Y$ E# B* h+ H' P) w (setq m:err *error* *error* *merr*)* x6 V5 R1 }. d$ q
(ai_sysvar '("cmdecho" . 0))5 Y# ` z3 I. X. P
9 Q2 u4 t8 s' I5 D* i/ q
(if (setq ss (ssget "_I"))- Y! J/ A( S' B( U5 ~: z8 N3 E
(command "_.draworder" option)
?* \( B% `+ L5 B2 Q( I (if (setq ss (ssget))
% @2 C5 n) Q7 F4 A4 g (command "_.draworder" ss "" option)/ V @+ k/ l" E& b: ^
)
`5 n* b' b1 j )# z1 x$ x0 F$ m1 {
(ai_sysvar NIL)
& B* \9 n7 L. J) ]" L (setq *error* m:err m:err nil)+ z; u5 r9 {; i$ N; a+ d
) L8 j( N$ f7 [/ s7 J0 X: c (princ)
* x' p' b0 Y; H7 a)8 R3 u: i' U" |" b' k# M5 d
" W1 @6 W; |$ u5 |4 V7 z
(defun c:vlisp (): P# N. }5 J l5 f) [
(if (/= nil c:vlide) (c:vlide)) `. d: k6 k1 E( U
)% F% k: Y9 G0 |" i4 a5 p$ e7 y$ Q t" _
6 A7 [% t* v; V2 h {; s9 A(princ "已加载。")
9 l9 n# s. @+ R. _/ ^) u- f8 \(princ) |