Try this quick & dirty lisp, just change an interval and other stuffs inside the code
Code:
(defun C:plb (/ acapp acpt acsp ang cnt cur_length datafile div ent ep filename gap i p pline pline_num pt
pt_list seg_length sp step str_text txtpt txt_height verts x)
(vl-load-com)
(defun rem_dupes (lst prec)
(if lst
(cons (car lst)
(rem_dupes
(vl-remove-if '(lambda(x)(equal x (car lst) prec)) lst) prec)
)
)
)
(setq acsp (vla-get-block
(vla-get-activelayout
(vla-get-activedocument
(setq acapp (vlax-get-acad-object))))
)
)
(setq pt_list nil div 100.0)
(setq ent (entsel "\n\tSelect polyline >> "))
(setq pline (vlax-ename->vla-object (car ent)))
(setq verts (vl-remove-if 'not
(mapcar '(lambda(x)(if (= 10 (car x))(trans (cdr x) 0 1)))
(entget (car ent))))
)
(setq cur_length 0.)
(repeat (1- (length verts))
(setq sp (car verts)
ep (cadr verts)
pt_list (cons sp pt_list)
)
(setq seg_length
(distance sp ep)
step 0.)
(if (> seg_length div)
(repeat (fix (/ seg_length div))
(setq cur_length (+ cur_length div))
(if (and (setq pt (vlax-curve-getpointatdist pline cur_length))
(> (distance pt ep) div))
(setq pt_list (cons (vlax-curve-getclosestpointto pline pt) pt_list))
)
)
)
(setq verts (cdr verts))
)
(setq pt_list (cons (vlax-curve-getendpoint pline) pt_list))
(setq pt_list (reverse (rem_dupes pt_list 1.0)))
(setq pline_num (getint "\n\tPline label number: "))
(setq cnt 0
txt_height 25
gap (* 2 txt_height))
(mapcar '(lambda (pt)
(setq ang (angle '(0 0 0)
(trans (vlax-curve-getFirstDeriv
pline
(vlax-curve-getParamAtPoint pline (trans pt 1 0)))
0
1
T)))
(setq txtpt (polar pt (* pi 1.5) gap))
(setq str_text (strcat (itoa pline_num) "-" (itoa (setq cnt (1+ cnt)))))
(vlax-invoke acsp 'insertblock pt "tick" 1 1 1 ang)
(vlax-invoke acsp 'addtext str_text txtpt txt_height))
pt_list)
(initget 1 "Yes No")
(setq acpt (getkword "\nDo you want to write points to file ? [Yes/No] <Yes>: "))
(if (eq acpt "Yes")
(progn
(setq filename (strcat (getvar "dwgprefix")
(vl-filename-base (getvar "dwgname"))".csv")
)
(setq datafile (open filename "a"))
(setq i 1)
(foreach pt pt_list
(write-line (strcat (strcat (itoa pline_num) "-" (itoa i))
(chr 9);<--tab delimited, (chr 44) - comma delimited
(rtos (car pt)2 3);<--precision 3 decimals
(chr 9);<--tab delimited, (chr 44) - comma delimited
(rtos (cadr pt) 2 3)
(chr 9);<--tab delimited, (chr 44) - comma delimited
(rtos (caddr pt)2 3))
datafile)
(setq i (1+ i))
)
(close datafile)
)
)
(princ)
)
~'J'~
Bookmarks