1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án tìm hiểu ngôn ngữ autolisp và ứng dụng trong autocad

55 15 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm Hiểu Ngôn Ngữ Autolisp Và Ứng Dụng Trong Autocad
Tác giả Lưu Thị Thu Trang
Người hướng dẫn Thạc Sĩ Đỗ Văn Chiểu
Trường học Trường Đại Học Dân Lập Hải Phòng
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2007
Thành phố Hải Phòng
Định dạng
Số trang 55
Dung lượng 433,08 KB

Cấu trúc

  • 3.1.1 Xây dựng biểu thức AutoLISP (12)
  • 3.1.2 Cách nhập biểu thức AutoLISP (13)
  • 3.1.3 Các hàm số học (13)
  • 3.2. Biến và ký hiệu trong AutoLISP 14 (14)
    • 3.2.1 Gán giá trị cho biến (14)
    • 3.2.2 Giá trị trả về của hàm AutoLISP (14)
    • 3.2.3 Sử dụng các biến tại dòng lệnh AutoCAD (14)
    • 3.2.4 Các quy định về đặt tên biến (14)
    • 3.2.5 Nhập giá trị cho tham số (14)
    • 3.2.6 Phạm vi các biến trong AutoLISP (15)
  • 3.3. File chương trình AutoLISP 16 (16)
    • 3.3.1 Tên file AutoLISP (16)
    • 3.3.2 Tạo file chương trình (16)
    • 3.3.3 Gọi file chương trình AutoLISP (16)
    • 3.3.4 Chú thích (17)
    • 3.3.5 Các hàm tự tạo (17)
    • 3.3.6 Biến toàn cục và biến cục bộ (18)
    • 3.3.7 Tạo các lệnh AutoCAD mới (18)
  • 3.4. Nhập dữ liệu 19 (19)
    • 3.4.1 Nhập số nguyên (19)
    • 3.4.2 Nhập số thực (0)
    • 3.4.3 Nhập chuỗi (19)
    • 3.4.5 Tham số không rỗng (19)
    • 3.4.6 Kiểm soát dữ liệu nhập vào (19)
    • 3.4.7 Biến hệ thống (19)
  • 3.5. Một số hàm cơ bản 20 (20)
    • 3.5.1 Hàm chuyển kiểu dữ liệu từ chuỗi thành số và ngược lại (20)
    • 3.5.2. Các hàm số học (21)
    • 3.5.3. Các hàm về chuỗi (23)
  • 3.6. Xử lý danh sách 25 (25)
    • 3.6.1 Phân loại (25)
    • 3.6.2 Tạo danh sách (25)
    • 3.6.3 Các hàm xử lý danh sách cơ bản (25)
    • 3.6.4 Các hàm xử lý danh sách nâng cao (26)
  • 3.7. Biểu thức điều kiện 28 1. Biểu thức điều kiện (28)
    • 3.7.2. Rẽ nhánh chương trình (29)
    • 3.7.3 Các hàm logic (30)
  • 3.8. Vòng lặp 31 (31)
    • 3.8.1 Hàm Repeat (31)
    • 3.8.2 Hàm While (31)
    • 3.8.3 Hàm Append (31)
    • 3.8.4 Hàm 1+ (32)
    • 3.8.5 Hàm 1- (32)
    • 3.8.6 Truy xuất từng phần tử trong danh sách (32)
  • 3.9. Tạo hộp thoại 33 (33)
    • 3.9.1 Khái niệm về file .DCL và các thành phần của hộp thoại (33)
    • 3.9.2. Phân loại các ttile (34)
    • 3.9.3 Các thuộc tính của tile (40)
    • 3.9.4 Các hàm điều khiển hộp thoại (41)
    • 3.9.5 Các hàm điều khiển các tile (41)
    • 3.9.6 Một số chú ý khi thiết kế hộp thoại (42)
  • 3.10. Các hàm xử lý màn hình đồ hoạ và thiết bị nhập 44 (43)
    • 3.10.1 Màn hình đồ họa (43)
    • 3.10.2 Gọi hiển thị các menu (44)
    • 3.10.3 Các hàm truy xuất màn hình đồ họa và thiết bị nhập (45)

Nội dung

Xây dựng biểu thức AutoLISP

Khi nhập dòng lệnh trong AutoCAD, phần mềm sẽ so sánh với danh sách lệnh có sẵn Nếu tìm thấy sự tương ứng, AutoCAD sẽ thực hiện lệnh đó Khi mã AutoLISP được đưa vào AutoCAD, nó sẽ được chuyển đến bộ biên dịch AutoLISP để xử lý.

Danh sách là cấu trúc cơ bản trong AutoLISP, được định nghĩa là tập hợp các phần tử nằm trong dấu ngoặc đơn và phân cách bởi khoảng trắng Trong AutoLISP, có hai loại danh sách chính.

Biểu thức là thành phần cơ bản nhất trong các chương trình AutoLISP, với phần tử đầu tiên là một hàm Hàm này được AutoLISP định giá trị và trả về kết quả.

Biểu thức AutoLISP tương tự như biểu thức toán học, nhưng có sự khác biệt quan trọng về thứ tự các phần tử và yêu cầu sử dụng dấu ngoặc ().

Biểu thức toán học Biểu thức AutoLISP hàm

Cách nhập biểu thức AutoLISP

Ta có thể nhập giống như nhập lệnh AutoCAD:

 Nhập trực tiếp tại dòng nhắc lệnh.

Nếu biểu thức không gặp lỗi, kết quả sẽ hiển thị tại dòng nhắc lệnh Ngược lại, nếu có lỗi, thông báo lỗi sẽ xuất hiện cùng với biểu thức gây ra lỗi.

Các hàm số học

a Hàm cộng :nhận vào nhiều tham số và trả về tổng các tham số này.

Trong AutoLISP, việc lồng ghép các hàm cho phép tính toán các biểu thức phức tạp một cách hiệu quả Điều này giúp chuyển đổi các biểu thức toán học phức tạp thành những biểu thức đơn giản hơn để dễ dàng xử lý và tính toán.

AutoLISP, trước tiên ta nên tạo các biểu thức ở mức sâu nhất, sau đó chuyển dần sang các biểu thức bên ngoài.

Biến và ký hiệu trong AutoLISP 14

Gán giá trị cho biến

 Cú pháp: ( setq tờnbiến1 giatrị1 tờnbiến2 giỏtrị2… )

Giá trị trả về của hàm AutoLISP

 Hàm setq có thể trả về giá trị rỗng “nil”, true “T” hoặc các số, chuỗi, danh sách.

 Để đổi dấu giá trị kiểu số chứa trong biến, ta dùng hàm trừ với một tham số duy nhất.

 Khi tham số của hàm là tên biến, AutoLISP sẽ định giá trị của biến và sử dụng giá trị này làm tham số.

 Kiểu dữ liệu chứa trong biến phải phù hợp với kiểu dữ liệu mà hàm yêu cầu.

Các dữ liệu chuỗi không thể dùng làm tham số cho các hàm số học.

Sử dụng các biến tại dòng lệnh AutoCAD

Để lấy giá trị của biến, ta đặt dấu ! trước tên biến.

VD: Vẽ đường tròn với bán kính X

Các quy định về đặt tên biến

 Tên biến có thể chứa bất kỳ ký tự nào, trừ ( ) ‘ “ và khoảng trắng.

AutoLISP có các hằng số được định nghĩa sẵn, chẳng hạn như pi = 3.1415926 Việc gán giá trị khác cho các hằng số này là không nên, vì điều đó sẽ làm mất đi giá trị ban đầu và không thể khôi phục lại được.

 Không đặt tên biến trùng với tên hàn AutoLISP.

 Không đặt tên quá dài và phức tạp.

 Tên ngắn dễ nhập, khi nhập không bị lỗi và được truy xuất nhanh hơn.

Nhập giá trị cho tham số

 Cú pháp: (getpoint [pt] [prompt])

 Hàm getpoint không tham số sẽ dừng quá trình tính toán cho đến khi người dùng nhập vào một điểm hoặc thoát ra khỏi hàm.

 Hàm này trả về giá trị dạng danh sách Để AutoLISP không xem danh sách này là biểu thức ta dùng hàm quote hoặc dấu ‘.

Phạm vi các biến trong AutoLISP

Trong các phiên bản cũ của AutoCAD, các biến AutoLISP sẽ được khởi tạo lại và nhận giá trị mặc định khi người dùng tạo mới hoặc mở bản vẽ khác Điều này có nghĩa là các giá trị được gán cho biến chỉ có hiệu lực trong phạm vi của một bản vẽ duy nhất.

