PDA

View Full Version : Sử dụng AutoLisp trong AutoCad



PhanTuHuong
10-09-06, 09:28 PM
Trong lĩnh vực đồ họa (AutoCad), ngôn ngữ lập trình AutoLisp được ứng dụng rộng rãi. Tuy nhiên ngôn ngữ AutoLisp có những hạn chế nhất định và phức tạp. Những lỗi mở ngoặc,đóng ngoặc () rất khó chịu và không phải dễ dàng tìm ra. Sau 1 thời gian nghiên cứu về AutoLisp, tôi ko tiếp tục nữa.
Theo tôi, những bạn ngành kỹ thuật (có dùng AutoCad) nếu biết về VBA for Excel thì nên sử dụng VBA for AutoCad, không nên dùng AutoLisp.

Sau đây tôi giới thiệu tiện ích vẽ mặt cắt địa chất công trình (chưa được hoàn chỉnh) bằng AutoLisp để các bạn tham khảo.

Chương trình gồm 2 file: Matcat.dwg và GTmoi.lsp.
Để chạy chương trình, đầu tiên bạn mở file Matcat.dwg trong AutoCad2004. Sau đó vào Tools/Load Application

http://i63.photobucket.com/albums/h133/tuhuong/matcat1.jpg

PhanTuHuong
10-09-06, 09:38 PM
Cửa sổ Load/Unload Application hiện ra, bạn chọn file GTMoi.lsp trong look in:

http://i63.photobucket.com/albums/h133/tuhuong/matcat2.jpg

Sau đó chọn Load rồi Close. Nếu việc Load thành công thì máy sẽ báo:

http://i63.photobucket.com/albums/h133/tuhuong/matcat3.jpg

PhanTuHuong
10-09-06, 09:44 PM
Để chạy được GTMoi.lsp, đầu tiên bạn đặt chế độ Osnap off.
Sau đó ở dòng command, bạn gõ TL (thước tỷ lệ). Khi vào xong các yêu cầu thì sẽ thoát lệnh.
Dòng command trống xuất hiện, bạn vào HK (Hố khoan), rồi nhập các yêu cầu vào.
Để hiểu hơn các lệnh AutoLisp, mời các bạn xem code:

