Đến nội dung


Hình ảnh
- - - - -

Phương pháp chỉnh sửa và bắt lỗi trong Auto Lisp


  • Please log in to reply
8 replies to this topic

#1 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 25 July 2010 - 09:29 PM

Đọc một số bài viết trên diễn đàn thấy anh em tham gia rất đông vui và tập tành viết Auto Lisp rất nhiều
Có rất nhiều bạn thường hay đem một số đoạn Lisp mới viết lên nhờ các cao thủ chỉnh sửa giúp
Và để chia sẻ kinh nghiệm viết LIsp của mình mình xin có một số kinh nghiệm quý báu sau :
1. Khi bạn muốn viết 1 đoạn lisp theo một ý tưởng nào đó trong quá trình làm việc thì bạn nên copy một đoạn mã chuẩn làm mẫu. Sau đó, bạn xóa đi một số dòng câu lệnh không phù hợp đi để có được 1 cú pháp tốt nhất
VD :
(defun c:abc (/)
(setvar "cmdecho" 0)
(command "_.undo" "be")
(setvar "regenmode" 1)
(setq osmode (getvar "osmode"))
(setq colo (getvar "clayer"))
(setvar "osmode" 0)
(command "ucs" "")
;;;bat dau viet tu day


;;;ket thuc
(setvar "clayer" colo)
(setvar "osmode" osmode)
(command "_.undo" "e")
)


2. Sau đó bạn sẽ triển khai viết tiếp các dòng lệnh tiếp theo .... Và tôi thường hay dùng một số lệnh tắt dùng để bắt lỗi chương trình như sau (vào AutoCad bấm lệnh Vlide) : Tại vị trí con trỏ viết lệnh
- Ctrl+Shift+] : kiểm tra đoạn mã có thiếu dấu ( hoặc ) hay không
- F9 : dùng để đánh dấu câu lệnh tại vị trí con trỏ (sau khi load file, vào Cad đánh lệnh ... thì chương trình lisp chỉ chạy tới vị trí đánh dấu này và dừng
- F8 : dùng phím này để tiếp tục chạy chương trình sau khi dừng tại vị trí F9. Tiếp tục bấm F8 chạy cho đến hết chương trình. Nếu bị dừng tại vị trí nào thic câu lệnh đó bị lỗi
- Ctrl+Shift+I : trả ra kết quả của câu lệnh. Nếu không hiện ra kết quả thì câu lệnh đó bị sai (hoặc thiếu biến số)
....
Nếu có thời gian thì tôi sẽ đăng Picture lên cho các bạn dễ hiểu hơn nhé
  • 3

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#2 pfievxd

pfievxd

    biết vẽ spline

  • Members
  • PipPip
  • 94 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 03 November 2010 - 10:56 PM

He, thanks bác, em chưa thử nhưng có vẻ hay ho đây, bình thường viết lisp tốn thời gian check mấy cái lỗi vớ vỉn cú pháp ghét ghê :)
  • 0

#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 04 November 2010 - 04:54 PM

1. Khi bạn muốn viết 1 đoạn lisp theo một ý tưởng nào đó trong quá trình làm việc thì bạn nên copy một đoạn mã chuẩn làm mẫu. Sau đó, bạn xóa đi một số dòng câu lệnh không phù hợp đi để có được 1 cú pháp tốt nhất
VD :

(defun c:abc (/)
(setvar "cmdecho" 0)
(command "_.undo" "be")
(setvar "regenmode" 1)
(setq osmode (getvar "osmode"))
(setq colo (getvar "clayer"))
(setvar "osmode" 0)
(command "ucs" "")
;;;bat dau viet tu day


;;;ket thuc
(setvar "clayer" colo)
(setvar "osmode" osmode)
(command "_.undo" "e")
)

2. Sau đó bạn sẽ triển khai viết tiếp các dòng lệnh tiếp theo ....

Làm 3 cái hàm con Start-progn, Done-progn, Error-progn cho lành. Mình chỉ cần 3 hàm này để kiểm soát toàn bộ biến hệ thống của mỗi chương trình.

