我试着用这个做一些事情,虽然在某些方面是错误的。
- (defun c:STADO (/ adoc i SelSet StrValidate AttVal StaList)
- (vl-load-com)
- (setq adoc (vla-get-activedocument (vlax-get-acad-object))
- i 0)
- (if (ssget ":L" '((0 . "INSERT")(2 . "`*U*,POLE-STA")))
- (cond (
- (vlax-for Sta (setq SelSet (vla-get-activeselectionset adoc))
- (if (and (equal (vla-get-effectivename sta) "pole-sta")
- (/= (setq StrValidate (vla-get-textstring (car (setq AttVal
- (vlax-invoke
- Sta
- 'GetAttributes))))) ""))
- (setq StaList
- (cons
- (list StrValidate (nth 26 AttVal))
- StaList))
- )
- )
- (foreach
- Blk (vl-sort
- StaList
- (function (lambda (p1 p2) (< (car p1) (car p2)))))
- (setq p1 (vlax-get p1 'insertionpoint))
- (setq p2 (vlax-get p2 'insertionpoint))
- (setq adodist (distance p1 p2))
- (setq adodist (rtos adodist 2 0))
- (setq adomid (mapcar '+ p1 (mapcar '/ (mapcar '- p2 p1) '(2.0 2.0 2.0))))
- (setq adoang (angle p1 p2))
- (command "-insert" "aerial distance -dyn" adomid "" (angtos adoang) adodist "")
- (cadr Blk) (itoa (setq i (1+ i))))
- )
- )
- (vla-delete SelSet)
- )
- (princ)
- )
我得到错误“错误的参数类型:VLA-OBJECT nil”。我相信这是在lambda和p1/p2变量编码的底部。 |