; Ve mat cat dia chat cong trinh
( defun C:TL ( / Saumax )

(setq Vitri ( getpoint "\nCho vi trí thuoc ty lê:"))
(setq TLD ( getreal " \nCho ty lê dung: 1/"))
(setq TLN ( getreal " \nCho ty lê ngang: 1/"))
(setq Batdau ( getreal " \nCho cao dô bat dâu= "))
(setq Saumax ( getreal " \nCho dô sâu hô khoan max= "))
(command "Color" "7")
(setq Soo (+( / (* Saumax 100 ) TLD) 1) )
(setq Vtchu ( polar Vitri 0 4 ))
(if ( >= Batdau 0) (command "text" "style" "vntime" Vtchu "2" "0" (Strcat "+"( Rtos Batdau 2 1) )))
(if ( < Batdau 0) (command "text" "style" "vntime" Ghichu "2" "0" (Rtos Batdau 2 1 ) ))
(setq dem 1 )
(while (<= dem Soo )
(setq Vitri1( polar Vitri (-(/ PI 2)) (-(* dem 10) 10 )))
(setq X1( polar Vitri1 (-(/ PI 2)) 10 ) )
(setq Y1( polar X1 0 1.5 ))
(command "rectangle" Vitri1 Y1 )
(if (= (rem dem 2) 0 ) (command "solid" Vitri1 "@1.5,0" "@-1.5,-10" "@1.5,0" ""))
(setq Ghichu( polar X1 0 4 ))
(setq Khdich (/ TLD 100))
(setq Chu (- Batdau (* dem Khdich ) ) )
(if ( >= Chu 0) (command "text" "style" "vntime" Ghichu "2" "0" (Strcat "+" ( Rtos Chu 2 1 ) )))
(if ( < Chu 0) (command "text" "style" "vntime" Ghichu "2" "0" (Rtos Chu 2 1 ) ))
(setq dem ( + 1 dem ))
); end of while
(command "Color" "1")
(setq Khch( polar Vitri (-(/ PI 2)) (* (+ Soo 1 ) 10 ) ) )
(setq Khch1( polar Khch (-(/ PI 2)) 8 ))
(setq Khch2( polar Khch1 (-(/ PI 2)) 8 ))
(setq Kh1( polar Khch 0 -15 ))
(command "line" Kh1 "@0,-24" "@30,0" "@ 0,24" "C" "")
(setq Kh1chu( polar Kh1 -1.1 5.8))
(setq Kh2chu( polar Kh1chu (-(/ PI 2)) 7.5))
(setq Kh3chu( polar Kh2chu (-(/ PI 2)) 7.5))
(command "Color" "7")
(command "text" "style" "T3" Kh1chu "2" "0" "Ký hiÖu")
(command "text" "style" "T3" Kh2chu "2" "0" "Cao ®é HK (m)")
(command "text" "style" "T3" Kh3chu "2" "0" "Kho¶ng c¸ch (m)")
); end of defun
(defun C:HK()
; Bat dau vao so lieu cac ho khoan
(setq Sohk ( getreal "\nCho sô cac hô khoan:"))
(setq so 1)
(while (<= so Sohk)
(setq Chuoi ( getstring ( strcat "\nCho tên HK thu " (rtos so 2 0 )":" )))
(setq Caodo ( getreal ( strcat "\nCho cao dô hô khoan thu " (rtos so 2 0 )":" )))
(setq Ktg ( polar Vitri (-(/ PI 2)) (/(*(- Batdau Caodo) 1000) TLD ) ))
(if (= so 1) (setq Khcach 0 ))
(setq KC (/ (* Khcach 1000 ) TLN))
(setq K1 ( polar Ktg 0 (+ 25 KC ) ) )
(setq Tg K1)
(setq Dosau ( getreal ( strcat "\nCho dô sâu hô khoan thu " (rtos so 2 0 )":" )))
(setq Lop( getint ( strcat " \nCho sô lop hô khoan thu " (rtos so 2 0 )":" )))
(setq D1( polar Tg 0 1.5 ))
(setq DC1( polar Tg (-(/ PI 2)) (* Dosau(/ 1000 TLD))) )
(setq DC2( polar DC1 0 1.5))
(setq Chuhk( Polar Kh1chu 0 (+ KC 42)))
(setq Chucaodo( Polar Kh2chu 0 (+ KC 34)))
(setq Gach( Polar Khch2 0 (+ KC 25 0.75)))
(setq Tam( Polar Gach (/ PI 2) 12 ))
(command "Color" "1")
(command "Circle" Tam "1.3" "")
(command "line" Tam "@0,1.3" "@0,-2.6" "")
(command "line" Gach "@ 0, -8" "")
( setq solop 1 )
( while ( <= solop Lop )
(command "Color" "1")
( setq Saulop( getreal ( strcat " \nCho dô sâu lop thu " (rtos solop 2 0 )":" )))
( setq Cddlop(- Caodo Saulop))
( setq D2( polar D1 (-(/ PI 2 )) (* Saulop (/ 1000 TLD) )))
( setq D3( polar D2 0 -1.5 ))
( setq Ghidosau( polar D2 0.5 1.2 ))
( setq Ghicaodo( polar Ghidosau 0 -2.8 ))
(if (= so 1)
( progn
( command "line" D3 "@ -10,0" "" )
(command "line" D2 "@ 3,0" "" )
)
)
(if (> so 1)
( progn
( command "line" D2 "@ 3,0" "")
(command "line" D3 "@ -2,0" "" )
)
)
(if (= so Sohk)
( progn
( command "line" D2 "@ 10,0" "" )
(command "line" D3 "@ -2,0" "" )
)
)
( command "Color" "7")
( command "Text" "style" "vn1" Ghidosau "2.0" "0" ( Rtos Saulop 2 1))
( command "Text" "Justify" "R" Ghicaodo "1.8" "0"(rtos Cddlop 2 2))
( setq solop( + 1 solop ))
); end of while
(command "Color" "7")
(command "line" tg DC1 "" )
(if ( >= Caodo 0) (command "text" "style" "T3" Chucaodo "2" "0" (Strcat "+"( Rtos Caodo 2 2) )))
(if ( < Caodo 0) (command "text" "style" "T3" Chucaodo "2" "0" (rtos Caodo 2 2 ) ))
(command "Color" "2")
(command "line" DC1 DC2 D1 "")
(command "Color" "7")
(command "Text" "style" "T3" Chuhk "2.5" "0" Chuoi )
(command "Color" "1")
(if (= so 1)
( progn
( setq DCD ( polar DC1 0 -10 ))
( command "line" tg "@ -10,0" DCD "" )
)
)
(if (= so Sohk)
( progn
( setq DCC ( polar DC2 0 10))
( command "line" D1 "@ 10,0" DCC "" )
)
)
(if (< so Sohk)
( progn
(setq Khcach1( getreal ( strcat "\nCho khoang cách hô khoan thu " (rtos (+ so 1) 2 0 ) " toi hô khoan truoc do (m):" )))
(setq Gachgiua( polar Gach (-(/ PI 2 )) 5 ))
(setq ChuKcach( polar Gachgiua 0 (-( / (* Khcach1 1000) 2 TLN) 2)))
(command "text" "style" "T3" ChuKcach "2" "0" (rtos Khcach1 2 1 ) )
)
)
(command "redraw" "")
(setq Khcach (+ Khcach Khcach1 ) )
(setq so(+ 1 so ))
); end of while so ho khoan
(setq Kh2 (polar Kh1 (-(/ PI 2)) 8))
(setq Kh3 (polar Kh2 (-(/ PI 2)) 8))
(setq Cuoi3 (polar Gach 0 10 ))
(setq Cuoi2 (polar Cuoi3 (/ PI 2) 8))
(setq Cuoi1 (polar Cuoi2 (/ PI 2) 8))
(setq Cuoi4 (polar Cuoi3 (-(/ PI 2)) 8))
(command "line" Kh2 Cuoi2 "")
(command "line" Kh3 Cuoi3 "")
(command "rectangle" Kh1 Cuoi4 )
(command "Color" "1")

); end of defun

