Тема: Доработка программы изменения направления линии
одскажите пожалуйста, как доработать программу по изменению направления полилинии, что бы можно было селектировать сразу несколько полилиний и менять у них направление на "по часовой стрелке", при этом подсчитывая, ск-ко было с обратным?
(defun GetVertexList (entlist / vertlist coords) (setq vertlist (member (assoc 10 entlist) entlist)) (repeat (cdr (assoc 90 entlist)) (setq coords (cons (cdar vertlist) coords) vertlist (cddddr vertlist))) (reverse coords) ) ;end defun (defun GEO_CCW (p0 p1 p2 / dx1 dx2 dy1 dy2) (setq dx1 (- (car p1) (car p0)) dy1 (- (cadr p1) (cadr p0)) dx2 (- (car p2) (car p0)) dy2 (- (cadr p2) (cadr p0))) (cond ((> (* dx1 dy2) (* dy1 dx2)) 1) ((< (* dx1 dy2) (* dy1 dx2)) -1) (t (cond ((or (minusp (* dx1 dx2)) (minusp (* dy1 dy2))) -1) ;; explicit distance ((>= (+ (* dx1 dx1) (* dy1 dy1)) (+ (* dx2 dx2) (* dy2 dy2))) 0) (t 1) ) ) ) ) ;end defun (defun c:PlineCCW (/ pline res ptlst rptlst lay) (setq pline (entsel "\nSelect lwpolyline")) (setq ptlst (GetVertexList (entget (car pline)))) (setq res (GEO_CCW (nth 0 ptlst) (nth 1 ptlst) (nth 2 ptlst))) (if (= res -1) (princ "\nНаправление против часовой.")) (if (= res 1) (progn (setvar "cmdecho" 0) (setq lay (getvar "clayer")) (setq rptlst (reverse ptlst)) (setvar "clayer" (cdr (assoc 8 (entget (car pline))))) (command "_pline" (foreach p rptlst (command p))) (command "_erase" (car pline) "") (setvar "clayer" lay) (setvar "cmdecho" 1) (princ "\Направление по часовой стрелке.") ) ;end progn ) ;end if (princ) ) ;end defun