you can use this lisp file to change polyline direction (cw / ccw) in autocad.
(defun c:rpoly ( / unit mxv v^v transptucs transptwcs 3dplv hplv ohplv lplv olplv splv helv ListClockwise-p
ss cmde i c ch ent l ll clw
)
(defun unit ( v )
(mapcar '(lambda ( x ) (/ x (distance '(0.0 0.0 0.0) v))) v)
)
(defun mxv ( m v )
(mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
)
(defun v^v ( u v )
(mapcar '(lambda ( n ) (- (* (nth (car n) u) (nth (cadr n) v)) (* (nth (cadr n) u) (nth (car n) v)))) '((1 2) (2 0) (0 1)))
)
(defun transptucs ( pt p1 p2 p3 / ux uy uz )
(setq uz (unit (v^v (mapcar '- p2 p1) (mapcar '- p3 p1))))
(setq ux (unit (mapcar '- p2 p1)))
(setq uy (unit (mapcar '- p3 p1)))
(mxv (list ux uy uz) (mapcar '- pt p1))
)
(defun transptwcs ( pt pt1 pt2 pt3 / pt1n pt2n pt3n )
(setq pt1n (transptucs '(0.0 0.0 0.0) pt1 pt2 pt3))
(setq pt2n (transptucs '(1.0 0.0 0.0) pt1 pt2 pt3))
(setq pt3n (transptucs '(0.0 1.0 0.0) pt1 pt2 pt3))
(transptucs pt pt1n pt2n pt3n)
)
(defun 3dplv ( pl / v vl )
(if (and (eq (cdr (assoc 0 (entget pl))) "POLYLINE") ( : "))
(if (eq c "CCW")
(progn
(initget "UCS OCS")
(setq ch (getkword "\nSet 3DPOLYLINES, SPLINES, HELIXES clockwise viewed from UCS and 2DPOLYLINES viewed from (UCS / OCS) : "))
(if (eq ch "UCS")
(progn
(while (setq ent (ssname ss (setq i (1+ i))))
(cond
( (and (eq (cdr (assoc 0 (entget ent))) "POLYLINE") ( : "))
(if (eq ch "UCS")
(progn
(while (setq ent (ssname ss (setq i (1+ i))))
(cond
( (and (eq (cdr (assoc 0 (entget ent))) "POLYLINE") (< 7 (cdr (assoc 70 (entget ent))) 14))
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (3dplv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "3DPOLYLINE" l)
(setq l (subst (cons "3DPOLYLINE" (1+ (cdr (assoc "3DPOLYLINE" l)))) (assoc "3DPOLYLINE" l) l))
(setq l (cons (cons "3DPOLYLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "3DPOLYLINE" ll)
(setq ll (subst (cons "3DPOLYLINE" (1+ (cdr (assoc "3DPOLYLINE" ll)))) (assoc "3DPOLYLINE" ll) ll))
(setq ll (cons (cons "3DPOLYLINE" 1) ll))
)
)
)
)
)
( (and (eq (cdr (assoc 0 (entget ent))) "POLYLINE") (< -1 (cdr (assoc 70 (entget ent))) 6))
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (hplv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "HEAVY2DPOLYLINE" l)
(setq l (subst (cons "HEAVY2DPOLYLINE" (1+ (cdr (assoc "HEAVY2DPOLYLINE" l)))) (assoc "HEAVY2DPOLYLINE" l) l))
(setq l (cons (cons "HEAVY2DPOLYLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "HEAVY2DPOLYLINE" ll)
(setq ll (subst (cons "HEAVY2DPOLYLINE" (1+ (cdr (assoc "HEAVY2DPOLYLINE" ll)))) (assoc "HEAVY2DPOLYLINE" ll) ll))
(setq ll (cons (cons "HEAVY2DPOLYLINE" 1) ll))
)
)
)
)
)
( (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (lplv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "LIGHTWEIGHT2DPOLYLINE" l)
(setq l (subst (cons "LIGHTWEIGHT2DPOLYLINE" (1+ (cdr (assoc "LIGHTWEIGHT2DPOLYLINE" l)))) (assoc "LIGHTWEIGHT2DPOLYLINE" l) l))
(setq l (cons (cons "LIGHTWEIGHT2DPOLYLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "LIGHTWEIGHT2DPOLYLINE" ll)
(setq ll (subst (cons "LIGHTWEIGHT2DPOLYLINE" (1+ (cdr (assoc "LIGHTWEIGHT2DPOLYLINE" ll)))) (assoc "LIGHTWEIGHT2DPOLYLINE" ll) ll))
(setq ll (cons (cons "LIGHTWEIGHT2DPOLYLINE" 1) ll))
)
)
)
)
)
( (eq (cdr (assoc 0 (entget ent))) "SPLINE")
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (splv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "SPLINE" l)
(setq l (subst (cons "SPLINE" (1+ (cdr (assoc "SPLINE" l)))) (assoc "SPLINE" l) l))
(setq l (cons (cons "SPLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "SPLINE" ll)
(setq ll (subst (cons "SPLINE" (1+ (cdr (assoc "SPLINE" ll)))) (assoc "SPLINE" ll) ll))
(setq ll (cons (cons "SPLINE" 1) ll))
)
)
)
)
)
( (eq (cdr (assoc 0 (entget ent))) "HELIX")
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (helv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "HELIX" l)
(setq l (subst (cons "HELIX" (1+ (cdr (assoc "HELIX" l)))) (assoc "HELIX" l) l))
(setq l (cons (cons "HELIX" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "HELIX" ll)
(setq ll (subst (cons "HELIX" (1+ (cdr (assoc "HELIX" ll)))) (assoc "HELIX" ll) ll))
(setq ll (cons (cons "HELIX" 1) ll))
)
)
)
)
)
)
)
)
(progn
(while (setq ent (ssname ss (setq i (1+ i))))
(cond
( (and (eq (cdr (assoc 0 (entget ent))) "POLYLINE") (< 7 (cdr (assoc 70 (entget ent))) 14))
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (3dplv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "3DPOLYLINE" l)
(setq l (subst (cons "3DPOLYLINE" (1+ (cdr (assoc "3DPOLYLINE" l)))) (assoc "3DPOLYLINE" l) l))
(setq l (cons (cons "3DPOLYLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "3DPOLYLINE" ll)
(setq ll (subst (cons "3DPOLYLINE" (1+ (cdr (assoc "3DPOLYLINE" ll)))) (assoc "3DPOLYLINE" ll) ll))
(setq ll (cons (cons "3DPOLYLINE" 1) ll))
)
)
)
)
)
( (and (eq (cdr (assoc 0 (entget ent))) "POLYLINE") (< -1 (cdr (assoc 70 (entget ent))) 6))
(if (eq (setq clw (ListClockwise-p (ohplv ent))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "HEAVY2DPOLYLINE" l)
(setq l (subst (cons "HEAVY2DPOLYLINE" (1+ (cdr (assoc "HEAVY2DPOLYLINE" l)))) (assoc "HEAVY2DPOLYLINE" l) l))
(setq l (cons (cons "HEAVY2DPOLYLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "HEAVY2DPOLYLINE" ll)
(setq ll (subst (cons "HEAVY2DPOLYLINE" (1+ (cdr (assoc "HEAVY2DPOLYLINE" ll)))) (assoc "HEAVY2DPOLYLINE" ll) ll))
(setq ll (cons (cons "HEAVY2DPOLYLINE" 1) ll))
)
)
)
)
)
( (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
(if (eq (setq clw (ListClockwise-p (olplv ent))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "LIGHTWEIGHT2DPOLYLINE" l)
(setq l (subst (cons "LIGHTWEIGHT2DPOLYLINE" (1+ (cdr (assoc "LIGHTWEIGHT2DPOLYLINE" l)))) (assoc "LIGHTWEIGHT2DPOLYLINE" l) l))
(setq l (cons (cons "LIGHTWEIGHT2DPOLYLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "LIGHTWEIGHT2DPOLYLINE" ll)
(setq ll (subst (cons "LIGHTWEIGHT2DPOLYLINE" (1+ (cdr (assoc "LIGHTWEIGHT2DPOLYLINE" ll)))) (assoc "LIGHTWEIGHT2DPOLYLINE" ll) ll))
(setq ll (cons (cons "LIGHTWEIGHT2DPOLYLINE" 1) ll))
)
)
)
)
)
( (eq (cdr (assoc 0 (entget ent))) "SPLINE")
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (splv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "SPLINE" l)
(setq l (subst (cons "SPLINE" (1+ (cdr (assoc "SPLINE" l)))) (assoc "SPLINE" l) l))
(setq l (cons (cons "SPLINE" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "SPLINE" ll)
(setq ll (subst (cons "SPLINE" (1+ (cdr (assoc "SPLINE" ll)))) (assoc "SPLINE" ll) ll))
(setq ll (cons (cons "SPLINE" 1) ll))
)
)
)
)
)
( (eq (cdr (assoc 0 (entget ent))) "HELIX")
(if (eq (setq clw (ListClockwise-p (mapcar '(lambda ( p ) (trans p 0 1)) (helv ent)))) nil)
(progn
(command "_.reverse" ent "")
(if (assoc "HELIX" l)
(setq l (subst (cons "HELIX" (1+ (cdr (assoc "HELIX" l)))) (assoc "HELIX" l) l))
(setq l (cons (cons "HELIX" 1) l))
)
)
(progn
(if (vl-catch-all-error-p clw)
(if (assoc "HELIX" ll)
(setq ll (subst (cons "HELIX" (1+ (cdr (assoc "HELIX" ll)))) (assoc "HELIX" ll) ll))
(setq ll (cons (cons "HELIX" 1) ll))
)
)
)
)
)
)
)
)
)
)
)
(foreach e l
(prompt "\n\nTotal reversement in ") (if (eq c "CCW") (prompt "counter-clock-wise direction of \"") (prompt "clock-wise direction of \"")) (prompt (car e)) (prompt "\" entity(ies) is(are) : ") (princ (itoa (cdr e)))
)
(prompt "\n")
(foreach e ll
(prompt "\nTotal unknown direction of vertices - no reversement processed of \"") (prompt (car e)) (prompt "\" entity(ies) is(are) : ") (princ (itoa (cdr e)))
)
(setvar 'cmdecho cmde)
(princ)
)
(defun c:sclw nil (c:setplsplhelclockw))