AutoLisp‎ > ‎Ngôn ngữ AutoLisp‎ > ‎

III. Các hàm chuẩn của AutoLIsp

01. Các hà­m chuyển lệnh từ AutoLisp sang AutoCad

đăng 02:23, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 19:03, 12 thg 10, 2011 ]


a. Hàm
(Load ...)

CHỨC NĂNG: Gọi một chương trình ứng dụng vào AutoCad

CÚ PHÁP:

            (Load “Tên_tệp”)

GIẢI THÍCH:

Tên_tệp: là tên tập tin có phần mở rộng *.LSP, .ARX, .ADS hoặc .EXE

Nếu chương trình đặt ngoài thư mục làm việc của AutoCad thì phải chỉ rõ đường dẫn của tệp tin đó
 

b. Hàm (Command ...)

CHỨC NĂNG: Thực hiện lệnh của AutoCad

CÚ PHÁP:

(Command “Tên_lệnh” [các đáp ứng lời nhắc] [các tuỳ chọn]...)

GIẢI THÍCH:

Tên_lệnh: là tên các lệnh của AutoCad

[các đáp ứng lời nhắc] và [các tuỳ chọn]: Tuân theo các lệnh của AutoCad

Nếu Tên_lệnh = _Tên_lệnh hoặc _.Tên_lệnh Autocad sẽ truy cập các gía trị trong bảng số liệu của lệnh thực thi trong AutoCad

VD:     (Command “CIRCLE” ‘(100.00 100.00) 10.00)

---> Vẽ đường tròn tâm có toạ độ (100.00, 100.00) có bán kính 10.00

02. Phép gán

đăng 02:22, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 17:49, 12 thg 10, 2011 ]


a. Hàm (setq...):

CHỨC NĂNG: Gán giá trị cho 1 biến

CÚ PHÁP:

            (setq b1 gt1 [b2 gt2] ...)

GIẢI THÍCH:

            Gán gt1 cho biến b1, gt2 cho biến b2 ... Mỗi biến nhận một giá trị viết sau nó

            Giá trị có thể là dữ liệu, một biến khác hoặc một biểu thức đã xác định trước đó

            Để xoá một biến ra khỏi bộ nhớ: (setq biến Nil)

Để AutoCad  thực hiện lệnh của AutoLisp mà không hiển thị các dòng lệnh hiện trên màn hình ta gán giá trị 0 cho biến hệ thống CMDECHO bằng lệnh: (setq cmdecho 0)


b. Hàm (setvar...):

CHỨC NĂNG: Gán giá trị cho 1 biến hệ thống.

CÚ PHÁP:

            (setvar varname value)

GIẢI THÍCH:

            varname: Tên biến hệ thống

            value: Giá trị cần gán

VD: (setvar “FILLETRAD” 10.00) ---> 10.00


c. Hàm (set...):

CHỨC NĂNG: Gán tên biến cho 1 biến

CÚ PHÁP:          (set ‘biến1 ‘biến2)

GIẢI THÍCH:

Gán tên biến2 cho biến1

            Mỗi khi lấy giá trị của biến1 thì thực chất là lấy giá trị của biến2

VD:     (setq a 10.00)

            (set ‘b ‘a)

---> b = 10.00


03. Các hàm nhập liệu từ người dùng

đăng 02:21, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 17:52, 12 thg 10, 2011 ]

 Các hàm sau sẽ tạm dừng chương trình để yêu cầu người dùng nhập dữ liệu vào từ bàn phím hoặc chuột


a. Hàm (getpoint ...)

CHỨC NĂNG: Chờ người dùng nhập toạ độ một diểm

CÚ PHÁP:

(getpoint [point] [prompt])


GIẢI THÍCH:

point: Nếu có, cho bằng 1 danh sách điểm , là điểm thứ nhất, còn điểm người dùng nhập vào sẽ là điểm thứ 2. Điểm thứ 2 có thể cho bằng toạ độ tương đối.

