gioi thieu ve autolisp

5

Click here to load reader

Upload: mio-class

Post on 06-May-2015

2.916 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Gioi Thieu Ve Autolisp

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ở

Page 2: Gioi Thieu Ve Autolisp

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

Page 3: Gioi Thieu Ve Autolisp

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 . <Entity name: 30a0510>) (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> <thực thi khi ñiều kiện ñúng> <thực thi khi ñiều kiện sau> ) (cond (<th1> <thực thi th1>) (<th2> <thực thi th2>) ... (<thN> <thực thi thN>) )

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:

Page 4: Gioi Thieu Ve Autolisp

Code:

(while < ñiều kiện > <thực thi> ) (repeat <số lần lặp> <thực thi> )

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

Page 5: Gioi Thieu Ve Autolisp

ðể sử dụng lisp phục vụ cho vẽ bản vẽ CAD ta thực hiện các bước sau. 1. Command: AP 2. Hiện của sổ Load/Unload Applications, lựa chọn tất cảc các lisp cần dùng. Nhấn và nút Load. 3. Sau khi load xong. Cad sẽ ñưa ra thông báo Load thành công. ðể sử dụng một lệnh Lisp lâu dài, nghĩa là muốn AutoCad tự ñộng load các file lisp khi khởi ñộng, thực hiện gọi cửa sổ mà Jikibo ñã nói ở trên (Tools -> Load Application). Nhưng bạn ko thực hiện Load bằng select file như trên, mà hãy sử dụng button Contents