|
|

楼主 |
发表于 2010-1-17 15:19:47
|
显示全部楼层
来自: 中国上海
本帖最后由 zjf00 于 2010-1-17 15:22 编辑 2 w6 ?& ~* e" e* y" R7 t8 h
# L0 i4 E$ u' x M% ~; I- y7 |等了好久也没有等到有价值的回复。( d! N+ p" O7 E3 ^
其实这对于会一些lisp的人来说真的是一件很容易的事3 P+ j! D5 A" J" S+ F# l
我没有学过lisp,不过依靠N久以前学过的一点点C语言的编程基础,再参照其他高手写的类似的lisp代码,总算凑齐了一段代码,解决了这个问题,现在发出来和有需要的同志共享一下: d/ v! m# K* C: a3 h* U
(defun c:dimdd (/ measure real result ss text) & {7 d0 q {9 |4 R3 N6 x& U6 V
(vl-load-com)
8 Y% U) V, w8 b$ y0 G(vla-endundomark
: L2 k/ \; u3 r& w9 a" w# k (vla-get-activedocument
/ s4 L6 C( \( @6 E: O, ` (vlax-get-acad-object)
1 q3 q/ }2 t- S1 ^ P5 w" u; P2 J )
! i. K/ |) F( x7 W9 V( p2 d: K) / Q& z+ b" N) y7 K
(vla-startundomark 2 I1 ^$ G$ y$ l+ m% K2 x
(vla-get-activedocument - I* c, U6 X f R
(vlax-get-acad-object) - K: U3 r. Y+ z# R8 J+ |
)
+ u8 _/ c5 D* [7 h- N0 j)
" M, [# F5 ^1 _) y6 b/ S L (setq ss (ssget '((0 . "DIMENSION")))) , Q+ s6 Q$ W2 |3 s6 A4 t- ^: [
' t/ X4 ^. G5 i (foreach obj 3 B3 J( U' C. V: _9 W
(mapcar
9 r# r7 w# o4 k( l6 s; e8 F 'vlax-ename->vla-object , P7 l2 \/ \/ {0 [1 @
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
; q/ L$ i5 ]0 X! ]9 l )
8 X0 s9 O' Y0 e; T3 P6 B, J. N (if (and (setq text (vla-get-textoverride obj)) % q$ b4 _3 B# |5 G
(setq measure (vla-get-measurement obj))
) o5 Q3 A4 t: N/ O2 C' l( _+ S (/= text "") 4 V% ] L$ ~% d1 m( m
(numberp (read text))
+ } u r- E5 D+ R ) 1 |2 N) W _7 z$ K
(setq real (read text)) ( M+ w; k& ]* j2 n
(setq real measure) 4 s4 O! q2 Z: p ]+ q) Z
)
5 q9 H# O! U! z0 O; a$ _1 ]: k4 d9 U G (and real
, z- \/ f! o, h2 I2 u (setq result (vl-princ-to-string (+ real 0.0)))
& }6 e7 }7 K) F: p9 Z (vla-put-textoverride obj result)
" {% c7 o( R2 k6 t; H% X )
" }) V9 f0 J. E# V+ P ) 8 P2 O# A9 }. I+ A {4 R3 \* s
4 j- p( _; C; r5 C5 t# l
(vla-endundomark
" u- Y3 I4 y9 K( H- T) @ E6 D (vla-get-activedocument
t2 s5 Q H# a (vlax-get-acad-object) 8 I6 g Y" R( n! h
) ( O& G G! O2 @2 q. ]' S
) : D/ J' [- B" {2 W
(princ)
( D$ V5 J+ R" T, ^8 z) }! v6 E( z1 d) D
(princ "\n本程序作者: zjf00 ") |
|