|
|

楼主 |
发表于 2010-1-17 15:19:47
|
显示全部楼层
来自: 中国上海
本帖最后由 zjf00 于 2010-1-17 15:22 编辑 # t6 A6 D4 y) y9 i3 ?- m# E
! ^$ v5 t1 V- w2 f2 b8 }等了好久也没有等到有价值的回复。
, {- f& R4 [. I3 l( L! Z其实这对于会一些lisp的人来说真的是一件很容易的事( A& q& T1 c r1 t# d
我没有学过lisp,不过依靠N久以前学过的一点点C语言的编程基础,再参照其他高手写的类似的lisp代码,总算凑齐了一段代码,解决了这个问题,现在发出来和有需要的同志共享一下:
. x' t# P, Z! s, F(defun c:dimdd (/ measure real result ss text) & v8 X& `! Y' J
(vl-load-com) 4 ]+ c" `3 b9 W2 j8 S; H& R( y
(vla-endundomark
* Q: p3 C3 s/ V7 d (vla-get-activedocument
$ c* K7 v. D( Y$ K1 t (vlax-get-acad-object)
: W4 F& A3 s) |$ O6 I5 V& q- U )
) A# t" m& S I' ^7 }1 R) , y0 ~1 [& `' b1 A' i2 u" S
(vla-startundomark
" @ T, |/ l8 a4 b$ i (vla-get-activedocument
) \# P) ^, E, }/ d. x (vlax-get-acad-object)
5 K; Y+ r3 \- J/ `8 O& u) O )
6 ?2 v- {9 x; U; N" m7 i) " U* ^ s! N. c2 m
(setq ss (ssget '((0 . "DIMENSION"))))
5 e; I. \! Q. y : }* Y2 h& U. h
(foreach obj 3 k( u8 t' H/ U+ g6 W" p4 L0 o/ k
(mapcar
, V5 g% E7 b# q& e% | 'vlax-ename->vla-object
3 C# p/ y* q6 U; R0 L (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
) d* O% l2 Z! {. |( @7 C/ o ) ' X- x+ m6 g/ u+ F! P
(if (and (setq text (vla-get-textoverride obj)) u7 }# n% U% d, ~; ~$ ` H& P( b
(setq measure (vla-get-measurement obj)) 7 @3 r7 K! k) U
(/= text "") 8 J; i9 L. k b3 E
(numberp (read text))
( s3 A) N. m' L) f# q6 | ) 5 k+ Y+ X3 ~) ]& { [6 I: T! K
(setq real (read text))
* u" H2 T6 {* d" e(setq real measure)
) _( z9 F. h) F Y1 Z- s ) 2 B8 _/ D) f: s( ]/ h# u
(and real
" n9 b. f: i: U: F' F (setq result (vl-princ-to-string (+ real 0.0))) 0 F2 i" o$ r2 T9 v6 P/ H
(vla-put-textoverride obj result) 2 F5 K8 \5 c! c& j R
)
- v: `# O; G& c8 F+ f" x( c )
+ [9 a1 d9 f3 N1 G* _7 i
% v3 \2 B$ G3 Z: p( `(vla-endundomark 2 h% {6 Y1 P8 ?! N( V5 Y
(vla-get-activedocument 3 w- e& _/ u2 F8 M
(vlax-get-acad-object) $ ]; T7 \% [0 N2 C' w* R
)
0 P1 v. a4 N' ]- ~% {% k) , l0 c( T& q* F0 n% v
(princ)
* w. A# ~) O+ M8 a% l9 F p)
1 ^0 K8 `: U# K$ a(princ "\n本程序作者: zjf00 ") |
|