Từ phiên bản AutoCAD 14 trở đi, các biến AutoLISP chỉ được khởi tạo lại khi đóng cửa sổ chương trình, và giá trị của chúng sẽ vẫn tồn tại khi mở hoặc tạo bản vẽ mới Nếu bạn mở nhiều phiên bản AutoCAD cùng lúc, biến của phiên bản này sẽ không thể truy xuất từ phiên bản khác Để khởi tạo lại các biến AutoLISP khi tạo mới hoặc mở bản vẽ khác trong cùng một cửa sổ, bạn cần gán giá trị cho biến hệ thống LISPINIT = 1 hoặc mở hộp thoại tương ứng.

Preference/Compatibility đánh dấu mục Reload AutoLISP between drawings.

File chương trình AutoLISP 16

Tên file AutoLISP

Tên file có thể dài 256 ký tự, phần mở rộng là LSP Trong một số trường hợp có thể dựng tờn mở rộng khác : mnl,…

Tạo file chương trình

 Sử dụng cỏc trỡnh soạn thảo notepad, MS word…

 Tools / AutoLISP / Visual Lisp Editor

Hỡnh1.Cửa sổ soạn thảo lệnh Chú ý:

 Một biểu thức có thể viết trên nhiều dòng.

 Dựng các khoảng trắng để chương trình dễ đọc.

 Mỗi biểu thức AutoLISP phải được đặt trong dấu ngoặc đơn.

 Các dữ liệu kiểu chuỗi phải đặt trong dấu nháy chuỗi Nếu chuỗi dữ liệu không đặt trong dấu nháy chuỗi, AutoLISP sẽ xem đó là tên hàm.

Gọi file chương trình AutoLISP

 Hàm load dùng để đọc file chương trình, kiểm tra lỗi cú pháp, định giá trị các biểu thức và trả về giá trị của biểu thức cuối cùng.

 Cú pháp : (load tờnfile [onfailure])

 Tên file: tên mở rộng mặc định là *.LSP Khi cần thiết ta phải cung cấp đầy đủ tên file và đường dẫn.

 VD: (load E:/Autolisp/vd.LSP) hoặc

Khi sử dụng lệnh (load E:\\Autolisp\\vd.lsp), tham số tùy chọn onfailure cho phép xử lý lỗi khi AutoLISP không thể thực thi hàm load Tham số này có thể chứa các biểu thức để hiển thị thông báo lỗi hoặc tìm kiếm file trong thư mục khác Ví dụ, lệnh (load “vd” “Loi:khong tim thay file”) sẽ trả về thông báo lỗi “Loi:khong tim thay file” nếu file vd.lsp không tồn tại Ngoài hàm load, người dùng còn có thể sử dụng Appload để tải các ứng dụng AutoLISP, ARX, và ADS.

Chú thích

Trong AutoLISP, tất cả các ký tự nằm bên phải dấu chấm phẩy (;) cho đến hết dòng được coi là chú thích Chú thích này có thể xuất hiện ở đầu dòng hoặc sau biểu thức.

 Chú thích có thể đứng giữa biểu thức, chứ trong cặp ;| chú thích |;

 VD: (setq R ;| gán giá trị cho R |; 10 )

 Hàm prompt dùng để hiện dòng thông báo lên màn hình Hàm này hiện kiểu dữ liệu chuỗi chứa trong tham số Message và trả về giá trị nil.

 Princ tương tự Prompt nhưng không trả về giá trị nil mà trả về chuỗi thông báo.

Các hàm tự tạo

(defun [tên hàm] [danh sách biến] [biểu thức])

 Tên hàm: tên hàm tuân theo các quy định về đặt tên biến.

Danh sách biến bao gồm hai phần được phân tách bởi dấu / Phần đầu tiên chứa các tham số cần thiết để gọi hàm, trong khi phần thứ hai bao gồm các biến cục bộ của hàm.

 Biểu thức: khi hàm được gọi các biểu thức này lần lượt được tính.

 Ví dụ: tạo hàm nhân đôi giá trị tham số đưa vào

Biến toàn cục và biến cục bộ

 Biến toàn cục là các biến vẫn giữ nguyên giá trị trong phạm vi bản vẽ hiện hành.

 Biến cục bộ là các biến được định nghĩa trong phạm vi một hàm và giá trị của nó sẽ mất khi đi việc gọi hàm kết thúc.

Tạo các lệnh AutoCAD mới

 Ta có thể sử dụng một trong hai đặc điểm sau để áp dụng cho các hàm tự tạo: C: Option và S::Startup Option.

 Để có thể sử dụng hàm tự tạo tương tự lệnh của AutoCAD, ta đặt ký hiệu C: vào trước tên hàm trong phần định nghĩa hàm tự tạo.

 Ví dụ: xây dựng hàm vẽ đường thẳng đi qua 2 điểm

To create a line through two points in AutoCAD, use the following Lisp function: (defun C:duongthang (/ diem1 diem2) Begin by prompting the user with "\n Ve duong thang qua hai diem" to indicate that they should draw a line through two points Next, obtain the first point by using (setq diem1 (getpoint "\n nhap diem thu nhat")) and the second point with (setq diem2 (getpoint "\n nhap diem thu hai")) Finally, execute the command to draw the line by calling (command "LINE" diem1 diem2 "").

(prompt “\n Hoan thanh”) ;thong bao ket thuc ham )

Ta có thể tải file này và gọi lệnh duongthang như một lệnh của AutoCAD.

Khi khởi động AutoCAD, hàm S::Startup được định nghĩa trong file ACADR14.LSP sẽ tự động được gọi, và đây là hàm duy nhất có tính chất này Do được thực hiện tự động, hàm này không chứa bất kỳ tham số nào Thông thường, hàm S::Startup được sử dụng để thực hiện các thao tác khởi tạo bản vẽ.

Nhập dữ liệu 19

Nhập số nguyên

 Ví dụ: (getint “\n Nhap vao so hang:”)

 Các số thực được chứa dưới dạng dấu chấm động với độ chính xác kép, cung cấp tối thiểu 14 chữ số thập phân có nghĩa.

 Chuỗi nhập vào không được quá 132 ký tự

Tham số không rỗng là loại tham số chỉ chấp nhận các giá trị khác rỗng Để cung cấp tham số không rỗng, có hai phương pháp: sử dụng biến T hoặc nhập một giá trị cụ thể.

 Biến T được AutoLISP định nghĩa trước và có giá trị là T (True) Ta không nên thay đổi giá trị biến T.

3.4.6 Kiểm soát dữ liệu nhập vào

 Hàm initget cung cấp danh sách các giá trị nhập hợp lệ bằng cách gỏn cỏc bit kiểm tra (bit code) và danh sách các từ khoá

 Cú pháp: (initget [bits] [string])

 Hàm này yêu cầu nhập dữ liệu ở dạng từ khoá

 Hàm này chỉ chấp nhận 2 bit code là 1 và 128

 Lấy giá trị biến hệ thống

 Cú pháp : (getvar tên biến)

 Gán giá trị biến hệ thống

 Cú pháp : (setvar [tên biến] [giá trị])

 CmdEcho =1: kết quả tính toán trung gian sẽ hiện lên màn hình.

 CmdEcho =0: kết quả tính toán trung gian sẽ không hiện lên màn hình.

Nhập chuỗi

 Chuỗi nhập vào không được quá 132 ký tự

Tham số không rỗng

Tham số không rỗng là loại tham số chỉ chấp nhận các giá trị khác rỗng Có hai phương pháp để cung cấp tham số không rỗng: sử dụng biến T hoặc cung cấp một giá trị cụ thể.

 Biến T được AutoLISP định nghĩa trước và có giá trị là T (True) Ta không nên thay đổi giá trị biến T.

Kiểm soát dữ liệu nhập vào

 Hàm initget cung cấp danh sách các giá trị nhập hợp lệ bằng cách gỏn cỏc bit kiểm tra (bit code) và danh sách các từ khoá

 Cú pháp: (initget [bits] [string])

 Hàm này yêu cầu nhập dữ liệu ở dạng từ khoá

 Hàm này chỉ chấp nhận 2 bit code là 1 và 128

Biến hệ thống

 Lấy giá trị biến hệ thống

 Cú pháp : (getvar tên biến)

 Gán giá trị biến hệ thống

 Cú pháp : (setvar [tên biến] [giá trị])

 CmdEcho =1: kết quả tính toán trung gian sẽ hiện lên màn hình.

 CmdEcho =0: kết quả tính toán trung gian sẽ không hiện lên màn hình.

Một số hàm cơ bản 20

Hàm chuyển kiểu dữ liệu từ chuỗi thành số và ngược lại

