如果总是将LWDOLYLINE作为路径曲线,则可以检查其顺时针p方向,并根据该方向决定使用哪个版本的块进行测量。。。
- (defun ListClockwise-p (lst / z vlst)
- (vl-catch-all-apply 'minusp
- (list
- (if
- (not
- (equal 0.0
- (setq z
- (apply '+
- (mapcar
- (function
- (lambda (u v)
- (- (* (car u) (cadr v)) (* (car v) (cadr u)))
- )
- )
- (setq vlst
- (mapcar
- (function
- (lambda (a b) (mapcar '- b a))
- )
- (mapcar (function (lambda (x) (car lst))) lst)
- (cdr (reverse (cons (car lst) (reverse lst))))
- )
- )
- (cdr (reverse (cons (car vlst) (reverse vlst))))
- )
- )
- ) 1e-6
- )
- )
- z
- (progn
- (prompt "\n\nChecked vectors are colinear - unable to determine clockwise-p of list")
- nil
- )
- )
- )
- )
- )
更多信息:
http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/polyline-direction-clockwise-or-counterclockwise/td-p/6050612
HTH,M.R。 |