PhanTuHuong
10-09-06, 09:52 PM
Mời các bạn tải file Matcat.dwg. Để tạo file GTmoi.lsp thì bạn có thể copy và dán vào Notepad, đuôi để *.lsp.

PhanTuHuong
15-09-06, 03:55 PM
Trong Notepad, khi em Save as, hộp Name mặc định *.txt. Em chỉ gõ GTmoi.lsp là xong thôi (để AutoCad tự nhận dạng ứng dụng).

Lưu ý: Bài không dấu lần sau là bị xóa đấy nhé!

ThanhThao
15-09-06, 09:04 PM
AutoLisp có cái hay là xử lý nhanh nhưng mệt nhất là mấy cái ngoặc, mở ra thì nhớ phải đóng vào, không thì không biết đâu mà tìm lỗi.
Thế mới có câu vui về LISP (Lost In Stupid Parentheses). Nói gì thì nói nhưng tìm hiểu sâu về AutoLisp (bây giờ là Visual Lisp) thì cũng rất hay đấy.

romeo84
16-09-06, 05:10 PM
Dạ em load đựoc rồi nhưng khi vào Cad và nhập số liệu như sau:
Ti le dung:1/100
Ti le ngang: 1/200
Cao do bat dau: 20
Chieu sau ho khoan max: 15
Đến đây thì báo lỗi là: ; error: Function cancelled
Em không hiểu mong thầy chỉ giúp

PhanTuHuong
17-09-06, 08:20 PM
Để chạy được ứng dụng trên, bạn phải sử dụng nền Matcat.dwg. Vì trong đó tôi đã khai bóa kiểu font, đường nét,... Nếu chạy trên file dwg chưa khai báo thì nó sẽ báo lỗi, vì nó không nhận được font có sẵn.

bucthucuoi
18-09-06, 01:20 PM
Em đã dùng thử chương trình của thầy rồi, rất hiệu quả khi vẽ mặt cắt. Bọn em đang gặp khó khăn khi thiết lập các mặt cắt mới trong bhatch. Thầy post code các mặt cắt mới giúp chúng em với.

PhanTuHuong
18-09-06, 04:54 PM
Em bổ sung các kiểu tô mặt cắt trong file Acad.pat


*DATLAP, Tô ký hiệu đất lấp
0,0,0,0,0.6,0.3,-0.3
0,0,0.1,0,0.6,0.3,-0.3
90,0.1,-0.1,0,0.6,0.3,-0.3
90,0.2,-0.1,0,0.6,0.3,-0.3
*BUN, Tô ký hiệu bùn
0,-0.2,0.1,-0.6,0.6,0.1,-1.1
0,0.1,-0.1,-0.6,0.6,0.1,-1.1
45,-0.3,0,0,0.8485281374,0.1414213562,-0.7071067812
45,0.2,-0.1,0.8485281374,0.8485281374,0.1414213562,-0.7071067812
135,0.1,-0.1,0,0.8485281374,0.2828427125,-0.5656854249
*Bazan, Tô ký hiệu đất Bazan
270, 0,0, .25,.433, .1,-.4
30, 0,0, .25,.433, .1,-.4
150, 0,0, .25,.433, .1,-.4
*Botket, Tô ký hiệu đá bột kết
0, 0,0, 0,1.866
330, 0,0, 1.866,3.2321, .5,-3.2321
300, .433,-.25, 3.2321,1.866, .5,-5.9641
270, .683,-.683, 1.866,3.2321, .5,-3.2321
240, .683,-1.183, 3.2321,1.866, .5,-5.9641
210, .433,-1.616, 1.866,3.2321, .5,-3.2321
210, 1.366,0, 1.866,3.2321, .5,-3.2321
240, .933,-.25, 3.2321,1.866, .5,-5.9641
300, .683,-1.183, 3.2321,1.866, .5,-5.9641
330, .933,-1.616, 1.866,3.2321, .5,-3.2321
0, 1.549,-.933, 3.2321,1.866, 1,-.866025,1,-.866025,1,-1.7321

PhanTuHuong
18-09-06, 04:58 PM
Tiếp tục

