举个简单的例子:
- (defun bearings ( ent / enx lst )
- (setq enx (entget ent)
- lst (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) enx))
- )
- (if (= 1 (logand 1 (cdr (assoc 70 enx))))
- (setq lst (append lst (list (car lst))))
- )
- (if (cdr lst)
- (cons (distance (car lst) (cadr lst))
- (apply 'append
- (mapcar
- (function
- (lambda ( a b c )
- (list (* 180.0 (/ (- (rem (+ pi pi (- (angle b a) (angle b c))) (+ pi pi)) pi) pi)) (distance b c))
- )
- )
- lst (cdr lst) (cddr lst)
- )
- )
- )
- )
- )
要测试:
- (defun c:test ( / sel )
- (if (setq sel (ssget "_+.:E:S" '((0 . "LWPOLYLINE") (-4 . "<NOT") (-4 . "<>") (42 . 0.0) (-4 . "NOT>"))))
- (print (bearings (ssname sel 0)))
- )
- (princ)
- )
|