程序功能:判断是顺时针还是逆时针,如果是顺时针则更改为逆时针。。。REV函数更改顶点顺序,可单独使用。。。 - (defun GetCen(pl / pt1 pt2)
- (vla-getboundingbox (vlax-ename->vla-object pl) 'pt1 'pt2)
- (setq pt1 (vlax-safearray->list pt1))
- (setq pt2 (vlax-safearray->list pt2))
- (list (/ (+ (car pt1) (car pt2)) 2.0)
- (/ (+ (cadr pt1) (cadr pt2)) 2.0)
- )
- )
- (defun GEO_CCW (p0 p1 p2 p3 / ang1 ang2 ang3)
- (setq ang1 (angle p0 p1))
- (setq ang2 (angle p0 p2))
- (setq ang1 (- ang2 ang1))
- (if (> (abs ang1) pi)
- (setq ang1 (+ (* -2 pi (/ ang1 (abs ang1))) ang1))
- )
- (setq ang3 (angle p0 p3))
- (setq ang2 (- ang3 ang2))
- (if (> (abs ang2) pi)
- (setq ang2 (+ (* -2 pi (/ ang2 (abs ang2))) ang2))
- )
- (if (> (* ang1 ang2) 0)
- (/ ang1 (abs ang1))
- (cond
- ((> (abs ang1) (abs ang2))
- (if (= ang2 0)
- 0
- (/ ang2 (abs ang2)))
- )
- ((<= (abs ang1) (abs ang2))
- (if (= ang1 0)
- 0
- (/ ang1 (abs ang1)))
- )
- )
- )
- );DEFUN
- (defun c:PlineCCW (/ pline step param nParam pt pt1 pt2 ptc i mp CCWLST)
- (setq pline (car (entsel "Select lwpline")))
- (setq step 100)
- (setq mp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
- (setq ptc (getcen pline))
- (setq param (/ (vlax-curve-getDistAtParam pline (vlax-curve-getEndParam pline)) step))
- (setq i 0)
- (repeat (1- step)
- (setq nParam (* i param))
- (setq pt (vlax-curve-getPointAtdist pline nParam))
- (setq pt1 (vlax-curve-getPointAtdist pline (+ (* (/ 0.5 step) param) nParam)))
- (setq pt2 (vlax-curve-getPointAtdist pline (+ (* (/ 1.0 step) param) nParam)))
- (setq CCWLST (append CCWLST (list (GEO_CCW ptc pt pt1 pt2))))
- (setq i (1+ i))
- )
- (if (> (length (vl-remove 1.0 CCWLST)) (length (vl-remove -1.0 CCWLST)))
- (progn
- (rev pline)
- (princ "\nPline is clockwise")
- (princ "\nChanged to counterclockwise")
- )
- (princ "\nPline is counterclockwise")
- )
- (princ)
- ) ;end defun
- (defun Rev(pl / ents i m ptlst ptlst2 item)
- (setq ents (entget pl))
- (setq i 0)
- (setq ptlst (reverse (member (assoc 10 ents) ents)))
- (setq ptlst (cdr (member (assoc 10 ptlst) ptlst)))
- (repeat (/ (length ptlst) 4)
- (setq ptlst2 (append ptlst2 (list (list (nth i ptlst) (nth (+ i 1) ptlst) (nth (+ i 2) ptlst) (nth (+ i 3) ptlst)))))
- (setq i (+ i 4))
- )
- (setq ptlst2 (mapcar '(lambda(x) (subst (cons 42 (- (cdr (assoc 42 x)))) (assoc 42 x) x)) ptlst2))
- (setq ptlst2 (apply 'append ptlst2))
- (setq i 0 m t ptlst nil)
- (while m
- (setq item (nth i (reverse ents)))
- (setq ptlst (append ptlst (list item)))
- (if (= (car item) 10) (setq m nil))
- (setq i (1+ i))
- )
- (setq ptlst (reverse (subst (cons 42 (- (cdr (assoc 42 ptlst)))) (assoc 42 ptlst) ptlst)))
- (setq ptlst2 (cons (car ptlst) ptlst2))
- (setq ptlst2 (append ptlst2 (cdr ptlst)))
- (setq i 0 m (vl-position (assoc 10 ents) ents) ptlst nil)
- (repeat m
- (setq ptlst (append ptlst (list (nth i ents))))
- (setq i (1+ i))
- )
- (command "_.undo" "be")
- (entmod (append ptlst ptlst2))
- (command "_.undo" "e")
- )
|