VTT Group Quản Trị Cao Cấp


 Tổng số bài gửi: 989 Age: 26 Đến từ:(NTU,...): NTU Nghề nghiệp: (Student,..): Ship's Designer Môn thể thao yêu thích: (football,..): Sports Điểm năng động tích lũy: 1001 Registration date: 26/12/2007
 | Tiêu đề: TỔNG QUAN VỀ AUTOLISP Wed 9 Apr 2008 - 14:02 | |
|
| TỔNG QUAN VỀ AUTOLISP NGÔN NGỮ LẬP TRÌNH TRONG TỰ ĐỘNG HOÁ THIẾT KẾ
1. Giới thiệu về Autolisp 1.1. Sơ lược về LISP LISP – List Processing là một chuẩn ngôn ngữ lập trình được John McCarthy phát triển vào năm 1956 trong dự án nghiên cứu AI (Artificial Intelligence). Phiên bản đầu tiên LISP 1.5 được giới thiệu vào đầu thập niên 60 và phát triển với nhiều biến thể như: BBNLisp, Interlisp, MacLisp, NIL (New Implementation of Lisp), Franz Lisp…Vào thập niên 70 và đầu những năm 80 đã có máy tính chuyên dụng như Lisp Machines được thiết riêng để chạy những chương trình LISP. Đến năm 1981 để chuẩn hóa LISP các nhà lập trình đã tập hợp và chuẩn hóa thành chuẩn Common LISP. Năm 1984 Golden Common LISP trở thành chuẩn chính thức cho máy tính IBM và sau này phát triển thành XLISP- tiền thân của Autolisp ngày nay.
1.2. Lịch sử phát triển của Autolisp AutoLisp được phát triển từ XLISP là ngôn ngữ lập trình trên môi trường AutoCAD và được công bố phiên bản đầu tiên 2.18 vào tháng 01 năm 1986. Cùng với sự phát triển của AutoCAD các phiên bản của Autolisp ngày càng được hoàn thiện với nhiều tính năng mới, có thể kể đến một vài phiên bản tiêu biểu như sau: - Chính thức giới thiệu phiên bản 2.5 tích hợp vào AutoCAD R7 với một số tính tăng cơ bản về các tương tác với đối tượng trong bản vẽ - Phiên bản 2.6 tích hợp vào AutoCAD R7 với chức năng 3D và một số hàm mới getcorner, getkword, và initget. - Phiên bản tích hợp vào AutoCAD R12 giới thiệu một số hàm GUI (Graphic User Interface) và ngôn ngữ điều khiển hộp thoại DCL (Dialog Control Language). - Phiên bản Visual LISP™ giới thiệu cùng với AutoCAD R14 là một môi trường phát triển Autolisp độc lập, trực quan với sự hỗ trợ của các công cụ gỡ rối. - Visual LISP™ được chính thức tích hợp vào AutoCAD 2000 và từ đó đến nay được bổ sung nhiều tích năng mới.
1.3. Ưu và nhược điểm của Autolisp 1.3.1. Ưu điểm Làm việc rất tốt và dễ dàng với điểm và các yếu tố hình học. Rất mềm dẻo, không khắt khe. Không cần trình dịch - lập trình và thực hiện lệnh. Chạy được trên tất các các hệ điều hành với cùng 1 file Lisp. Quản lý đối tượng với List - một kiểu dữ liệu với nhiều ưu điểm vượt trội trong quản lý tọa độ điểm. Mã nguồn mở và cộng đồng phát triển Autolisp rất rộng lớn.
1.3.2 Nhược điểm Hình thức bên ngoài không hấp dẫn. Cú pháp khó hiểu. Hạn chế, không có trình biên dịch. Ngôn ngữ trung gian nên thực thi chậm. Hầu như không thể tương tác với hệ thống.
2. Những khó khăn khi tiếp cận với Autolisp Có thể khẳng định chắc chắn một điều là Autolisp là một ngôn ngữ rất dễ tiếp cận so với một số ngôn ngữ lập trình khác vì nó là ngôn ngữ lập trình theo kịch bản (Script). Tuy nhiên, để tiếp cận được với Autolisp yêu cầu người học phải có kiến thức nền về lập trình và nắm vững về AutoCAD, đồng thời phải có kiến thức nhất định về hình học. Chương trình Autolisp là một tổ hợp những kịch bản được định trước nằm điều khiển AutoCAD thực thi theo suy nghĩ của người thiết kế.
Đa số mọi người muốn học Autolisp là để giải quyết những bài toán trong lĩnh vực chuyên môn của mình. Để tiếp cận và ứng dụng tốt Autolisp trong công việc yêu cầu người lập trình phải có sự liên hệ với nhu cầu công việc thực tế, điều này phụ thuộc rất lớn vào sở trường của mỗi người. Bạn đang thực hiện một vài thao tác để hoàn thiện bản vẽ của mình và bạn chợt nhận ra nó cứ lặp lại liên tục. Một ý tưởng nảy ra là bạn cần thực hiện một đoạn chương trình Autolisp để tự động thực hiện các thao tác này và chương trình Autolisp được hoàn thành. Điều này có thể giải thích được vì sao một số người lại cảm thấy khó khăn khi tiếp cận với Autolisp mặt dù khả năng tư duy về lập trình của họ khá tốt.
3. Một số khái niệm và cú pháp lập trình 3.1. Giới thiệu Một chương trình Autolisp luôn bắt đầu bằng dấu “(“ và kết thúc bằng dấu “)”. Một chương trình Autolisp đơn giản như sau:
| Code: |
(defun myProg() (princ "Tecco 533") (princ) ) |
Autolisp là ngôn ngữ trả về giá trị sau khi thực thi lệnh. Bạn có thể kiểm tra điều này bằng cách mở AutoCAD và gỏ dòng lệnh sau: (+ 1 2) Kết quả trả về là 3.
3.2. Biến Để gán giá trị trong Autolisp bạn cần sử dụng từ khóa setq với cú pháp: (setq a 1) Để kiểm tra giá trị của biến dùng từ khóa ! với cú pháp: !a Giống một số ngôn ngữ lập trình khác Autolisp cũng qui định cách đặt tên biến như sau: - Không dùng các ký tự đặc biệt: *, &, ^, $... - Không dùng các từ khóa của AutoCAD: LINE, PLINE, MIRROR… - Tên biến không phân biệt chữ hoa và chữ thường
3.3. Hàm Autolisp qui định từ khóa defun để định nghĩa hàm thực thi với cú pháp:
| Code: |
(defun myProg() (princ "Tecco 533") (princ) ) |
Ngoài ra Autolisp còn sử dụng từ khóa C: sẽ khai báo với AutoCAD là chương trình sẽ thực thi bằng lệnh tại dấu nhắc lệnh Command với cú pháp:
| Code: |
(defun C:myProg() (princ "Tecco 533") (princ) ) |
Với hàm đầu tiên để thực thi bạn phải gõ Command: (myProg) tại dòng nhắc lệnh còn với hàm thứ hai bạn chỉ cần gỏ Command: myProg giống như một lệnh trong AutoCAD.
3.4. Kiểu dữ liệu Một số kiểu dữ liệu thông dụng trong Autolisp như sau: String: Chuổi gồm các ký tự và số Integers: Số tự nhiên Real: Số thực List: Kiểu dữ liệu đặc trưng và cũng là thế mạnh của LISP so với các ngôn ngữ lập trình khác. Associated List: Đây là kiểu dữ liệu định nghĩa các đối tượng trong AutoCAD. Dựa trên các kiểu dữ liệu trên Autolisp phân loại các nhóm hàm dựng sẵn như sau: - Hàm xử lý chuổi: substr, strlen, strcase, strcat - Hàm xử lý số: abs, atof, atoi, fix, float, itoa - Hàm xử lý List: car, cdr, cadr, caddr, caar, cddr, foreach, list, cons, nth - Hàm chuyển đổi: fix, float, itoa, atoi, atof, rtos, angtos - Hàm toán học: +, -, *, /, +1, -1, cos, atan, sin, sqrt, expt Hàm lựa chọn thực thể: entsel, ssget Hàm xử lý tập chọn: ssadd, ssdel, sslength, ssname Hàm xử lý đối tượng: entget, entlast, entnext, entdel, entmod, entupd Hàm xử lý file: pen, close, read-line, write-line
3.5. Bảng mã DXF AutoCAD định nghĩa một đối tượng trên bản vẽ theo kiểu dữ liệu Associated List như sau: ((-1 . ) (0 . "LINE") (5 . "22") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 4) (100 . "AcDbLine") (10 3.39219 5.3243 0.0) (11 8.72878 3.10374 0.0) (210 0.0 0.0 1.0)) Đây là một tập hợp các cặp đôi (mã số . dữ liệu) được qui định trước. Tùy theo đối tượng và thuộc tính đối tượng mà Associated List sẽ có những tham số khác nhau. Các mã số này tuân theo một qui định trong bảng định nghĩa cho trước gọi là bảng mã DXF. Để có thể đều khiển được các đối tượng trong bản vẽ AutoCAD yêu cầu người lập trình phải hiểu rất rõ về bảng mã DXF này.
3.6. Dữ liệu mở rộng AutoCAD dùng các mã số từ 1000 đến 1042 để biểu diễn các dữ liệu mở rộng. Với dữ liệu mở rộng người lập trình có thể đánh dấu đối tượng trên AutoCAD để thực hiện các thao tác tiếp theo. Một ứng dụng điển hình trên AutoCAD sử dụng dữ liệu mở rộng này là chương trình Nova-TDN của Công ty tin học Hài Hòa. Thông qua dữ liệu mở rộng chương trình có thể phân biệt được đâu là tim tuyến, đâu là trắc dọc, cắt ngang…Toàn bộ dữ liệu mở rộng được định nghĩa trong Associated List với mã số -3. Ví dụ:
| Code: |
| ((-3 ("TECCO533" (1000 . "Tim tuyen")))) |
3.7. Điều kiện Cũng giống với một số ngôn ngữ lập trình khác Autolisp hỗ trợ người lập trình 02 cú pháp điều kiện là điều kiện xác định If và điều kiện lựa chọn Cond với cú pháp như sau:
| Code: |
(if <điều kiện>
) (cond ( ) ( ) ... ( ) ) |
3.8. Vòng lặp Autolisp không hỗ trợ vòng lặp For mà chỉ hỗ trợ 02 vòng lặp Repeat và While với cú pháp như sau:
| Code: |
(while < điều kiện >
) (repeat
) |
3.9. Ngôn ngữ điều khiển hộp thoại DCL Autolisp cung cấp cho người lập trình một ngôn ngữ điều khiển hộp thoại DCL để giải quyết về giao diện tương tác với người sử dụng. Thông qua ngôn ngữ DCL người lập trình có thể thiết kế các Form nhập liệu trực quan giúp cho chương trình trở nên thân thiện hơn.
3.10. Hướng đối tượng Bản thân Autolisp không phải là ngôn ngữ lập trình hướng đối tượng, nhưng cùng với xu hướng phát triển của lập trình hướng đối tượng bắt đầu từ Visual LISP™ cho AutoCAD R14 hãng AutoDesk đã tích hợp vào AutoCAD công nghệ ActiveX với kỹ thuật lập trình hướng đối tượng VLA (Visual LISP ActiveX). Thông qua công nghệ ActiveX người lập trình có thể diểu khiển tất các các đối tượng trên bản vẽ qua các thuộc tính và phương thức của nó. Điều đặc biệt là người lập trình có thể can thiệp đến một số chức năng như in ấn, định dạng hệ thống AutoCAD mà trước đây Autolisp không can thiệp được. Các chương trình sử dụng công nghệ ActiveX phải được dịch qua chuẩn ARX mới thực thi được trên AutoCAD.
4. Kết luận Autolisp là một ngôn ngữ lập trình đơn giản, dễ tiếp cận và hiệu quả công việc nó đem lại là đáng kể. Hãy bắt đầu Autolisp với những công việc thường ngày. Những đoạn chương trình Autolisp đơn nhưng có thể giảm được thời gian đáng kể trong việc hoàn thiện các bản vẽ. Một chương trình Autolisp thành công không phải là chương trình có qui mô lớn đến vài chục ngàn dòng lệnh mà đó là chương hiệu quả, giải quyết được các yêu cầu của người thiết kế và tiết kiệm được thời gian thực hiện công việc.
5. Giới thiệu một số địa chỉ tham khảo 5.1. Website hướng dẫn học Autolisp http://www.jefferypsanders.com/autolisp.html Bạn đọc có thể tham khảo các tài liệu giới thiệu chi tiết về các hàm dựng sẵn trong Autolisp cũng như các tài liệu giới thiệu về bảng DXF tại đây. Ngoài ra tại website này bạn có thể download miễn phí nhiều chương trình Autolisp rất hay. http://www.afralisp.com/lispa/lisp.htm Website hướng dẫn học Autolisp khá chi tiết và đầy đủ. Bạn có thể tham khảo bất kỳ nội dung gì liên quan đến Autolisp tại đây
5.2. Download các chương trình Autolisp http://xarch.tu-graz.ac.at/autocad/lisp/ http://home.pacifier.com/~nemi/ http://www.autolisppage.com http://www.caddigest.com http://www.autolisp.co.uk/ http://www.simplecad.com :-o]u: :iyti: :-o]u: _________________ HÃY NÓI: KHÔNG GÌ LÀ KHÔNG THỂ! |
|
|
Baphuoc_12 Thành Viên Ưu Tiên


 Tổng số bài gửi: 84 Age: 23 Đến từ:(NTU,...): NTU Nghề nghiệp: (Student,..): Student Môn thể thao yêu thích: (football,..): football, volleyball Điểm năng động tích lũy: 145 Registration date: 13/09/2009
 | Tiêu đề: Re: TỔNG QUAN VỀ AUTOLISP Mon 19 Oct 2009 - 22:31 | |