AutoLISP cung cấp các hàm getreal và getstring để nhập số thực và chuỗi, cho phép dữ liệu nhập vào được sử dụng trong các hàm AutoLISP hoặc lệnh AutoCAD Tuy nhiên, dữ liệu có thể đến từ nhiều nguồn khác nhau và không phải lúc nào cũng ở định dạng mong muốn, vì vậy cần chuyển đổi kiểu dữ liệu giữa số và chuỗi Hàm ATOF (Ascii TO Floating point decimal) được sử dụng để chuyển đổi một chuỗi thành số thực.

(atof “21”) ;trả về 21.0 (atof “A”) ;trả về 5.25 b Hàm DISTOF (Distance TO Floating point decimal): tương tự hàm atof

 Cỳ pháp: (distof string [mode])

(distof “82 1/2” 5) ;trả về 82.5 MODE 5 c Hàm ATOI (Ascii TO Integer): chuyển một chuỗi thành số nguyên

 Cú pháp: (Atoi string [mode])

(atoi “4.3E03”) ;trả về 4 d Hàm RTOS (Real TO String): chuyển một số thành một chuỗi

 Cú pháp: (Rtos number [mode [precision]]) e Hàm ITOA (Integer TO Ascii): chuyển số nguyên thành chuỗi

Hàm itoa chỉ chấp nhận tham số là số nguyên duy nhất, không hỗ trợ tham số chuỗi Hàm ANGTOS (Angle to string) được sử dụng để chuyển đổi số đo góc thành chuỗi.

 Cú pháp: (Angtos ange [mode [precision]]) g Hàm ANGTOF (Angle to floating point decimal): chuyển đổi một chuỗi chứa số đo góc thành một số thực.

 Cú pháp: (Angtof string [mode])

Hàm ASCII: chuyển ký tự đầu tiên trong một chuỗi thành mã Ascii tương ứng và trả về mã này.

Hàm CHR trong lập trình cho phép chuyển đổi mã ASCII thành ký tự tương ứng, sử dụng cú pháp (Ascii string) h Các mã ASCII chuẩn có giá trị nằm trong khoảng từ 32 đến 126.

 Cú pháp: (Chr integer) i Hàm READ: trả về phần tử đầu tiên chứa trong một chuỗi và chuyển đổi chuỗi này về kiểu dữ liệu tương ứng.

Các hàm số học

3.5.2.1 Các hàm kiểm soát dạng số a.Hàm FIX: trả về phần nguyên của một số Phần số nguyên này không được làm tròn.

 Ví dụ : (fix 52.34) ;trả về 52 b.Hàm FLOAT: chuyển một số có kiểu số nguyên thành kiểu số thực.

 Cú pháp : (Float number) c Hàm ABS: trả về giá trị tuyệt đối của một số.

3.5.2.2 Các hàm khác a Hàm Rem: trả về số dư của phép chia.

 Cú pháp: (Rem number number …)

(setq R (rem 27.5 5)) b Hàm GCD: trả về ước số chung lớn nhất của hai số nguyên

 Cú pháp: (Gcd munber1 number2) c Hàm Max: trả về giá trị lớn nhất trong các số

 Cú pháp: (Max munber number number… ) d Hàm Min: trả về giá trị nhỏ nhất trong các số

 Cú pháp: (Min munber number number… )

3.5.2.3 Các hàm lượng giác a Hàm Sin: trả về giá trị sin của một góc

 Giá trị trả về là số thực, tham số angle phải được tính bằng radian. b Hàm Cos: trả về giá trị cos của một góc

 Cú pháp: (Cos angle) c Hàm Atan: trả về giá trị arc tang của một góc.

 Cú pháp: (Atan num1 [num2])

3.5.2.4 Các hàm luỹ thừa, khai căn, logarit a Hàm Expt: tính luỹ thừa của một số.

 Cú pháp: (Expt base power)

 Ví dụ (expt 4 2) ; trả về (4) 2 = 16 b Hàm Sqrt: trả về căn bậc hai của một số.

 Ví dụ: (Sqrt 16) ; trả về 4.0 c Hàm Log: trả về giá trị logarit của một số.

 Ví dụ: (log 6) ;trả về 1.79176 d Hàm Exp: trả về giá trị luỹ thừa e n

 Ví dụ: (Exp 1) ; trả về 2.71828

3.5.2.5 Các hàm về khoảng cách và góc đo a Hàm chuyển đổi đơn vị góc đo:

 CVUNIT: dùng để chuyển đổi một giá trị hoặc toạ độ một điểm từ đơn vị đo này sang đơn vị đo khác

 Cú pháp : (Cvunit value from to) b Hàm Angle: trả về góc đo (bằng radian) tạo bởi đường thẳng qua hai điểm với trục

 Cú pháp: (Angle PT1 PT2)

 Nếu các điểm PT1, PT2 là các điểm 3D, chúng sẽ được chiếu lên mặt phẳng

XY hiện hành sau đó hai điểm chiếu này được dùng để tớnh gúc. c Hàm Distance: trả về khoảng cách giữa hai điểm.

 Cú pháp: (Distance PT1 PT2) d Hàm Polar: dùng toạ độ cực để tạo ra điểm 2D mới từ điểm ban đầu.

 Cú pháp: (Polar PT Angle Distance)

Hàm Polar ‘(1 0) 0 3’ trả về kết quả (4.0 0.0), trong đó góc là 0 và khoảng cách là 3 so với điểm ban đầu Hàm Getangle cho phép người dùng nhập giá trị góc đo hoặc chọn hai điểm trên màn hình bằng cách nhấn chuột, và kết quả được tính bằng Radian.

 Cú pháp: (Getangle [PT] [prompt])

(getangle “\n Chi ra vi tri cua goc”) f Hàm Getdis: yêu cầu nhập vào giá trị khoảng cách, hoặc chọn hai điểm trên màn hình bằng cách nhấn chuột.

 Hàm Getdis trả về một số thực.

 Hàm Getdis thường được sử dụng khi các điểm không có sẵn trước trong chương trình.

 Ví dụ: viết chương trình tính khoảng cách hai điểm nhập vào

