本帖最后由 作者 于 2005-10-16 21:05:00 编辑
来个简单功能的,我还没测试各种情况,有问题再改
(defun c:t1 (/ en num) (vl-load-com) (while (not (setq en (ssget ":s" '((0 . "circle,line,spline,lwpolyline,arc,ellipse")))))) (setq en (ssname en 0)) (setq num (getint "\nNumbers<10>: ")) (if (null num) (setq num 10) ) (setq lst (GetPtLst en num)) ;Get Point Lst from entity (write en lst) ;write the point to the file which named by the entity handle (prin1) ) (defun write (en lst / msg file fileID) (if (vlax-curve-isClosed (vlax-ename->vla-object en)) (setq msg (strcat "/* " (tt lst) "; Curve is Closed")) (setq msg (strcat "/* " (tt lst) "; Curve is Opened")) ) (setq file (strcat "C://" (cdr (assoc 5 (entget en))) ".txt")) (setq fileID (open file "w")) (princ msg fileID) (foreach pt lst (princ "\n" fileID) (princ (car pt) fileID) (write-char 44 fileID) (princ (cadr pt) fileID) ) (close fileID) )
(defun GetPtLst (en num / lst vn AddParam param) (setq lst '() vn (vlax-ename->vla-object en) ) (setq AddParam (/ (vlax-curve-GetEndParam vn) num) param (- 0 AddParam) ) (if (not (vlax-curve-isClosed vn)) (setq num (1+ num)) ) (repeat num (setq lst (append lst (list (vlax-curve-GetPointAtParam vn (setq param (+ param AddParam)))))) ) lst ) (defun tt (lst / i ctClock Clock p0 p1 p2 m) (setq lst (append lst (list (car lst)) (list (cadr lst)))) (setq i 0 ctClock 0 Clock 0 ) (repeat (- (length lst) 2) (setq p0 (nth (+ i 0) lst) p1 (nth (+ i 1) lst) p2 (nth (+ i 2) lst) i (1+ i) ) (setq m (- (* (- (car p1) (car p0)) (- (cadr p2) (cadr p0))) (* (- (car p2) (car p0)) (- (cadr p1) (cadr p0))) ) ) (cond ((< m 0) (setq Clock (1+ Clock))) ((> m 0) (setq ctClock (1+ ctClock))) ) ) (if (> ctClock Clock) "Direction is Counter Clock" "Direction is Clock" ) )
|