Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
ngocduong12210119

Cần giúp về Lisp Scale 1 chiều !

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

Em ko rành về lisp em .Nếu có thể dùng thêm chức năng scale nhập con số tỷ lệ được ko bác? Giống như scale một chiều gõ lệnh XSC. Nếu được bác chỉnh cho thêm thì hay biết mấy.

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
Em ko rành về lisp em .Nếu có thể dùng thêm chức năng scale nhập con số tỷ lệ được ko bác? Giống như scale một chiều gõ lệnh XSC. Nếu được bác chỉnh cho thêm thì hay biết mấy.

Theo gợi ý của các bạn mình hoàn thiện lệnh SCXY như sau:

*Giải nén ra bạn được 1 file lsp và 1 file dcl. File lisp thì để đâu cũng được còn file dcl thì để chổ nào cho cad tìm thấy (nằm trong Support File Search Path)

-Tên lệnh SCXY.

-Chọn đói tượng.

-Chọn điểm chuẩn (để phóng).

-Lên cái bảng như này.

 

scxy.jpg

 

*Bạn chọn Pick thì nó thoát khỏi bảng:

-Bạn vẽ hình chử nhật chuẩn (pick 2 điểm góc)

-Bạn vẽ hình chử nhật đến (pick 2 điểm góc)

Xong!

*Nếu muốn nhập tỉ lệ thì nhập giá trị vào 2 ô trên.

-Mặc định tỉ lệ theo 2 trục điều là 1.

-Giá trị nhập có thể theo dạng : 0.2 hoặc 2/3 gì cũng được.

-Nhấn nút Dong y.

Xong!

*Lưu ý khi chọn chế độ pick điểm thì các giá trị trong 2 ô là bao nhiêu kệ lisp sẽ không quan tâm tới 2 giá trị này.

Đây!!

  • Vote tăng 9

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
scxy.jpg

Chào anh Duy

Lisp thật hay. Cảm ơn anh. Tue_NV có một số vướng mắc chưa tỏ, anh giải thích dùm em tí nhé

;Viet boi: KTS_DUY  BINH SON - QUANG NGAI


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;






(DEFUN c:scxy()
 (setq oldvalue (getvar "CMDECHO"))
 (setvar "CMDECHO" 0)
(setq donvi (/ (getvar "viewsize") 40))
 (princ "Chon doi tuong can scale: ")
 (setq ss (ssget))
 (setq dc (getpoint "\nChon diem goc: "))
(setq diemvt1 (polar dc pi donvi))
(setq diemvt2 (polar dc (* 2 pi) donvi))
(setq diemvt3 (polar dc (/ pi 2) donvi))
(setq diemvt4 (polar dc (- 0 (/ pi 2)) donvi))
           (grdraw diemvt1 diemvt2 2)
           (grdraw diemvt3 diemvt4 2)
(scxyg)


 (princ)
)

