;;;
1 r9 ]+ N: T# ?0 i% K;;; Add an END to UNDO and return to initial state.
: @( X3 D+ ?4 i: c7 s! v0 C( r;;;" E0 R+ O9 ~( d, f1 ^# [
(defun ai_undo_pop()
7 J0 e; S9 c4 m- N, G, ?& W+ V. Z (ai_sysvar '("cmdecho" . 0))
1 y- U+ q" Z) g' _( M7 C (cond + o$ K$ l7 C* z: i- G c
((and (= 1 (logand undo_init 1)) ; enabled- l* N' k+ ~% Y$ T2 i7 C
(/= 2 (logand undo_init 2)) ; not ONE (ie ALL is ON)# `; S, H; J) E9 ?
(/= 8 (logand undo_init 8)) ; no GROUP active. v9 E# D, X E( b) r
)
( }) z/ D {! X. L+ M (command "_.undo" "_end")
* k1 g) i% s. ~( h1 H$ a )
% A7 @' K! N) @9 r (T)5 @! ~$ X/ U& T& C2 T* ]: u
)
~6 L" E3 a* n+ c0 [! Q$ D0 N7 y ;; If it has been forced off, turn it back on.
) a9 @$ i1 v6 L; F* R# K (if (= 4 (logand undo_init 4))
& t& o7 X' M, ^0 D& z) w: }7 a (command "_.undo" "_auto" "_on")
- ]0 A2 [6 d8 i9 d ) ' |, J" V8 I* `
(ai_sysvar NIL)
! k) Y+ B q% ^0 s8 l4 {)7 d& t# k7 p8 d( d
. f6 O& K+ _$ @ r6 F
;;;=== Menu Functions ======================================
3 x* o# N7 K" e# K4 V3 S; J- o3 w% U0 o1 S/ Z/ z
(defun ai_rootmenus ()
' D3 r) C4 @8 t2 e (setq T_MENU 0)+ l8 D7 \3 S1 w# R; Q0 Z
(menucmd "S=S")4 o# Z# H1 [# a" p9 U
(menucmd "S=ACAD.S")- q9 j9 C$ G8 G+ \! h- |
(princ)! F' z$ Z2 ?8 ` l/ b
)
$ Y: W. w- I% O6 G% L' P, G% X/ L5 l9 L$ r3 y
(defun c:ai_fms ( / fmsa fmsb)
0 s+ ~) k5 M4 j* ^0 z (setq m:err *error* *error* *merr*)
: S. x- V* [% Y' v2 h! Q7 ^9 |' k (ai_undo_push)
1 u% r( M3 l4 }& q" ] (if (getvar "TILEMODE") (setvar "TILEMODE" 0)), H. l* e, D1 Z3 b; L
(setq fmsa (vports) fmsb (nth 0 fmsa)) t( l6 b8 ^ v
(if (member 1 fmsb) R' _/ G/ `3 D2 O8 P& I
(if (> (length fmsa) 1): ~3 m) O" P0 K" m1 T4 X5 c
(command "_.mspace")
$ Z( ]' p+ E4 t( D+ h* W (progn6 N3 i: x! }9 t: ~( G
(ai_sysvar '("cmdecho" . 1))
) x, c) ~9 t) n( t% R6 X (command "_.mview")7 y1 ]' S2 U4 G* X H: T
(while (eq 1 (logand 1 (getvar "CMDACTIVE")))
! }4 J0 H) M! E. ~0 Z (command pause)
; w# S) X* |- Y& v# l5 t' E )- w$ D: R7 y: `$ R
(ai_sysvar NIL)- N3 f7 k+ H: Y4 X, f+ b& A
(command "_.mspace")+ [& J/ Y& U% _1 P
)5 `: H& `$ N" k
)
( n: \- Q! ~5 A( W, Q% i" g' k )' T8 G/ z3 ^1 F7 d g
(ai_undo_pop)
" p0 S3 V/ L4 {9 J P2 A0 ~ (setq *error* m:err m:err nil)
6 T# ?( D' m" {- j7 {; @ (princ)
5 a; C! K% l! Z# T1 m' |5 l- X; ])
1 t5 j9 M# _5 P. l3 c8 U* x# x2 m7 `1 z2 C5 Q
(defun ai_onoff (var)) O- H; ]1 l! ]3 I% n. q* J
(setvar var (abs (1- (getvar var)))), `5 J4 V! u7 G
(princ)
( B, j( ^3 N; a, x8 y" K$ f. O; r)" @( E+ |; m! |
6 {+ c2 M$ R* H+ Q8 }$ |6 [! c
;;; go to paper space' n( u2 H B9 P/ F
(defun c:ai_pspace ()
6 f3 P% g0 [' B' r+ i9 y (ai_undo_push)4 y9 K/ h- c3 t t7 ~8 E7 d
(if (/= 0 (getvar "tilemode"))
, B! a' f+ h, P7 F (command "_.tilemode" 0). K; a+ \' \% Y
) H2 G! C8 s! D) P2 R0 K
(if (/= 1 (getvar "cvport"))
( V) G" y- Z6 F: U (command "_.pspace")0 I# z9 w: s& g
)
$ ^, u. o8 A- R a ? (ai_undo_pop)
5 L& L; L6 j3 j (princ)
( ^) N5 v3 x2 u4 u( |2 T)
. A! Q% `5 N! L7 C: B: O" r' Z
. E# N' H. S" @; v' A# {% A;;; go to tilemode 1
4 Q# T4 H( u8 p(defun c:ai_tilemode1 ()
6 p6 v3 a9 l- {6 M+ ]! ` (ai_undo_push); @" b8 |7 E( \: H8 |% z0 S
(if (/= 1 (getvar "tilemode"))5 {) a( p% a7 _) U1 E( }+ k! W6 X
(command "_.tilemode" 1)
W# [' [, C1 F4 P5 \. x6 v, D )
+ H, k3 o5 w2 Z4 T- k4 @ (ai_undo_pop)
" }8 I/ L) z3 t1 k (princ)
7 b7 P( C$ z, j/ A) e7 L2 W% B z) x8 X. ?' \
0 l. O# a+ d$ d# v d! k;;; Pop menu Draw/ Dim/ Align Text/ Centered
! b: _% ~" M& k8 Q p, b;;; Toolbar Dimensions/ Align Text/ Centered4 ]% D( D! j& q5 v, K' M2 [ e
4 U% Q: {6 c/ R2 ~: ]$ t(defun ai_dim_cen (/ ai_sysvar ai_dim_ss)
* A( T* t: U' ]. i, W8 K% M2 l2 n (setq ai_sysvar (getvar "cmdecho"))+ x" u" ~: Q f5 {
(setvar "cmdecho" 0)
+ K3 V3 k) m5 R2 ]! @7 N8 M) W (cond
& x4 Z, h$ \4 X ((setq ai_dim_ss (ssget "_P" '((0 . "DIMENSION"))))
3 }: H& u* h8 w4 [! {0 ^& E: Z- i1 |# d (command "_.dimoverride" "_dimjust" 0 "" ai_dim_ss ""
8 { x' m! B: Y: u, H "_.dimtedit" ai_dim_ss "_h")
$ W( O# Q5 E; {7 w; r4 h1 L" j )
( k% X" F, K# h9 D! L9 n0 a (T nil)
* l! L; F$ U# s {5 }0 Y )6 E, ^0 E2 O3 i# q. N" V5 Q
(setvar "cmdecho" ai_sysvar)
1 H8 L0 B E- N+ i+ v" d9 k (princ)# h: C% G( m# d2 e) }
)
3 ^1 ]8 @2 E* G9 h: k
3 u& B7 L) Y0 R. i. l4 T/ C9 N;;; Shortcut menu for Dimension Text Above " X( @! h$ \4 r' ?0 x# a& R
! H" f U4 l" u) ^# b% i, E
(defun c:ai_dim_textabove (/ ss)
@5 k0 H- k; f4 A+ S (ai_sysvar '("cmdecho" . 0))
! T- u( M6 w L+ z% R (if (setq ss (ssget "_I"))
- w4 M. l$ A! Q2 Z3 H9 x# L (command "_.dimoverride" "_dimtad" 3 "" ss ""), Z1 H+ g6 D9 T. g4 b _
(if (setq ss (ssget))
$ ~$ w- o1 Z/ A, M. L; b9 \% u/ r (command "_.dimoverride" "_dimtad" 3 "" ss "") ! p7 Y1 Q7 V2 r+ |8 `
)
6 Q" s9 h. S7 i- _2 P )! o5 o& w4 y, J# Y1 C m0 c0 N
(ai_sysvar NIL)
& d) c: r5 r4 ?6 v6 b3 @ (princ)4 i0 ^' ^( \( h. p7 {" H" t8 n
)* R. a" I6 E' s/ C2 P
$ @& X0 k! d) i" x U
;;; Shortcut menu for Dimension Text Center
# ~4 r; }7 ?+ z2 v$ q, R5 t, e8 s9 y
(defun c:ai_dim_textcenter (/ ss)- D2 ~: T! K$ u* n; ~! b% S
(ai_sysvar '("cmdecho" . 0))
" I% l- N1 f* l$ y Y" ` (if (setq ss (ssget "_I"))
& f7 d9 p% W6 x, p7 d' X8 ^ (command "_.dimoverride" "_dimtad" 0 "" ss "")
) s. z$ I* F `( j6 }- [$ V (if (setq ss (ssget))3 ]. x: J5 Q5 a z3 K3 O* S! S/ G
(command "_.dimoverride" "_dimtad" 0 "" ss "")
7 J: N* l; c2 L: ^ )
) \# p8 o p( M) ^( ?& Z )
3 g3 Q3 u6 n! s! m% C (ai_sysvar NIL)
# j# M7 J0 p$ \% ] K$ B# o5 q (princ)
c" s+ L; u5 q7 G)$ t+ A I6 a% s3 F! @* p m
% M9 z, p' T6 A
;;; Shortcut menu for Dimension Text Home + \- n$ V1 b" o( |$ h
3 b# [* Y/ L! X7 H& P6 G; n% f" `(defun c:ai_dim_texthome (/ ss)
% j% H5 F `# M u: }0 G! g" w (ai_sysvar '("cmdecho" . 0))/ N) F. t1 M2 I
(if (setq ss (ssget "_I"))
8 l% D. Y7 G- J- Q8 ]) a (command "_.dimedit" "_h")
0 ]% c5 r, s3 T& ], _& L) i (if (setq ss (ssget))6 s$ J# P3 f7 U: y6 n5 j! ]1 y
(command "_.dimedit" "_h" ss)4 y: ?+ Z* l8 p7 z! b' w
)
' g: @ s6 A8 s* P9 N )
% q Z. f/ d! u; X (ai_sysvar NIL)
/ P4 ~+ n8 o; r; ?* V (princ)
9 _; h/ b# A4 i! g)
1 _* V& Y1 N8 ^; d, a1 _8 r* D! N( e2 r0 c9 c; h: r3 r
3 o! A4 h4 M6 I4 o9 F
;;; Screen menu item for CIRCLE TaTaTan option.# J- b7 _) t. h
;;; first, get points on entities
; T; s4 u* w/ l' }! p. ~(defun ai_circtanstart()
5 P1 p' @) A; j' Z q% ?. t9 j (setq m:err *error* *error* *merr*)) U* P9 ^+ }, G
(ai_sysvar 8 [5 R |" L6 W; Q. ]5 a" ~/ r
(list '("cmdecho" . 0)
' Y' Q D5 ^9 [3 {; H1 m ;; make sure _tan pick for CIRCLE gets same entity
' ~' w( |' e' i1 ]- t (cons "aperture" (getvar "pickbox"))
5 V! [5 u4 [7 |- Q' G )+ A: w, A$ b2 ]" \% L$ V5 w* K
)
4 |8 H" E0 T- G' I# {3 W( M7 j5 R ;; prompts are the same as CIRCLE/TTR command option" q' j7 [0 }3 L) S" E. u
(setq pt1 (ai_entsnap "\n输入切点定义: " nil))( o' P$ Q! t; v
(setq pt2 (ai_entsnap "\n输入第二个切点的定义: " nil))/ S, c0 j9 H- o8 i% o8 F4 v
(setq pt3 (ai_entsnap "\n输入第三个切点的定义: " nil))
7 ^+ \0 S# _1 a6 s)8 |, E! N$ k0 S; A# F: e
;;; Command-line version
' K5 U- p4 Q9 D' M(defun c:ai_circtan (/ pt1 pt2 pt3)0 S6 L8 M P* j* u9 ^
(ai_circtanstart)! P* a8 [0 t# X) c
7 R+ S4 O% d R8 m* V+ `$ d! n (ai_sysvar '("osmode" . 256))
8 ]9 [: w% E- X% p6 F( n" B (command "_.circle" "_3p" "_tan" pt1 "_tan" pt2 "_tan" pt3)- [4 L6 v$ k+ d
! o, E: Y/ ?9 D% F, H (ai_sysvar nil)5 l4 }; W) M+ c' |
(setq *error* m:err m:err nil)
; ]& l: Y# R7 [0 } (princ)
4 i6 O7 e. F% L1 z5 j. K)) K& U! q, A! X# `. z2 n0 M- ?" D% U
;;; Use this if CMDNAMES == CIRCLE3 s4 ~% X$ J" Q% _! e; _
(defun ai_circtan (/ pt1 pt2 pt3)% N( p4 `! }- D0 O
(ai_circtanstart)
: c) O3 E( V( ~
7 Q/ e$ k: k2 J' G (ai_sysvar '("osmode" . 256))
- i* }* J6 a) ~/ [* r3 s( D3 f (command "_3p" pt1 pt2 pt3)
: m7 ?; \7 |( c0 \8 I& l; m : O$ T/ q+ N8 w0 P* @* ~0 R, f& x
(ai_sysvar nil)0 @3 Y# Z1 S. A! l! H
(setq *error* m:err m:err nil)
+ H2 ^0 q( ~- ]+ o% G3 n! K% s (princ). X9 O" ], J% l! d7 i( P* O
)
8 q8 q" [/ \& z/ N9 `7 H, z- ~
6 r1 {8 }, d% D1 d; `0 R9 g
6 s! z0 J" K3 o0 J8 u# a! s; u6 i1 T7 O) s+ K7 h0 P8 ^, K
;;;=== Make Object's Layer Current =============================
% N; @. z' k% E" R
5 v: |! t1 J1 x" x9 k;; Makes the layer of the selected object current. If there is one7 W/ p6 h) Z2 ]" t; ]4 x
;; object in the pickfirst set, it's layer is made current without' A6 I2 k- e5 k( {3 p& x$ F
;; prompting for an object. Else a prompt is issued.
4 L; Y5 j( m2 s( @6 Y' \. D2 c, [(defun c:ai_molc(/ old_error end_undo old_cmdecho set1 ent undo_control)* I, v6 r; {6 F2 L2 ]. H; H! `% E
/ @; {, ^7 @6 o! n! J, p( \
;; Simple error handling., v6 |) V* }! u% W' G8 g6 T( }( w3 T
(defun molc_error (s)
+ ]1 D2 u, S* n8 ?, E8 E( u S) Z ;; Reset error handling./ h4 k5 S+ r: L; U2 w5 ]& K
(if old_error (setq *error* old_error))8 n3 t/ |. T" r4 Y) _
;; End undo if we started one.3 j3 q3 `/ V4 l" [
(if (eq end_undo 1) (command "_.undo" "_end"))# ?4 c4 p+ w7 N6 f6 u: A
;; Reset command echo
) q9 k! q6 p. Q W3 L( _% q2 e (if old_cmdecho (setvar "cmdecho" old_cmdecho))
) m% p* j9 a9 n$ a% o( y ;; Silent exit.5 R+ L6 f) f; b" ]! K8 r5 h
(princ)
5 T- Y7 J& d( | )
+ s+ g/ c8 L* k' y0 O" q8 e 1 Z$ p' B0 c& z: F1 @
;; Save current error function.
* ?0 R& ^7 [2 G8 C1 o2 r0 _ (setq old_error *error*)
1 Q# J+ E. t4 H3 f- H
# V9 ^6 b7 O/ N$ q9 a3 O! l ;; Set error handling to molc's error function.5 o! O% c) N2 x8 ?# q
(setq *error* molc_error)
5 S5 m: `. s* [" o% i
; ?8 t7 q! U T1 g ;; Save cmdecho setting.2 g. c3 d3 w- Z7 k1 _
(setq old_cmdecho (getvar "cmdecho"))
' S* j& U `! P, W# |+ s6 O6 { 7 Q; F1 g2 F7 E. [3 b
;; Turn off cmdecho( w E4 A* Z9 \* E4 ~! M3 s# b& U6 f
(setvar "cmdecho" 0)
# L% I& S6 E9 |" X8 a2 ]8 ? ) r9 x& I# T+ }6 V1 b2 i+ K; ]5 B
;; If Pickfirst is on and the selction set contains / J# `. [; _# y8 {- w! l
;; one object, then use it, else prompt for one.
0 M6 _0 c3 j' {, D# u (if (and (eq 1 (logand 1 (getvar "pickfirst")))
/ i0 W$ F) O, c. g8 u! \ (setq set1 (ssget "_i"))
- }8 X B2 i, W0 J) K2 J+ e (eq 1 (sslength set1))' b) \$ I8 `1 I+ I9 I
)
* g( a2 w1 D( }8 b& W: ~- u (progn 4 x6 O# ]2 J7 r4 X; j1 P3 K
(setq ent (entget (ssname set1 0)))
4 A' ~* W: B/ E, J. Y; f (sssetfirst nil nil)
! r' B0 H, P$ E% }/ Z )+ n0 I- g4 K/ n: T* F
(progn
6 e% F- R& B5 m3 K (sssetfirst nil nil)6 p U7 u1 b& X, b8 V$ k
(setq ent (entget (car (entsel "\n选择将使其图层成为当前图层的对象: "))))
& d8 A$ n4 x: C: f4 t4 \# v8 i% x )8 t4 [/ j% E0 @" B |
)
' K4 f. i4 `7 D) ~ 4 A- K2 f* W* x" f6 u0 u" e2 w
;; Get undo setting.
8 ]3 |" s8 O1 R% t/ U7 M( y& n. ^4 ~6 J (setq undo_control (getvar "undoctl"))6 t* [4 w: l5 Z! i
! `8 q* O4 E4 K" U0 X) \
;; Initialize flag to to end undo.- U8 k' Q1 K2 j0 w3 z8 e2 {
(setq end_undo 0)
/ x+ @, d+ r9 r
4 |( t- q4 M! a O4 Z0 S ;; Begin Undo group if need be.
7 j, E' @3 x9 T% J# M0 o8 Y. o (if (and (= 1 (logand 1 undo_control)) ; undo on
( d8 ^' I& b7 N: C: o `& \5 @# G (/= 2 (logand 2 undo_control)) ; not single undo
; L ^/ E. H4 C$ m, n& x% B! a& Z* U (/= 8 (logand 8 undo_control)) ; no active group4 G; a# P, Z2 k( i5 ^
)% `1 `1 T& L X3 ^" d' m5 B
(progn 5 T* Q0 U# ?4 ~# M
;; Begin a new one1 D/ c8 R; T+ E1 \
(command "_.undo" "_begin")
" C+ l) K0 y1 m0 K& ~- P" U ;; Set flag so that we know to end undo.
6 V b+ E& Z) B5 r& c (setq end_undo 1)
, X% N" x P& h% V4 ^- b )2 u6 b0 Y D" E: O
)
3 Q* h4 `: g+ D- m
, @9 S+ @& t! T& R8 I. v ;; Make object's layer current.
/ |+ f( Z/ {5 }, {2 x3 ` (setvar "clayer" (cdr (assoc '8 ent)))
, }% c- g; N& o0 G: S6 u& Y- j9 b ) m) X, x8 x7 a, U& j# r# _
;; Print message
7 C" K$ B# q, E4 \! ]5 V! E (princ (strcat "\n" (getvar "clayer") " 现在是当前图层。"))
$ m8 W6 H" Z* b* X+ [& I9 J + w0 d6 s9 q' C/ T8 f2 `, d: r3 e
;; Undo end0 q* ^$ Q4 c2 s# F5 s2 M
(if (eq 1 end_undo)
4 e) M( h; t4 p4 ^ (command "_.undo" "_end")
& [/ k& [5 z0 E" C )! p7 ]( l! o% V: h4 A) o2 O1 A7 ^# P* C
8 l2 u" E- Z* h2 j b
;; Turn on cmdecho
1 u, l) F' r8 A) t. l6 m6 ~, v (setvar "cmdecho" old_cmdecho)
+ [# v, `1 _9 T* g* I1 O# h 9 |; K4 `! v9 V' N/ D
;; Reset error function.. _6 W. G: ?; S. [$ u
(setq *error* old_error)
! I5 ?% k/ U" I4 i+ |3 Z* w
7 }$ Q; L* E. a$ Z4 T ;; Silent exit.
, L& c& ` r. r( b (princ)0 g' \ o) F# y* l6 M ^5 W
)
5 j8 w. Q7 f( O. ?! s& ?# N
, S2 r- i5 m- N0 S;;; Shortcut menu Deselect All item.0 e4 @* ~& U$ {, \) ~' ?
! c3 `. \/ ~0 \9 ]" P(defun ai_deselect ()! m) [8 b1 a' \+ ~7 Y, R
(if (= (getvar "cmdecho") 0) ;start if4 ?/ a' x1 u3 W, H
(command "_.select" "_r" "_all" "")) K% Z- e0 W0 O% d
(progn ;start progn for cmdecho 1
4 r0 _5 N; D" s: {8 Y9 v (setvar "cmdecho" 0)
# f7 {, c; [0 Y& T1 m/ ]4 V0 U$ v (command "_.select" "_r" "_all" "")
/ a4 Y2 x' Z: Z2 U9 T. @ (setvar "cmdecho" 1)9 Y6 ]3 X, M+ N3 l' U/ @3 f) A
) ;end progn for cmdecho 1: _9 r. k( H! E6 s4 g1 X: g4 |! J
) ;end if
5 }# i2 z4 D+ `; e (terpri), D5 D; t h% r% g& ?5 H
(prompt "所有对象都已取消选择"); M/ n% i8 [( d/ @7 L
(princ)" C2 y( T% L' Z2 O7 d
)7 z4 W; a: v& ^+ T
! L# h. W( g' h3 J
;;;2 G- }$ |$ J, `& p' \4 P9 @! w: x
;;; Enable Draworder to be called from a menu
/ d$ Y$ l0 G3 D& a;;; Checks for Pickfirst selected objects X* x2 V0 B$ E8 B% J
;;;. r" S9 B) k. E
2 P. Z+ ?+ E0 D) @6 u2 I! n3 e1 G; Y(defun ai_draworder (option / ss )
6 C- w Q$ n4 s) s% ?/ C0 y& N! g" w/ z% B' u
(setq m:err *error* *error* *merr*)' ?$ Z4 P; |. i5 I' r8 c
(ai_sysvar '("cmdecho" . 0))
& h0 d0 G* x3 e4 o+ }6 H4 O& ~ d) a5 P t
(if (setq ss (ssget "_I"))
7 t7 R# a- g3 P! p (command "_.draworder" option)
: T2 Z0 v5 _) a5 O) ~ (if (setq ss (ssget))! x2 L# P$ F" K) \8 B4 u9 A
(command "_.draworder" ss "" option)
* r M" d( |% r# n' s )7 o$ `4 e' `. i' Y
): G$ R. p& n6 `) k. d/ u
(ai_sysvar NIL)
; R j a( w: d4 N* Z9 h4 Q% M, |2 V (setq *error* m:err m:err nil)
5 ^5 j" k( q) Y9 e3 H) S. |
* a. c5 N6 N( I0 [% n (princ). E" S8 i4 ]: L' r& C7 ~
)5 `! E6 h4 p& u1 O
% o- J* R r r+ L$ j+ ~(defun c:vlisp ()% M( O" F+ F- @# u4 w
(if (/= nil c:vlide) (c:vlide))
5 F6 n- x! _* K* x; R2 O: g3 M$ _7 W)
( \: o' N8 Z- ` v2 o; g5 P# P& g: Z7 [- Z( }
(princ "已加载。")! J; q4 p B2 W3 i
(princ) |