Đến nội dung


Hình ảnh
- - - - -

[Thảo luận] Viết lại các hàm Express


  • Please log in to reply
194 replies to this topic

#141 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 31 December 2011 - 02:34 PM

- không thể dùng command vì khi ta enter mà không pick điểm đối tượng sẽ bay lung tung, không trả đối tượng về vị trí cũ, không nắm được quy luật ketxu ạ
- khi mình test lisp này trên máy của mình. nếu dùng acet-ss-drag cho tập hợp gồm nhiều loại đối tượng thì nó hiển thị rất kém trong quá trình drag, một số đối tượng không hiển thị được, với bản vẽ nặng thì nó giật giật rất ngứa mắt. còn nếu dùng lisp trên thì ổn hơn.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#142 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 December 2011 - 06:07 PM

- không thể dùng command vì khi ta enter mà không pick điểm đối tượng sẽ bay lung tung, không trả đối tượng về vị trí cũ, không nắm được quy luật ketxu ạ
- khi mình test lisp này trên máy của mình. nếu dùng acet-ss-drag cho tập hợp gồm nhiều loại đối tượng thì nó hiển thị rất kém trong quá trình drag, một số đối tượng không hiển thị được, với bản vẽ nặng thì nó giật giật rất ngứa mắt. còn nếu dùng lisp trên thì ổn hơn.

Phải undo mark hoặc lấy list đặng mà xóa đi chứ bác, vì cái mình lấy là point thôi
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#143 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 01 January 2012 - 09:11 PM

lấy list đối tượng rồi sau đó xóa đi đã có point thì chắc là được. ý tưởng hay đấy, giải quyết được vấn đề bắt điểm triệt để lun. mình quên mất là có thể làm cách này.
còn dùng undo mark chắc chắn là không ổn rồi. nếu ta pan hoặc zoom trong quá trình drag, khi undo lại chắc chắn màn hình sẽ bị nhảy. vả lại cách này không hay :D
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#144 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 01 January 2012 - 10:33 PM

lấy list đối tượng rồi sau đó xóa đi đã có point thì chắc là được. ý tưởng hay đấy, giải quyết được vấn đề bắt điểm triệt để lun. mình quên mất là có thể làm cách này.
còn dùng undo mark chắc chắn là không ổn rồi. nếu ta pan hoặc zoom trong quá trình drag, khi undo lại chắc chắn màn hình sẽ bị nhảy. vả lại cách này không hay :D

Vậy bác thử cuốc làm quà tặng anh em năm mới đi >:)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#145 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 January 2012 - 02:51 PM