;;;;;;;;;;;;;
(defun scxyp ()
 (setq diem1 (getpoint "\nDiem thu nhat cua hinh chu nhat chuan: "))
 (setq diem2 (getcorner diem1"\nDiem thu hai cua hinh chu nhat chuan: "))
(setq diem11 (list (car diem1) (cadr diem2)))
(setq diem22 (list (car diem2) (cadr diem1)))
           (grdraw diem1 diem11 3)
           (grdraw diem11 diem2 3)
           (grdraw diem2 diem22 3)
           (grdraw diem1 diem22 3)
(setq  daichuany (distance diem1 diem22))
(setq  daichuanx (distance diem2 diem22))

 (setq diem1 (getpoint diem1"\nDiem thu nhat cua hinh chu nhat den: "))
 (setq diem2 (getcorner diem1"\nDiem thu hai cua hinh chu nhat den: "))
(setq diem11 (list (car diem1) (cadr diem2)))
(setq diem22 (list (car diem2) (cadr diem1)))
           (grdraw diem1 diem11 4)
           (grdraw diem11 diem2 4)
           (grdraw diem2 diem22 4)
           (grdraw diem1 diem22 4)
(setq  daideny (distance diem1 diem22))
(setq  daidenx (distance diem2 diem22))
(setq tilex (/ daidenx daichuanx))
(setq tiley (/ daideny daichuany))
(command "block" "blocktrunggian" dc ss "")
 (Command "Insert" "blocktrunggian" dc tiley tilex 0 "")  
 (Command "Explode" "last")
(Command "Purge" "B" "blocktrunggian" "Y" "Y") 
 (setvar "CMDECHO" oldvalue)
 (setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA**")
 (princ)
)
;;;;;;;;;;;;;
(defun scxyg ()

 (setq tilexb "1")
 (setq tileyb "1")

(setq DCL_ID (load_dialog "scalexy.DCL"))
(new_dialog "tilescxy" DCL_ID)
(setq dial(load_dialog "scalexy.dcl"))

(action_tile "btn_pick" "(done_dialog 1)")
(action_tile "btn_dongy" "(done_dialog 2)")
(action_tile "btn_thoi" "(done_dialog 3)")
(set_tile "tilexb" tilexb)
(action_tile "tilexb" "(setq tilexb (get_tile \"tilexb\"))")
(set_tile "tileyb" tileyb)
(action_tile "tileyb" "(setq tileyb (get_tile \"tileyb\"))")

(setq phepchon (start_dialog))
(cond 

     ((= phepchon 1) (scxyp))
     ((= phepchon 2) (dongysc))
     ((= phepchon 3) (thoi))
) 
   (Princ)
)
;;;;;;;;;;;;;;;;;
(defun dongysc ()
(setq tilex tilexb)
(setq tiley tileyb)
(command "block" "blocktrunggian" dc ss "")
 (Command "Insert" "blocktrunggian" dc tiley tilex 0 "")  
 (Command "Explode" "last")
(Command "Purge" "B" "blocktrunggian" "Y" "Y") 
 (setvar "CMDECHO" oldvalue)
 (setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA**")
   (Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun thoi ()
(xlbqpqd32)
(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
     (Princ)
)  
[\codebox]
Anh cho em hỏi chổ này một chút nhé :

(defun scxyg ()

 (setq tilexb "1")
 (setq tileyb "1")

(setq DCL_ID (load_dialog "scalexy.DCL"))
(new_dialog "tilescxy" DCL_ID)
(setq dial(load_dialog "scalexy.dcl"))

[color="#4169E1"](action_tile "btn_pick" "(done_dialog 1)")
(action_tile "btn_dongy" "(done_dialog 2)")
(action_tile "btn_thoi" "(done_dialog 3)")
(set_tile "tilexb" tilexb)
(action_tile "tilexb" "(setq tilexb (get_tile \"tilexb\"))")
(set_tile "tileyb" tileyb)
(action_tile "tileyb" "(setq tileyb (get_tile \"tileyb\"))")[/color]

(setq phepchon (start_dialog))
(cond 

     ((= phepchon 1) (scxyp))
     ((= phepchon 2) (dongysc))
     ((= phepchon 3) (thoi))
) 
   (Princ)
)

Em biết rằng các key "btn_pick"; "btn_dongy"; "btn_thoi" chính là các key ở trong file scxy.dcl

Nhưng em chưa hiểu lắm về hàm action_tile trong Lisp và các hàm done_dialog và tham số 1;2;3 trong hàm done_dialog có nghĩa gì cũng như biến phepchon?

(action_tile "btn_pick" "(done_dialog 1)")

(action_tile "btn_dongy" "(done_dialog 2)")

(action_tile "btn_thoi" "(done_dialog 3)")

 

 

(cond

 

((= phepchon 1) (scxyp))

((= phepchon 2) (dongysc))

((= phepchon 3) (thoi))

)

 

 

Anh và mọi người có thể giải thích dùm Tue_NV một chút được không?

Cảm ơn anh Duy và 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
Chào anh Duy

Lisp thật hay. Cảm ơn anh. Tue_NV có một số vướng mắc chưa tỏ, anh giải thích dùm em tí nhé

Em biết rằng các key "btn_pick"; "btn_dongy"; "btn_thoi" chính là các key ở trong file scxy.dcl

Nhưng em chưa hiểu lắm về hàm action_tile trong Lisp và các hàm done_dialog và tham số 1;2;3 trong hàm done_dialog có nghĩa gì cũng như biến phepchon?

(action_tile "btn_pick" "(done_dialog 1)")

(action_tile "btn_dongy" "(done_dialog 2)")

(action_tile "btn_thoi" "(done_dialog 3)")

(cond

 

((= phepchon 1) (scxyp))

((= phepchon 2) (dongysc))

((= phepchon 3) (thoi))

)

Anh và mọi người có thể giải thích dùm Tue_NV một chút được không?

Cảm ơn anh Duy và mọi người

Quả thật nói ra thì hơi xấu hổ chứ kiến thức về dcl của mình rất ít.

Vốn là mình coi trong sách thấy có 1 lệnh làm xuất hiện hộp thoại gồm 3 button khi nhấn vào thì thực hiện lệnh nguyên gốc của cad. Rồi mình mò mẩm pha chế thêm đến chừng thực hiện được cho khi nhấn nút thì thực hiện cho các lệnh lisp (nói chung là mò lâu lắm hư hoài rồi có ngày cũng được). Mình lưu đoạn lisp đó lại và sau đó chơi trò lắp ghép. Nói chung mình chấp nhận làm cứ làm như thế thì nó được như thế chứ không hiểu rành cho lắm nên không giải thích cho bạn được. :bigsmile:

  • 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
Quả thật nói ra thì hơi xấu hổ chứ kiến thức về dcl của mình rất ít.

Vốn là mình coi trong sách thấy có 1 lệnh làm xuất hiện hộp thoại gồm 3 button khi nhấn vào thì thực hiện lệnh nguyên gốc của cad. Rồi mình mò mẩm pha chế thêm đến chừng thực hiện được cho khi nhấn nút thì thực hiện cho các lệnh lisp (nói chung là mò lâu lắm hư hoài rồi có ngày cũng được). Mình lưu đoạn lisp đó lại và sau đó chơi trò lắp ghép. Nói chung mình chấp nhận làm cứ làm như thế thì nó được như thế chứ không hiểu rành cho lắm nên không giải thích cho bạn được. :bigsmile:

Có gì đâu anh. Anh em mình giống nhau ở chổ là mò mẩm, học mò là chính mà anh. Và cái vui nhất là công việc lắp ghép nó thành công. Sướng lắm anh à

Đọc code và file dcl em hiểu một ít rồi.

Em muốn tìm tài liệu về Dcl đề học, nhưng tìm trên diễn đàn nhiều mà không có.

 

Nếu anh và mọi người có tài liệu về dcl thì cho Tue_NV xin để làm tài liệu để học tập

 

Xin chân thành cảm ơn anh Duy và mọi người :bigsmile:

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ó gì đâu anh. Anh em mình giống nhau ở chổ là mò mẩm, học mò là chính mà anh. Và cái vui nhất là công việc lắp ghép nó thành công. Sướng lắm anh à

Đọc code và file dcl em hiểu một ít rồi.

Em muốn tìm tài liệu về Dcl đề học, nhưng tìm trên diễn đàn nhiều mà không có.

 

Nếu anh và mọi người có tài liệu về dcl thì cho Tue_NV xin để làm tài liệu để học tập

 

Xin chân thành cảm ơn anh Duy và mọi người :bigsmile:

Bạn mua cuốn sách dạy lisp thì phía sau thế nào cũng có phần nói về dcl thôi. Bạn ở Đà Nẳng thì các nhà sách lớn chắc là có sách dạy lisp mà. Mình hồi đi SG có mua được cuốn dạy lisp của thầy Lộc nhưng nay bị mất tập 1 chỉ còn tập 2 nói về dcl thôi <_< . Mà sách thì không up lên đượ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
Anh Teu_NV đã tìm kiếm trong các trang sau chưa?

 

http://www.cadviet.com/sub/hsearch.php?cx=...;sa=Search#1151

Cám ơn em. Anh đã tìm rồi và cái anh cần tìm chính là cuốn ebook viết về hộp thoại DCL.

 

Và Tue_NV tìm khắp rồi nhưng không có.

Mọi người ai có ebook này thì cho Tue_NV xin với.

 

Cảm ơn mọi người rất 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ám ơn em. Anh đã tìm rồi và cái anh cần tìm chính là cuốn ebook viết về hộp thoại DCL.

 

Và Tue_NV tìm khắp rồi nhưng không có.

Mọi người ai có ebook này thì cho Tue_NV xin với.

 

Cảm ơn mọi người rất nhiều

Hề hề,

Lâu quá rồi hổng gặp được các bác, về thằng DCL thì đúng như bác Duy nói, hầu hết các tài liệu về lisp đều có nói đến nó ở phần cuối, sau khi đã giới thiệu các vấn đề cơ bản về lisp. Nhìn chung theo mình hiểu thì thằng này chỉ để tăng thêm độ oai cho lisp thôi bác Tue_NV và các bác ạ. Có nó thì dùng hơi sướng hơn một tẹo. Mình cũng đã vọc tí ti về nó theo kiểu mà bác Duy đã dạy, cứ cắt cắt dán dán ý mà. Thực ra nó không quá khó nhưng do chỉ để giải quyết khâu oai nên ít người chịu cày sâu bừa kỹ mà thôi. Bác Tue_Nv muốn có tài liệu ebook về nó thì có thể tham khảo ở đây nhé

http://www.cadviet.com/upfiles/2/gi%E1o_tr...lisp_tu_hoc.rar

 

Cái này là mình cũng mót trên diễn đàn về rồi tự dịch để cày thôi, có gì sai sót mong bác luợng thứ. Phần tiếng Anh mình vẫn giữ nguyên gốc của cụ Jeffy Sander đó. Hy vọng là bác sẽ xài được nó.

Chúc bác và các bác khác trên diễn đàn luôn mạnh giỏi.

  • Vote tăng 2

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
Hề hề,

Cái này là mình cũng mót trên diễn đàn về rồi tự dịch để cày thôi,

Bác Bình ơi! Dạo này cánh đồng làng em có nhiều khoai run run lắm. Hôm nào bác mót được nhiều nhiều khoai cố gắng tạt vào nhà em chơi nhá! Em sẽ luộc khoai giúp đảm bảo ko nát đâu. Anh Dậu nhà em dạo này khoẻ rồi bác ạ! Các cháu nhà em vưỡn hỏi thăm bác Bình luôn luôn bác ạ!

Em cũng mót được tải khoai nhờ bác thẩm định và phân loại giúp em:

 

Tổng quan về AutoLisp - Ngôn ngữ lập trình trong Tự động hóa thiết kế

Autocad

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:

Code: (defun myProg()

(princ "Tecco 533")

(princ)

)

Autolisp là ngôn ngữ trả về giá trị sau khi thực thi lệnh. Bạn có thể kiểm tra điều này bằng cách mở AutoCAD và gỏ dòng lệnh sau: (+ 1 2)

Kết quả trả về là 3.

 

3.2. Biến

Để gán giá trị trong Autolisp bạn cần sử dụng từ khóa setq với cú pháp: (setq a 1)

Để kiểm tra giá trị của biến dùng từ khóa ! với cú pháp: !a

Giống một số ngôn ngữ lập trình khác Autolisp cũng qui định cách đặt tên biến như sau:

- Không dùng các ký tự đặc biệt: *, &, ^, $...

- Không dùng các từ khóa của AutoCAD: LINE, PLINE, MIRROR…

- Tên biến không phân biệt chữ hoa và chữ thường

 

3.3. Hàm

Autolisp qui định từ khóa defun để định nghĩa hàm thực thi với cú pháp:

Code: (defun myProg()

(princ "Tecco 533")

(princ)

)

Ngoài ra Autolisp còn sử dụng từ khóa C: sẽ khai báo với AutoCAD là chương trình sẽ thực thi bằng lệnh tại dấu nhắc lệnh Command với cú pháp:

Code: (defun C:myProg()

(princ "Tecco 533")

(princ)

)

Với hàm đầu tiên để thực thi bạn phải gõ Command: (myProg) tại dòng nhắc lệnh còn với hàm thứ hai bạn chỉ cần gỏ Command: myProg giống như một lệnh trong AutoCAD.

 

3.4. Kiểu dữ liệu

Một số kiểu dữ liệu thông dụng trong Autolisp như sau:

String: Chuổi gồm các ký tự và số

Integers: Số tự nhiên

Real: Số thực

List: Kiểu dữ liệu đặc trưng và cũng là thế mạnh của LISP so với các ngôn ngữ lập trình 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 . ) (0 . "LINE") (5 . "22") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 4) (100 . "AcDbLine") (10 3.39219 5.3243 0.0) (11 8.72878 3.10374 0.0) (210 0.0 0.0 1.0))

Đây là một tập hợp các cặp đôi (mã số . dữ liệu) được qui định trước. Tùy theo đối tượng và thuộc tính đối tượng mà Associated List sẽ có những tham số khác nhau. Các mã số này tuân theo một qui định trong bảng định nghĩa cho trước gọi là bảng mã DXF. Để có thể đều khiển được các đối tượng trong bản vẽ AutoCAD yêu cầu người lập trình phải hiểu rất rõ về bảng mã DXF này.

 

3.6. Dữ liệu mở rộng

AutoCAD dùng các mã số từ 1000 đến 1042 để biểu diễn các dữ liệu mở rộng. Với dữ liệu mở rộng người lập trình có thể đánh dấu đối tượng trên AutoCAD để thực hiện các thao tác tiếp theo. Một ứng dụng điển hình trên AutoCAD sử dụng dữ liệu mở rộng này là chương trình Nova-TDN của Công ty tin học Hài Hòa. Thông qua dữ liệu mở rộng chương trình có thể phân biệt được đâu là tim tuyến, đâu là trắc dọc, cắt ngang…Toàn bộ dữ liệu mở rộng được định nghĩa trong Associated List với mã số -3.

Ví dụ:

Code: ((-3 ("TECCO533" (1000 . "Tim tuyen"))))

 

3.7. Điều kiện

Cũng giống với một số ngôn ngữ lập trình khác Autolisp hỗ trợ người lập trình 02 cú pháp điều kiện là điều kiện xác định If và điều kiện lựa chọn Cond với cú pháp như sau:

Code: (if <điều kiện>

)

(cond

()

()

...

()

)

 

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:

Code: (while < điều kiện >

)

(repeat

)

 

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

 

Nguồn bài viết của: http://diendan.uct2.edu.vn

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ổng quan về AutoLisp - Ngôn ngữ lập trình trong Tự động hóa thiết kế

........

Nguồn bài viết của: http://diendan.uct2.edu.vn

Sao vậy ta?

Bài này từ CADViet ra mà: http://www.cadviet.com/forum/index.php?showtopic=2836

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ám ơn em. Anh đã tìm rồi và cái anh cần tìm chính là cuốn ebook viết về hộp thoại DCL.

Và Tue_NV tìm khắp rồi nhưng không có.

Mọi người ai có ebook này thì cho Tue_NV xin với.

Cảm ơn mọi người rất nhiều

Bạn tham khảo trang : OpenDCL

  • 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
Sao vậy ta?

Bài này từ CADViet ra mà: http://www.cadviet.com/forum/index.php?showtopic=2836

Em tìm kiếm trên mạng thấy nó ở trang này:

http://my.opera.com/quac/blog/tong-quan-ve...ng-hoa-thiet-ke

 

Và rất nhiều trang trong đây nữa:

 

http://www.google.com.vn/search?hl=vi&...1%BB%9Bi+Google

 

LỜI THỀ CỎ MAY

(Phạm Công Trứ, Việt Nam)

……………………..

Nếu ko nhớ nhầm , em đã có lần nhắc anh về tên tác giả bài thơ!

Những bài thơ và bài viết của các tác chưa nổi chỉ đăng tải trên mạng có thể không cần ghi tên tuổi cũng tạm chấp nhận được. Nhưng với những tác giả đã thành danh anh phải ghi tên tác giả mới trọn tình vẹn nghĩa.

Tìm kiếm trên Google em thấy có một số bài viết và hình ảnh của các tác giả có tên tuổi trên diễn đàn CADViet, đăng tải ở một số trang Web khác. Không thấy họ ghi tên tác giả hoặc nguồn gốc bài viết, dù đó ko phải là bài viết của em nhưng em cũng thấy bức xúc và day dứt một nỗi buồn...Em thấy buồn vì sự "lập lờ đánh lận con đen" Tỉ dụ có thành viên mới vào diễn đàn đã từng đọc bài viết , hình ảnh mẹo sử dụng CAD mà họ đã đọc ở các trang Web khác , rồi họ lại thấy bài viết đó hình ảnh đó trên diễn đàn CADViet họ sẽ nghĩ gì??? Nếu họ nghĩ rằng diễn đàn mình có người copy bài của diễn đàn khác anh có thấy đau lòng và bức xúc ko ???

Em đã chán ngấy cái việc góp ý người khác lắm rồi nhiều khi mang vạ vào thân mà chờ được vạ thì má đã sưng rồi anh ạ!

Em thấy anh là người dễ tính nhưng cũng chỉ dám góp ý anh lần này nữa và cũng là lần cuối. Chỉ mong anh hiểu em và thông cảm cho em thôi! Chúc anh vui khoẻ và trẻ mãi đến già!

Vẫn còn hai câu hỏi của em chưa thấy anh trả lời???

 

www.cadviet.com © cadviet 2007

Ghi rõ nguồn www.cadviet.com khi phát hành lại thông tin từ trang web này.

Mọi vấn đề liên quan xin liên hệ email: webmaster@cadviet.com

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
Chào anh Duy

Lisp thật hay. Cảm ơn anh. Tue_NV có một số vướng mắc chưa tỏ, anh giải thích dùm em tí nhé

...

Em biết rằng các key "btn_pick"; "btn_dongy"; "btn_thoi" chính là các key ở trong file scxy.dcl

Nhưng em chưa hiểu lắm về hàm action_tile trong Lisp và các hàm done_dialog và tham số 1;2;3 trong hàm done_dialog có nghĩa gì cũng như biến phepchon?

(action_tile "btn_pick" "(done_dialog 1)")

(action_tile "btn_dongy" "(done_dialog 2)")

(action_tile "btn_thoi" "(done_dialog 3)")

(cond

 

((= phepchon 1) (scxyp))

((= phepchon 2) (dongysc))

((= phepchon 3) (thoi))

)

Anh và mọi người có thể giải thích dùm Tue_NV một chút được không?

Cảm ơn anh Duy và mọi người

 

Cú pháp: (done_dialog [status]) -> kết thúc dialog

 

Khi done_dialog thực hiện xong, nó sẽ trả về giá trị "status" cho start_dialog. Có 4 trường hợp xảy ra:

 

1- Done_dialog kết hợp với button OK (key quy định là accept): start_dialog = 1

 

2- Done_dialog kết hợp với button Cancel (key quy định là cancel): start_dialog = 0

 

3- Nếu chương trình kết thúc vì lý do gì đó mà các dialog vẫn ở trạng thái open, AutoCAD sẽ tự động gọi term_dialog để kết thúc. Khi đó: start_dialog = -1

 

Các trường hợp trên, không cần tham số khi gọi done_dialog.

 

4- Nếu done_dialog kết hợp với các key khác, không thuộc 3 trường hợp trên, có thể gọi done_dialog với tham số là số nguyên n>1 (n = 1 cũng được, như bạn Duy đã dùng). Khi đó, start_dialog = n

Xử lý n thế nào là tuỳ ý đồ lập trình.

 

Bạn Duy dùng biến phepchon là để không phải lặp lại kiểu như:

(cond

((= start_dialog 1) (scxyp))

((= start_dialog 2) (dongysc))

((= start_dialog 3) (thoi))

)

Như vậy không ổn vì start_dialog chỉ được phép gọi 1 lần khi thực thi một dialog.

  • Vote tăng 3

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
Hiện mình đã chỉnh lại cái lisp này 1 chút cho tiện dùng

-Tên lệnh: SCXY

-Thao tác:

+Nhập lệnh SCXY.

+Chọn đối tượng.

+Chọn điểm chuẩn (để phóng)

+Vẽ hình chử nhật chuẩn (bằng cách chọn 2 điểm chéo góc).

+Vẽ hình chử nhật đích (bằng cách chọn 2 điểm chéo góc).

Xong!

 

Đây !!!

 

Mình dùng cái này của bác thật tuyệt vời. Có 1 thắc mắc nhỏ:

Hình như đối tượng Scale bị "bung" ra phải ko bác? Cụ thể là mình thử với hình chữ nhật (vẽ bằng REC) rồi scale -> 4 đoạn thẳng ghép lạ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 hay tạo block ( Loại không cần đặt tên hay đặt tên cũng đc ) xong vào properties chọn scale x hay scale y theo tỷ lệ cần là đc, cái này thậm chí sclae cả phương z cho 3d:D. Hạn chế là nếu tỷ lệ sc lẻ thì ....

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ế nào là tỉ lệ qấ lẻ là không khả thi.

Bạn có thể kết hợp lệnh 'cal để tính toán ra tỉ lệ scale. Điều đó hoàn toàn được.

Bạn đã thử kết hợp lệnh scale 1 chiều với lệnh 'cal chưa?

cal là lệnh tính toán mà bạn cho lại đi bạn ơ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

cal là lệnh tính toán mà bạn cho lại đi bạn ơi

Nếu dùng lisp scxy của tôi trong topic này thì tin rằng đã có chức năng pick trực tiếp kích thước nguồn và đích mong muố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

tôi chưa hiểu lắm về scal 1 chiều xsc và 'cal

Ai bít chỉ cụ thể

kém cỏi đừng chê

1). Acad đã có lệnh scale, tức là scale theo cả 2 phương X và Y. Bác Duy sáng kiến scale theo 1 chiều X hoặc Y để ai có nhu cầu thì dùng.

