;;;8 e6 i( |6 l, b. W
;;; Add an END to UNDO and return to initial state." n) y5 ?1 N; {/ d8 Z
;;;0 b6 c/ r& B; @: {, g0 W6 y
(defun ai_undo_pop()
3 U! t2 K0 T5 V# E( b( k (ai_sysvar '("cmdecho" . 0))6 J p- P0 ?" d$ M, R# G
(cond
0 `, |0 i$ v* m) [, W ((and (= 1 (logand undo_init 1)) ; enabled
5 x% H: t; G. j6 {1 k( d2 @ (/= 2 (logand undo_init 2)) ; not ONE (ie ALL is ON)% U& g. ~( H1 {3 @5 g4 C2 O+ e
(/= 8 (logand undo_init 8)) ; no GROUP active
; W l; ^ T* f; ?( k0 y )1 _8 ^/ {2 y1 n7 A$ e
(command "_.undo" "_end")
9 g2 \6 ^! h! e- T6 y; q) S )" b( c9 @3 r0 f, t+ U- o
(T)7 K( N3 s% Q; v- W
)
0 N5 W M2 e2 T1 h0 i/ H ;; If it has been forced off, turn it back on.
: t0 ?8 e0 a* c" Z/ b4 q (if (= 4 (logand undo_init 4))' g3 b" ?" R1 W7 d( s. t9 P
(command "_.undo" "_auto" "_on")
o2 ~# \4 L7 T )
7 o3 o: r+ x3 U. K (ai_sysvar NIL)
% [7 P* @% I3 V! e# Y& Q)
, o* s6 q I5 m0 P9 w3 M5 h& w+ I. x1 \5 p/ J/ v0 f5 X
;;;=== Menu Functions ======================================
7 p( j3 V! U$ v8 t% ^" m
# t7 |% K. v# a: Q% P(defun ai_rootmenus ()
8 w$ U5 B% R$ R4 y4 }) p8 H' U (setq T_MENU 0)% ^' d, r. `4 L
(menucmd "S=S")0 |) ]- k& t& S U- ~1 Q- z
(menucmd "S=ACAD.S")
- z# {( o& b1 `, l/ s( } (princ)
2 D3 |( C6 n, w( z. K) ?* c$ F/ i6 l* O3 I0 V
1 M8 p8 k/ H/ Z1 g" `(defun c:ai_fms ( / fmsa fmsb)$ `0 X( q, y5 ~$ c# Y0 Z
(setq m:err *error* *error* *merr*)
r4 j0 d/ a. V4 {9 M& W1 X (ai_undo_push)
& F$ B! }( P2 {& T: h (if (getvar "TILEMODE") (setvar "TILEMODE" 0))# r5 T$ J, D( J, g: W0 j5 {+ E: q
(setq fmsa (vports) fmsb (nth 0 fmsa))
2 d4 U2 C& `7 K$ T4 k (if (member 1 fmsb)
7 D! q( d1 V* d( z* Y3 Q/ a8 K (if (> (length fmsa) 1)
7 I+ V, s* W! j# {! d9 B( O (command "_.mspace")
8 V5 T8 U. p2 I& G0 x: U% i (progn
6 B6 T% ?+ |' n: X (ai_sysvar '("cmdecho" . 1)) m0 w+ ]- I, _0 J
(command "_.mview")- X4 Z( W( ?1 q1 A* j
(while (eq 1 (logand 1 (getvar "CMDACTIVE")))& O; L2 W4 b. Q$ T, f
(command pause), u8 x: I/ s7 L
). k+ R% N. ^% C* T9 n$ F% ?* T
(ai_sysvar NIL)( H2 e6 |! t" ]" t0 u7 ~
(command "_.mspace")
" M9 w8 [: b- X# `5 }9 s )# B+ J. \& i- t
)
+ x1 d8 o5 A1 e( R )
( R' @7 z" I8 ? (ai_undo_pop), I" ~( Q# n, W) P0 @' G2 Q
(setq *error* m:err m:err nil)8 [5 ]4 t2 @* D) x+ V2 t3 ^5 a3 _* V9 r
(princ)' s! h& m2 D% X6 A2 A
); J/ L$ o7 y" Q# }3 n
" O% c7 B1 `! T; Y# u(defun ai_onoff (var)1 z6 l/ H5 f/ K3 ^; [8 y# f g
(setvar var (abs (1- (getvar var))))/ E) a# |6 A* W9 x
(princ)9 L$ X/ d+ w- a( }- p$ h3 K5 n
)4 o3 k; d+ b* P" D3 D5 H
# _% p6 Q( _9 u! w) @3 L% N;;; go to paper space0 a6 U' P2 @8 f" v' |$ Y b% n
(defun c:ai_pspace ()
; o* M+ r: G- D% n; p* P: o* K (ai_undo_push)8 Z0 ?) W2 Y' a0 c) F8 t
(if (/= 0 (getvar "tilemode"))/ S! F! M% @6 a
(command "_.tilemode" 0)
$ Y( p7 Y' c2 k1 ~ )
: m3 B: B& s4 z$ D# _ (if (/= 1 (getvar "cvport"))% z: q# L3 k6 D3 s+ B
(command "_.pspace")- \, \% M$ E% J4 t0 B: k
)
# J+ z4 E; R) D$ v (ai_undo_pop)# t# D, P4 @7 e
(princ); r1 h: S9 q3 @6 C: {, b
)2 ~: y9 p3 c# O; m9 S7 j ?1 i. w+ [
. Q# `4 ?1 K# v* Y3 x;;; go to tilemode 18 _- ] p# U/ X
(defun c:ai_tilemode1 ()0 I7 w" t6 y' Y! Y' a& X
(ai_undo_push)( u# |0 R \* T- W9 W. ` |
(if (/= 1 (getvar "tilemode"))* {3 a# M0 q: o9 L* v
(command "_.tilemode" 1)
% ^$ m9 S" \; g* F" C7 V8 v )3 j/ P0 s9 U8 V/ v1 { L" W( @2 u" r
(ai_undo_pop)0 y1 h2 c; [7 Q/ ^; W
(princ)
2 n6 }) @ {2 Q, o$ \& x)
. l& z# j& A' S" ]) F0 c3 f; {7 ?' A
;;; Pop menu Draw/ Dim/ Align Text/ Centered! d% p; K, u& B
;;; Toolbar Dimensions/ Align Text/ Centered
6 ~) i/ O" M$ X2 s* M9 D: |: E' Z
$ Y! M* j) f8 e* I9 s6 n5 S' I(defun ai_dim_cen (/ ai_sysvar ai_dim_ss)
( ~1 L7 N$ y0 ] c+ m- {) ]6 N* U* H# s (setq ai_sysvar (getvar "cmdecho"))
# [& L" g# V8 O+ o/ ?6 \0 a) n/ \ (setvar "cmdecho" 0)3 q- a, d0 {1 w! g
(cond
, U. M$ J, U. y3 ~( n ((setq ai_dim_ss (ssget "_P" '((0 . "DIMENSION"))))
8 _% F/ O: u5 k; d) k4 h7 n (command "_.dimoverride" "_dimjust" 0 "" ai_dim_ss ""
/ r6 ?; I& }- b( ^8 o "_.dimtedit" ai_dim_ss "_h")7 |0 I" C+ n, p# L( H9 I
)
1 y( @1 |0 n4 u- s (T nil)
1 k& b; W- R# H6 p )' T+ D- d2 K# f; d9 w+ \! n5 Z! N
(setvar "cmdecho" ai_sysvar)
6 D0 I, `1 A+ D8 W1 w (princ)
* k" p6 [' j7 t)
& f$ u$ D9 o6 q* V+ [0 e6 | |4 O4 J+ r, |; l
;;; Shortcut menu for Dimension Text Above
s: a7 v8 u' w$ E1 e# U8 z6 }) j0 |: ~" _
(defun c:ai_dim_textabove (/ ss)9 t" h/ q( k) G
(ai_sysvar '("cmdecho" . 0))
2 o" } A" M7 ^, c1 H- L; w! a (if (setq ss (ssget "_I")): s3 }+ p$ K! H6 j0 U: m
(command "_.dimoverride" "_dimtad" 3 "" ss "")
8 ^) j* N o, [ (if (setq ss (ssget))
" u4 A, S% E6 ~& X2 o. m u (command "_.dimoverride" "_dimtad" 3 "" ss "")
3 w# I' n$ a7 \: W% f )
1 N) }; t' U& C* s* n )
5 H$ t: L6 ~( Z7 _- ?9 o (ai_sysvar NIL)
5 ?6 e: x) ]; E8 e7 K* C2 w (princ)
* x2 A0 [' n, q$ m7 N( j)9 p# O4 L' o1 ^1 s& y, i% f( X
0 O" f/ b, p7 S+ c% j: N/ u8 c& v9 h;;; Shortcut menu for Dimension Text Center
5 O, @5 V$ P! I. s( F# q1 ]+ W, J. @8 f' q/ ^9 N" q0 }
(defun c:ai_dim_textcenter (/ ss)
4 g9 k& P, q; g: t% P; h6 Z (ai_sysvar '("cmdecho" . 0))
' F+ ?. B. I- P! k( W& G! N (if (setq ss (ssget "_I"))
5 x0 L' {" \& X8 A2 ^& K9 H' U2 ` (command "_.dimoverride" "_dimtad" 0 "" ss ""), a0 F- Z# i3 }: f+ B9 E2 f9 Y2 z
(if (setq ss (ssget))5 s+ R3 @1 m& G1 \
(command "_.dimoverride" "_dimtad" 0 "" ss "")
4 x* t6 U; u; R. q )
, ?) ]% q3 w! w8 ~- v+ I# Y )
" S( M$ O ~3 w' `! B3 J1 f (ai_sysvar NIL)/ A6 q9 J' p: J+ G. f
(princ). v' f3 X# L; i. O" s% B
), A2 E( L8 E4 k0 W8 S% G. W
; B2 ~# j5 Y1 a5 j
;;; Shortcut menu for Dimension Text Home $ k! ^7 D& h1 v5 b1 t( k3 P* x5 m
# ~4 j2 x/ ^. {' Q, \/ h
(defun c:ai_dim_texthome (/ ss)6 R2 q4 S. J* R0 v% W9 {( _
(ai_sysvar '("cmdecho" . 0))
/ a* }% J/ a" H# _ (if (setq ss (ssget "_I")) j2 c e, n1 E6 D N" M4 [
(command "_.dimedit" "_h")
4 E% j G* S1 t5 ^* T# r* K (if (setq ss (ssget))
. P5 i1 n6 k% c# `$ U (command "_.dimedit" "_h" ss)9 V% C1 _! `# Q/ M- ?; L2 v
)
& W; s9 r W0 K )
! Z2 T9 `# w+ `& F( O! v" K (ai_sysvar NIL)" z5 ~2 q+ e6 Q' Q; r/ t* T
(princ)+ p a; C7 L- j, y
)9 f9 y. i4 Z* |% r- q3 G
6 ]& ^) K M' J
5 Q: d' Z% ?& B4 W# z" N;;; Screen menu item for CIRCLE TaTaTan option., O8 I M( y' x
;;; first, get points on entities
, H+ k& m) b! \: U: {1 D(defun ai_circtanstart()4 x& S+ w/ Y1 e; P0 A
(setq m:err *error* *error* *merr*)6 E0 J0 ~" Q2 n7 i" {* L
(ai_sysvar 1 L8 w" _9 J" L# A5 r: l2 p f
(list '("cmdecho" . 0)
( n: e0 `& s6 A/ Q ;; make sure _tan pick for CIRCLE gets same entity+ j/ z1 E, M$ a2 N+ A
(cons "aperture" (getvar "pickbox"))
# P- m+ |- s9 B0 u: K )
$ [% K: a$ n) n y% s8 L )5 ]) Z$ n8 f. M$ q9 r7 E2 r; L
;; prompts are the same as CIRCLE/TTR command option
" Y+ F5 s8 F' S; d# u (setq pt1 (ai_entsnap "\n输入切点定义: " nil))' U2 u/ {. z( @( e- ^" c# L
(setq pt2 (ai_entsnap "\n输入第二个切点的定义: " nil))- p& m3 r0 B8 }: w' s# i
(setq pt3 (ai_entsnap "\n输入第三个切点的定义: " nil))8 S' m3 N2 |( F) H0 d
)/ K4 q( ?6 H5 _. S4 e) a; @
;;; Command-line version
7 \8 f" B8 I+ @: U3 z/ J- n& s0 v(defun c:ai_circtan (/ pt1 pt2 pt3)
, f3 _0 w. b' p" x0 ?/ H1 o o# f6 w (ai_circtanstart)
8 J7 G$ F/ Z8 v* ^( t+ r: L5 R0 K3 k
(ai_sysvar '("osmode" . 256))
2 Q% A. w& d5 s. k) ` (command "_.circle" "_3p" "_tan" pt1 "_tan" pt2 "_tan" pt3)
; W( a2 v o" j* e
9 U+ n+ y" m3 H. J+ u (ai_sysvar nil)1 ?" n2 c; k5 s7 ?/ k/ k
(setq *error* m:err m:err nil)( D, e( i2 @$ a
(princ) y! t9 p# a, \: M7 a
)
0 C+ B2 A/ Q. S4 M;;; Use this if CMDNAMES == CIRCLE7 n3 u- H; L% \0 y$ p
(defun ai_circtan (/ pt1 pt2 pt3)
2 X! m1 Y, u- O0 z; q0 @6 @ (ai_circtanstart)$ v$ y" K. |/ p9 `: C: L7 ~3 {
' {# N! ]! J- V! b (ai_sysvar '("osmode" . 256))
& |3 P4 j$ t" {- i4 t& v (command "_3p" pt1 pt2 pt3)
8 g h5 ?! F( Z, i% K5 e : F7 N' a" Q# }, _9 _; I
(ai_sysvar nil)! x3 J' t3 M2 l4 F
(setq *error* m:err m:err nil)5 F! R0 E" M- c8 ~( p& \* ]
(princ). _% k2 @' W# k9 C
)
' L E8 \+ {4 O& T
/ G) i3 N# C! \$ h F6 C( K0 _0 l/ I& Y9 E, f- i4 U) H( @
! T4 a) U7 J- o+ ~5 w% n
;;;=== Make Object's Layer Current =============================* Z( b- s& J: p* W: q1 R9 |
% R. ?3 K, [' \ [. Q
;; Makes the layer of the selected object current. If there is one
+ [6 L) D! S9 O0 V$ X;; object in the pickfirst set, it's layer is made current without
( X' U( w2 _: f7 o7 K+ X;; prompting for an object. Else a prompt is issued.& v$ a# e. [3 w. B& O7 F+ n, Z" U9 g
(defun c:ai_molc(/ old_error end_undo old_cmdecho set1 ent undo_control)
$ R. s" P1 g/ [9 D- E/ @% J+ N, m
9 `8 b9 V( C, J! {9 Z9 H+ w ;; Simple error handling.
/ i9 K8 ?# E, ^, Z) E2 E) x (defun molc_error (s)
8 A H. f: I/ M! L) r ;; Reset error handling., _1 B7 V2 H, u0 O, N
(if old_error (setq *error* old_error))- R8 a) [3 f2 e
;; End undo if we started one.5 C. _5 y I0 y/ t% y
(if (eq end_undo 1) (command "_.undo" "_end"))! } K6 }% D e G
;; Reset command echo* B" Z w; w' \5 t
(if old_cmdecho (setvar "cmdecho" old_cmdecho)), u" k) h' |) F. ?. c
;; Silent exit. w* a# s- \: h0 a! f4 C
(princ)
# \$ V: b" m) h) @+ ] )
" m8 Y6 n( m" s9 ? 3 Z5 U( c |: B$ W5 ?
;; Save current error function.
! Q9 `% g4 P* ~* \ (setq old_error *error*)
* T8 v6 y% k! M # p" X9 W# U3 |5 r
;; Set error handling to molc's error function.
- e# @5 k! w( W/ h$ M (setq *error* molc_error)
) W% ?% x/ g# }* U3 C0 c# L1 z M
1 H9 d" P1 b1 p8 p/ Q ;; Save cmdecho setting.
9 n6 z& _' ]4 x% p (setq old_cmdecho (getvar "cmdecho"))9 W( K9 _1 h9 i3 l* p
- f- ]% b' A l; j2 Q: P ;; Turn off cmdecho n9 R |1 ^! l' N9 a/ v' P1 @7 I
(setvar "cmdecho" 0)' n' W% y9 }) x' b. d) P1 w( T9 c" G
. u2 x9 W$ R% }1 ?0 N
;; If Pickfirst is on and the selction set contains
B( m1 i$ J! K" g9 C2 c ;; one object, then use it, else prompt for one.0 O( ~$ `( P. A. R& ]# n6 }
(if (and (eq 1 (logand 1 (getvar "pickfirst")))
1 q4 B- z) p8 N" N (setq set1 (ssget "_i"))6 f4 {# [7 L& ~1 @/ X6 E9 J
(eq 1 (sslength set1))
. R0 e! X2 t) k4 s* G8 D )4 o$ e5 w" H+ R- f2 U
(progn
5 a/ v9 A( z) ]2 s# a7 F (setq ent (entget (ssname set1 0))) , G* d/ y( y! {6 E$ I Y9 C
(sssetfirst nil nil)7 W) Y2 q. V1 K) f# Z* ^+ p7 y3 m
)
( M$ t% e! B$ m, x0 Q0 V (progn 6 i3 V. h% m0 `' T! Q
(sssetfirst nil nil)
# B0 P$ G0 ]8 N0 b (setq ent (entget (car (entsel "\n选择将使其图层成为当前图层的对象: "))))
/ x+ v; ~, \( Z" W: ~' w )
& W# } o' N c )
- \5 ]' u8 N: g$ W4 t ' c# w/ l/ S; f2 t0 A! q3 ]
;; Get undo setting.
1 p/ m7 P% r5 Z! y" v (setq undo_control (getvar "undoctl"))
0 L, G, S) ?: z' l # ~3 I6 h' g; M% [' b/ {
;; Initialize flag to to end undo.' V k L$ E* V) K* S
(setq end_undo 0)
# v" B8 E+ p6 g' @2 O 8 f" S3 s' Q, W5 K
;; Begin Undo group if need be.
3 i9 B) \' _& \; [9 W (if (and (= 1 (logand 1 undo_control)) ; undo on/ a6 ^& S; m& e" s
(/= 2 (logand 2 undo_control)) ; not single undo/ B/ l/ A4 S. X2 y8 b
(/= 8 (logand 8 undo_control)) ; no active group+ s& j$ N$ S1 b. p
)
( G: H- C+ G1 ]5 L2 s (progn , U3 h6 A! C2 A% d0 c
;; Begin a new one
) C2 ?! b! `/ F2 R (command "_.undo" "_begin")
3 q, ^5 {, y9 m3 r3 R ;; Set flag so that we know to end undo.
# z9 E4 U; V7 V2 T) o (setq end_undo 1)
% |5 m* l% R! s3 _ )
- e( H3 g6 q( v: q; G7 A( ^ )5 Y) ^# x/ H: k
, Z. |/ ]9 R8 f: Z* s ;; Make object's layer current.
7 \. B& A3 U% [1 r (setvar "clayer" (cdr (assoc '8 ent)))4 R1 Z3 e4 j. D$ F! `/ t: H6 d& {
( ?5 { z1 x% |! T
;; Print message
; G# R" x3 B3 V4 A/ \) v& ~' z4 W (princ (strcat "\n" (getvar "clayer") " 现在是当前图层。"))
2 \2 I, J y) B C 5 W1 k- G! M$ k2 A, k6 {
;; Undo end1 E/ s. w4 t* K7 `) F: \
(if (eq 1 end_undo)
& }2 Q) q) F; w& B (command "_.undo" "_end")4 K5 z4 x; ~# k! f1 X1 G$ {$ [
)
5 N; r0 r8 M* T# J) l 6 M/ N2 g( K6 n+ |3 U4 w O
;; Turn on cmdecho
* l1 n; V$ v$ M4 D" I' z1 T (setvar "cmdecho" old_cmdecho)
4 M2 C' C' j$ a* Q R9 ]% b0 o7 a1 M- k, [
;; Reset error function.
' j5 c# Z- M9 l- b8 D (setq *error* old_error)
' v9 b- g* }* s1 ^
& O8 t# ]" o! Y2 W$ z3 o ;; Silent exit.
8 @2 {0 e2 i2 A" r+ D: G* s (princ)
; y0 [0 p# C4 ?) m5 |- K t$ v)
6 H1 ]$ {- h* k& j5 U1 _5 B! ^/ Y3 V( ^. B
;;; Shortcut menu Deselect All item.5 b( y5 q! ~+ }* i" I2 f# Y) `% r
% {% W+ S8 q1 q, M' U; P(defun ai_deselect ()- A8 q$ s% S, L
(if (= (getvar "cmdecho") 0) ;start if
1 S" {, i7 `, F9 E* e (command "_.select" "_r" "_all" "")5 ~& w: ?* J @) e% \
(progn ;start progn for cmdecho 19 A u: ?0 S3 M% H; _0 t9 \
(setvar "cmdecho" 0)( E1 ^' y$ t0 _+ ?- r. o" X
(command "_.select" "_r" "_all" "")1 U2 l8 ^3 ]& X. F g
(setvar "cmdecho" 1)1 f" G F+ d$ }: W/ N
) ;end progn for cmdecho 1
+ ^& ~: k1 @1 R- S$ E( J y$ P ) ;end if8 Q; Z8 L" }% t+ [8 m
(terpri)
2 ?' y3 T/ o) h6 \9 R8 ` (prompt "所有对象都已取消选择")+ t& M& ]7 Z5 X0 T5 O0 P& M' o: F
(princ)
9 I/ C' R& B" z: U6 A) i)
6 z: i& \5 Z5 w+ `4 n6 b& Q0 S, U& _& |5 x
;;;9 K% F; p' C, m, \5 A. \( _) g
;;; Enable Draworder to be called from a menu, ?& O1 G5 E" ]' \0 B
;;; Checks for Pickfirst selected objects
7 E* t, Y0 v1 m0 U6 v$ R G4 p;;;
f4 z: A5 J/ q- o/ \
+ s# l, K4 ?& S+ W4 B( R(defun ai_draworder (option / ss )
~( P/ n2 ~) k
{+ C0 G4 w/ N. h2 {* W* W (setq m:err *error* *error* *merr*)
) T( v# \9 J3 y0 I1 d (ai_sysvar '("cmdecho" . 0))
5 B" i% P8 M* f- u9 A# _$ e- |: l5 `/ L7 e$ \5 W b- Y
(if (setq ss (ssget "_I"))* U; D# @, C, {1 Q" N: V5 u1 \$ J; j
(command "_.draworder" option)
3 p( m) `. }, {' s (if (setq ss (ssget))7 K7 s0 ?+ y* ?8 L8 s# g
(command "_.draworder" ss "" option)
: ^: S0 {+ Q6 V4 h9 Q )- \% _; f) {" A2 }, E
); U" }: d! v x) W5 X8 |
(ai_sysvar NIL)
* _0 }- d& X8 `' s" d5 h; {5 p (setq *error* m:err m:err nil)
% o. n( L. S" ?: \1 Y6 h: W9 S' ` G
(princ)' N) ?$ v+ K& v. \. k1 e. L$ \
)
' f* W8 k6 Q4 y5 B5 N5 G2 ?, y4 ]& j4 Z6 {: Q- i; Z
(defun c:vlisp ()8 ^* N8 ~. p; J3 n" j+ b1 Z
(if (/= nil c:vlide) (c:vlide))& N( K8 P9 R, V" X
)+ P6 d" H9 h' O5 g( |
8 ]7 c. ?: Z4 Y, u4 s' g(princ "已加载。")+ ] E4 X3 t. L0 V
(princ) |