;;;2 l S& J4 q, }7 B0 Z1 p& e
;;; Add an END to UNDO and return to initial state.
u) C) E2 E( i5 P4 B1 [0 d;;;4 J, |" a- R0 K$ d. E. [: ?% w
(defun ai_undo_pop()
0 ^( n. Y8 ^3 u; N4 n (ai_sysvar '("cmdecho" . 0))
# R! k3 N( w" e2 p5 j: ]5 P (cond
\ c- x5 Q0 o, | ((and (= 1 (logand undo_init 1)) ; enabled3 N! A3 S1 ~/ A
(/= 2 (logand undo_init 2)) ; not ONE (ie ALL is ON)
- d4 I# q& b. l* L (/= 8 (logand undo_init 8)) ; no GROUP active
) R- e6 |1 e9 A )
6 q- d/ k/ e0 w, K! ^- S' k. g6 H (command "_.undo" "_end")
6 G1 }. r! N$ c" m5 d )
9 y9 T g' h+ W% u (T)( o' ]# h9 J' |5 n+ e- M, a
)
3 e# V; }7 a/ z8 q3 |" ? ;; If it has been forced off, turn it back on.
) a% e8 e6 ^# K G (if (= 4 (logand undo_init 4))/ E u; t- r# ~+ J3 z
(command "_.undo" "_auto" "_on")2 n' H7 q% V+ ~; a
) & ]+ j( {, u& G; |. h& b
(ai_sysvar NIL): n: J1 w$ R/ m0 z# P
)1 h( y% i* N, L' `9 L" X
3 w+ V3 R4 E( T# L- u1 W;;;=== Menu Functions ======================================1 s3 a: e5 ^, c- q, _: [$ R
: ?9 n) \% I! c+ i0 \# \0 X, C$ y(defun ai_rootmenus ()$ I- c e2 I6 L" T" z6 j% X
(setq T_MENU 0)
L( | H% u; G (menucmd "S=S")
" i; |+ J7 y; C" o+ h/ e (menucmd "S=ACAD.S")
. @* g R! I9 F" \. O% C- V (princ)
" {. [5 X4 \$ d; G6 W4 G)! j* K" n: `; O
* Q- V0 q# Z0 T# G3 u
(defun c:ai_fms ( / fmsa fmsb)
% n: \* l3 D# J, d (setq m:err *error* *error* *merr*), k0 r8 P1 F V ^" r
(ai_undo_push); m& L- H) B1 {
(if (getvar "TILEMODE") (setvar "TILEMODE" 0))2 b; @' Y5 w8 j# _: C: Y& l$ ^
(setq fmsa (vports) fmsb (nth 0 fmsa))
8 U6 r, Y" H2 ~. I) y5 t' Z+ s (if (member 1 fmsb)7 Q1 {* |8 w- I I: E: a$ ?
(if (> (length fmsa) 1)" S* {* J9 o" \
(command "_.mspace")
3 g( A1 `% ?3 v0 w' _ (progn* I* P: a$ G) L; g
(ai_sysvar '("cmdecho" . 1))5 P$ t$ w, g6 E3 n" W' Z
(command "_.mview")
+ q. R- R Z. f5 p% i' Y! @ (while (eq 1 (logand 1 (getvar "CMDACTIVE")))
8 W! @4 b- c3 M; }! | (command pause)$ B1 e% D3 r. u9 Z; a
)( P/ b1 F, g7 @! Q. F) i7 ]
(ai_sysvar NIL)
9 Q7 n$ @0 K6 }4 p" q (command "_.mspace")% s3 [- d! `+ ^" }) c3 P
)/ ]% h* u. Q }$ z \
)
5 s7 [# f& |: P0 C- T& a )
: M% a" j1 J( w) A& B, Z# B (ai_undo_pop), N# y: M9 @$ ]3 S6 g
(setq *error* m:err m:err nil)
( i: }+ g# d- Y- H& Y7 O2 N1 w: R (princ)+ n! S. C, k/ |' a* p8 `* D
)1 C+ s! P9 n0 X' c8 k# k6 I; d% m
5 ^1 P, v- i4 y( j(defun ai_onoff (var)
7 O6 r+ w3 ^& y4 r3 e- C (setvar var (abs (1- (getvar var))))3 O- K+ x: K/ l8 R6 O. V
(princ)
. p5 K8 N$ q, O; d$ t. \)
# m5 ~% N) e6 \! a# \ I% g( j1 J; p
7 W: `- @" U: @; `) c4 }* z;;; go to paper space
6 f2 E" J( i) g3 g. B+ D Q(defun c:ai_pspace ()/ `8 o" b$ C" }# [* H
(ai_undo_push) p( C6 p! Y! i' M: Q
(if (/= 0 (getvar "tilemode"))
" R% y! M% l. n9 U( {% R (command "_.tilemode" 0)0 ]! l ]) _, x5 O
)
& J) |6 x/ C8 P6 H (if (/= 1 (getvar "cvport"))
) [4 c9 T( J' p4 F (command "_.pspace")+ q; K i5 o4 t+ U r( j
)
0 l4 l: u6 h* b4 ?% P5 A (ai_undo_pop), d/ m5 w: Q+ T
(princ)
9 i8 z: L1 i8 m; |0 N" n# Y- })
m4 D3 R: @, `$ K! M
9 _' g6 s4 g$ z( m' O# C;;; go to tilemode 1
7 W% e' D6 u. Z8 a6 l- o7 m(defun c:ai_tilemode1 ()
" Z$ Y t) l5 q7 |9 Y$ N (ai_undo_push)" G( u/ S) |! k: ?3 x
(if (/= 1 (getvar "tilemode"))' q6 Y$ r; z7 i5 \6 e# E9 N
(command "_.tilemode" 1)1 G" a. l+ E7 ^& Y2 ~
)2 K& j0 V' R0 k6 D3 d* \
(ai_undo_pop)9 e1 X, I1 ^ s0 f
(princ)
; A2 b+ e7 s4 T, g3 q6 @1 q0 ?)' y" z, W0 Q+ J6 P( d
0 m+ _9 Z, ^9 h. s;;; Pop menu Draw/ Dim/ Align Text/ Centered$ N, V+ f* H) C& D
;;; Toolbar Dimensions/ Align Text/ Centered
/ F2 A3 ^) Q3 f u/ ?; k
) g- @% `4 U3 b3 ^1 }4 W' A( b, K6 [: {(defun ai_dim_cen (/ ai_sysvar ai_dim_ss)( b. {2 `, o4 b/ [+ \ K
(setq ai_sysvar (getvar "cmdecho"))$ W- m5 c, Y% w& x5 O
(setvar "cmdecho" 0) N3 c# @, x) Q$ v
(cond
) j5 v+ w# G. N+ P+ K ((setq ai_dim_ss (ssget "_P" '((0 . "DIMENSION"))))
! m7 v8 B. `1 {% ^0 {' `& f (command "_.dimoverride" "_dimjust" 0 "" ai_dim_ss ""
/ S! d. A" |8 z "_.dimtedit" ai_dim_ss "_h")
: ~+ |# m2 T( o5 w+ Y" w4 F )
6 b" k2 ~" z+ q' Y. P/ A+ s (T nil)
$ D* _3 u4 Y* b1 U; d |# N- z ), ?# p7 ]$ t6 p' C6 u4 i7 ^
(setvar "cmdecho" ai_sysvar)
+ S- k" l3 \+ ]0 ^ z% m (princ)3 \, d. l2 D! q" B8 t5 Z# e4 {
)
8 J9 k i5 A" L+ I" y: u d1 d2 b) R( N( u4 O+ }+ s: v
;;; Shortcut menu for Dimension Text Above 0 M! M& M* \. N5 `7 \
; B, B* T& w! m' s w
(defun c:ai_dim_textabove (/ ss)
) ^7 m y O+ a$ Y, Z9 s! { (ai_sysvar '("cmdecho" . 0))
! J' F! S/ ?/ U, T0 ^# M1 ~8 n (if (setq ss (ssget "_I"))
: `! G6 o1 _9 v5 q+ @( a (command "_.dimoverride" "_dimtad" 3 "" ss "")
1 e8 S0 P% `7 r; U (if (setq ss (ssget))
1 o- @% ?1 E% { (command "_.dimoverride" "_dimtad" 3 "" ss "") ' b( ?4 [8 r$ E) S- `6 h
)" M# c# |; A/ [+ Z% q
)
6 K2 I5 i. Z8 o: @$ A8 H1 h* o (ai_sysvar NIL)+ m. ~4 T8 c, i( b
(princ)
3 _" ^) x j& H)
8 O" C. e) a H" C/ e% |* d4 O* W. F; k. ?9 E) n- ?
;;; Shortcut menu for Dimension Text Center
2 Z8 R' Z2 |1 S' F7 g1 f) R: H2 P3 T" y# u: K) J
(defun c:ai_dim_textcenter (/ ss)9 q0 u- z! u) c
(ai_sysvar '("cmdecho" . 0))
0 S& }" x) F1 M8 l& c7 } (if (setq ss (ssget "_I"))2 C4 }* N2 X, L+ F( `: r' F
(command "_.dimoverride" "_dimtad" 0 "" ss "")
' u3 u) T# i, A# K D- b! N' @9 U (if (setq ss (ssget))
0 n+ g) n! |5 H4 x3 i! [# _ (command "_.dimoverride" "_dimtad" 0 "" ss "")
: t2 E* g3 _* n7 n )
. C1 [. ~" N4 \9 C) x# u )! I" f6 k W( v# O" B- y
(ai_sysvar NIL)
# S$ i) {6 Z0 s (princ)
9 |) `, u" z( Z9 P, T0 f)
3 l0 F7 {* f' l$ Y# c q. I! N9 Q7 X1 \3 K1 p' s
;;; Shortcut menu for Dimension Text Home ( b& x0 n6 `" n) A
$ w$ a7 w/ c' [8 c! ?(defun c:ai_dim_texthome (/ ss)# F, @3 Y$ N$ W+ R* s1 j
(ai_sysvar '("cmdecho" . 0))
" r! g: H2 ~5 k: d' K1 Q (if (setq ss (ssget "_I"))
, C7 i! O* t+ o; t+ Q/ S: P (command "_.dimedit" "_h")
/ ?8 i: ]: u" d0 |" }/ \, j& w (if (setq ss (ssget))
! x1 C; N, b1 O8 C9 V (command "_.dimedit" "_h" ss)
/ X: ^- \. Q' C$ u1 Z )" V, e: u% W$ e: w
)6 N4 y$ I: u* J* ^+ u% X' c
(ai_sysvar NIL)' [( ^( L! b+ g0 W$ x8 x; J/ M# Y
(princ)
m! V0 Y% z$ b)
; _+ q+ E7 _9 O
! Y5 i5 o3 l" T+ r! B: M6 e/ f- E. {% {1 P4 N4 Q' L
;;; Screen menu item for CIRCLE TaTaTan option.
+ v1 ~4 R# u) ]% [;;; first, get points on entities
5 l; S% k) n& o& N9 v- { ?, K(defun ai_circtanstart()
- X* m( a- z+ ~- |8 R- Y( c6 l (setq m:err *error* *error* *merr*)
- ^* [# m2 E a7 V+ g: h+ x e, ~ (ai_sysvar
# p; M. W! w. s! x2 i (list '("cmdecho" . 0). p/ A# z f& e5 V5 y* W- ?
;; make sure _tan pick for CIRCLE gets same entity# k% E# }. B2 j- t+ h! }7 q. k
(cons "aperture" (getvar "pickbox"))' A( u- {3 [0 h0 Y4 V$ A3 i
)
1 L& `- O, U; B. n; e( b1 j/ W )
4 s/ S5 a; Q6 Y$ E- p ;; prompts are the same as CIRCLE/TTR command option
* u, k) i$ Y% @% u& S ? (setq pt1 (ai_entsnap "\n输入切点定义: " nil))
) V' O7 u: i# _# c (setq pt2 (ai_entsnap "\n输入第二个切点的定义: " nil))- o7 `) x0 N: _" L1 ~5 e9 a
(setq pt3 (ai_entsnap "\n输入第三个切点的定义: " nil))
! m( C3 Q' @/ P8 c, t- S* o P4 Y)
# c: Z" x5 e9 v1 [- v;;; Command-line version
; i0 z% v7 g$ n9 g* P(defun c:ai_circtan (/ pt1 pt2 pt3)
2 v" P8 B$ r$ Q (ai_circtanstart)
5 [9 y- A3 s+ l" v" X7 ^5 ~( m2 e& T1 P0 G
(ai_sysvar '("osmode" . 256))- |1 b0 b* T8 ~% u: T/ h
(command "_.circle" "_3p" "_tan" pt1 "_tan" pt2 "_tan" pt3)
" m/ t4 P% |, t) f 8 ^9 p0 X1 X) G/ w' p. J
(ai_sysvar nil)
' T2 Q+ F) u' w/ r3 I4 w (setq *error* m:err m:err nil)
0 n2 p; A& Q& Z6 f (princ)6 @0 H: d: L( B0 t0 x7 S$ b
)' E! F" {8 o! Z
;;; Use this if CMDNAMES == CIRCLE
8 h0 d% Q. r/ j0 ^(defun ai_circtan (/ pt1 pt2 pt3)0 S9 J! C$ F9 z9 Z
(ai_circtanstart)- B) i& v9 u; G e, H% \! U3 c8 v
' d) u; X( F4 v (ai_sysvar '("osmode" . 256))1 Q0 M8 @# @; _0 p5 |
(command "_3p" pt1 pt2 pt3)
% ?' p3 M7 Q; L! W. l
2 A& R/ o* ^8 \" K- M3 ^ (ai_sysvar nil)
! ]# e% b) X/ M' M- u o (setq *error* m:err m:err nil)
& _$ @6 i, k% `) g6 k1 S (princ)
. {4 c8 T9 I: l( j)7 X: M3 V+ E2 l) E
1 w+ Y- r) G9 x: T, B
3 G: T9 ^1 n% P' H* U; H! P" t% @* s9 j+ ?6 O+ H+ z `
;;;=== Make Object's Layer Current =============================
; }8 `0 F5 X+ p* W% x& t7 F; @: h
2 @$ s! V9 _' n d5 A3 `+ S- t;; Makes the layer of the selected object current. If there is one
/ G0 B, z" }# K. K;; object in the pickfirst set, it's layer is made current without8 s: f/ x: Z% j2 e, w
;; prompting for an object. Else a prompt is issued.
, E3 H1 ~5 W$ X% {" ?# o(defun c:ai_molc(/ old_error end_undo old_cmdecho set1 ent undo_control)
1 n$ J* K3 u' H/ {4 O% v+ Y% X 3 k+ R" A+ Y" h C$ p% l
;; Simple error handling.
! B2 [' M$ O( ~5 Q (defun molc_error (s)
: z! G# u" U3 U5 z' e! }, n, G ;; Reset error handling.
* H% H, m9 v( G# |; L* m& R8 ? (if old_error (setq *error* old_error))
6 G% E2 Y! [& n: B( P ;; End undo if we started one.* Z# @1 j9 b3 @* H
(if (eq end_undo 1) (command "_.undo" "_end"))
( Z0 o+ S% a8 S. g& Z ;; Reset command echo. g% l, w7 l" B4 F* k5 t
(if old_cmdecho (setvar "cmdecho" old_cmdecho))
8 H u" X( W5 M ;; Silent exit.
- Y* M. _. M- p5 ^/ W! n (princ): k$ H$ S- k0 y: i, u! N. J' |" ]
)
" V4 c5 J! M# Q+ L; ?
) w$ L# t* W% ^! z* e2 [ ;; Save current error function.
/ w4 C0 Q) [1 A: m6 k' K (setq old_error *error*)
. J: }8 n9 G- I# N, ^# H: O
, M' H) u+ e; z$ Z4 w' P& m ;; Set error handling to molc's error function.
1 L% s% i; _6 c( ? (setq *error* molc_error)! M$ @1 z" m$ m* U
, u8 m4 V3 a6 ?3 t) o+ U+ f ;; Save cmdecho setting.
6 H$ ~4 P7 b4 R (setq old_cmdecho (getvar "cmdecho"))+ c# j: d0 w$ ]6 e: p( }5 C
+ o2 k( |9 C: Q# A; W; A% |9 h1 I# W
;; Turn off cmdecho* ]. r2 V* m, o1 Z0 A0 O, G7 m
(setvar "cmdecho" 0)
* f) Q, t o" z
- Q6 I2 b+ A2 }: f2 x+ P ;; If Pickfirst is on and the selction set contains
" o1 q! ~- J, N* r7 M N ;; one object, then use it, else prompt for one., g' w* P2 o1 V- Z8 N, Q3 t
(if (and (eq 1 (logand 1 (getvar "pickfirst")))+ b/ s2 ~& C3 }! g
(setq set1 (ssget "_i"))& D/ e, ]0 X) D' {
(eq 1 (sslength set1))/ q! o: {2 }3 R9 C0 Y
)
E6 i9 N: k4 M, m6 j (progn
; n$ c; ]5 O5 | (setq ent (entget (ssname set1 0))) + @. H1 f B) j. o
(sssetfirst nil nil)
: A2 m) A* k0 z S! K0 W3 [ )
7 m4 t& m% j6 y& { (progn * o6 K: t5 T- |5 [% ?
(sssetfirst nil nil)0 J0 i. n" ~, P. `
(setq ent (entget (car (entsel "\n选择将使其图层成为当前图层的对象: "))))
6 s0 W/ V/ i# h )
2 j0 R1 f) e0 M7 C* ]' S )
5 x8 P7 ]' b: F* k; ?0 _- V) ~ : P' F% X! [( h$ L3 h* X
;; Get undo setting.
+ d# j4 V9 W. x/ @7 ` (setq undo_control (getvar "undoctl"))7 A, d- P `% A* |. z8 c
" @% K) j! c: _% [6 l( z ;; Initialize flag to to end undo.
' q% Y' }" v# t( t0 T (setq end_undo 0)" \5 | b- s$ w
, G! y2 [ _6 v& T1 S0 G+ g
;; Begin Undo group if need be.+ y9 P: k' m: L9 _7 |# f1 E
(if (and (= 1 (logand 1 undo_control)) ; undo on; u8 o( D% q6 t5 u
(/= 2 (logand 2 undo_control)) ; not single undo% J1 `( |. x$ _7 K/ }
(/= 8 (logand 8 undo_control)) ; no active group
& g& a8 [9 H! {4 _, M ). ]6 u! Q& X; u8 c4 D
(progn ! ]7 k; Z* [, ]+ n" H
;; Begin a new one$ E8 A+ H, a0 H2 Q' `1 s
(command "_.undo" "_begin")0 u! z* B* i/ ?3 y
;; Set flag so that we know to end undo.
! L1 _6 A. {8 D (setq end_undo 1)4 c J6 E$ p6 _" E5 _
)
- d" \4 n+ R- S% d( N d: S )5 Z/ |/ J& D J) J$ J& T
/ V4 w4 s! f$ p
;; Make object's layer current.
. O( w; p' K& v1 c1 u (setvar "clayer" (cdr (assoc '8 ent)))5 D" m( B8 h& ]& o0 M) |
1 }# g6 O. [0 V2 s ;; Print message L- q9 X2 j2 o& @6 \ j
(princ (strcat "\n" (getvar "clayer") " 现在是当前图层。"))
" h- C4 i5 Q; }; F7 j+ y0 T7 s ) T, A( C. |; L w
;; Undo end
# f& g% Q+ e+ A2 n (if (eq 1 end_undo)
2 m- ?2 u& Y2 ^$ ]6 j: i (command "_.undo" "_end"). G: q9 v- {- l5 W F( ~
)# X$ @4 F+ R5 Z
' }/ e& u% X" k6 ?( n3 B0 ]' |* W8 D
;; Turn on cmdecho; G1 [: Y2 v7 J! G7 @
(setvar "cmdecho" old_cmdecho)! I3 n4 R5 L2 {, x
% m5 y/ c9 j- [3 {( k* B
;; Reset error function.$ V! t9 a* x5 [# E: q
(setq *error* old_error)
6 ?$ Y& l$ Y4 A! r* a# `. A q
' L8 A& e2 F( H ;; Silent exit.3 B: z) G3 S& r
(princ)
6 Y% H4 H0 ^& S+ ^)
2 P2 M" U; s7 N8 X$ R; L* g1 t6 u
;;; Shortcut menu Deselect All item.
. x7 e# j/ }8 A1 t% d9 A/ q: s8 n' _/ s+ P' a
(defun ai_deselect ()( v: w( R9 Z0 |* c
(if (= (getvar "cmdecho") 0) ;start if
: k3 ^; ?% F0 [. m2 G (command "_.select" "_r" "_all" "")8 H& ^! M' G3 ~ ^6 i; Q
(progn ;start progn for cmdecho 1
; e. ^5 U1 k" E7 N) ] ? (setvar "cmdecho" 0)
8 v5 c7 o' I6 U B# `- j( @ (command "_.select" "_r" "_all" "")+ K T' Z1 Z+ w
(setvar "cmdecho" 1)
! m- t, r" k, N. T8 {0 ? ) ;end progn for cmdecho 1
2 C: V& h& B9 @" v7 y- v ) ;end if
) G' E" I' O5 n# s' J0 [ (terpri)
1 a1 V! b- b c9 {9 S3 ^ (prompt "所有对象都已取消选择")' s/ O# m" T7 C+ b. Y! I3 J
(princ)
/ D+ E K( P+ b' m# P: H. c: y)& W& r+ A' ~/ ?1 R) c4 T0 S. @) u
) ?4 I+ U! l, X;;;5 k/ T* k" |+ {3 ]) l7 j
;;; Enable Draworder to be called from a menu, K$ ^7 h8 y% w. l- ^
;;; Checks for Pickfirst selected objects
4 m1 B3 }5 \: b' o# C/ {3 r p;;;7 m& A0 R9 _5 Z; ~- D! E, f1 v
" [4 r' f* a0 X% f' G& Q3 x(defun ai_draworder (option / ss )
3 g% {4 @& l/ f6 M. ^8 j
7 v4 g7 W7 d2 H2 w# X5 O" v* } (setq m:err *error* *error* *merr*)# ^' Q, {# X" Q. F( N1 K
(ai_sysvar '("cmdecho" . 0))
$ B6 B9 T; T2 B/ l& N, \& i$ q% C+ \3 w
(if (setq ss (ssget "_I"))+ j# Z( f! K& O5 z# h0 d
(command "_.draworder" option): \0 V2 g2 t# ^3 o9 f
(if (setq ss (ssget))/ b* t" H6 B- x
(command "_.draworder" ss "" option)
2 t* }0 v$ I) ?1 w )# N$ z. p" b, q/ V$ S6 g3 F
)
1 c8 p8 [" l' ~) k (ai_sysvar NIL)
0 Y& Q3 T1 i4 E4 n (setq *error* m:err m:err nil)& O! R6 C% ^ w$ M/ ^% d
" A5 P8 L5 O9 A) x5 ?+ u* h (princ)8 l3 C7 ]: G; |, X
)
# H- Z7 o f+ g9 X0 O8 T! Z# F# N8 \8 N q. X" j
(defun c:vlisp ()3 t9 B3 ^! Z/ L+ f1 e1 [
(if (/= nil c:vlide) (c:vlide)). ` K+ S1 ^! J( {5 _7 T+ U
)
0 i2 ?4 e- p. I3 D9 g
/ r& u* \9 a4 `1 T(princ "已加载。")
3 S; B' F. J' B(princ) |