2). 'cal là 1 lệnh tính toán trong khi đang thực hiện 1 lệnh khác.

3). Hoá ra: bạn muốn hỏi cái gì?

  • 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

các anh ơi ! sao em sài bản card 2010 không thể thực hiện đc những điều các bác nói nhỉ ? có ai giải thích tại sao giúp em với !!

như khi đanh lệnh XSC :

 

Command: XSC

Chon doi tuong can scale:

Select objects: Specify opposite corner: 74 found

Select objects:

Base point: ; error: too many arguments

vậy thì làm sao mà scale được chứ !! có anh nào đã sài card 10 và scale 1 chiều thành công thì chia sẻ giúp em với !!

thanks verry 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

Có thể lisp của bạn bị lỗi gì đó,

 

Command: xsc

Usage: (acad_strlsort <list of strings>)

Chon doi tuong can scale:

Select objects: 1 found

Select objects:

Base point:

Scale theo [X,Y,Z,Scale] :x

Cho biet he so scale or Reference < R >2

Command:

 

Đây là lisp có trên diễn đàn, bạn dùng thử xem sao:

 

http://www.cadviet.c..._xscale_xsc.lsp

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

chào các anh à ! em cũng làm theo y như các bác mà ko đc !!

sau đây là các bước mà em đã thực hiên !

sau khi chọ đối tượng xong nó cứ đòi: Base point

kích điểm gốc mà ko có dòng chọn theo phương : X or y để scale như bác nói !

Command: xsc Chon doi tuong can scale:

Select objects: Specify opposite corner: 30 found

Select objects:

Base point: x

Invalid point.

Base point: 'cal

>>>> Expression: 3

3

Base point: ; error: too many arguments

Command:

thanks các anh 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

Bạn nhập sai rồi. Phải nhập như thế này chứ

Base point: pick điểm chuẩn (không phải nhập chữ X như bạn)

Scale theo [X,Y,Z,Scale] : chọn X hoặc Y hoặc Z hoặc S

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


×