(defun C:khoangcach (/ diem kc) (setq p1 (getpoint “\n chon diem dau tien”)) (setq p2 (getpoint “\n chon diem thu hai”)) (prompt “\n Khoang cach giua hai diem la:”) (distance p1 p2)

Các hàm về chuỗi

3.5.3.1 Các hàm hiển thị thông tin a Hàm Prin1: in dữ liệu chứa trong tham số EXPR lên màn hình hoặc in thành file và trả về kết quả là tham số này.

 Cú pháp: (Prin1 [Expr [File-Desc]])

 Expr: có thể chứa các kiểu dữ liệu khác nhau

File-Desc là file dùng để lưu trữ kết quả trả về của hàm Hàm Princ có chức năng in dữ liệu từ tham số EXPR ra màn hình hoặc ghi vào file, đồng thời trả về chính tham số này, tương tự như hàm prin1.

Cú pháp của hàm Print là (Princ [Expr [File-Desc]]), cho phép tự động xuống dòng và in dữ liệu từ tham số EXPR lên màn hình hoặc lưu vào file Hàm này trả về kết quả tương tự như hàm prin1.

 Cú pháp: (Print [Expr [File-Desc]]) d Ví dụ:

(prin1 “ABC”) ;in “ABC” và trả về “ABC”

(princ “ABC”) ;in ABC và trả về “ABC”

(print “ABC”) ; sang dòng mới, in “ABC” và trả về “ABC”

(prin1 “\nABC”) ;không nhận biết được ký tự xuống dòng

;in “\nABC” và trả về “\nABC”

(princ “\nABC”); nhận biết được ký tự xuống dòng, in ABC và trả về “\nABC”

3.5.3.2 Các hàm xử lý chuỗi a Hàm STRCASE: biến các ký tự trong chuỗi thành chữ hoa hoặc chữ thường.

 Cú pháp: (Strcase String [which]) b Hàm STRCAT: dùng để kết nối nhiều chuỗi thành một chuỗi

 Cú pháp: (Strcat string1 string2… ) c Hàm STRLEN: trả về độ dài một chuỗi.

 Nếu có nhiều tham số string, hàm trả về tổng chiều dài các chuỗi. d Hàm SUBSTR: trả về một chuỗi con.

 Cú pháp: (Substr string start [length])

 Ví dụ: (setq A “Ngon ngu AutoLISP”)

(substr A 1 8) ; trả về “Ngon ngu”

Xử lý danh sách 25

Phân loại

Danh sách được chia thành 3 loại chính:

 Biểu thức (Expression list): chứa tên hàm và các tham số của hàm Biểu thức cần được định giá trị.

 Toạ độ điểm (Point coordinate List): đây là trường hợp đặc biệt của danh sách kho dữ liệu, trong đó thông tin lưu trữ là toạ độ điểm.

 Kho dữ liệu (Data Storage List): có thể chứa bất kỳ kiểu dữ liệu nào.

Tạo danh sách

Khi lập trình, việc lưu trữ dữ liệu vào các biến riêng lẻ có thể trở nên khó khăn khi số lượng dữ liệu tăng lên Để giải quyết vấn đề này, chúng ta nên sử dụng danh sách, cho phép lưu trữ nhiều phần tử trong một biến duy nhất Cách tiếp cận này giúp đơn giản hóa việc quản lý và truy cập dữ liệu hiệu quả hơn.

 Ví dụ: (setq L (list “Nha” “Tran” “cua so” 78.5 ‘(20 20 30)))

;có 5 phần tử với các kiểu dữ liệu khác nhau trong danh sách

;”Nha”, “Tran”, “cuaso” :kiểu chuỗi

;’(20 20 30) :danh sách không định giá trị

 Trước khi tạo ra danh sách, hàm list sẽ định giá trị cho các tham số của mình

(trừ tham số là danh sách không định giá trị).

Các hàm xử lý danh sách cơ bản

a Hàm CAR: trích ra phần tử đầu tiên của danh sách

Cú pháp của hàm CDR cho phép tạo ra một danh sách mới từ danh sách gốc bằng cách loại bỏ phần tử đầu tiên Hàm này chỉ giữ lại các phần tử còn lại, giúp người dùng dễ dàng thao tác với dữ liệu trong lập trình.

 Cú pháp: (Cdr list) c Hàm CADR: trả về phần tử thứ hai trong danh sách.

 Cú pháp : (Cadr list) d Hàm CADDR: trả về phần tử thứ ba trong danh sách.

 Cú pháp: (Caddr list) e Hàm LAST: trả về phần tử cuối cùng của danh sách.

 Cú pháp: (Last list) f Hàm LENGTH: trả về số lượng phần tử có trong danh sách.

Các hàm xử lý danh sách nâng cao

a Hàm ASSOC (Association): trả về danh sách con trong danh sách phức.

 Cú pháp: (Assoc item alist)

 Alist phải là danh sách phức hợp.

 Item là phần tử đầu tiên của danh sách con trả về.

 Ví dụ: danh sách Form chứa chiều dài, chiều rộng, chiều cao và thể tích một khối chữ nhật.

(setq Form ‘((chieudai 185.0) (chieurong 75.0) (chieucao 45.0) (thetich

(cadr (assoc ‘chieudai Form)) ; trả về 185.0

(cadr (assoc ‘chieurong Form)) ; trả về 75.0

(cadr (assoc ‘chieucao Form)) ; trả về 45.0

(cadr (assoc ‘thetich Form)); trả về 624370.0 b Hàm CONS

Danh sách con trong danh sách phức hợp có nhiều dạng khác nhau và có thể chứa nhiều phần tử Một dạng phổ biến của danh sách con là cặp chấm (dotted pair), trong đó hai phần tử được phân cách bởi dấu chấm.

AutoLISP thường dùng dạng danh sách này để lưu trữ và truy xuất dữ liệu lấy từ cơ sở dữ liệu các đối tượng của AutoCAD.

Hàm cons trong lập trình có hai tham số; nếu tham số thứ hai là một danh sách, hàm này sẽ thêm tham số thứ nhất vào đầu danh sách đó.

 Cú pháp: (cons new-first-element list)

(cons 10 ‘(50 40 60)) ; trả về (10 50 40 60) (cons ‘a ‘(b v)) ; trả về (a b v) (cons a ‘(b v)) ; trả về (100 b v)

 Nếu tham số thứ hai là kiểu dữ liệu không phải dạng danh sách, hàm sẽ trả về dạng dotted pair.

(cons 1 “mot”) ; trả về (1 “mot”)

Hàm cons trong Lisp trả về một cặp danh sách, ví dụ như (cons '(1 2 3) 10) sẽ cho kết quả là ((1 2 3) 10) Hàm MEMBER được sử dụng để duyệt qua danh sách và kiểm tra xem một biểu thức expr có phải là phần tử của danh sách hay không Nếu tìm thấy, hàm sẽ trả về phần còn lại của danh sách bắt đầu từ phần tử expr.

 Cú pháp: (member expr alist)

 Hàm member kết hợp với hàm assoc, cxxxxr để giảm bớt các biểu thức điều kiện.

(member 5 X) ; trả về nil d Hàm REVERSE: trả về danh sách theo thứ tự ngược lại.

(reverse X) ; trả về 4 3 2 1 e Hàm NTH: lấy ra phần tử ở vị trí n trong danh sách.

 Vị trí các phần tử trong danh sách được đánh số bắt đầu từ 0

Biểu thức điều kiện 28 1 Biểu thức điều kiện

Rẽ nhánh chương trình

Biểu thức điều kiện trong lập trình thường được sử dụng theo dạng IF THEN Khi điều kiện được xác định đúng, biểu thức sẽ được thực hiện; ngược lại, nếu điều kiện sai, biểu thức sẽ không được thực hiện.

 Ví dụ: viết chương trình cho phép người dùng lựa chọn vẽ hoặc không vẽ đường tròn

(if (= “Yes” (getkword “\n Co ve vong tron khog :”));biểu thức kiểm tra

 (If biểu thức điều kiện biểu thức Else_biểu thức) - Dạng IF THEN ELSE.

Nếu biểu thức điều kiện đỳng thỡ biểu thức được thực hiện Ngược lại

Else_biểu thức được thực hiện.

 Ví dụ: chương trình kiểm tra số nhập vào có là số hay không

(numberp a) ;biểu thức điều kiện (princ (setq b (- a 32))) ;biểu thức

(princ “\n Khong phai dang so”) ;else_biểu thức )

 Hàm này dùng để nhóm nhiều biểu thức thành một biểu thức duy nhất dùng trong hàm If.

 Cú pháp: (Progn biểu thức… )

Các hàm logic

 Cú pháp: (And biểu thức….)

(and (> a 0) (= a 12) ( c -10) (< c 30)) ;trả về T (or a b) ;trả về nil c Hàm NOT

 Cú pháp: (Not phần tử)

(not nil) ; trả về T(not T) ; trả về nil(not (and 1 3)) ; trả về nil

Vòng lặp 31

Hàm Repeat

 Hàm Repeat tạo ra vòng lặp với số lần nhất định.

 Cú pháp: (Repeat num expr)

 Num: là một số nguyên dương, xác định số lần định giá trị các biểu thức expr Hàm trả về giá trị cuối cùng trong vòng lặp.

 Nếu Num là số âm hoặc 0 thì hàm repeat không định giá trị các biểu thức và trả về nil.

Hàm While

 Hàm while tạo ra vòng lặp có điều kiện Vòng lặp sẽ kết thúc khi điều kiện lặp không còn thoả mãn.

 Cú pháp: (while đk lặp biểu thức)

Khi điều kiện lặp không trả về giá trị nil, các biểu thức sẽ tiếp tục được định giá trị Quá trình này chỉ dừng lại khi điều kiện lặp trả về giá trị nil.

 Ví dụ: vòng lặp sẽ kết thúc khi nhập vào một số âm

(setq n (getint “\n Nhap vao mot so bat ky khong am”)))

Hàm Append

Hàm Append là một công cụ hữu ích trong lập trình, cho phép gộp nhiều danh sách thành một danh sách duy nhất Chức năng chính của hàm này là thêm các phần tử vào vị trí cuối cùng của danh sách đã có, giúp quản lý và tổ chức dữ liệu một cách hiệu quả.

 Cú pháp: (Append biểu thức)

 Sử dụng hàm Append trong vòng lặp while, ta có thể bổ sung thêm phần tử vào một danh sách có sẵn.

 Ví dụ: nhập vào số thực bổ sung cho danh sách realnum, dừng khi ấn Enter

(while (setq x (getreal “\n nhap vao so thuc (an Enter de dung): ”))

(set realnum (append realnum (list x)))

Hàm 1+

Hàm 1-

Truy xuất từng phần tử trong danh sách

Hàm Foreach lặp qua từng phần tử trong danh sách và gán giá trị của từng phần tử cho biến name tạm thời Các biểu thức expr sẽ được định giá trị dựa trên biến name, do đó giá trị của name sẽ thay đổi ở mỗi lần lặp Nếu danh sách không có phần tử nào, hàm sẽ trả về nil.

 Cú pháp: (Foreach name list expr)

 Ví dụ: in ra màn hình từ 1 đến 5

(foreach dsach (list “1” “2” “3” “4” “5”) princ (strcat “\n” dsach))(princ) b Hàm SET

 Hàm set rất có ich khi làm việc với biến và tên biến trong hàm foreach.

 Cú pháp: (Set sym expr)

 Sym phải là kiểu biến không định giá trị Hàm set gán giá trị của expr cho biến chứa trong tham số sym.

 So sánh hàm setq và set

 Hàm setq gán giá trị cho một biến mà không định giá trị cho biến này.

 Hàm set trước tiên định giá trị của biến sym, sau đó mới gán giá trị cho biến tìm được.

 Setq = set + quote c Hàm EVAL

 Hàm eval trả về kết quả của việc định giá trị biểu thức expr.

 Biểu thức expr được định giá trị cho đến mức cuối cùng, loại bỏ các kết quả ở mức trung gian.

Tạo hộp thoại 33

Khái niệm về file DCL và các thành phần của hộp thoại

File DCL được sử dụng để mô tả cấu trúc của các hộp thoại trong AutoCAD Đây là loại file văn bản ASCII, tương tự như file chương trình AutoLISP Các hộp thoại của AutoCAD được định nghĩa trong file acad.dcl.

Các thành phần của hộp thoại như cỏc nỳt lệnh (button) hoặc các hộp văn bản

Các tile, với hình dáng, kích thước và chức năng đa dạng, được xác định bởi các thuộc tính của chúng Chúng có thể được sử dụng để tạo ra nhiều ứng dụng khác nhau trong thiết kế và phát triển.

Prototype hoặc các Subassembly để sử dụng được nhiều lần trong các file DCL khác nhau.

AutoCAD tự động mô tả cấu trúc mặc định cho các tile và sắp xếp các thành phần của chúng Do đó, người dùng chỉ cần khai báo giá trị cho những thuộc tính cần thiết.

Bảng phân loại các tile

Phân loại Các tile Mô tả

Button Edit_box Image_button List_box Popup_list Radio_button Slider

Có khả năng nhận con trỏ, cho phép thu thập giá trị nhập từ người dùng Các tile cơ sở này có thể được sử dụng để tạo ra các tile phức tạp hoặc các cụm tile.

Boxed_column Boxed_radio_column Boxed_radio_row Boxed_row Column Dialog Radio_column Radio_row Row sử dụng để nhóm các tile thành một hàng hoặc một cột.

Image Text Spacer Spacer_0 Spacer_1 sử dụng để tăng tính thẩm mỹ cho hộp thoại.

Concatenation sử dụng để tăng khả năng định dạng và

Text_part sắp xếp các dòng chữ trong hộp thoại.

Các subassembly do AutoCAD tạo sẵn bao gồm err_tile, Ok_only, Ok_cancel, Ok_cancel_help, Ok_cancel_help_errtile, và Ok_cancel_help_info, được sử dụng cho chức năng đóng hộp thoại Trong đó, err_tile là khu vực ở góc trái dưới của hộp thoại, có chức năng hiển thị thông báo lỗi khi người dùng nhập dữ liệu không hợp lệ.

Trong file DCL, cấu trúc của một hộp thoại được mô tả bằng cách liệt kê các tile và thuộc tính của chúng theo thứ tự từ trên xuống, tuân theo cấu trúc cây.

 Mức cao nhất của cây, gọi là gốc luôn là dialog.

 Các tile mức 1: toggle, boxed_column, row gọi là con của hộp thoại.

 Các tile mức 2: edit_box là con của boxed_column.

 row: là một subassembly chứa các tile: ok_button, cancel_button, err_tile

 Tờn các tile phải viết bằng chữ thường, bắt đầu bằng dấu hai chấm (:)

 Các tile được liệt kê theo thứ tự từ trên xuống như trong hộp thoại.

 Cỏc dòng chú thích bắt đầu bằng //

 Các thuộc tính của một tile được đặt trong cặp dấu {} và kết thúc mỗi thuộc tính là dấu (;).

 Các hộp thoại phải chứ một exit tile để đóng hộp thoại.

Phân loại các ttile

Các thuộc tính sử dụng để xác định hình dạng, kích thước, vị trí của các tile.

Một số thuộc tính sử dụng được cho nhiều tile, một số thuộc tính chỉ sử dụng riêng cho một tile.

Các thuộc tính của các tile có thể là: action, alignment, allow_aceept, color, edit_limit, height, key, layout…(tham khảo thêm ở [2]).

Dialog là tile sử dụng để mô tả bản thân hộp thoại Các tile con của dialog được sắp xếp thành một cốt theo thứ tự từ trên xuống

: dialog { init_focus label value key

Trong bài viết này, chúng ta sẽ tìm hiểu về các thành phần quan trọng trong một hộp thoại Đầu tiên, init_focus là tên tile nhận con trỏ khi hộp thoại xuất hiện Tiếp theo, label là tiêu đề của hộp thoại, trong khi value cũng là tiêu đề được sử dụng trong quá trình chạy Cuối cùng, chúng ta sẽ đề cập đến các nút (Button) trong hộp thoại để hoàn thiện trải nghiệm người dùng.

Nút lệnh, với hình dạng nút nhấn, thực hiện chức năng khi người dùng nhấn vào Mỗi hộp thoại cần có ít nhất một nút để đóng lại.

: button { action alignment fixed_hieght fixed_width height is_cancel is_default is_enable key is_tabstop label mnemonic width

Edit_box cho phép người dùng nhập và sửa nội dung của chuỗi xuất hiện trên hộp thoại.

: edit_box { action alignment allow_accept fixed_height edit_limit edit_width fixed_width height is_enable is_tab_stop key label mnemonic

} trong đó: label: tiêu đề của edit_box value: chuỗi xác định giá trị mặc định ban đầu của edit_box d Image button

Image_button hoạt động như một nút bấm, hiển thị hình ảnh có thể là slide từ AutoCAD hoặc các vector Người dùng có thể xác thực tọa độ điểm chọn trên hình ảnh, từ đó thực hiện các lệnh phù hợp Các thuộc tính chiều cao và chiều rộng là bắt buộc, hoặc có thể được xác định thông qua tỷ lệ giữa chúng (aspect_ratio).

: image_button { action alignment allow_accept aspect_ratio color fixed_height fixed_width height is_enable is_tab_stop key label mnemonic width

List_box là công cụ hữu ích cho phép người dùng chọn từ một danh sách các chuỗi được sắp xếp theo cột Điều này đặc biệt quan trọng khi có quá nhiều phần tử không thể hiển thị đầy đủ trong danh sách.

: list_box{ action alignment allow_accept fixed_height fixed_width_font tabs fixed_width height is_enable is_tab_stop key label list mnemonic multiple_select tab_truncate

Tiêu đề xuất hiện trên danh sách, với nội dung các phần tử được ngăn cách bằng ký tự xuống dòng “\n” Giá trị là một chuỗi chứa số nguyên xác định phần tử được chọn, bắt đầu từ số 0.

Tương tự như list_box và không cho phép chọn nhiều giá trị một lúc

: popup_box{ action alignment edit_width fixed_height fixed_width_font tabs fixed_width height is_enable is_tab_stop key label list mnemonic tab_truncate value width

Trong popup_list, label là tiêu đề hiển thị bên trái, edit_width xác định chiều rộng của phần hiển thị chữ với giá trị là số thực hoặc nguyên Value là chuỗi trong dấu nháy kép chứa số nguyên, xác định phần tử được chọn trong danh sách, bắt đầu từ 0, ví dụ như Radio_button.

Các radio_button cho phép người dùng chọn một trong nhiều tùy chọn, với quy tắc chỉ một lựa chọn được chấp nhận tại một thời điểm Chúng không thể được cài đặt trực tiếp trong hộp thoại mà chỉ có thể được thiết lập trong radio_row hoặc radio_column.

: radio_button{ action alignment fixed_height fixed_width height is_enable is_tab_stop key label list mnemonic value width

} trong đó: label: tiêu đề xuất hiện bên phải radio_button.

Value: chuỗi trong dấu nhỏy kộp chứa số nguyên xác định trạng thái ban đầu của radio_button “0” nghĩa là không được chọn, “1” nghĩa là được chọn. h Toggle

Các toggle cho phép người dùng lựa chọn đồng thời nhiều mục Khi sử dụng chuột nhấn vào toggle thì giá trị của nó sẽ thay đổi.

: toggle { action alignment fixed_height fixed_width height is_enable is_tab_stop value width}

Các tile cluster được sử dụng để nhóm các tile có chức năng liên quan, giúp quản lý và sử dụng dễ dàng hơn trong hộp thoại Người dùng không thể chọn trực tiếp các cluster bằng chuột, mà chỉ có thể chọn các tile bên trong Ngoại trừ radio_row và radio_column, không thể gán chức năng cho các cluster.

Các tile được bố trí theo cột từ trên xuống, và chúng được coi là các phần tử con của cột (column) Cột có khả năng chứa mọi loại tile, ngoại trừ radio_button khi nó không có bất kỳ tile nào khác đi kèm.

:column { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width

Tương tự như column, bao quanh nó là một khung chữ nhật và một tiêu đề.

: box_column { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width

Row có chức năng tương tự column, ngoại trừ các tile con được sắp xếp theo hàng ngang từ trái sang phải.

:row { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width

Tương tự như row, bao quanh nó là một khung chữ nhật và một tiêu đề

:boxed_row { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width

Radio_column là cluster sử dụng để chứa các radio_button Các radio_button được sắp xếp thành một cột, và có thể gán chức năng cho radio_column.

:radio_column { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width

Tương tự radio column nhưng cú thờm khung viền hình chữ nhật và tiêu đề

:boxed_radio_column { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width

Radio_row là một cụm chứa các radio_button, được sắp xếp theo hàng ngang từ trái sang phải Các radio_button này có thể được gán chức năng cho radio_column, giúp tăng cường tính tương tác và tổ chức trong giao diện người dùng.

:radio_row { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width} h Boxed radio row

Tương tự radio row nhưng cú thờm khung viền hình chữ nhật và tiêu đề

:boxed_radio_row { alignment children_alignment children_fixed_height children_fixed_width fixed_height fixed_width height label width

Các informative tile sử dụng để cung cấp thông tin cho người dùng thông qua hình ảnh và chữ. a Image

Hình ảnh được sử dụng để hiển thị trong một slide file hoặc được tạo ra từ các vector Để đảm bảo hình ảnh hiển thị đúng, cần khai báo chính xác kích thước chiều dài và chiều rộng cho image tile, hoặc ít nhất một trong hai kích thước này cùng với hệ số tỷ lệ khung hình (aspect_ratio).

:image { action alignment aspect_ratio color fixed_height fixed_width height is_enable is_tab_stop key label mnemonic value width

Text được sử dụng để hiển thị thông tin dưới dạng chuỗi, thường là các thông tin động thay đổi trong quá trình thực hiện chương trình Không nên sử dụng text để hiển thị tiêu đề của các tile khác, và cũng không nên dùng text để thông báo lỗi.

:text { alignment fixed_height fixed_width height is_bold key label value width

Label được sử dụng để hiển thị nội dung ban đầu cho văn bản Chiều dài chuỗi trong label sẽ được so sánh với giá trị thuộc tính width Nếu chiều dài lớn hơn, giá trị đó sẽ được sử dụng làm chiều rộng cho văn bản Do đó, cần khai báo ít nhất một trong hai giá trị này.

Value: dùng để thay đổi nội dung chương trình đang chạy Thuộc tính không ảnh hưởng đến chiều rộng của text. c Text part

Text_part được sử dụng để hiển thị thông tin động, kết nối với thông tin tĩnh nhằm tạo ra nội dung cho text tile Chúng ta có thể sắp xếp các text_part theo phương thẳng đứng để tạo thành dòng chữ theo chiều dọc.

Paragraph là một cluster dùng để chứa các text_part và concatenation và sắp xếp chúng thành một cột theo thứ tự từ trên xuống.

3.9.2.4 Các error tile và exit tile

Các thuộc tính của tile

Khi người dùng chọn một tile, biểu thức trong thuộc tính action sẽ được thực hiện Đối với một số tile, biểu thức này cũng sẽ được kích hoạt khi chuyển sang tile khác.

 Alignment = left: xác định vị trí canh lề theo phương nằm ngang hoặc thẳng đứng khi tile được đặt trong cluster.

 Khi chứa trong column: left, right, centered

 Khi chứa trong row: top, bottom, centered

 Để sắp xếp vị trí cho các tile ta phải sử dụng các spacer.

 Allow_accept = false: khi giá trị này bằng true và nếu tile đang nhận con trỏ và ta ấn Enter thì:

 biểu thức chứa trong thuộc tính action của tile này sẽ được thi hành.

 Sau đó, tile nào có key là accept sẽ được chọn để đóng hộp thoại.

Tỉ lệ khung hình (aspect_ratio) là 1.0, thể hiện mối quan hệ giữa chiều rộng và chiều cao của hình ảnh trên tile hình ảnh hoặc nút hình ảnh Khi thuộc tính này được đặt bằng 0, kích thước của tile sẽ tương đương với kích thước của hình ảnh.

Khi các tile con trong cluster không được chỉ định thuộc tính canh lề, thuộc tính Children_alignment = right sẽ xác định vị trí canh lề theo phương ngang hoặc thẳng đứng cho các tile này.

Khi giá trị của Children_fixed_height và Children_fixed_width được đặt là true, các tile con sẽ giữ cố định chiều cao và chiều rộng Ngược lại, nếu giá trị là false, các tile con sẽ tự động điều chỉnh chiều cao hoặc chiều rộng để phù hợp với các khoảng trống trong cluster.

 Color = dialog_background; color = white: xác định màu nền của image tile.

 Edit_limit = 32: số lượng các ký tự có thể nhập trong edit_box.

 Edit_width = 16: xác định số lượng các ký tự có thể nhìn thấy của phần nhập ký tự của edit_box.

 Fixed_height = true; fixed_width = true: thay đổi chiều cao, chiều rộng của tile.

 Height = 3: xác định chiều cao của tile.

 Initial_focus: xác định tile được nhận con trỏ ban đầu, khi hộp thoại xuất hiện.

 Is_enable = true: xác định trạng thái ban đầu của tile và có thể thay đổi bằng chương trình AutoLISP.

 Is_tab_stop = true: khi hộp thoại đang hiện trên màn hình, nếu ta nhấn

Tab liên tục, con trỏ sẽ di chuyển qua các tile.

 Key = “key name”: tên của tile dùng để truy xuất khi chạy chương trình.

 Label = “label text”: tiêu đề của tile.

 List = “list1\n list2”: chuỗi chứa trong dấu nhỏy kộp.

 Mnemonic = “d”: xác định ký tự sử dụng làm phím nóng.

 Value = “1”: kiểu chuỗi, xác định giá trị ban đầu của tile.

 Width = 8: xác định chiều rộng của tile.

Các hàm điều khiển hộp thoại

 Hàm load_dialog dùng để mở file DCL và chuyển cỏc dũng mô tả hộp thoại và các tile hộp thoại vào bộ nhớ.

 Cú pháp: (load_dialog DCLFILE)

 Giá trị trả về bằng:

 -1 nếu không tải được file DCL và bộ nhớ

 số nguyên lớn hơn 0 nếu tải thành công Giá trị này dùng để truy xuất đến các mã lệnh DCL. b NEW_DIALOG

 Hàm new_dialog dùng để khởi tạo một hộp thoại có được mô tả bằng mã

DCL đã được tải vào bộ nhớ

 Cú pháp: (new_dialog DLGNAME DCL_ID[ACTION_EXPRESSION

 DCL_ID: số nguyên do hàm load_dialog trả về.

 ACTION_EXPRESSION: chuỗi chứa biểu thức AutoLISP.

 SCREEN_PT: vị trí xuất hiện hộp thoại trên màn hình. c START_DIALOG

 Hàm start_dialog làm xuất hiện hộp thoại được tạo ra bằng hàm new_dialog và bắt đầu khởi động hộp thoại làm việc.

 Giá trị trả về của hàm tuỳ thuộc vào kết quả của hàm done_dialog được gọi. d DONE_DIALOG

 Hàm done_dialog dùng để đóng hộp thoại.

 Cú pháp: (done_dialog [status])

 Tham số status là một số nguyên Khi hàm done_dialog được gọi, số nguyên này sẽ được truyền cho hàm start_dialog. e UNLOAD_DIALOG

 Hàm unload_dialog dùng để loại bỏ các mã lệnh file DCL không còn sử dụng trong bộ nhớ.

 Cú pháp: (unload_dialog DCL_ID)

Các hàm điều khiển các tile

 Hàm set_tile dùng để gán giá trị ban đầu cho các tile hoặc thay đổi giá trị trong thời gian chạy chương trình.

 Cú pháp: (set_tile key value)

 Key: khoá của tile cần gán giá trị.

 Value : giá trị gán cho key. b ACTION_TILE

 Hàm action_tile dùng để gán cho tile một biểu thức AutoLISP

 Cú pháp: (action_tile key action_expression)

 Key: khoá của tile cần gán biểu thức.

 Action_expression: biểu thức AutoLISP. c MODE_TILE

 Hàm mode_tile dùng để thay đổi trạng thái của các tile trong khi chạy chương trình.

 Cú pháp: (mode_tile key status)

 Key: khoá của tile cần thay đổi trạng thái.

 Status: trạng thái gán cho tile. d GET_TILE

 Hàm get_tile dùng để lấy ra giá trị hiện hành của tile cú khoỏ chứa trong tham số key.

 Cú pháp: (get_tile key )

Một số chú ý khi thiết kế hộp thoại

Các phím nóng là chức năng quan trọng mà người dùng thường xuyên sử dụng Mỗi tile có một phím nóng riêng biệt, không trùng lặp với các phím nóng của các tile khác.

Tab stop cho phép người dùng di chuyển qua các tile một cách tuần tự bằng cách sử dụng phím tab Con trỏ chỉ dừng lại ở các tile đang hoạt động và có thuộc tính is_tab_stop được thiết lập là true Mặc dù thứ tự di chuyển qua các tile thường theo thứ tự mô tả trong file DCL, người dùng có thể điều chỉnh thứ tự này theo nhu cầu.

 Kiểm tra lỗi: việc này là rất cần thiết khi trong hộp thoại có chứa các edit_box.

Để tối ưu hóa việc sắp xếp các tile, các tile liên quan cần được đặt gần nhau, trong khi các tile quan trọng nên được bố trí ở vị trí nổi bật và dễ nhìn thấy Nên ưu tiên sử dụng các column cluster thay vì row cluster để cải thiện tính trực quan Hơn nữa, các dòng chữ xuất hiện trên hộp thoại nên được định dạng đồng nhất với kiểu chữ trên hộp thoại của AutoCAD để đảm bảo sự nhất quán và dễ hiểu.

 Đóng hộp thoại: hộp thoại không nên thực hiện các chức năng ảnh hưởng đến bản vẽ trước khi được đóng lại.

 Chức năng trợ giúp Help: đối với các hộp thoại phức tạp, ta nên cung cấp nút help để hướng dẫn cách dùng.

Các hàm xử lý màn hình đồ hoạ và thiết bị nhập 44

Màn hình đồ họa

 Hàm textscr dùng để chuyển từ màn hình đồ họa sang màn hình văn bản

 Hàm luôn trả về nil, do đó nó thường được dùng để làm biểu thức điều kiện cho các hàm if, cond, while

 Hàm textpage tương tự hàm textscr.

 Hàm grỏphcr dựng để chuyển từ màn hình văn bản sang màn hình đồ họa.

 Hàm redraw dùng để làm nổi bật hoặc vẽ lại các đối tượng được chọn trên màn hình

 Hàm redraw không tham số dùng để xúa cỏc dấu blipmode hoặc các vector tạm trên màn hình.

 Cú pháp: (redraw [ename][mode])

 Ename là mã của đối tượng được chọn

 Mode xác định chức năng hoạt động của hàm redraw, cú cỏc giá trị:

1 Hiện đối tượng lên màn hình

2 Không hiện đối tượn lên màn hình

3 Làm nổi bật đối tượng bằng đường nét đứt ( nếu đối tượng này đang hiện trên màn hình)

4 Đưa đối tượng trở về trạng thái bình thường

Gọi hiển thị các menu

Hệ thống menu của AutoCAD bao gồm nhiều menu khác nhau, được mô tả trong các menu file Mỗi menu file được chia thành các đoạn (section) tương ứng với các menu thành phần của hệ thống Mỗi section bắt đầu bằng một nhón cú dạng ***section_name.

***MENUGROUP Tên của menu group

***BUTTONSn Các button menu Đây là các menu xuất hiện khi ấn các nút của thiết bị trỏ (không phải chuột)

***AUXn Các menu xuất hiện khi nhấn các nút của chuột

***POPn Các pull-down và shortcut menu

***TOOLBARS Các thanh công cụ

***IMAGE Các menu hình ảnh

***TABLETn Các tablet menu sử dụng cho thiết bị nhập là bản đồ họa

Chuỗi HELPSTRINGS xuất hiện trên thanh trạng thái khi người dùng chọn một mục từ menu kéo xuống hoặc menu tắt, hoặc khi con trỏ chuột di chuyển qua nút lệnh trên thanh công cụ.

***ACCELERATORS Các phím tắt a) MENUCMD

Hàm menucmd được sử dụng để hiển thị các menu trên màn hình và luôn trả về giá trị nil Nếu menu cần gọi không có trong file menu, hàm vẫn sẽ trả về nil mà không thông báo lỗi.

 string có dạng: “menu_area = value” menu_are a

B1 – B4 Các button menu từ 1 đến 4

P0 – P16 Các pull-down menu từ 0 đến 16

A1 – A4 Các auxiliary menu từ 1 đến 4

M Các biểu thức chuỗi diesel

Xác định bằng tên của menu group b) MENUGROUP

 Hàm menu group dùng để kiểm tra một menu group đã được tải hay chưa

 groupname chứa tên của menu group cần kiểm tra Nếu menu group này được tải, kết quả trả về là tên này Ngược lại trả về nil.

Các hàm truy xuất màn hình đồ họa và thiết bị nhập

 Hàm grclear dùng để che các đối tượng trên khung nhìn hiện hành.

 Ta có thể sử dụng hàm redraw mode 2 để thay thế.

 Hàm grdraw dùng để vẽ một vector đi qua 2 điểm trên màn hình trong hệ trục UCS hiện hành.

 Cú pháp:(grdraw from to color [highlight])

 Tham số from và to là toạ độ của điểm gốc và điểm ngọn của vector

 Tham số color, highlight xác định màu sắc và dạng đường của vector.

Vector này không phải là đối tượng có thể bị xóa, sao chép hoặc di chuyển trong bản vẽ Chỉ có các lệnh như vẽ lại màn hình (redraw) hoặc zoom mới có khả năng làm mất đi vector này.

■ Tham số color chứa số nguyên xác định màu của vector, tương tự như màu của lớp vẽ.

■ Nếu không có highlight hoặc highlight = 0 thì vector được vẽ bằng dạng đường liên tục.

■ Nếu chiều dài vector vượt quá kích thước khung nhìn hiện hành thì sẽ bị cắt xén 2 đầu cho vừa khít màn hình c) GRVECS

 Hàm grvecs dùng để vẽ lại nhiều vector trên màn hình cựng lỳc.

 Cú pháp: (grvecs vlist [trans])

 Tham số vlist là danh sách lần lượt chứa mã màu của các vector và toạ độ các điểm của các vector có giá trị từ 0 đến 255.

 Tham số trans là một ma trận biến hình, cho phép thay đổi vị trí và tỉ lệ của các điểm trong danh sách vlist. d) GRTEXT

 Hàm grtext dùng để viết lên một chuỗi lờn dũng trạng thái hoặc lên menu màn hình

 Cú pháp: (grtext [box text [highlight]])

 Box: -1 hoặc -2 ghi chuỗi lên vị trí mode hoặc coordinate của dòng trạng thái Nếu là số nguyên thì ghi chuỗi lên menu màn hình

 Text: chuỗi văn bản được ghi lờn dũng trạng thái hoặc menu màn hình.

 Highlight: chỉ dùng khi ghi chuỗi lên menu màn hình, có hai giá trị là

0 (bỏ việc chiếu sáng) và 1(chiếu sáng).

4 Chương trình minh hoạ Để minh họa cho lợi ích của việc sử dụng các hàm tự tạo AutoLISP trong thiết kế các bản vẽ kỹ thuật bằng AutoCAD, em đã xây dựng lên hai hàm tự tạo để vẽ các chi tiết thường được dùng khi thiết kế các chi tiết máy và trong thiết kế cầu đường Đó là:

 Lỗ Gujong có tác dụng đệm trong một số chi tiết mỏy Nú có thể làm bằng cao su, thép hay các vật liệu tổng hợp khác

 Dầm chữ I bê tông dự ứng lực trước trong cầu đường, bốn lỗ dùng để căng cỏp thộp dự ứng lực (hay dùng trong dầm cầu)

Lỗ Gujong là một thành phần quan trọng trong các bản thiết kế chi tiết máy, đóng vai trò là một chi tiết nhỏ trong tổng thể của một chi tiết máy hoàn chỉnh Lỗ Gujong bao gồm bốn chi tiết con và có hình dạng đặc trưng.

 Các bước để vẽ bằng tay

 Vẽ đường tròn lớn bên ngoài (dùng lệnh circle).

 Bắt dớnh tõm của đường tròn vừa vẽ, vẽ đường trũn cú kích thước nhỏ hơn

(dùng lệnh Object Snap, circle).

 Tạo layer phụ tên là centre có kiểu đường là center, màu xanh

Để vẽ một đường tròn nằm giữa hai đường tròn đã vẽ, trước tiên, bạn cần bắt điểm tâm của đường tròn đầu tiên Sau đó, chọn layer hiện hành là "centre" và sử dụng lệnh Object Snap cùng với lệnh circle để vẽ đường tròn mới.

 Vẽ đoạn thẳng nằm trên đường tròn có layer là centre (dùng lệnh Object

Chọn layer chính và xác định giao điểm giữa đoạn thẳng vừa vẽ với đường tròn có layer là centre để vẽ đường tròn nhỏ.

(kích thước phải nhỏ hơn khoảng cách hai đường tròn màu trắng, dùng lệnh

 Dùng lệnh array để vẽ các lỗ tròn nhỏ còn lại

Để vẽ hoàn chỉnh chi tiết này, người thiết kế phải thực hiện nhiều thao tác, gây tốn thời gian Vì lý do đó, tôi đã phát triển hàm holes.lsp, cho phép vẽ chi tiết chỉ với một câu lệnh đơn giản.

(defun c:holes(/ bm cm sm layer C1 R1 D C num hole)

; khởi tạo giá trị cho các biến

(if (not (= (type num) 'int))

(if (not (= (type hole) 'real))

(setq C1 (getpoint "\n nhap toa do tam"));chọn vị trí vẽ

;gọi hộp thoại và thiết lập các biến hệ thống,khởi tạo môi trường bản vẽ

(setq dcl (load_dialog "holes.dcl"))

(not (new_dialog "holes" dcl)) (exit)

(setq bm (getvar "blipmode") cm (getvar "cmdecho") sm (getvar "osmode") layer (getvar "clayer")

(set_tile "numholes" (itoa num))

(set_tile "holedia" (rtos hole))

;định nghĩa hàm gán giá trị các biến cho hộp thoại

(setq R1 (atof (get_tile "Bkinh"))

D (atof (get_tile "doday")) num (atoi (get_tile "numholes")) hole (atof (get_tile "holedia"))

(action_tile "cancel" "(done_dialog) (exit)")

(action_tile "accept" "(setall1) (done_dialog)")

; hàm đổi độ sang radian

(if (> D hole ) ; kiểm tra thông số nhập vào

;vẽ hai đường tròn chính

;xác định tọa độ các điểm để vẽ lỗ tròn nhỏ và đoạn thẳng nằm trên đường tròn phụ

(setq pt1 (polar C1 (Degrees2Radians ra) C ) pt2 (polar pt1 (Degrees2Radians (+ 180 ra)) hole) pt3 (polar pt2 (Degrees2Radians ra) (* hole 2))

; vẽ lỗ tròn nhỏ và đoạn thẳng nằm trên đường tròn phụ

(alert "Duong kinh lo vuot qua lon!")

;sau khi vẽ xong thì trở về môi trường ban đầu

Sau khi hoàn tất việc biên dịch và kiểm tra lỗi, hãy lưu file holes.lsp và file holes.dcl (hàm tạo hộp thoại) vào thư mục support của AutoCAD Cuối cùng, để vẽ chi tiết, bạn thực hiện các bước cần thiết như đã hướng dẫn.

 Gõ lệnh appload (hoặc vào tool/load application) chọn file holes.lsp.

 Gõ holes tại cửa sổ command của autoCAD, điền các thông số chi tiết, nhấn nút OK.

Hình3 Hộp thoại vẽ chi tiết Gujong Kết quả ta có một chi tiết kỹ thuật như hình 2

Dầm chữ I là một yếu tố quan trọng trong các bản vẽ thiết kế cầu đường, bao gồm hai chi tiết con được cấu thành từ các đoạn thẳng và các hình tròn nhỏ Việc hiểu rõ cấu trúc và hình dạng của dầm chữ I sẽ giúp tối ưu hóa quá trình thiết kế và thi công, đảm bảo tính bền vững và an toàn cho công trình.

Hình 4 Chi tiết dầm chữ I

Để vẽ bằng tay một chi tiết có tính đối xứng, bạn chỉ cần vẽ nửa chi tiết đầu tiên Sau đó, sử dụng lệnh đối xứng để hoàn thiện phần còn lại của chi tiết.

 Dùng lệnh line để vẽ nửa thân chữ I hoặc dùng lệnh Rec để vẽ hai hình chữ nhật giao nhau sau đó sẽ dùng lệnh trim để cắt xén.

 Dùng lệnh mirror để vẽ nữa chi tiết còn lại

 Dùng lệnh array để vẽ nốt 3 lỗ tròn còn lại

Để vẽ chi tiết gujong, chúng ta sẽ xây dựng hàm chu_i.lsp và hàm chu_i.dcl Sau khi hoàn thành, hãy lưu hai file này vào thư mục support của AutoCAD.

(defun c:chu_i(/ bm cm sm rong dai day cao dkinh kcach P1 P2 P3 P4 P5)

;khởi tạo giá trị ban đầu

(if (not (= (type rong) 'real))

(if (not (= (type cao) 'real))

(if (not (= (type dkinh) 'real))

(if (not (= (type kcach) 'real))

(if (not (= (type dai) 'real))

(if (not (= (type day) 'real))

(setq P1 (getpoint "\n nhap toa do tam"));vị trí vẽ chi tiết

;thiết lập hộp thoại và môi trường vẽ

(setq dcl (load_dialog "chu_i.dcl"))

(not (new_dialog "chu_i" dcl)) (exit)

(setq bm (getvar "blipmode") cm (getvar "cmdecho") sm (getvar "osmode")

(set_tile "chieurong" (rtos rong))

(set_tile "chieucao" (rtos cao))

(set_tile "duongkinh" (rtos dkinh))

(set_tile "khoangcach" (rtos kcach))

(set_tile "chieudai" (rtos dai))

(set_tile "doday" (rtos day))

;gán giá trị biến cho hộp thoại

Đoạn mã trên sử dụng hàm `atof` để chuyển đổi các giá trị từ chuỗi sang số thực cho các biến như chiều rộng (`rong`), chiều cao (`cao`), đường kính (`dkinh`), khoảng cách (`kcach`), chiều dài (`dai`) và độ dày (`day`) Các giá trị này được lấy từ hàm `get_tile` với các tham số tương ứng.

(action_tile "cancel" "(done_dialog) (exit)")

(action_tile "accept" "(setall) (done_dialog)")

(if (>= day cao)(alert "\n do day phai nho hon chieu cao")

(if (>= dkinh rong) (alert "\n Dkinh phai nho hon do rong dau chu I")

(if (>= dkinh day) (alert "\n Dkinh phai nho hon do day")

(if (>= kcach cao)(alert "\n kcach phai nho hon chieu cao")

;xác định tọa độ các điểm để vẽ

;vẽ chi tiết (command "redraw"

"circle" (list (- (car P5) (/ rong 2)) (- (cadr P5) (/ kcach 2))) "d" kinh

;thoát khỏi môi trường vẽ, trở về môi trường vẽ ban đầu

Sau khi biên dịch và kiểm tra lỗi, lưu file chu_i.lsp cùng với file chu_i.dcl (hàm tạo hộp thoại) vào thư mục support của AutoCAD Cuối cùng, để vẽ chi tiết, thực hiện theo các bước hướng dẫn sau.

 Gõ lệnh appload (hoặc vào tools/load application) chọn file chu_i.lsp

 Gõ chu_i tại cửa sổ command của autoCAD, nhập các thông số của chi tiết, ấn OK

Hình 5.Hộp thoại vẽ chi tiết dầm chữ IKết quả ta sẽ có được một chi tiết như hình 4.

Autolisp là một ngôn ngữ lập trình dễ sử dụng, mang lại hiệu quả cao trong công việc Những đoạn mã Autolisp đơn giản có khả năng rút ngắn thời gian hoàn thiện bản vẽ một cách đáng kể Một chương trình Autolisp thành công không cần phải lớn với hàng chục ngàn dòng lệnh, mà quan trọng là nó phải hiệu quả, đáp ứng nhu cầu của người thiết kế và tiết kiệm thời gian thực hiện công việc.

AutoLISP hiện nay ít được sử dụng do sự phát triển của Visual LISP, nhưng vẫn được tích hợp trong các phiên bản AutoCAD để hỗ trợ người dùng mới làm quen với ngôn ngữ này Việc nắm vững AutoLISP sẽ giúp người dùng AutoCAD dễ dàng học và sử dụng Visual LISP, đặc biệt là với những người không chuyên về lập trình Đồ án đã nghiên cứu các khái niệm cơ bản của AutoLISP và lập trình trong AutoCAD, bao gồm các hàm cơ bản, cách xây dựng hàm tự tạo, biến và kiểu dữ liệu Ngoài ra, đồ án cũng đã phát triển hai hàm vẽ cho các chi tiết thiết kế máy và xây dựng cầu đường, cụ thể là chi tiết Gujong và dầm chữ I.

Trong thời gian tới, đồ án sẽ nghiên cứu về cơ sở dữ liệu và phương pháp truy cập thực thể trong AutoCAD, nhằm phát triển một chương trình tích hợp cơ sở dữ liệu Mục tiêu là tạo ra một sản phẩm dễ sử dụng cho người dùng và thuận tiện cho lập trình viên trong việc chỉnh sửa khi có thay đổi.

Hải Phũng, ngày……thỏng 7 năm 2007

Sinh viênLưu Thị Thu Trang

Ngày đăng: 22/11/2023, 15:15

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w