*BotketVoi, Tô ký hiệu đá bột kết vôi
0, 0,0, 0,1.866
330, 0,0, 1.866,3.2321, .5,-3.2321
300, .433,-.25, 3.2321,1.866, .5,-5.9641
270, .683,-.683, 1.866,3.2321, .5,-3.2321
240, .683,-1.183, 3.2321,1.866, .5,-5.9641
210, .433,-1.616, 1.866,3.2321, .5,-3.2321
210, 1.366,0, 1.866,3.2321, .5,-3.2321
240, .933,-.25, 3.2321,1.866, .5,-5.9641
300, .683,-1.183, 3.2321,1.866, .5,-5.9641
330, .933,-1.616, 1.866,3.2321, .5,-3.2321
0, .991,-.933, 3.2321,1.866, 1,-.616025
270, 3.9151,0, 1.866,3.2321, 1.866,-1.866
*CatketMin, Tô ký hiệu đá cát kết hạt mịn
0, 0,0, 0,1.866
330, 0,0, 1.866,3.2321, .5,-3.2321
300, .433,-.25, 3.2321,1.866, .5,-5.9641
270, .683,-.683, 1.866,3.2321, .5,-3.2321
240, .683,-1.183, 3.2321,1.866, .5,-5.9641
210, .433,-1.616, 1.866,3.2321, .5,-3.2321
210, 1.366,0, 1.866,3.2321, .5,-3.2321
240, .933,-.25, 3.2321,1.866, .5,-5.9641
300, .683,-1.183, 3.2321,1.866, .5,-5.9641
330, .933,-1.616, 1.866,3.2321, .5,-3.2321
0, 2.2465,-.933, 3.2321,1.866, .07,-1.563525,.07,-1.563525,.07,-3.12705

romeo84
22-09-06, 04:01 PM
Em cảm ơn thầy rất nhiều, cả phần tô mặt cắt em cũng chạy đc rồi

nvson
25-09-06, 02:21 PM
Chào anh Hướng.
Tôi cũng làm về ĐCCT; rất thích lập trình AutoLISP, VB, VBA, C++... nhưng khi lập chương trình vẽ mặt cắt vẫn còn gặp khó khăn về thuật toán nối các ranh giới địa chất lại với nhau (vì địa chất thường bất đồng nhất - thế mới khó chứ!).
Anh có thể giúp tôi được không?
Thanks!

PhanTuHuong
25-09-06, 05:26 PM
Cái bạn hỏi là tương đối khó. Các phần mềm chuyên nghiệp vẽ mặt cắt cũng đang bí, chỉ có LOGMAN đã giải quyết được. Nhưng đó lại là bí mật của họ, bạn có thể hỏi thêm ở www.geosoftvn.com (anh Long làm Admin).
Trong trường hợp các lớp đất cùng có thì ta có thể nối thuần túy đơn giản khi khai báo độ sâu ở dạng mảng. Tuy nhiên, việc nối này chỉ hợp lý khi cao độ lớp đất này không thay đổi nhiều, còn trường hợp biến đổi mạnh thì lại bất hợp lý.
Quan trọng nhất là ta phải tìm được thuật toán thì mới giải quyết được vấn đề hóc búa trên. ;;;;;;;;;;; ;;;;;;;;;;;

anh17d4
28-09-06, 07:18 PM
Thầy ơi dùng cái của thầy khó quá thấy up cho em 1 cái trong excel đi, cái đó dễ hơn.

PhanTuHuong
04-10-06, 04:47 PM
Vẽ mặt cắt ĐCCT tốt nhất là dùng Autocad, Excel không thể làm được đâu. Nếu có điều kiện bạn học thêm cả VBA for AutoCad thì hiệu quả sẽ cao hơn.

PhanTuHuong
05-10-06, 10:22 PM
Thêm 1 tiện ích vẽ hình trụ hố khoan, tuy không được hay lắm nhưng tôi cứ post lên cho các bạn tham khảo.
Cái này thì phải đọc kỹ hơn và không cần file gốc để chạy trên nền.

OverAC
02-11-06, 10:13 AM
Binh !
Anh co mot doan chuong trinh cua AutoCAD. khong biet post len GPE co tie^.n khong, Thay anh PhanTuHuong cung mot so ban khac cung co bai ve AutoCAD. neu Binh thay duoc thi post len dum anh de gop cung dien dan.
Cam on.
PhuocAF.
Em nhận được file của anh PhuocAF về AutoCAD, gởi lên để mọi người tham khảo

PhanTuHuong
28-02-07, 06:26 PM
em da dung thu chuong trinh cua thay,em thay ko lam ro dc dia hinh khi ve mc,va phai tu bhatch rat bat tien so voi chuong trinh cua chu vuong (tedi).co cach nao lam dc nhu cua chu vuong ko
neu mua chuong trinh cua chu vuong phai mat tien,ma em dang lam do an chua co tien

Em phải biết rằng AutoLisp chỉ là lập trình ứng dụng trong AutoCad nên có những hạn chế nhất định. Không thể so sánh ứng dụng nhỏ mang tính tiện ích với chương trình lớn được.
Để lập được CT như anh Vượng hay anh Long (Logman) thì phải tốn bao công sức, kinh nghiệm, trí tuệ,... Ngôn ngữ viết chương trình là Visual Basic. Các anh đấy bán tiền triệu thì cũng đúng thôi.

Tôi viết cái này đã lâu và đã nhìn được cái hạn chế của AutoLips nên không phát triển nữa, và có muốn cũng chẳng được như các chương trình trên.

