dingtiedt 发表于 2015-7-23 19:58 
就是先组织了一下
(defun c:tmp ()
给个例子你参考下
 - (defun c:tt (/ al alpt cnt dif dll doc el obj ss vs xpt xpt2)
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
- (princ "\n选择需要对齐的多重引线")
- (if (and (setq ss (ssget ":L" '((0 . "MULTILEADER"))))
- (setq al (car (entsel "\n选择保持不变的多重引线: ")))
- (setq alpt (cdr (assoc 12 (entget al))))
- (setq xpt (car alpt))
- (setq vs (getvar 'viewsize))
- )
- (progn (vla-endundomark doc)
- (vla-startundomark doc)
- (grdraw (polar alpt (angtof "90") vs) (polar alpt (angtof "270") vs) 1)
- (foreach ml (vl-remove al (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
- (setq el (entget ml)
- obj (vlax-ename->vla-object ml)
- xpt2 (cadr (assoc 12 el))
- dif (* (abs (- xpt xpt2)) (getvar "CANNOSCALEVALUE"))
- cnt -1
- )
- (if (minusp (vlax-get obj 'doglegged))
- (progn (setq dll (vla-get-dogleglength obj))
- (while (and (not (equal xpt xpt2 0.01)) (< (setq cnt (1+ cnt)) 2))
- (vla-put-dogleglength obj (+ dll (setq dif (- dif))))
- (setq xpt2 (cadr (assoc 12 (entget ml))))
- )
- )
- )
- (vla-update obj)
- )
- (vla-endundomark doc)
- )
- )
- (princ)
- )
|