Exchange Forum > AutoLISP and Visual LISP
ProgressBar revised and added new functions
ProgressBar revised and added new functions

#1

Evgeny
Join Date:
11-30-2009
Hi!
 
Thank you for such a great website!
I use ProgresssBar.lsp, and I've added a couple of new functions.
Code:
;-------------------------------------------------------------------------------
; l:Progress% - Move the Progress Bar
; Arguments: 1
;   percent$ = 0-100 percentage of progress
;-------------------------------------------------------------------------------
(defun Progress% (percent$ / )
  (setq *Inc# (1- percent$))
  (Progress)
  )
;-------------------------------------------------------------------------------
; l:Progress-Of - Move the Progress Bar
; Arguments: 2
;   count$ = cycles counter
;   total$ = total number of cycles.
;Example:
;(setq ssl (sslength ss))
;(setq i 0)
;(while (< i ssl)
;  (Progress-Of i ssl)
;  (setq i (1+ i))
;)
;-------------------------------------------------------------------------------
(defun Progress-Of (count$ total$ / )
  (setq *Inc# (abs (fix (/ (* count$ 100.0) total$))))
  (Progress)
  )
;-------------------------------------------------------------------------------
But I found that progress bar (managed by *Xpt# variable) does not match percentage of progress (Lisp variable *Inc#).
So I modified the main function to fix the problem and changed colors of the bar to make it look more 3D like:
Code:
(defun l:Progress (/ Complete$)
  (setq *Inc# (1+ *Inc#))
  (setq *Xpt# (fix (/ (* 12.3 100 *Inc#) *X#)))
  (setq *Xpt# (fix (/ *Xpt# 7)))
  (setq *Xpt# (* *Xpt# 7))
  (if (< *Xpt# 7) (setq *Xpt# 7))
;;;  (if (= (rem *Inc# 2) 1)
;;;    (setq *Xpt# (+ *Xpt# 7))
;;;  );if
  (start_image "ProgressBar")
  (if (> *Inc# 100)
    (progn
      (setq *Inc# 0 *Xpt# -4)
      (start_image "ProgressBar")
      (fill_image 3 3 (- *X# 5) (- *Y# 5) -15)
    );progn
    (progn
      (vector_image *Xpt#  3 (+ *Xpt# 4)  3 120)
      (vector_image *Xpt#  4 (+ *Xpt# 4)  4 7)
      (vector_image *Xpt#  5 (+ *Xpt# 4)  5 121)
      (vector_image *Xpt#  6 (+ *Xpt# 4)  6 110)
      (vector_image *Xpt#  7 (+ *Xpt# 4)  7 100)
      (vector_image *Xpt#  8 (+ *Xpt# 4)  8  90)
      (vector_image *Xpt#  9 (+ *Xpt# 4)  9  90)
      (vector_image *Xpt# 10 (+ *Xpt# 4) 10  92)
      (vector_image *Xpt# 11 (+ *Xpt# 4) 11  92)
      (vector_image *Xpt# 12 (+ *Xpt# 4) 12 94)
      (vector_image *Xpt# 13 (+ *Xpt# 4) 13 94)
      (vector_image *Xpt# 14 (+ *Xpt# 4) 14 96)
      (vector_image *Xpt# 15 (+ *Xpt# 4) 15 96)
      (vector_image *Xpt# 16 (+ *Xpt# 4) 16 94)
    );progn
  );if
  (end_image)
  (setq Complete$ (strcat (itoa (fix (+ *Inc# 0.5))) "% Complete..."))
  (set_tile "Complete" Complete$)
  (pgr-delay *Delay~)
  (action_tile "cancel" "(done_dialog)(exit)")
  (if (= *Inc# 100)(pgr-delay 10));Delay to show complete
  (princ)
);defun Progress
Thanks again,
Evgeny Kurbatov