;milling animation - CAD Studio - www.cadstudio.cz - www.cadforum.cz

(if (not _MILLDELAY) (setq _MILLDELAY 8))

(defun C:MillAnim (/ *acaddoc src refpt mill path opath delta tart startp endp par pt oldos dist tdist)
(if (and
 (setq src (car (entsel "\nSelect the source solid: ")))
 (setq mill (car (entsel "\nSelect the mill tool solid: ")))
 (setq refpt (getpoint "\nPick reference point of the mill tool: "))
 (setq path (entsel "\nSelect the mill path curve (pick near start): "))
 )
(progn
 (setq delta (getdist "\nSpecify the step distance (max. half-dia) <0.5>: "))
 (if (not delta)(setq delta 0.5))(princ (rtos delta 2 2))
 (setq start (osnap (cadr path) "_END")  path (car path)  opath (vlax-ename->vla-object path))

(setq *acaddoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-StartUndoMark *acaddoc)

(setq oldos (getvar "OSMODE"))
(setvar "OSMODE" 0)(setvar "CMDECHO" 0)
(command "_MOVE" mill "" refpt start) ; move to curve

(setq dist 0.0)
(setq par (vlax-curve-getEndParam opath)  tdist (vlax-curve-getDistAtParam opath par))
(while (< dist tdist)
 (setq pt (vlax-curve-getPointAtDist opath dist))
 (if pt (progn
 (command "_COPY" mill "" start pt )
 (command "_SUBTRACT" src "" "_L" "")
 (redraw)
 ;(getstring "<go>")
 (command "_DELAY" _MILLDELAY)
 ))
 (setq dist (+ dist delta))
)
(setvar "OSMODE" oldos)(setvar "CMDECHO" 1)
(vla-EndUndoMark *acaddoc)
(princ "\n_U to Undo")
))
(princ)
)

