Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Học AutoLisp

Các bài được khuyến nghị

bạn dùng vòng lặp while, lệnh test dưới đây sẽ yêu cầu người sử dụng nhập một chuỗi và thông báo chuỗi đó. Lặp đi lặp lại cho đến khi người dùng nhấn enter, hoặc nhập vào chuỗi có giá trị là thoat:

 

(defun c:test()

(setq lanthu 0)

(while (and

(setq s (getstring "\nVao chuoi: "))

(/= s "")

(/= s "thoat")

)

(alert s)

)

(princ)

)

 

Làm sao để trả ơn Bác, Bác Hoàng nhỉ?!?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Thông tin gì bạn?

Line có rất nhiều thông tin!

CÓ THỂ BỔ SUNG THÊM MỘT VÀI HÌNH ẢNH MINH HẠO CHO TRỰC QUANG HƠN KHÔNG, MINH MUỐN LÀM QUEN VỚI LISP NHƯNG CHƯA BIẾT GÌ HÊT. CAM ƠN NHIỀU

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
CÓ THỂ BỔ SUNG THÊM MỘT VÀI HÌNH ẢNH MINH HẠO CHO TRỰC QUANG HƠN KHÔNG, MINH MUỐN LÀM QUEN VỚI LISP NHƯNG CHƯA BIẾT GÌ HÊT. CAM ƠN NHIỀU

đúng rồi đó,các bác có thể vừa viết vừa cho thêm một số hình ảnh cho tụi em được thấy và thực hành dễ hơn.em nghe lisp lâu rồi nhưng giờ mới thấy trang này hay quá.rất mong các bác giúp em với

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Phần 1: bắt đầu

 

Đầu tiên, chúng ta hãy bắt đầu bằng chương trình viết chữ.

 

Hãy tạo một file mới và save nó với tên hoclisp.lsp.

(princ "\nChao cadviet")

(princ)

Đây là đoạn mã đơn giản nhất của AutoLisp nhằm viết ra một dòng 'Chao cadviet' trên màn hình nhập dữ liệu của autocad. để sử dụng, appload file hoclisp.lsp này. ta sẽ thấy trên màn hình xuất hiện chữ Chao cadviet.

 

Đi sâu vào phân tích lệnh, ta thấy: mỗi hàm của cad được bắt đầu bằng dấu '(' ngay sau đó là tên hàm, tiếp đến là thông số của hàm (có thể có, có thể không có) và kết thúc bằng dấu ')' Trong trường hợp này princ là tên hàm, "\nChao cadviet" là tham số của hàm princ.

 

Trong hai câu lệnh gọi hàm vừa rồi, câu thứ nhất là để viết chữ ra màn hình text, câu lệnh thứ 2 dùng để ẩn kết thúc mà không hiển thị thêm gì cả. Nếu thiếu câu lệnh thứ 2, bạn sẽ nhìn thấy 'Chao cadviet"\nChao cadviet"' trên màn hình, trong đó "\nChao cadviet" là kết quả của hàm (princ "\nChao cadviet").

Bac Hoanh oi, bac hay noi ro hon cach appload file hoclisp.lsp vao ban ve dc khong?

thanks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bac Hoanh oi, bac hay noi ro hon cach appload file hoclisp.lsp vao ban ve dc khong?

thanks

Chào bạn Manhhoan_47,

1/- Bạn tải file về và lưu nó vào một thư mục dễ tìm.

2/- Mở Autocad

3/- Vào Tool -> load application -> Tìm đến thư mục vừa lưu file và chọn file hoclisp. lsp -> Load -> Close

4/- Nhập lệnh hoclisp và thế là Ok, lisp sẽ chạy ầm ầm, nó bảo bạn làm gì thì cứ thế mà làm là xong.

Chúc bạn thành công.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
- Tôi xin thử nghiệm một chuỗi bài viết về đào tạo AutoLisp thông qua các dự án thực tế.

Xin mọi người đóng góp ý kiến.

Bác viết đi. Em cũng muốn học hỏi thêm!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mổ xẻ lệnh ẩn đối tượng.

Lệnh ẩn đối tượng này là dựa trên nguyên tắc điều khiển mã dxf 60 của đối tượng. Mã này kiểm soát sự ẩn, hiện của đối tượng. Nếu đối tượng có mã dxf 60 bằng 1 có nghĩa là ẩn, 0 có nghĩa là hiện.

 