| anh Lâm ơi anh cho em hỏi lập trình autolist này nó mạnh về lĩnh vực gì trong tính toàn thiết kế tàu vậy. Mà em thấy nó cũng có vòng lặp, điều kiện, biến, hàm... cũng giống pascal, vậy việc thiết lập, lập trình nó có tương tự như ngôn ngữ lập trình pascal không anh |
|
PETER PAN Thành Viên Ưu Tiên


 Tổng số bài gửi: 69 Age: 27 Đến từ:(NTU,...): 6TT2-NA&ME-NTU Nghề nghiệp: (Student,..): Student Môn thể thao yêu thích: (football,..): võ thuật Điểm năng động tích lũy: 31 Registration date: 04/08/2008
 | Tiêu đề: Re: TỔNG QUAN VỀ AUTOLISP Sat 21 Nov 2009 - 21:23 | |
| sử dụng autolisp bạn có thể xây dựng được giao diện như trong vb, ví dụ như sau: LTDTM : dialog { label = "LAY TOA DO TAU MAU"; : column { : edit_box { label = "TEN TAU"; key = "edt_tentau"; edit_width = 15; } ok_cancel_help; } viết đoạn chương trình này trong notepab, lưu với định dạng name.dcl sau đó viết doạn chương trình sau gọi hộp thoại trên với định dạng name.lisp (defun TKTAUMAU (/ DCL_ID) (setq DCL_ID (load_dialog "name.DCL")) (if (not (new_dialog "name" DCL_ID)) (exit)) (start_dialog) (unload_dialog DCL_ID) ) trên giao diện ta có thể có thiết kế edit_box cho các thông số đầu vào, sau đó tạo các nút lệnh (gọi chương trình con lưu định dạng .lsp) xử lý số liệu đầu vào, ví dụ tạo một nút lệnh trong file dcl ve : button { key = "accept"; label = " VE "; is_default = false; edit_width = 6; fixed_width = true; alignment = right; }
autolisp cũng như các ngôn ngữ lập trình khác, cũng có các hàm toán học, nên nếu bạn tính toán trên excel rồi vẽ đồ thị trên cad, thì bạn có thể viết một đoạn macro autolisp tính toán và vẽ trực tiếp trên cad, ví dụ như tính sức cản theo viện leningrad
(defun TSCLG()
(setq LTKSC (atof (get_tile "edt_LTK")) )
(setq BTKSC (atof (get_tile "edt_BTK")) )
(setq ATTKSC (atof (get_tile "edt_ATTK")) )
(setq D (atof (get_tile "edt_DTK")) )
(setq detal (atof (get_tile "edt_HSDTTTK")) )
(setq S (* LTKSC ( + (* 1.36 (/ ATTKSC 1e3)) (* 1.13 detal BTKSC)) ))
(setq V (atof (get_tile "edt_HSBD2S0")) )
(setq R (+ (* 0.17 S (expt V 1.825)) (* 1.45 (- 24 (/ LTKSC BTKSC)) (expt detal 2.5)) (* (/ D (expt LTKSC 2)) (expt V 4)) ) )
... ) , sử dụng autolisp viết các macro nhỏ giúp cho công việc bạn nhanh hơn và đỡ nhàm chán. |
|
tanminh49dt Ban Điều Hành


 Tổng số bài gửi: 184 Age: 23 Đến từ:(NTU,...): NTU Nghề nghiệp: (Student,..): Student Môn thể thao yêu thích: (football,..): volleyball Điểm năng động tích lũy: 313 Registration date: 30/10/2008
 | Tiêu đề: Re: TỔNG QUAN VỀ AUTOLISP Mon 23 Nov 2009 - 23:39 | |
| Rất cảm ơn anh Lâm .Nhìn có vẻ hơi phức tạp nhưng thấy cũng hay ,chắc cũng phải tìm hiểu thử. |
|
loc2210 Moderator

 Tổng số bài gửi: 121 Age: 21 Đến từ:(NTU,...): NTU Nghề nghiệp: (Student,..): student Môn thể thao yêu thích: (football,..): podlouchat hudbu Điểm năng động tích lũy: 175 Registration date: 09/04/2010
 | Tiêu đề: Re: TỔNG QUAN VỀ AUTOLISP Tue 17 May 2011 - 22:07 | |
| |
|