Đang bận nên mình cuốc tạm ý tưởng thực hiện của ketxu để các bác hoàn thiện:
(defun ss-drag-move (ss pt / i sscp el box ang kc p ssl)
(setq el (entlast) i -1 ssl (sslength ss) sscp (ssadd))
(while (< (setq i (1+ i)) ssl) (vla-copy (vlax-ename->vla-object (ssname ss i))))
(while (setq el (entnext el)) (setq sscp (ssadd el sscp)))
(setq box (Cv:geom-ss-extents-fast sscp))
(command "move" sscp "" pt pause)
(setq p (cadr (grread t)) ang (angle pt p) kc (distance pt p))
(if (equal (Cv:geom-ss-extents-fast sscp) (mapcar '(lambda (x) (polar x ang kc)) box) 0.00001)
(progn (command "erase" sscp "") p)
(command "erase" sscp "")))

  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#146 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 January 2012 - 03:08 PM

một họ hàm khá hay nữa là acet-ui-progress. mấy hàm này rất hữu ích khi chương trình fải xử lý 1 lượng công việc lớn. mình đang cần nhưng bận nên chưa viết lại được, tạm thời vẫn fải dùng acet. bác nào rảnh thì viết bổ sung em nó vào thư viện này đi.
À quên: ý tưởng của mình là sử dụng vector để vẽ pogress bar trực tiếp lên màn hình cad hoặc hộp thoại chứ không dùng thanh status bar của cad nữa (muốn dùng cũng chả làm được). bác nào khéo tay chút có khi còn làm được cái pogress bar đẹp hơn ấy chứ :D
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#147 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 January 2012 - 05:57 PM

Đang bận nên mình cuốc tạm ý tưởng thực hiện của ketxu để các bác hoàn thiện:

(defun ss-drag-move (ss pt / i sscp el box ang kc p ssl)
(setq el (entlast) i -1 ssl (sslength ss) sscp (ssadd))
(while (< (setq i (1+ i)) ssl) (vla-copy (vlax-ename->vla-object (ssname ss i))))
(while (setq el (entnext el)) (setq sscp (ssadd el sscp)))
(setq box (Cv:geom-ss-extents-fast sscp))
(command "move" sscp "" pt pause)
(setq p (cadr (grread t)) ang (angle pt p) kc (distance pt p))
(if (equal (Cv:geom-ss-extents-fast sscp) (mapcar '(lambda (x) (polar x ang kc)) box) 0.00001)
(progn (command "erase" sscp "") p)
(command "erase" sscp "")))

Cuốc thêm 1 code nhỏ nữa

(defun Cv:ss-drag-move (ss p / el)
(setq el (entlast))
(if (vl-cmdf "copy" ss "" p pause)
(progn
(while (setq el (entnext el)) (entdel el)) (getvar "lastpoint") ) nil)
)

  • 1

#148 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 January 2012 - 08:46 PM

bác Tue_NV xem lại gạch đầu dòng thứ nhất của #141.hàm trên bác viết thế thì không bao giờ nó trả được về nil
ps: command thì luôn trả về nil. còn vl-cmdf thì ngược lại. luôn trả về T nếu lệnh hoàn thành bác ạ
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#149 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 January 2012 - 09:20 PM

bác Tue_NV xem lại gạch đầu dòng thứ nhất của #141.hàm trên bác viết thế thì không bao giờ nó trả được về nil
ps: command thì luôn trả về nil. còn vl-cmdf thì ngược lại. luôn trả về T nếu lệnh hoàn thành bác ạ

Không bao giờ thì không có đâu. SS=NIL thì sẽ trả về NIL
Tue_NV xét thiếu 1 trường hợp
dòng thứ nhất của #141 của bạn khắc phục bằng code dưới đây :

(defun Cv:ss-drag-move (ss p / el)
(setq el (entlast))
(if (and (vl-cmdf "copy" ss "" p pause) (null (equal (getvar "lastpoint") p)))
(progn
(while (setq el (entnext el)) (entdel el)) (getvar "lastpoint") ) nil)
)

  • 3

#150 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 02 January 2012 - 10:08 PM

Coi như 1 hàm tưởng to to mà lại mần bằng 1 đoạn nhỏ nhỏ các bác nhỉ ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#151 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 January 2012 - 10:23 PM

Coi như 1 hàm tưởng to to mà lại mần bằng 1 đoạn nhỏ nhỏ các bác nhỉ ^^

To to mà mần thành nhỏ nhỏ thì tiếc gì Like This hở Ket?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#152 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 02 January 2012 - 10:50 PM

một họ hàm khá hay nữa là acet-ui-progress. mấy hàm này rất hữu ích khi chương trình fải xử lý 1 lượng công việc lớn. mình đang cần nhưng bận nên chưa viết lại được, tạm thời vẫn fải dùng acet. bác nào rảnh thì viết bổ sung em nó vào thư viện này đi.
À quên: ý tưởng của mình là sử dụng vector để vẽ pogress bar trực tiếp lên màn hình cad hoặc hộp thoại chứ không dùng thanh status bar của cad nữa (muốn dùng cũng chả làm được). bác nào khéo tay chút có khi còn làm được cái pogress bar đẹp hơn ấy chứ :D

Dùng hộp thoại đơn giản hơn nhìu bác ạ ^^ Lúc nào rảnh e thử viết cái. Dùng vector đã thử thấy không ổn định ở các máy khác nhau ạ ^^
Nếu muốn trên thanh status thì count kiểu %, hoặc dùng ARX, NET hoặc down luôn dos_lib ^^

To to mà mần thành nhỏ nhỏ thì tiếc gì Like This hở Ket?

Ồi, em là chuyên gia Like r mà :D

P/s : e vừa tìm ra cách làm progress đơn giản trên thanh Status bar với lisp, lúc nào rỗi viết chỉn chu lại ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#153 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 January 2012 - 11:54 PM

Dùng hộp thoại đơn giản hơn nhìu bác ạ ^^ Lúc nào rảnh e thử viết cái. Dùng vector đã thử thấy không ổn định ở các máy khác nhau ạ ^^

Không ổn định ở vấn đề gì nhỉ? mình viết rất nhiều lệnh có sử dụng vector để hiển thị thông tin mà chương trình tương tác với người dùng. thấy chạy hiển thị tốt trên máy của mình và máy của người khác, với nhiều kích thước màn hình và độ phân giải khác nhau. về bản chất thì cách thức hiển thị của vector vẽ trên màn hình cad và trên hộp thoại là giống nhau mà Ket. chúng đều có đơn vị tính tròn là pixel.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#154 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 02 January 2012 - 11:58 PM

À, để in ra các ký tự - hình vẽ đơn giản thì không vấn đề, nhưng để fill 1 thanh trạng thái như progress bar thì sẽ có hiện tượng nháy - biến mất - nháy - nháy - nhấp nháy - nháy nháy nháy - biến mất - nháy nháy nháy .... bác ạ ^^ Hiện tượng tăng dần theo time thực hiện
Ví dụ của elpanov, làm với grvecs đây, bác chạy sẽ thấy hoạt động tốt n cũng k vui đâu ( nhất là khi mouse nằm trong vùng vẽ) ^^ Theo em nếu làm vector thì chỉ nên dùng cái chữ chạy % là đủ r ^^ Ở đây ôm cả code hiển thị string nên dài đến là dài
http://www.cadviet.c...progressbar.lsp
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#155 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 03 January 2012 - 03:29 AM

code dài chỉ load chậm 1 chút thôi nếu ta load nó ở định dạng lisp. còn nếu bạn mã hóa nó thành fas rồi thì load vẫn nhanh như bình thường, không vấn đề gì đâu.
Đúng là để nó nháy nháy thế này cũng khó chịu thật.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#156 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 03 January 2012 - 06:51 AM

Có thêm cái này, chưa nghiên cứu kỹ, mọi người xem dùng được không?

;ProgressBar contains a set of functions that can be used in loops while processing information.
;The main functions are ProgressBar, Progress, and EndProgressBar.
;There are a few example functions to demonstrate the syntax and method of using ProgressBar.
;PB-Demo is an example for an information message only. PB-Demo1 is an example for a foreach loop.
;PB-Demo2 is an example for a repeat loop. And PB-Demo3 is an example for a while loop.
;-------------------------------------------------------------------------------
; Program Name: ProgressBar.lsp [Progress Bar R3]
; Created By: Terry Miller (Email: terrycadd@yahoo.com)
; (URL: http://web2.airmail.net/terrycad)
; Date Created: 6-20-04
; Function: Progress Bar functions to be used in loops
;-------------------------------------------------------------------------------
; Revision History
; Rev By Date Description
;-------------------------------------------------------------------------------
; 1 TM 6-20-04 Initial version
; 2 TM 2-20-05 Divided initial function into three functions, ProgressBar,
; Progress, and EndProgressBar to be used in loops.
; 3 TM 1-20-07 Updated progress bar dialog design.
;-------------------------------------------------------------------------------
; c:PB-Demo - ProgressBar demo functions for an information message only
;-------------------------------------------------------------------------------
(defun c:PB-Demo ( / List@ Reps~)
(ProgressBar "" "Processing calculations..." 0.5);Title$, Message$, Percent of *Speed# variable
(repeat 100 (Progress))
(EndProgressBar)
(princ)
);defun c:PB-Demo
;-------------------------------------------------------------------------------
; c:PB-Demo1 - ProgressBar demo functions with a foreach loop example
;-------------------------------------------------------------------------------
(defun c:PB-Demo1 ( / List@ Reps~)
(repeat 500 (setq List@ (append List@ (list ""))));Create a long list
(ProgressBar "" "" 0.5);Title$, Message$, Percent of *Speed# variable
(setq Reps~ 1)
;The following may be a repeat, a foreach or a while loop
(foreach Item List@ ;This is a redundant example
;Process something here
(setq Reps~ (+ Reps~ (/ 100.0 (length List@))))
(repeat (fix Reps~) (Progress));Move the Progress Bar
(setq Reps~ (- Reps~ (fix Reps~)))
);foreach
(EndProgressBar);Close the Progress Bar
);defun c:PB-Demo1
;-------------------------------------------------------------------------------
; c:PB-Demo2 - ProgressBar demo functions with a repeat loop example
;-------------------------------------------------------------------------------
(defun c:PB-Demo2 ( / List@ Reps~ SS&)
(princ "\nSelect objects for demo selection set.")
(if (setq SS& (ssget))
(progn
(ProgressBar "" (strcat "Processing " (itoa (sslength SS&)) " objects...") 0.25)
(setq Reps~ 1)
;The following may be a repeat, a foreach or a while loop
(repeat (sslength SS&);This is a redundant example
;Process something here
(setq Reps~ (+ Reps~ (/ 100.0 (sslength SS&))))
(repeat (fix Reps~) (Progress));Move the Progress Bar
(setq Reps~ (- Reps~ (fix Reps~)))
);repeat
(EndProgressBar);Close the Progress Bar
);progn
);if
);defun c:PB-Demo2
;-------------------------------------------------------------------------------
; c:PB-Demo3 - ProgressBar demo functions with a while loop example
;-------------------------------------------------------------------------------
(defun c:PB-Demo3 ( / FileName% PathFilename$ Reps# Text$)
(if (setq PathFilename$ (findfile "ACAD.pgp"))
(progn
(setq FileName% (open PathFilename$ "r"))
(ProgressBar "" "Reading in the Acad.pgp file..." 0.5)
(setq Reps# 1)
;The following may be a repeat, a foreach or a while loop
(while (setq Text$ (read-line FileName%))
;Process something here
(if (= (rem Reps# 4) 0);Every fourth time
(Progress);Move the Progress Bar
);if
(setq Reps# (1+ Reps#))
);while
(close FileName%)
(EndProgressBar);Close the Progress Bar
);progn
);if
);defun c:PB-Demo3
;-------------------------------------------------------------------------------
; ProgressBar - Progress Bar
; Arguments: 3
; Title$ = Dialog title
; Message$ = Message to display
; Delay~ - Percentage of *Speed# variable
; Example: (ProgressBar "Program Message" "Processing information..." 0.5)
;-------------------------------------------------------------------------------
(defun ProgressBar (Title$ Message$ Delay~)
(setq *Delay~ Delay~)
(if (not *Speed#) (Speed))
(setq *Dcl_Id% (load_dialog "ProgressBar.dcl"))
(new_dialog "ProgressBar" *Dcl_Id%)
(if (= Title$ "")(setq Title$ "AutoCAD Message"))
(if (= Message$ "")(setq Message$ "Processing information..."))
(set_tile "Title" (strcat " " Title$))
(set_tile "Message" Message$)
(setq *X# (1- (dimx_tile "ProgressBar")))
(setq *Y# (1- (dimy_tile "ProgressBar")))
(start_image "ProgressBar")
(vector_image 0 2 2 0 8)
(vector_image 2 0 (- *X# 2) 0 8)
(vector_image (- *X# 2) 0 *X# 2 8)
(vector_image *X# 2 *X# (- *Y# 2) 8)
(vector_image (- *X# 2) *Y# *X# (- *Y# 2) 8)
(vector_image (- *X# 2) *Y# 2 *Y# 8)
(vector_image 2 *Y# 0 (- *Y# 2) 8)
(vector_image 0 (- *Y# 2) 0 2 8)
(end_image)
(setq *Inc# 0 *Xpt# -4)
(princ)
);defun ProgressBar
;-------------------------------------------------------------------------------
; Progress - Move the Progress Bar
;-------------------------------------------------------------------------------
(defun Progress (/ Complete$)
(setq *Inc# (1+ *Inc#))
(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 110)
(vector_image *Xpt# 5 (+ *Xpt# 4) 5 110)
(vector_image *Xpt# 6 (+ *Xpt# 4) 6 100)
(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 90)
(vector_image *Xpt# 11 (+ *Xpt# 4) 11 90)
(vector_image *Xpt# 12 (+ *Xpt# 4) 12 100)
(vector_image *Xpt# 13 (+ *Xpt# 4) 13 100)
(vector_image *Xpt# 14 (+ *Xpt# 4) 14 110)
(vector_image *Xpt# 15 (+ *Xpt# 4) 15 110)
(vector_image *Xpt# 16 (+ *Xpt# 4) 16 120)
);progn
);if
(end_image)
(setq Complete$ (strcat (itoa (fix (+ *Inc# 0.5))) "% Complete..."))
(set_tile "Complete" Complete$)
(delay *Delay~)
(action_tile "cancel" "(done_dialog)(exit)")
(if (= *Inc# 100)(delay 10));Delay to show complete
(princ)
);defun Progress
;-------------------------------------------------------------------------------
; EndProgressBar - Close Progress Bar dialog and clear variables
;-------------------------------------------------------------------------------
(defun EndProgressBar ( )
(setq *Delay~ (* *Delay~ 0.5));Speed up bars remaining
(if (and (> *Inc# 0)(< *Inc# 100))
(repeat (- 100 *Inc#) (Progress))
);if
(done_dialog)
(start_dialog)
(unload_dialog *Dcl_Id%)
(setq *Dcl_Id% nil *Delay~ nil *Inc# nil *X# nil *Xpt# nil *Y# nil)
(princ)
);defun EndProgressBar
;-------------------------------------------------------------------------------
; Speed - Determines the approximate computer processing speed and sets the
; global variable *speed# which may be used in delay loops while in dialogs.
;-------------------------------------------------------------------------------
(defun Speed (/ Cdate~ Cnt# NewSecond# OldSecond#)
(setq Cdate~ (getvar "CDATE"))
(setq NewSecond# (fix (* (- (* (- Cdate~ (fix Cdate~)) 100000)(fix (* (- Cdate~ (fix Cdate~)) 100000))) 10)))
(repeat 2
(setq Cnt# 0)
(setq OldSecond# NewSecond#)
(while (= NewSecond# OldSecond#)
(setq Cdate~ (getvar "CDATE"))
(setq NewSecond# (fix (* (- (* (- Cdate~ (fix Cdate~)) 100000)(fix (* (- Cdate~ (fix Cdate~)) 100000))) 10)))
(setq Cnt# (1+ Cnt#))
);while
);repeat
(setq *Speed# Cnt#)
(princ)
);defun Speed
;-------------------------------------------------------------------------------
; delay - time delay function
; Arguments: 1
; Percent~ - Percentage of *Speed# variable
; Returns: time delay
;-------------------------------------------------------------------------------
(defun delay (Percent~ / Number~)
(if (not *Speed#) (Speed))
(repeat (fix (* *Speed# Percent~)) (setq Number~ pi))
(princ)
);defun delay
;-------------------------------------------------------------------------------
(princ);End of ProgressBar.lsp

dcl_settings : default_dcl_settings { audit_level = 3; }
//------------------------------------------------------------------------------
// Program Name: ProgressBar.dcl [Progress Bar R3]
// Created By: Terry Miller (Email: terrycadd@yahoo.com)
// (URL: http://web2.airmail.net/terrycad)
// Date Created: 6-20-04
// Function: Progress Bar dialog
//------------------------------------------------------------------------------
// Revision History
// Rev By Date Description
//------------------------------------------------------------------------------
// 1 TM 6-20-04 Initial version
// 2 TM 2-20-05 Divided initial function into three functions, ProgressBar,
// Progress, and EndProgressBar to be used in loops.
// 3 TM 1-20-07 Updated progress bar dialog design.
//------------------------------------------------------------------------------
// ProgressBar - Progress Bar dialog
//------------------------------------------------------------------------------
ProgressBar : dialog {
key = "Title";
label = "";
spacer;
: text {
key = "Message";
label = "";
}
: row {
: column {
: spacer { height = 0.12; fixed_height = true;}
: image {
key = "ProgressBar";
width = 58.92; fixed_width = true;
height = 1.51; fixed_height = true;
aspect_ratio = 1;
color = -15;
vertical_margin = none;
}
spacer;
}
cancel_button;
}
: text {
key = "Complete";
label = "";
}
}// ProgressBar
//------------------------------------------------------------------------------

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#157 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 03 January 2012 - 08:16 AM

Cái của Terry đẹp và hiện đại, ngoài ra có rất nhiều lựa chọn khác cho 1 Dialog Progress ^^
Preview :
Terry : (DCL)
Hình đã gửi

Elpanov : (Grvecs)
Hình đã gửi

Em edit 1 : (DCL)
Hình đã gửi

Em cày 2: (Status), cái này là cheat dành cho bác Thái ^^

không dùng thanh status bar của cad nữa (muốn dùng cũng chả làm được)

Hình đã gửi
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#158 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 03 January 2012 - 09:46 AM

Ái chà chà. đặt gạch hóng cái status bar của ketxu :D
Edit: Hiểu roài =]]. hình như ketxu khôn lỏi, dùng 1 ký tự đặc biệt phủ kín khuôn chữ (gõ 2 ký tự đó liền nhau sẽ không thấy có khoảng trắng) trong bảng mã unicode. mỗi lần lặp thì đưa vào chuỗi progress thêm 1 ký tự đó
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#159 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 03 January 2012 - 10:06 AM

Sao dạo này các bác CV hay tặng ketxu từ "khôn lỏi" vậy ta :|
@bác Thái : Nhiều thứ nghĩ xa xôi, mình tìm cách thì nó ngắn lại xài cũng vui.
Game còn thế huống chi nghề :D
Code status dùng 8 ký tự để nhìn nó chạy liền mạch. 1 ký tự cũng được nhưng bước tăng k nhỏ lắm.
Bác Thái thử mần xem sao ^^ h ra công trường, tối về e trau chuốt lại chút r up
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#160 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 03 January 2012 - 10:30 PM

Update Progress Status dạng đơn giản. Ở mức độ sử dụng thì e thấy tạm thời chỉ cần thế này thôi, không nhất thiết phải chia ra làm mấy hàm như ACET (do đó không dùng biến đếm Global mà sử dụng chung với biến tăng của vòng lặp)

;| Status Bar Progress
Show Percent in Status Bar
@Ketxu 03-01-12
Var : bien tang (nam trong ham loop)
Total : tong so lan lap (biet truoc)
InProMsg : Message luc dang chay
DoneMsg : Message luc chay xong
|;
(defun CV:Ui-Progress (var Total InProMsg DoneMsg / tmp)
(if (>= Var (1- Total))(grtext -1 DoneMsg)(grtext -1 InProMsg))
(setq tmp "")
(repeat (fix (* 15 (/ var Total 1.0)))
(setq tmp (strcat tmp "\U+2588"))
)
; Doan nay lam min
(setq tmp (strcat tmp
(nth (rem (fix (/ var (/ (/ Total 15.0) 8.0))) 8)
(list "\U+258F" "\U+258E" "\U+258D" "\U+258C" "\U+258B" "\U+258A" "\U+2589" "\U+2588" )
)
)
) ; Ket thuc
(grtext -2 (strcat tmp "..." (rtos (/ (* 100.0 Var) Total) 2 0) "%..." ))
)
Ví dụ sử dụng :

(defun C:mine2 (/ K L)
(setq K 0 L 10000)
(while (< k 10000)
(CV:Ui-Progress K L "Vui l\U+00F2ng ch\U+1EDD trong l\U+00FAc CAD \U+0111ang c\U+00E0y ^^" "CAD c\U+00E0y xong r\U+1ED3i, gi\U+1EDD \U+0111\U+1EBFn b\U+1EA1n c\U+00E0y ^^")
(setq k (1+ k) )
)
(princ)
)

  • 4

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC