|
|

楼主 |
发表于 2010-1-17 15:19:47
|
显示全部楼层
来自: 中国上海
本帖最后由 zjf00 于 2010-1-17 15:22 编辑
" A) k5 i1 S3 Y
; g7 N6 E: S- i, I+ y9 |) [' ^等了好久也没有等到有价值的回复。8 \" F4 J; Y# M
其实这对于会一些lisp的人来说真的是一件很容易的事
# N% v8 ]: s/ M我没有学过lisp,不过依靠N久以前学过的一点点C语言的编程基础,再参照其他高手写的类似的lisp代码,总算凑齐了一段代码,解决了这个问题,现在发出来和有需要的同志共享一下:6 X- _1 D5 @4 E* g% e- L1 ^! X; v
(defun c:dimdd (/ measure real result ss text)
* V% Z U7 {% w! Q(vl-load-com) $ [0 W. P7 p+ L0 U2 |; u4 }0 S: d
(vla-endundomark ^9 K( [: m2 b7 y. ~8 \
(vla-get-activedocument
O7 s" \6 o" X/ _) c4 S$ P (vlax-get-acad-object) 6 O0 j/ E* d, T) `
)
( n+ G% j' {: E. h7 W, z1 ^/ _3 }$ A% G) 9 o- S5 ~, z5 R5 H* N1 W9 y' b
(vla-startundomark ) V( f/ |: {$ s R+ E
(vla-get-activedocument
& k. K( R8 q! f0 ?. B ` (vlax-get-acad-object) * q% W: B/ Y- N [3 ]7 i
) f* u# }, k o" w; D4 ?. c8 S
)
t& F8 x5 S# _# [ (setq ss (ssget '((0 . "DIMENSION"))))
W" j- r- G+ o ) [/ p1 [! |; D3 h/ m
(foreach obj 6 X* V. ?! j) h! @$ O* w L. m
(mapcar # x8 x2 | a! Y! {
'vlax-ename->vla-object
: b) Z0 ~4 ~6 ?2 c; d (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) 8 v6 W/ E0 k0 [: ^6 {) A
) 3 y3 D1 B: x0 `" \& N
(if (and (setq text (vla-get-textoverride obj))
: V8 \0 R( N8 ?+ s5 ?5 i, ~ (setq measure (vla-get-measurement obj))
0 B2 O: C6 w& a5 v0 V% w1 b; h/ _% z (/= text "") 3 V7 U( q" P7 {5 C4 I3 ~
(numberp (read text)) # _1 I9 {. i9 Y ?
) & N6 N4 l, ~/ T, a
(setq real (read text)) ! L" y( c4 g& j; q8 @
(setq real measure) 7 H8 i t8 G( R' i# P5 A! v
)
; ~3 S2 j0 y& r" r (and real 0 m2 n1 F+ I9 T5 i/ a" a) R' @
(setq result (vl-princ-to-string (+ real 0.0))) 9 L" m% w2 [( d6 D6 P
(vla-put-textoverride obj result) # P+ p. \: G p, K8 q0 A
) $ |' h" }1 X8 S1 X
)
% h) |& h' Q1 a: T, z4 {! G- E, {9 d2 v: Y& Q: F
(vla-endundomark
0 @2 R7 L* X- N: z, N# z (vla-get-activedocument : }1 u |) m* ~' K- A) P" \) i7 T
(vlax-get-acad-object)
7 ~" O( Z; i$ A+ s, q+ U ) ( h1 y- p; ^ S0 \# q4 [' o$ m
) 8 l+ D/ w$ s3 O% t
(princ)
6 ?) b3 Y5 l, [8 R. B! u) ; }# X9 w* s& m' \. T
(princ "\n本程序作者: zjf00 ") |
|