[prompt]: Nếu có, là dòng nhắc hoặc giải thích về dữ liệu sẽ nhập. Dòng nhắc phải được đặt trong ngoặc kép “ ”

VD:

(setq pt1 (getpoint “Cho tam duong tron:”))

Kết quả cho trên dòng nhắc:

Cho tam duong tron:


b. Hàm (getdist ...)

CHỨC NĂNG: Chờ người dùng nhập vào:

Một số thực là một khoảng cách

Toạ độ của 1 hoặc 2 điểm

Nếu nhập toạ độ điểm, AutoLisp hoàn trả khoảng cách giữa hai điểm

CÚ PHÁP:

(getdist [point] [prompt])

GIẢI THÍCH:

point: giống như  getpoint

[prompt]: là dòng nhắc hoặc giải thích về dữ liệu sẽ nhập

VD:

(setq r1 (getdist “Cho ban kinh duong tron:”))

Kết quả cho trên dòng nhắc:

Cho tam duong tron: - Nhập vào một số thực dương hoặc

Nhập toạ độ một điểm, dòng nhắc xuất hiện:

Second point: Tiếp tục nhập vào điểm thứ 2 để lấy khoảng cách giữ 2 điểm


c. Hàm (getangle ...)

CHỨC NĂNG: Chờ người dùng nhập vào:

Một số thực là số đo bằng độ của góc hoặc cung tròn

Toạ độ của 1 hoặc 2 điểm

Nếu nhập toạ độ điểm, AutoLisp hoàn trả góc nghiêng giữa đoạn thẳng nối hai điểm so với phương nằm ngang

 

Kết quả trả về: REAL ( số đo là Radian)

CÚ PHÁP:

(getangle [point] [prompt])

GIẢI THÍCH:

point: giống như  getpoint

[prompt]: là dòng nhắc hoặc giải thích về dữ liệu sẽ nhập

VD:

(setq a1 (getangle “Cho goc nghieng cua duong thang:”))

Kết quả cho trên dòng nhắc chờ người dùng nhập số liệu:

            Cho goc nghieng cua duong thang:


d. Hàm (getint ...)

CHỨC NĂNG: Chờ người dùng nhập vào một số nguyên

            Kết quả: INT

CÚ PHÁP:

(getint [prompt])

GIẢI THÍCH:

[prompt]: là dòng nhắc hoặc giải thích về dữ liệu sẽ nhập


e. Hàm (getreal ...)

CHỨC NĂNG: Chờ người dùng nhập vào một số thực

            Kết quả: REAL

CÚ PHÁP:

(getreal [prompt])

GIẢI THÍCH:

[prompt]: là dòng nhắc hoặc giải thích về dữ liệu sẽ nhập


f. Hàm (iniget...)

CHỨC NĂNG: Kiểm soát các kiểu giá trị nhập vào từ người dùng cho các hàm nhập số liệu họ getxxx. Hàm này, nếu dùng phải đặt trước các hàm nhập số liệu họ getxxx cần khống chế

CÚ PHÁP:

(iniget mã_số [“Chuỗi_định_dạng”])


GIẢI THÍCH:

mã_số: Giá trị mã số kiểm soát cách nhập số liệu vào. Giá trị mã_số và các hàm chịu tác động cho trong bảng sau:

Mã số

Chức năng kiểm soát

Hàm chịu tác động

0

Bình thường trả về Nil nếu gõ ENTER khi chưa nhập số liệu

Toàn bộ các hàm getxxx trừ hàm getstr

1

Không cho phép người dùng gõ ENTER khi chưa nhập số liệu

getint, getreal, getdist, getangle, getpoint, getkword...

2

Không cho phép nhập số 0

getint, getreal, getdist, getangle, getpoint,

4

Không cho phép nhập số âm

getint, getreal, getdist,

8

Cho phép nhập toạ độ điểm nằm ngoài LIMITS của bản vẽ

getpoint, getcorner

Nếu mã số có giá trị tổng của mốtố giá trị cho trong bảng thì chức năng kiểm soát sẽ là tổng các chức năng.