Để gán mã dxf 60 bằng 1 cho đối tượng (làm ẩn đối tượng), ta cần tìm xem trong mã của đối tượng đã có mã dxf 60 hay chưa? nếu có thì thay nó bằng giá trị 1, nếu chưa có thì thêm vào nó một mã dxf 60 bằng 1.

 

Trước tiên, chúng ta định nghĩa hàm (Dxf id obj) xem ở phần dưới. Hàm này trả về giá trị của mã id của đối tượng obj, nếu đối tượng obj không có mã id thì kết quả trả về là nil (rỗng).

 

Sau đó, dùng câu lệnh rẽ nhánh: nếu đối tượng có mã dxf 60 thì thay bằng giá trị mới, nếu không có thì thêm một giá trị dxf 60=1 mới vào. Câu lệnh đó như sau:

(if (dxf 60 Elem) ; kiểm tra xem có mã 60 không?

;nếu có? thay:

(entmod (subst (cons 60 1) (cons 60 (dxf 60 elem)) (entget Elem)))

 

;nếu không? thêm:

(entmod (append (entget Elem) (list '(60 . 1))))

)

Trong cụm lệnh trên, Elem là ent name của đối tượng cần ẩn. Hàm entmod có tác dụng modify các thuộc tính một đối tượng theo tập hợp các thuộc tính đã cho (bao gồm thuộc tính tên của đối tượng cần sửa) . Hàm entget trả về tập hợp các thuộc tính của một đối tượng. hàm subst là hàm thay giá một giá trị trong tập hợp bằng một giá trị khác. hàm append là hàm trộn hai tập hợp. Dòng lệnh (entmod (subst (cons 60 1) (cons 60 (dxf 60 elem)) (entget Elem))) để thay mã dxf 60 của đối tượng từ giá trị "(dxf 60 elem)" về giá trị 1.

 

Như vậy, chúng ta có thể viết được một hàm đơn giản để ẩn một đối tượng:

(defun c:ivone()

(defun Dxf (Id Obj) ;định nghĩa hàm dxf

(cdr (assoc Id (entget Obj)))

);end Dxf

(setq elem (car (entsel "\nDoi tuong can an: "))) ;chọn đối tượng

(if (dxf 60 Elem) ; kiểm tra xem có mã 60 không?

;nếu có? thay:

(entmod (subst (cons 60 1) (cons 60 (dxf 60 elem)) (entget Elem)))

;nếu không? thêm:

(entmod (append (entget Elem) (list '(60 . 1))))

)

)

 

Và hàm ẩn nhiều đối tượng sẽ như sau (xin xem thêm ở phần tutor tính diện tích để biết cách biến cách làm 1 đối tượng thành nhiều đối tượng):

(defun c:InVis (/ SSet Count Elem)

(defun Dxf (Id Obj)

(cdr (assoc Id (entget Obj)))

);end Dxf

(prompt "\nSelect object(s) to hide: ")

(cond

((setq SSet (ssget))

(repeat (setq Count (sslength SSet))

(setq Count (1- COunt)

Elem (ssname SSet Count))

(if (/= 4 (logand 4 (Dxf 70 (tblobjname "layer" (Dxf 8 Elem)))))

(if (Dxf 60 Elem)

(entmod (subst '(60 . 1) (assoc 60 (entget Elem)) (entget Elem)))

(entmod (append (entget Elem) (list '(60 . 1))))

)

(prompt "\nEntity on a locked layer. Cannot hide this entity. ")

);end if

);end repeat

)

);end cond

(princ)

);end c:InVis

ÔI....... HAY WÁ

cám ơn bác Hoanh nhá. bác có năng khiếu trong truyền đạt kiến thức nhỉ

khi nào có bài mới nũa đây bác

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tuyệt cú mèo!!!

Em mới bắt đầu biết về AutoLisp, đọc bài này của bác NguyenHoanh thấy hay quá.

Mong bác sớm có thêm nhiều bài viết hay như thế nữa cho em học hỏi.

Cảm ơn bác Hoanh và các bác trong diễn dàn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mọi người ơi...mình hỏi chút?? mình muốn mở nhiều file cad với nhiều cửa sổ giống như mở trình duyệt firefox...nếu có thể gửi email cho minh theo địa chỉ này nhé.. ........Cảm ơn mọi người nhiều...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mọi người ơi...mình hỏi chút?? mình muốn mở nhiều file cad với nhiều cửa sổ giống như mở trình duyệt firefox...nếu có thể gửi email cho minh theo địa chỉ này nhé.. ........Cảm ơn mọi người nhiều...

bạn search từ khoá tab cad

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bro nào có tài liệu về Lisp (từ cơ bản) thì share cho mình với.. Mới tập tành nghiên cứu nên cũng chưa biết bắt đầu từ đâu nữa.. :s_dead:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

các bạn cho mình hỏi với là trong autolisp thì đường pline đc kí hiệu là j nhỉ?

mình thử sửa 1 chương trình dùng với đg line để có thể dùng với đg pline nhưng khi thay thế line thành pline hay PL đều k đc!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Phần 1: bắt đầu

 

Đầu tiên, chúng ta hãy bắt đầu bằng chương trình viết chữ.

 

Hãy tạo một file mới và save nó với tên hoclisp.lsp.

(princ "\nChao cadviet")

(princ)

Đây là đoạn mã đơn giản nhất của AutoLisp nhằm viết ra một dòng 'Chao cadviet' trên màn hình nhập dữ liệu của autocad. để sử dụng, appload file hoclisp.lsp này. ta sẽ thấy trên màn hình xuất hiện chữ Chao cadviet.

 

Đi sâu vào phân tích lệnh, ta thấy: mỗi hàm của cad được bắt đầu bằng dấu '(' ngay sau đó là tên hàm, tiếp đến là thông số của hàm (có thể có, có thể không có) và kết thúc bằng dấu ')' Trong trường hợp này princ là tên hàm, "\nChao cadviet" là tham số của hàm princ.

 

Trong hai câu lệnh gọi hàm vừa rồi, câu thứ nhất là để viết chữ ra màn hình text, câu lệnh thứ 2 dùng để ẩn kết thúc mà không hiển thị thêm gì cả. Nếu thiếu câu lệnh thứ 2, bạn sẽ nhìn thấy 'Chao cadviet"\nChao cadviet"' trên màn hình, trong đó "\nChao cadviet" là kết quả của hàm (princ "\nChao cadviet").

 

Mình là người mới bắt đầu tìm hiểu Autolisp, mong bác chỉ dùm mình làm như bác hướng dẫn mà ko thấy dòng chữ 'Chao cadviet':

- B1: mình mở Acad 2007, vào Visual LISP chọn new rồi chép đúng đoạn mã bác HD vào. Save với tên hoclisp.

- B2: vào Tool\ Load Application load file hoclisp. Kết quả ko thấy dòng chữ nào hết?

Mình cũng làm thử phần 2 đúng các bước HD, gõ lệnh 'chao' kết quả cũng ko thấy chữ nào hết?

Mong bác giúp đỡ.

THANKS!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình là người mới bắt đầu tìm hiểu Autolisp, mong bác chỉ dùm mình làm như bác hướng dẫn mà ko thấy dòng chữ 'Chao cadviet':

- B1: mình mở Acad 2007, vào Visual LISP chọn new rồi chép đúng đoạn mã bác HD vào. Save với tên hoclisp.

- B2: vào Tool\ Load Application load file hoclisp. Kết quả ko thấy dòng chữ nào hết?

Mình cũng làm thử phần 2 đúng các bước HD, gõ lệnh 'chao' kết quả cũng ko thấy chữ nào hết?

Mong bác giúp đỡ.

THANKS!

Các bước bạn làm là đúng rồi, nhưng bạn hãy thêm dòng lệnh này vào đầu file và cuối file nhé:

dòng đầu file: (defun c:gt()

dòng cuối file: )

sau đó tại dòng lệnh Command: bạn gõ lệnh GT thì nó sẽ xuất hiện dòng đó trên màn hình

bạn ạ dòng đầu tiên là tên lệnh, nếu không có chữ C: đứng trước chữ gt thì nó là hàm

bắt đầu một hàm bao giờ cũng bằng dấu ( và kết thúc bằng dấu )

đây là chương trình giải pt bậc 1 đơn giản nhất bạn hãy tham khảo nhé: ax+b=0

mục đích là phải tìm được các giá trị x trong phương trình x=-b/a

như vậy ta phải gán giá trị a và b cho phương trình từ bàn phím hoặc màn hình máy tính

cách làm như sau:

tên lệnh (defun c:b1()

nhập giá trị a: (setq a(getreal "\nNhap vao gia tri a: "))

------------- b: (setq b(getdist "\nNhap vao gia tri b: "))

tính nghiệm x=-b/a: (setq x (/ (- 0 b ) a ))

xuất kết quả ra màn hình: (alert (strcat "gia tri a: " (rtos a 2) "\n"

"gia tri b: " (rtos b 2) "\n"

"nghiem x = " (rtos x 2) ))

kết thúc chương trình: )

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Phần 3:

 

Trong phần 2, chúng ta đã tạo được một chương trình lisp có giao tiếp với AutoCAD thông qua tên lệnh.

Tại phần 3 này, chúng ta sẽ viết một chương trình thực sự, có ích hẳn hoi.

 

Đó là chương trình tính diện tích của một đối tượng. Trên file hoclisp.lsp, hãy sửa tên hàm chao thành tdt và thêm các mã lệnh như sau:

(defun c:tdt( / sel ent dientich)

(princ "\nChao cadviet")

 

(setq sel (entsel "\nHay chon doi tuong: "))

(setq ent (car sel))

(command ".area" "o" ent)

(setq dientich (getvar "area"))

(princ "\nDien tich doi tuong vua roi la: ")

(princ dientich)

(princ "\nm2")

 

(princ)

)

 

Bạn thử appload file hoclisp.lsp mới và gọi lệnh tdt thử xem, chương trình sẽ yêu cầu bạn nhập vào 1 đối tượng. Và nó sẽ kết xuất diện tích đối tượng vừa rồi ra màn hình:

Command: tdt

Chao cadviet

Hay chon doi tuong: .area

Specify first corner point or [Object/Add/Subtract]: o

Select objects:

Area = 46546736.0000, Perimeter = 28320.0000

 

Command:

Dien tich doi tuong vua roi la: 4.65467e+007m2

Điều gì làm nên sự khác biệt này vậy: chúng ta hãy lần theo từng lệnh nhé.

- Lệnh (entsel "\nHay chon doi tuong: ") là lệnh trả về đối tượng được pick, kết quả trả về là một tập hợp gồm 2 thành phần: thứ nhất là đối tượng được pick, thứ 2 là tọa độ pick.

- Lệnh (setq sel (entsel "\nHay chon doi tuong: ")) là lệnh gán kết quả vừa pick vào biến sel. Bạn nhớ là lệnh (setq a :s_big: là gán giá trị a bằng giá trị b. Trong trường hợp này a là sel, b là kết quả của hàm entsel.

- Lệnh (car sel) là lệnh lấy giá trị đầu tiên của biến sel (biến sel có dạng tập hợp) tức là đối tượng được chọn.

- lệnh (setq ent (car sel)) là lệnh gán giá trị biến ent bằng ename của đối tượng được chọn. ename của một đối tượng là giá trị chỉ ra đối tượng trong một bản vẽ cad.

Như vậy, 2 dòng lệnh

(setq sel (entsel "\nHay chon doi tuong: "))

(setq ent (car sel))

có ý nghĩa là gán giá trị biến ent cho đối tượng vừa được chọn bằng phương pháp pick.

 

Tiếp đến, lệnh (command ".area" "o" ent) tương đương với gõ tại dòng lệnh command: .area rồi gõ tiếp o và pick đối tượng. Bạn nhớ là lệnh (command a b c d e f...) tương đương với việc gõ các giá trị a, b, c, d, e, f ... vào dòng lệnh của cad. Như vậy, lệnh trên tương đương với việc tính diện tích của đối tượng vừa được chọn.

 

- Lệnh (setq dientich (getvar "area")): gán giá trị biến dientich bằng giá trị của biến hệ thống AREA (biến hệ thống AREA chứa diện tích vừa được tính bằng lệnh AREA trước đó của cad).

 

-cụm lệnh:

(princ "\nDien tich doi tuong vua roi la: ")

(princ dientich)

(princ "m2")

chắc chắn bạn biết đó là lệnh viết dòng chữ 'Dien tich doi tuong vua roi la: ' diện tích đối tượng vừa rồi 'm2'.

Trên màn hình bạn còn nhìn thấy các dòng chữ khác ngoài dòng chữ trên đó là do các lệnh area của CAD sinh ra. Trong bài học sau chúng ta sẽ biết cách loại bỏ chữ này.

Cho tui xin mạn phép hỏi Hoành và anh em trên diễn đàn: Khi ta viết dòng lệnh (command ".area" "o" ent)

thi trên màn hình nó sẽ chạy

Specify first corner point or [Object/Add/Subtract]: o

Select objects:

Area = 46546736.0000, Perimeter = 28320.0000

như Hoành đã viết, nhưng nếu khi ta chạy vòng lặp thì nó sẽ hiển thị rất nhiều khi đôí tượng được chọ là lớn. Vậy có thể sửa dòng lệnh như thế nào để ta vẫn thực hiện công việc nhưng không trình bày lên màn hình nhữn diện tích thành phần mà chỉ cho ra kết quả cuôí cùng được không?. Xin chân thành cám ơn mọi người.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình mới bắt đầu học LISP cho nên mình hỏi 1 câu hơi gà 1 tí mong các anh giúp đỡ!Hàm PRINC và hàm PROMPT khác nhau cái gì vậy?

nhờ các anh chỉ dùm!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình mới bắt đầu học LISP cho nên mình hỏi 1 câu hơi gà 1 tí mong các anh giúp đỡ!Hàm PRINC và hàm PROMPT khác nhau cái gì vậy?em tập viết thử 1 cái lisp vẽ hình tròn mà nó báo lỗi là sao vậy?

(defun c:ve()

(setq pt1 (getpoint "\nPick 1 diem tren man hinh ")

r1 (getdist "\nNhap ban kinh duong tron: "))

(command ".circle" pt1 r1)

princ)

nó báo lỗi như vầy nè:SUBR @0815730c PRINC

nhờ các anh chỉ dùm!

Một hàm mở đầu bằng dấu mở ngoặc ( và kết thúc bởi dấu đóng ngoặc )

Sửa lại như sau :

(defun c:ve()

(setq pt1 (getpoint "\nPick 1 diem tren man hinh ")

r1 (getdist "\nNhap ban kinh duong tron: "))

(command ".circle" pt1 r1)

(princ)

) -> kết thúc hàm defun

(defun c:ve()
(setq pt1 (getpoint "\nPick 1 diem tren man hinh ")
	  r1 (getdist "\nNhap ban kinh duong tron: "))
(command ".circle" pt1 r1)
 (princ)
)

Hàm Prompt : in dòng nhắc ra màn hình. Dòng nhắc là kieẻu chuỗi string

Ví dụ : (prompt "\nPick 1 diem tren man hinh ")

-> In ra màn hình (dòng command) dòng nhắc : nPick 1 diem tren man hinh

Hàm Princ : có thể in 1 biểu thức ra màn hình,. Biểu thức này có thể là chuỗi, là số.

Ví dụ :

(princ "\nPick 1 diem tren man hinh ") -> cái này giống prompt

ví dụ 2 :

(princ (+ 2 3)) -> kết quả trả về 5

Ví dụ trên của bạn

(Princ r1) -> Kết quả sẽ trả về trị số bán kính r1 mà bạn đã nhập từ bàn phím

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cho mình hỏi thêm cái này 1 tí nữa đi!

(defun c:XXX( / sst ent old tt)  

(defun c:cv( sst / ent old tt)  

(defun c:XXX( / sst ent old tt)

Sau tên hàm là mình liệt kê tất cả các biến ra phải ko?

Cho mình hỏi ý nghĩa và vị trí của dấu / đó là gì?

Có phải sau dấu / là các biến cục bộ được giải phóng khi hàm kết thúc không, còn trước dấu / là biến toàn cục phải ko?

 

Mình vẫn chưa hiểu lắm biến nào cần giải phóng và biến nào ko cần giải phóng nữa?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cho mình hỏi thêm cái này 1 tí nữa đi!

(defun c:XXX( / sst ent old tt)  

(defun c:cv( sst / ent old tt)  

(defun c:XXX( / sst ent old tt)

Sau tên hàm là mình liệt kê tất cả các biến ra phải ko?

Cho mình hỏi ý nghĩa và vị trí của dấu / đó là gì?

Có phải sau dấu / là các biến cục bộ được giải phóng khi hàm kết thúc không, còn trước dấu / là biến toàn cục phải ko?

 

Mình vẫn chưa hiểu lắm biến nào cần giải phóng và biến nào ko cần giải phóng nữa?

Chào bạn Truongthanh,

Bạn hiểu đúng rồi đó, nhưng có chút xíu chưa chuẩn, đó là không nhất thiết phải khai báo tất cả các biến đâu bạn ạ. Điều đó chỉ bắt buộc đối với các biến cục bộ mà thôi.

Trên diễn đàn bạn thấy có rất nhiều lisp mà chỉ sử dụng các biến toàn cục và do vậy chả thấy có khai báo gì cả mà chỉ có mỗi hai cái ngoặc đóng mở sau tên hàm. Vậy mà nó vẫn chạy phăm phăm đó thôi, phải không bạn.

Bạn hãy tham khảo bài viết của bác SSG ở đây nhé. Trong đó có phần giải thích khá cụ thể về các biến toàn cục và biến cục bộ bạn ạ.

http://www.cadviet.com/forum/index.php?showtopic=2480

 

Chúc bạn chóng thành công.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

[ quote]Cho mình hỏi thêm cái này 1 tí nữa đi!

(defun c:XXX( / sst ent old tt)

(defun c:cv( sst / ent old tt)

(defun c:XXX( / sst ent old tt)

Sau tên hàm là mình liệt kê tất cả các biến ra phải ko?

Cho mình hỏi ý nghĩa và vị trí của dấu / đó là gì?

Có phải sau dấu / là các biến cục bộ được giải phóng khi hàm kết thúc không, còn trước dấu / là biến toàn cục phải ko?

 

Mình vẫn chưa hiểu lắm biến nào cần giải phóng và biến nào ko cần giải phóng nữa?[ /quote]

 

sau dấu / là các biến cục bộ được giải phóng khi hàm kết thúc

còn trước dấu / là các tham số cần thiết khi gọi hàm

 

nên sử dụng biến cục bộ, để không ảnh hưỡng đến các hàm khác nếu vô tình ta đặt trùng tên biến cho 2 hàm khác nhau.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cho tui xin mạn phép hỏi Hoành và anh em trên diễn đàn: Khi ta viết dòng lệnh (command ".area" "o" ent)

thi trên màn hình nó sẽ chạy

Specify first corner point or [Object/Add/Subtract]: o

Select objects:

Area = 46546736.0000, Perimeter = 28320.0000

như Hoành đã viết, nhưng nếu khi ta chạy vòng lặp thì nó sẽ hiển thị rất nhiều khi đôí tượng được chọ là lớn. Vậy có thể sửa dòng lệnh như thế nào để ta vẫn thực hiện công việc nhưng không trình bày lên màn hình nhữn diện tích thành phần mà chỉ cho ra kết quả cuôí cùng được không?. Xin chân thành cám ơn mọi người.

Chào bạn Chandatn,

Chưa hiểu ý bạn hỏi, bạn muốn chỉ hiển thị kết quả cuối cùng là kết quả gì vậy??? Là giá trị diện tích của đối tượng bạn chọn cuối cùng hay là tổng diện tích của các đối tượng đã chọn, hay là chỉ hiển thị giá trị chu vi (perimeter) của các đối tượng?????

Mong bạn giải thích rõ thì mới có thể có cách làm được bạn nhé.

Chào bạn và chúc bạn may mắn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nhờ các anh giúp chu lisp về giao hội cạnh.

Mình có 2 điểm trên đoạn thẳng cần xác định điểm thứ 3

Lisp yêu cầu nhập điểm 1, bán kính. điểm 2 bán kính.

2 điểm trên vẽ ra 2 vòng tròn cắt nhau 2 điểm ở 2 phía. chọn phí cần xác định điểm 3.

Chèn vào kí hiệu vòng tròn nhỏ , xoá 2 đường tròn

Mình viết được tới đây, không biết thế nào tiếp nửa, mong được giúp đở.

;;-----------------

(defun c:giaohoi()

(setq pt1 (getpoint "\nPick diem 1 tren man hinh ")

          r1 (getdist "\nNhap ban kinh duong tron: "))

    (command ".circle" pt1 r1)

(setq pt2 (getpoint "\nPick diem 2 tren man hinh ")

          r2 (getdist "\nNhap ban kinh duong tron: "))

    (command ".circle" pt2 r2)

  (princ)

)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×