Tôi khuyên nên sử dụng thành thạo Excel và AutoCad đã rồi sử dụng các tiện ích ứng dụng trong công việc, sau đó muốn phát triển gì thì phát triển. Không nên lệ thuộc vào các sản phẩm của người khác lập ra, chẳng may bị lỗi thì cứ loay hoay thôi. Mình đã sử dụng sản phẩm của người khác thì nên chấp nhận, nếu có khả năng thì tự bổ sung khắc phục những hạn chế. Phải làm Thợ tốt đã thì mới lên được Thầy em à.

Chú ý bài viết phải có dấu em nhé!

nguyen hoai thanh rung
09-03-07, 03:20 PM
em chưa hiểu cách tạo file GTmoi.*lsp. thầy giúp em với em làm giống như thầy mà không được

PhanTuHuong
10-03-07, 10:13 PM
Để tạo file ứng dụng AutoLisp, em có 2 cách sau đây:


- Cách cũ: mở cửa sổ Notepat (ngoài AutoCad) và soạn thảo như trong Word.

- Cách mới: hoàn thiện hơn, xây dựng trực tiếp trong AutoCad. Để vào cửa sổ Visual Lisp thì em vào menu Tools/AutoLisp/Visual Lisp Editor...Sau đó em cũng soan thảo như trong Word. Visual Lisp thể hiện màu sắc các dấu ngoặc và từ khóa cho dễ theo dõi.

Để hiểu hơn thì em mở bất cứ 1 file nào có tên *.lsp theo 2 cách trên.

vantin_pro
11-03-07, 02:25 PM
Thank you!

PhanTuHuong
13-03-07, 12:04 AM
Tôi khuyên các bạn không nên đi sâu vào AutoLisp vì khó phát triển. Nên học VBA for AutoCad thì hay hơn. Vì ngôn ngữ VBA rất gần với VB và được ứng dụng trong Office nên dễ phát triển. Khi bạn sử dụng VBA, bạn có thể tạo đối tượng Automation để chuyển đổi dữ liệu tự động, đặc biệt là giữa Excel và AutoCad (với dân kỹ thuật thì rất tuyệt đấy).

Hung.tthanh
07-07-07, 01:13 PM
đây là đoạn code sau khi mình sữa lại, khi vẽ không cần dùng file mẫu của thầy
bạn có thể tự sữa lại font chữ theo ý của bạn, ở các dòng đầu mặc định là .vntime
không cần phải chọn osnap off lúc đầu
mình đã sữa lại, không cần phải gõ lệnh HK khi vẽ xong thước
(xin lỗi vì sữa mà không được sự cho phép của thầy)

minhnc
07-07-07, 06:18 PM
Tôi khuyên các bạn không nên đi sâu vào AutoLisp vì khó phát triển. Nên học VBA for AutoCad thì hay hơn. Vì ngôn ngữ VBA rất gần với VB và được ứng dụng trong Office nên dễ phát triển. Khi bạn sử dụng VBA, bạn có thể tạo đối tượng Automation để chuyển đổi dữ liệu tự động, đặc biệt là giữa Excel và AutoCad (với dân kỹ thuật thì rất tuyệt đấy).
Em cũng đồng tình ý kiến này với bác. Trước đây lisp bọn em cũng được đào tạo cơ bản, môn học bắc buộc trong trường ĐH.Nhưng đúng là gian nan trăm đường khó để phát triển 1 soft chuyên nghiệp. VD tạo hộp thoại giao tiếp người dùng..., trong khi VBA for CAD chỉ mấy thao tác là OK.
ưu điểm: Gọn nhẹ, soạn thảo trên nhiều trình soạn soạn thảo mà bác win có.
Nhưng nói thế thôi nó cũng giúp em làm xong mấy cái đồ án thiết kế dụng cụ cắt rồi, vẽ các hàm số phức tạp chỉ có mấy dòng hay tạo vài cái lệnh tắt cho riêng mình để vẽ nhanh hơn chẳng hạn
Chọn ngôn ngữ lập trình là sự lựa chọn của mỗi người và em thì cái này giờ ko dùng nữa. VBA for CAD em thấy bác Hướng có nhiều ý tưởng hay, bác tiếp tục chia sẻ anh em nhé.

Van Sinh
07-07-07, 08:18 PM
Xin chào anh Phan Tu Huong
Tôi có việc muốn làm phiền anh chút.Chương trình của anh giới thiệu là một ứng dụng hay nhưng sao tôi không thể tải về được, có thể do mạng chỗ tôi không ổn lắm. Vì vậy anh có thể gửi cho file Matcat.zip va hinhtru.zip cho tôi theo email: sinhdctv_dcct@yahoo.com (sinhdctv_dcct@yahoo.comô)?
Xin cam on anh nhieu!

Trần Văn Bình
08-08-07, 01:30 PM
có file đính kèm

dungmo
18-09-07, 10:01 AM
Thầy Hướng kể thêm cho bọn em chút ít về các ứng dụng của excel trong Trắc Địa khảo sát với nhé .Em thấy trên diễn đàn ít nói về vấn đề này .Thanks !!!

PhanTuHuong
21-09-07, 10:41 AM
Thầy Hướng kể thêm cho bọn em chút ít về các ứng dụng của excel trong Trắc Địa khảo sát với nhé .Em thấy trên diễn đàn ít nói về vấn đề này .Thanks !!!

Tôi không thạo về lĩnh vực Trắc địa, đo đạc nhưng về nguyên tắc, lĩnh vực nào liên quan đến tính toán, xử lý dữ liệu thì đều dùng được Excel, cao hơn nữa là dùng VBA. Mà ngành Trắc địa bây giờ học VB thì bổ sung thêm về VBA nhanh lắm.

tequila2008
03-10-07, 09:23 AM
anh ơi cái file anh post lên có đuôi tv.vlx.em đọc không ra.
anh còn đuôi là lsp và dcl không cho em tham khảo với/
cám ơn anh nhiều

tequila2008
03-10-07, 09:35 AM
em có tải file tv.rar của anh Bình post lên. Nhưng đó là đuôi . vlx, em không hiểu lắm. Anh có file đuôi dcl và lsp không, cho em tham khảo chút. Cám ơn nhiều nha!--=0

aboutautolisp
03-11-07, 10:38 PM
Tôi khuyên các bạn không nên đi sâu vào AutoLisp vì khó phát triển. Nên học VBA for AutoCad thì hay hơn. Vì ngôn ngữ VBA rất gần với VB và được ứng dụng trong Office nên dễ phát triển. Khi bạn sử dụng VBA, bạn có thể tạo đối tượng Automation để chuyển đổi dữ liệu tự động, đặc biệt là giữa Excel và AutoCad (với dân kỹ thuật thì rất tuyệt đấy).

Tôi thì không nghĩ như thế, tôi thấy autolisp vẫn rất tuyệt, tất nhiên bây giờ nó có ARX và OBJ...(hay hơn). Autolisp vẫn dễ dùng, đơn giản và dễ chia sẻ.
Tôi thì cũng chỉ mới nghiên cứu Autolisp mới được gần 1 năm nay nên không dám bàn nhiều về nó. Thời gian qua tôi cũng đã tổng hợp được khá nhiều bài viết về lisp khá hay (khoảng 200 ứng dụng nhỏ) cũng viết thành phần mềm để cho mọi người dễ cài đặt và sử dụng.
Nếu được phép của các bạn tôi xin upload lên để các bạn dùng thử
(mà cái phần upload nằm ở đâu vậy nhỉ, xin lỗi vì mới biết đến diễn đàn.
À, nhân tiện đây cũng xin được chỉ giáo chút ít về VB, bác nào có tài liệu đầy đủ send cho mình một bản aboutautolisp@Gmai.com xin cảm ơn trước .)

PhanTuHuong
04-11-07, 08:54 PM
Gửi aboutautolisp: AutoLisp có những cái hay và hạn chế.

Hay: nội trú trong AutoCad nên luôn sẵn có, câu lệnh ngắn gọn, dung lượng ít. Là con đẻ của AutoDesk.

Hạn chế: phạm vi hoạt động hẹp, chỉ ứng dụng trong môi trường AutoCad. Không kết nối được với môi trường bên ngoài (VBA có chức năng Automation trao đổi với các ứng dụng bên ngoài). Tạo bảng điều khiển rất khó khăn (VBA hay VB thì rất đơn giản). Khả năng bảo mật rất kém (VBA cũng vậy). Ngôn ngữ lập trình không quần chúng như VB hay VBA vì có quá nhiều dấu ngoặc.

Đấy là những ý kiến của tôi, còn đâu tùy khả năng và sự yêu thích của mọi người mà bạn chọn ngôn ngữ phù hợp.

aboutautolisp
05-11-07, 03:19 PM
Gửi aboutautolisp: AutoLisp có những cái hay và hạn chế.

Hay: nội trú trong AutoCad nên luôn sẵn có, câu lệnh ngắn gọn, dung lượng ít. Là con đẻ của AutoDesk.

Hạn chế: phạm vi hoạt động hẹp, chỉ ứng dụng trong môi trường AutoCad. Không kết nối được với môi trường bên ngoài (VBA có chức năng Automation trao đổi với các ứng dụng bên ngoài). Tạo bảng điều khiển rất khó khăn (VBA hay VB thì rất đơn giản). Khả năng bảo mật rất kém (VBA cũng vậy). Ngôn ngữ lập trình không quần chúng như VB hay VBA vì có quá nhiều dấu ngoặc.

Đấy là những ý kiến của tôi, còn đâu tùy khả năng và sự yêu thích của mọi người mà bạn chọn ngôn ngữ phù hợp.


Cảm ơn PhanTuHuong, lâu nay mình vẫn thường hay làm việc cùng Autolisp, mình cũng thấy nó còn nhiều mặt hạn chế. Nhiều khi việc chuyển đổi dữ liệu từ AutoCad sang Excel thường gặp nhiều khó khăn. Phần mềm quản lý bản vẽ của mình vẫn còn nhiều mặt hạn chế do khả năng dao tiếp với Excel còn chưa có. Rất mong được sự chỉ giáo của các bạn. Chân thành cám ơn!

À, xin hỏi thêm. Mình muốn giới thiệu tới anh em bộ sản phẩm Autolisp dành cho Cad được không nhỉ? (Vì đây là diễn đàn Excel nên thấy có vẻ hơi lạc đề)

Hoanggiangchina
21-01-08, 02:23 PM
em đã dùng chương trình của Thầy nhung khong thực hiện được và luôn báo lỗi
Enter default object color [Truecolor/COlorbook] <7 (white)>: 7
Command: ; error: bad argument type: 2D/3D point: nil
Mong Thầy chỉ bảo cho

PhanTuHuong
21-01-08, 04:04 PM
Tôi chưa gặp lỗi này bao giờ (trước khi chạy phải đọc thật kỹ nhé!!!). AutoCad bạn cài đời bao nhiêu và có cài đầy đủ không vậy?

Hung.tthanh
01-09-08, 02:29 PM
Các bác cho em hỏi tí
Em mới làm quen với autolisp. Thấy người ta có thể compiler lsp sang fas. Vậy làm cách nào để có làm được điều đó??????

hoang_B
01-09-08, 03:14 PM
Mình tìm thấy có cái code này thôi! Không biết có giúp gì cho bạn không? Mình cũng không am hiểu gì về AutoLisp cả.
http://blog.cadkicks.com/post/Quick-little-routine-to-Convert-a-Directory-of-LSP-to-FAS.aspx
http://forums.augi.com/showthread.php?t=56593
Còn trang này thấy cũng có bàn rất nhiều về AutoLisp bạn hỏi thử xem!
http://www.ketcau.com/forum/showthread.php?t=1774&page=3
http://discussion.autodesk.com/thread.jspa?threadID=476765
Chúc bạn vui!

tigertiger
01-09-08, 04:26 PM
Các bác cho em hỏi tí
Em mới làm quen với autolisp. Thấy người ta có thể compiler lsp sang fas. Vậy làm cách nào để có làm được điều đó??????

Bạn sử dụng Visualip editor - thường cài đặt đầy đủ AUTOCAD thì có sẵn (Tool \ application \ Visualip .... -> project -- make application)

sẽ cho phép dịch sang file fas -> arx, hay vlx

giờ ng ta dùng file vlx

bạn tìm hỉu nhé

thanhtri2301
03-12-08, 01:34 PM
CÓ lisp nào mình pick vào đối tượng thì sẽ đưa đối tườn đó vào một khung mình định sẵn,xin a e góp ý kiến cho mình với,mà giữ tỉ lệ hoặc thay đổi tỷ lệ,mà mình kiểm soát đựôc

hautrungnguyen8x
20-03-09, 04:16 PM
cảm ơn thày về bài viết này
em cũng đang sử dụng autolip nhưng bất tiện quá
thầy có thể tìm cho em lỗi autolip đối với bài viết mà mục đích của em là in nhiều trang với các khoảng cách giống nhau không
code là:
(defun c:in()
(setq ortho (getvar "orthomode"))
(setvar "orthomode" 1)
(setq a (getint " \nSo Trang in : " ))
(setq DL (getpoint " \nGoc duoi ben trai " ))
(setq UR (getcorner dl " \nGoc tren ben phai " ))
(setq cl (getdist UR "\nCu ly giua 2 trang "))
(setq x1 (car DL ))
(setq y1 (cadr DL ))
(setq x2 (car UR ))
(setq y2 (cadr UR ))
(setq r ( - x2 x1))
(repeat a
(setq D1 (list x1 y1))
(setq D2 (list (+ r x1) y2 ))
(command "plot" "W" D1 D2 "" )
(setq x1 (+ r cl x1 ))
)
(setvar "orthomode" ortho)
(setq a nil dl nil ur nil cl nil x1 nil x2 nil y1 nil y2 nil r nil d1 nil d2 nil )
)
( Defun C:LCR()
(setq path (getstring "\n Duong dan den file chua cac file trac ngang (*.lsp) " ))
(setq number (getint "\n So cap trac ngang: " ))
(setq Dist (getreal "\n Khoang cach giua 2 cot: " ))
(setq so 0)
(setq ma 1)
(command "CMDECHO" "0")
(repeat number
(setq so (+ so 2 ))
(setq File (strcat path "\\" (itoa (- so 1)) ".lsp"))
(if (findfile (strcat path "\\" (itoa (- so 1)) ".lsp") ) (load file "") (setq ma 1) )
(setq File (strcat path "\\" (itoa so) ".lsp"))
(if (findfile (strcat path "\\" (itoa so) ".lsp") ) (load file "") (setq ma 0))
(if (= ma 1) (command "move" "all" "" (list 0 0) (list (* -1 Dist) 0)))
(setq ma 1)
)
(princ)
)

(


Em cảm ơn:
email: ng.tr.hau.dkt@gmail.com
nick: hautrungnguyen8x

PhanTuHuong
21-03-09, 02:57 PM
Lâu không dùng lisp quên mất, em vào www.cadviet.com hỏi, nhiều cao thủ món này lắm.

nvson
23-03-09, 03:25 PM
To: hautrungnguyen8x
Bạn bị thừa 1 dầu ngoặc cuối cùng "("

hautrungnguyen8x
25-03-09, 02:19 PM
em sựđung đến phần khia báo số hố khoan thì thấy có dòng lệnh comand: NIL và không sử dụng tiếp được nữa là lỗi vì sao thầy ơi

hautrungnguyen8x
25-03-09, 02:32 PM
To: hautrungnguyen8x
Bạn bị thừa 1 dầu ngoặc cuối cùng "("
không được bạn ơi
số trang in
góc trái
góc phai
cự ly 2 trang in
lôi~ bao là: unknow comand: nil
giúp tôi với

nvson
25-03-09, 03:41 PM
không được bạn ơi
số trang in
góc trái
góc phai
cự ly 2 trang in
lôi~ bao là: unknow comand: nil
giúp tôi với

Bạn thêm một vài câu lệnh nữa quy định tỷ lệ in, điểm nguồn... là OK.
Đây là code AutoLisp đã hoàn chỉnh, mình đã Test trên máy của mình OK.
(Tuy nhiên chỉ áp dụng cho Acad 14 vì sử dụng cú pháp lệnh PLOT của Acad 14).


Command: in_gpe
So Trang in : 2
Goc duoi ben trai
Goc tren ben phai
Cu ly giua 2 trang: 115
Nhap diem nguon <0,0,0>:
Plotted MM = Drawing Units/Scaled to Fit<1=1>:f

Chú ý:
- Khi nhập điểm nguồn, nếu Enter thì chương trình quy định điểm nguồn là 0,0,0
- Khi nhập tỷ lệ in, nếu muốn in Scaled to Fit thì nhập chữ "F".
- Trước khi in bạn nên chọn máy in, quy định về nét...

qhthong
01-04-09, 01:08 PM
Anh Hướng thân!
Em đã down file lisp: hinhtru.lsp về và đã Load trên CAD 2004
Em dùng lệnh Command: TSPT và nhập các số liệu, một đoạn thì xuất hiện thông báo sau
C:\Program Files\AutoCAD 2004\drv\
C:\Program Files\AutoCAD 2004\
*Invalid*
Command: tspt
Ky hieu ho khoan: h
Cao do mieng ho: 0.0
Muc nuoc ngam: 1.0
Do sau ho khoan: 30
Ngay hoan thanh: 30/03/09
"KH-spt.dwg": Can't find file in search path:
C:\Documents and Settings\QUANGHUYCO\My Documents\ (current directory)
C:\Documents and Settings\QUANGHUYCO\Application Data\Autodesk\AutoCAD
2004\R16.0\enu\support\
C:\Program Files\AutoCAD 2004\support\
C:\Program Files\AutoCAD 2004\fonts\
C:\Program Files\AutoCAD 2004\help\
C:\Program Files\AutoCAD 2004\support\color\
C:\Program Files\AutoCAD 2004\drv\
C:\Program Files\AutoCAD 2004\
*Invalid*
Cho em biết phải làm sao để khắc phục?
Em cũng đã tạo file KH-SPT trên đường dẫn: C:\Programs\AutoCAD2004\support\KH-SPT.dwg
Nhưng không khả thi, nhờ anh giúp em!
Cảm ơn Anh Hướng nhiều!

lsxinh
07-06-09, 11:01 PM
AutoLisp có cái hay là xử lý nhanh nhưng mệt nhất là mấy cái ngoặc, mở ra thì nhớ phải đóng vào, không thì không biết đâu mà tìm lỗi.
Thế mới có câu vui về LISP (Lost In Stupid Parentheses). Nói gì thì nói nhưng tìm hiểu sâu về AutoLisp (bây giờ là Visual Lisp) thì cũng rất hay đấy.

Visual Lisp thì khác gì vậy LISP vậy?
Nó tự đóng ngoặc khi bạn quên à?
Nêu so với VBA for CAD thì VIsual LIsp đứng ở vị trí nào?

hains81
03-06-10, 02:16 PM
Sao em không tải được file Matcat.zip vậy?

PhanTuHuong
04-06-10, 10:42 PM
Sao em không tải được file Matcat.zip vậy?

Tôi vẫn tải bình thường mà, nếu không được thì bạn copy nguyên đoạn code tôi đã viết ở baqì trước.

doandu86
14-08-10, 04:23 PM
cho mình hỏi 1 chút. mình thấy khi vẽ bằng lisp ở file mătcat.zip khi vẽ xong mặt cắt chưa có khung vì vậy khi in ra không biết đặt khung thế nào để giữ đúng tỉ lệ yêu cầu. Và cho mình hỏi trong chương trình này thì giấy in mặc định là khổ bao nhiêu vậy vì mình cũng không biết in ra giấy khổ bao nhiêu để cho ra tỉ lệ chính xác như mong muốn.
Thân!!

thao nghia
30-09-12, 09:00 AM
Em là thành viên mới. Em muốn sử dụn mathcad trên, nhưng trong cad 2007 có dc ko ak?
Xin mọi người chỉ giúp em với!!