Chuỗi_dịnh_dạng: Là một chuỗi ký tự dùng làm từ khoá hỗ trợ cho các hàm getxxx có các tuỳ chọn khi nhập số liệu

+ Mỗi từ khoá cách nhau một dấu trống

+ Các chữ cái viết hoa viết liền nhau trong từ khoá sẽ là dấu hiệu của từ khoá. Khi nhập số liệu, người dùng gõ theo các chữ cái viết hoa để lựa chọn

+ Nếu tất cả các chữ cái trong từ khoá đều viết hoa thì các từ khoá cách nhau bằng dấu phẩy (,)

VD1:

(iniget 1)

(setq a1 (getdist “Cho ban kinh:”))

Kết quả cho trên dòng nhắc chờ người dùng nhập số liệu:

                        Cho ban kinh:

            Nếu người dùng gõ ENTER mà không nhập gì cả sẽ có dòng thông báo:

                        Requires numeric distance or two poionts

                        Cho ban kinh:

            Đợi người dùng nhập liệu chương trình mới tiếp tục


VD2:

(iniget 1 “DAi ROng”)

(setq d1 (getdist “DAi/ROng/<Cho duong cheo>:”))

Kết quả cho trên dòng nhắc chờ người dùng nhập số liệu:

                        DAi/ROng/<Cho duong cheo>:

            Người dùng có thể nhập số thực hoặc các chữ cái DA hoặc RO


g. Hàm (getkword ...)

CHỨC NĂNG: Chờ người dùng nhập vào một ký tự hoặc một chuỗi ký tự liền nhau không có dấu trống

Kết quả trả về: STR

CÚ PHÁP:

(getkword [prompt])

GIẢI THÍCH:

Hàm này luôn đặt sau hàm initget, nếu chuỗi nhập vào không trùng với từ khoá trong hàm initget trước đó, getkword yêu cầu nhập lại

Hàm này thường áp dụng khi người dùng nhập vào các lựa chọn

[prompt]: là dòng nhắc nên chỉ rõ các từ khoá để người dùng dễ nhập dữ liệu.

VD:

(initget “VUong DAgiac:”)

(getkword “Nhap cac lua chon: VUong/DAgiac:”)

Kết quả cho trên dòng nhắc:

            Nhap cac lua chon: VUong/DAgiac:

            Ta chỉ cần nhập các chữ cái:

            VU kết quả trả về: “vuong”

            DA kết quả trả về: “dagiac”


h. Hàm (getstring ...)

CHỨC NĂNG: Chờ người dùng nhập vào một chuỗi ký tự . Nếu chuỗi ký tự dài hơn 132 ký tự, hàm chỉ lấy 132 ký tự

            Kết quả: STR

CÚ PHÁP:

(getstring [string] [prompt])


GIẢI THÍCH:

[string]: Nếu không có hoặc nhận giá trị Nil, không được nhập dấu trống, nếu gõ dấu trống tương đương gõ ENTER kết thúc nhập.

Nếu có giá trị khác Nil cho phép nhập cả dấu trống. Kết thúc nhập phải gõ ENTER

[prompt]: là dòng nhắc hoặc giải thích về dữ liệu sẽ nhập


i. Hàm (getvar ...)

CHỨC NĂNG: Lấy giá trị hiện hành của biến hệ thống trong AutoCad

CÚ PHÁP:

(getvar varname)

GIẢI THÍCH:

varname: Tên biến hệ thống

VD:

 (getvar “DIMLFAC” 10)

             ---> cho giá trị biến DIMLFAC = 10

04. Các hàm toán học

đăng 02:20, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 17:53, 12 thg 10, 2011 ]


Các phép tính

CHỨC NĂNG: Thực hiện các phép tính số học thông thường

CÚ PHÁP:

(phép_toán tham_số1 [tham_số2]...)

GIẢI THÍCH:

phép_toán: là các phép tính toán số học thông thường

Phép cộng:                       +

Phép trừ:                          -

Phép nhân:                       *

Phép chia:                        /

Phép tăng thêm 1:             1+

Phép giảm đi 1:                 1-

            tham_số1: Trong phép trừ và chia thì tham_số1 là số bị trừ hoặc bị chia

            tham_số2...: Trong phép trừ và chia thì tham_số2... là số trừ hoặc số chia

            Trong phép tăng thêm 1 hoặc giảm đi 1 thì chỉ có 1 tham số

 

CHÚ Ý:

            Tham số có thể là hằng hoặc biểu thức

            Kết quả tính phụ thuộc chủ yếu vào kiểu của tham số tham gia phép tính.

05. Các phép so sánh

đăng 02:19, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 17:55, 12 thg 10, 2011 ]


CHỨC NĂNG: Thực hiện các phép so sánh trong các biểu thức logíc

CÚ PHÁP:

(phép_so­_sánh tham_số1 [tham_số2]...)

GIẢI THÍCH:

phép_so_sánh: Bao gồm:

Bằng:                                =

Không bằng (khác):            /=

Lớn hơn:                           >

Lớn hơn hoặc bằng:            >=

Nhỏ hơn:                           <

Nhỏ hơn hoặc bằng:           <=

Và:                                   and

Hoặc:                                or

Phủ định:                           not

            tham_số1, tham_số2: là các đối tượng để so sánh

CHÚ Ý:

            Tham số có thể là hằng số, biến số hoặc biểu thức

            Kết quả tính phụ thuộc chủ yếu vào kiểu của tham số tham gia phép tính.

            Riêng đối với thực, máy tính coi số 0 chỉ là xấp xỉ 0 nên khi dùng dấu = so sánh với số 0 có thể trả giá trị Nil. Trong trường hợp này nên dùng (equal...) để so sánh

06. Các hàm so sánh

đăng 02:18, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 17:59, 12 thg 10, 2011 ]


a. Hàm
(eq ...)

CHỨC NĂNG: Thực hiện so sánh xem hai tham số có thực sự bằng nhau hay không

            Kết quả: cho T (đúng) hoặc Nil (sai)

CÚ PHÁP:

(eq tham_số1 tham_số2)

GIẢI THÍCH:

Kết quả đúng khi tham_số1 giống hệt tham_số2 (cùng là kiểu tham số, cùng lá số...)


b. Hàm (equal ...)

CHỨC NĂNG: Thực hiện so sánh xem hai tham số có thực sự bằng nhau hay không theo tiêu chuẩn là độ chính xác kèm theo

            Kết quả: cho T (đúng) hoặc Nil (sai)

CÚ PHÁP:

(equal tham_số1 tham_số2 [độ_chính_xác])

GIẢI THÍCH:

Kết quả đúng khi tham_số1 bằng tham_số2 với sai số là độ_chính_xác (nếu có)


c. Hàm (max ...)

CHỨC NĂNG: Tìm giá trị lớn nhất trong một dãy các tham số

            Kết quả: trả về giá trị lớn nhất

CÚ PHÁP:

(max tham_số1 tham_số2 [tham_số3]...)


d. Hàm (min ...)

CHỨC NĂNG: Tìm giá trị nhỏ nhất trong một dãy các tham số

            Kết quả: trả về giá trị nhỏ nhất

CÚ PHÁP:

(min tham_số1 tham_số2 [tham_số3]...)


e. Hàm (gcd ...)

CHỨC NĂNG: Tìm ước số chung lớn nhất trong một dãy các tham số kiểu số nguyên

CÚ PHÁP:

(gcd tham_số1 tham_số2 [tham_số3]...)

CHÚ Ý:

tham_số1 tham_số2 [tham_số3]...: Phải là kiểu số nguyên


f. Hàm (rem ...)

CHỨC NĂNG: Tìm phần dư trong phép chia 2 tham số.

            Kết quả: trả về số dư

CÚ PHÁP: (rem tham_số1 tham_số2)

GIẢI THÍCH:

tham_số1: Số bị chia

tham_số2: Số chia

07. Các hàm đại số

đăng 02:17, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 18:00, 12 thg 10, 2011 ]


CÚ PHÁP:

(sqrt number): Lấy căn bậc 2 của số thực dương number

(expt cơ_số số_mũ): Lấy luỹ thừa bậc số_mũ của số thực cơ_số

(exp số_mũ): Lấy luỹ thừa bậc số_mũ của cơ số e

(abs number): Lấy giá trị tuyệt đối của một số number

(log number): Lấy logarit cơ số e của một số number

08. Các hàm lượng giác

đăng 02:17, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 18:08, 12 thg 10, 2011 ]


CÚ PHÁP:

(sin angle)

(cos angle)

(atan mumber1 [number2])

CHÚ Ý:

angle: Là số đo góc lấy theo radian

mumber1 [number2]: Là số thực

Kết quả của hàm atan là góc có số đo là radian

09. Các hàm kiểm soát dạng số

đăng 02:16, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 18:08, 12 thg 10, 2011 ]


e. Hàm
(fix ...)

CHỨC NĂNG: 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

CÚ PHÁP:

(fix number)

CHÚ Ý:

Hàm này được sử dụng như một bộ lọc dữ liệu. Dữ liệu là số nguyên hay số thực sẽ được lọc thành số nguyên trước khi được gán cho tham số

Ngoài ra ta có thể sử dụng hàm này để lấy phần thập phân (sử dụng kết hợp với phép trừ)


b. Hàm (fload ...)

CHỨC NĂNG: Chuyển một số có kiểu nguyên hoặc thực sang kiểu số thực

CÚ PHÁP:

(fload number)

10. Các hàm tạo cấu trúc điều khiển

đăng 02:15, 12 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 18:23, 12 thg 10, 2011 ]


a. Hàm (if...)

CHỨC NĂNG: Ra điều liện thực hiện một số lệnh

CÚ PHÁP:

(if testexpr thenexpr [elseexpr])

GIẢI THÍCH:

testexpr: Là biểu thức kiểm tra điều kiện

thenexpr: Biểu thức lệnh được thực hiện nếu biểu thức testexpr nhận giá trị T

elseexpr: Biểu thức lệnh được thực hiện nếu biểu thức testexpr nhận giá Nil. Nếu không có biểu thức này, hàm không thực hiện và trả về giá trị nil


b. Hàm (while ...)

CHỨC NĂNG: Thực hiện các biểu thức, lệnh trong hàm một số lần lặp có điều kiện

CÚ PHÁP:

(while testexpr expr)

GIẢI THÍCH:

testexpr: Là biểu thức kiểm tra, khi nào testexpr nhận giá trị nil, vòng lặp chương trình ngừng thực hiện

expr: Biểu thức, lệnh cần thực hiện

VÍ DỤ:

(defun C:vdt()

(setq n 1)

(setq pt1 (list 0 0))

            (while  (<= n 10)

                        (setq pt2 (list n (+ n 0.5)))

                        (setq n (1+ n))

                        (command "LINE" pt1 pt2 "")

            )

            (command "ZOOM" "e")

  )


c. Hàm (repeat ...)

CHỨC NĂNG: Thực hiện các biểu thức, lệnh trong hàm một số lần lặp nhất định

CÚ PHÁP:

(repeat int [expr]...)

GIẢI THÍCH:

int: Là số nguyên chỉ lần lặp

expr: Biểu thức, lệnh cần thực hiện

VÍ DỤ:

(defun C:vdt()

(setq n 1)

(setq pt1 (list 0 0))

            (repeat 10

                        (setq pt2 (list n (+ n 0.5)))

                        (setq n (1+ n))

                        (command "LINE" pt1 pt2 "")

            )

            (command "ZOOM" "e")

  ) 


d. Hàm (progn ...)

CHỨC NĂNG: Tập hợp các biểu thức thành một biểu thức và bắt các biểu thức này thực hiện theo một điều khiển chung

CÚ PHÁP:

(progn [expr]...)

GIẢI THÍCH:

expr: Biểu thức, lệnh cần thực hiện

1-10 of 18