Đến nội dung


Hình ảnh
- - - - -

Tổng quan về Autolisp


  • Please log in to reply
3 replies to this topic

#1 haivt

haivt

    Chưa sử dụng CAD

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

Đã gửi 12 February 2008 - 08:04 AM

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:

(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:
(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:
(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 . <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ụ:
((-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:
(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:
(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

5.3. Sách tự học Autolisp
http://votrieuhai.googlepages.com/AutoLispTutorial.chm
http://votrieuhai.googlepages.com/AutoLisp...spTutorials.chm
http://votrieuhai.googlepages.com/AutoLispandMenus.chm
  • 3

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 12 February 2008 - 08:35 AM

Cảm ơn về bài viết hay.

Nhưng tôi đã thấy nó ở đây từ trước: http://diendan.uct2....thread/189.aspx
không biết bạn và trum45 bên uct2 có phải là 1 không?
  • 0

#3 haivt

haivt

    Chưa sử dụng CAD

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

Đã gửi 12 February 2008 - 08:44 AM

Cảm ơn về bài viết hay.

Nhưng tôi đã thấy nó ở đây từ trước: http://diendan.uct2.edu.vn/forums/thread/189.aspx
không biết bạn và trum45 bên uct2 có phải là 1 không?


Thanks! Bài viết này của tớ viết cách đây khá lâu:
http://www.bachkhoad...opic.php?p=7429

Rất vui được tham gia cùng các thành viên của CADViet.
  • 1

#4 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 14 February 2008 - 07:30 AM

TỔNG QUAN VỀ AUTOLISP - NGÔN NGỮ LẬP TRÌNH TRONG TỰ ĐỘNG HOÁ THIẾT KẾ...

Cám ơn sự nhiệt tình của bạn. Mong rằng bạn sẽ có thêm nhiều bài hay, đóng góp cho chuyên mục Lisp và VBA.
Happy New Year!
  • 0