Và tôi thường hay dùng một số lệnh tắt dùng để bắt lỗi chương trình như sau (vào AutoCad bấm lệnh Vlide) : Tại vị trí con trỏ viết lệnh
- Ctrl+Shift+] : kiểm tra đoạn mã có thiếu dấu ( hoặc ) hay không
- F9 : dùng để đánh dấu câu lệnh tại vị trí con trỏ (sau khi load file, vào Cad đánh lệnh ... thì chương trình lisp chỉ chạy tới vị trí đánh dấu này và dừng
- F8 : dùng phím này để tiếp tục chạy chương trình sau khi dừng tại vị trí F9. Tiếp tục bấm F8 chạy cho đến hết chương trình. Nếu bị dừng tại vị trí nào thic câu lệnh đó bị lỗi
- Ctrl+Shift+I : trả ra kết quả của câu lệnh. Nếu không hiện ra kết quả thì câu lệnh đó bị sai (hoặc thiếu biến số)
....

- Có thể kiểm tra xem đoạn code đã đủ các dấu đóng mở ngoặc, các dấu nháy kép bằng cách kích đúp chuột vào vị trí đầu hoặc cuối các đoạn code cần kiểm tra
- Bật thêm cái cửa sổ Watch (Ctrl+shift+W) trong cửa sổ này add tất cả các biến cần theo dõi và 1 biến không thể thiếu là LastValue. với công cụ này thì việc kiểm tra lỗi trở lên đơn giản rất nhiêu.
- Ngoài ra còn 1 công cụ hữu ích nữa là "Check edit window" (trên thanh công cụ của Vlide bấm nút có biểu tuợng tờ giấy trắng và chữ V màu xanh). công cụ này sẽ kiểm tra toàn bộ các lỗi có thể gặp phải trong code (thiếu dấu đóng mở ngoặc, thiếu dấu nháy kép, khai báo thừa hoặc thiếu biến...) nếu sảy ra lỗi sẽ đuợc thông báo bằng cửa sổ Buil output các lỗi sẽ đuợc thông báo bằng dòng chữ tô màu xanh, kích đúp vào dòng chữ này con trỏ sẽ nhảy về vị trí đoạn code bị lỗi.
  • 2

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


#4 pfievxd

pfievxd

    biết vẽ spline

  • Members
  • PipPip
  • 94 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 04 November 2010 - 05:17 PM

Đơn giản mà hiệu quả, em vừa check xong, ko biết các bác tự mò hay đọc được mấy cái thủ thuật này ở đâu vậy ?
Chưa hiểu ý tưởng 3 cái hàm của bác Thaistreetz như thế nào cả ?????
  • 0

#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 November 2010 - 05:22 PM

Bác phamngoctuks đọc đc bài này chắc vui lắm đây ^^
  • 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


#6 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 04 November 2010 - 05:33 PM

Đây các bác có thể click vào đường dẫn này tìm hiểu xem nhé
http://cat2.mit.edu/...lisp/index.html
hay
http://www.afralisp....itor-part-2.php
  • 2

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#7 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 04 November 2010 - 05:35 PM

Đơn giản mà hiệu quả, em vừa check xong, ko biết các bác tự mò hay đọc được mấy cái thủ thuật này ở đâu vậy ?
Chưa hiểu ý tưởng 3 cái hàm của bác Thaistreetz như thế nào cả ?????

đây bạn
(defun start-progn ()
(setq CMDLAST (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "Undo" "BEGIN")
(command "UCS" "W")
(setq OSMLAST (getvar "osmode")
DMZLAST (getvar "dimzin")
OTHLAST (getvar "orthomode")
TSTLAST (getvar "textstyle")
COLLAST (getvar "cecolor")
LAYLAST (getvar "clayer")
DPMLAST (getvar "DYNPROMPT")
DYNLAST (getvar "DYNMODE")
ERR *error*
*error* error-progn
)
)
;defun
;======================= THIET LAP LAI GIA TRI BIEN HE THONG BAN DAU CUA BAN VE ========================
(defun done-progn ()
(setvar "osmode" OSMLAST)
(setvar "dimzin" DMZLAST)
(setvar "orthomode" OTHLAST)
(setvar "textstyle" TSTLAST)
(setvar "cecolor" COLLAST)
(setvar "clayer" LAYLAST)
(setvar "DYNPROMPT" DPMLAST)
(setvar "DYNMODE" DYNLAST)
(command "UCS" "P")
(if SSe (command "erase" SSe ""))
(command "undo" "end")
(if cmdname (progn
(princ (strcat "\nEnd of [" cmdname "]"))
(setq cmdname nil)))
(setq *error* ERR)
(setvar "cmdecho" CMDLAST)
);defun

;=====================THONG BAO LOI VA THIET LAP LAI GIA TRI BIEN HE THONG BAN DAU======================
(defun error-progn (msg)
(if OSMLAST (setvar "osmode" OSMLAST))
(if DMZLAST (setvar "dimzin" DMZLAST))
(if OTHLAST (setvar "orthomode" OTHLAST))
(if TSTLAST (setvar "textstyle" TSTLAST))
(if COLLAST (setvar "cecolor" COLLAST))
(if COLLAST (setvar "clayer" LAYLAST))
(if DPMLAST (setvar "DYNPROMPT" DPMLAST))
(if DYNLAST (setvar "DYNMODE" DYNLAST))
(if SShd (command "erase" SShd ""))
(if SSe (command "erase" SSe ""))
(command "UCS" "P")
(command "undo" "end")
(if cmdname
(progn
(princ (strcat "\n" msg "\nEnd of [" cmdname "], Reset System Variables\n" ) )
(setq cmdname nil)
)
(princ (strcat "\n" msg ", Reset System Variables\n"))
)
(setq *error* ERR)
(setvar "cmdecho" CMDLAST)
);defun
Đây là 3 hàm luôn đuợc gọi trong mỗi chuơng trình của mình. hàm start-progn đuợc gọi ngay đầu lisp, hàm error-progn được gọi trong hàm start-progn, hàm này được tự động gọi khi hàm báo lỗi của cad được gọi. hàm done-progn đuợc gọi truớc khi đóng chuơng trình:
(defun c:... ()
(start-progn)
viết code
(done-progn)
(princ)
);end defun


3 hàm này sẽ đuợc bổ sung chỉnh sửa để thích hợp cho toàn bộ dự án (xem thêm Menu project của vlide) lisp của bạn trong quá trình viết lisp
  • 2

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


#8 ketui

ketui

    biết vẽ arc

  • Members
  • PipPip
  • 43 Bài viết
Điểm đánh giá: 12 (tàm tạm)

Đã gửi 04 November 2010 - 07:40 PM

Bác phamngoctuks đọc đc bài này chắc vui lắm đây ^^

Lý do?
  • 0

#9 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 08 November 2010 - 02:47 PM

Mới mò được file PDF có hướng dẫn bắt lỗi trong AutoLisp đây
Các bác vào xem thử nhé
http://www.cadviet.c.../3/autolisp.rar
  • 4

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong