Jump to content
InfoFile
Tác giả: phamthanhbinh
Bài viết gốc: 198267
Tên lệnh: getppl
Nhờ viết lisp tạo nhanh wipeout

Hề hề hề,
Gửi bạn đoạn code dùng để chuyển LWpolyline có chứ phần đoạn cong về LWpolyline gồm toàn phân đoạn thẳng và từ đó bạn có thể áp dụng vào cái lisp của mình.

Hy vọng bạn hài lòng.

Filename: 198267_getppl.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 198462
Tên lệnh: xscale xsc
Làm sao để viết chữ trên cung Elips ?

Lisp cũ thì thiếu hàm nên đừng dùng.
Lisp mới có lỗi khi down về nên tôi đã sửa lại ở dưới. Tôi đã test bản vẽ của bạn OK.

Filename: 198462_xscale_xsc.lsp
Tác giả: phamngoctukts
Bài viết gốc: 117224
Tên lệnh: mcs
Viết lisp theo yêu cầu [phần 2]


Của bạn đây. Cám ơn bạn vì lisp này cũng rất hay.

Filename: 117224_mcs.lsp
Tác giả: vndesperados
Bài viết gốc: 3238
Tên lệnh: tht
Tác giả: Nguyen Hoanh
Bài viết gốc: 5132
Tên lệnh: nth
Lisp chọn 2 text cho ra 1 điểm toạ độ



Lệnh là NTH, bạn chọn luôn 1 lúc 9 text, chương trình sẽ tự động nhận biết các đối tượng nằm ở đâu.

Filename: 5132_nth.lsp
Tác giả: ssg
Bài viết gốc: 10761
Tên lệnh: sl2
Lệnh slide với cách chọn mặt phẳng khác!!

Lần này chắc hoàn toàn đúng với ý đồ của bạn:



Nhưng bạn vẫn còn nợ mình 1 câu trả lời?

Filename: 10761_sl2.lsp
Tác giả: nataca
Bài viết gốc: 35679
Tên lệnh: vd
list SETDIM

đây cái bạn cần

Filename: 35679_vd.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 198984
Tên lệnh: ha
Tác giả: gia_bach
Bài viết gốc: 32032
Tên lệnh: haveadump textdimheight kcdim
Cách xác định kích thước thật của dimension ?


Hàm (vlax-dump-object obj ) để view tất cả CSDL của 1 đối tượng

Hàm (vlax-get-property object property) để lấy 1 thuộc tính của đối tượng.




Filename: 32032_haveadump_textdimheight_kcdim.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 199160
Tên lệnh: jim bergmark
In nhiều bản vẽ trong model mà chỉ cần 1 layout


Lisp lấy danh sách các máy in.

Filename: 199160_jim_bergmark.lsp
Tác giả: nataca
Bài viết gốc: 31503
Tên lệnh: boj
lisp chặt rời các đối tượng làm hai phần

Đối tượng đa tuyến thì cậu dùng lisp TRAITIMSAT034 . Còn nếu đối tượng chặt là block thì dùng thêm cái này.

Filename: 31503_boj.lsp
Tác giả: xuandao0708
Bài viết gốc: 72377
Tên lệnh: cxf
Nhờ các bác giải thích dùm tai sao lisp không thể chuyển qua file .vlx
Em mới mót được 1 số lisp mà không thể chuyển qua file .vlx được, mong các Bác giải thích dùm.



Tiện đây các Bác cho em hỏi thêm về lisp UnAnonall này là tại sao khi mình add vào coment của cad để khởi động mặc định thì nó báo lỗi như sau:
Loading UnAnon v1.0 .....; error: malformed list on input
Nhưng khi mình mở cad load file lisp thì nó lại chạy được. Mong nhận sự hồi âm...
>>
Em mới mót được 1 số lisp mà không thể chuyển qua file .vlx được, mong các Bác giải thích dùm.



Tiện đây các Bác cho em hỏi thêm về lisp UnAnonall này là tại sao khi mình add vào coment của cad để khởi động mặc định thì nó báo lỗi như sau:
Loading UnAnon v1.0 .....; error: malformed list on input
Nhưng khi mình mở cad load file lisp thì nó lại chạy được. Mong nhận sự hồi âm của các Bác sớm. Thank các Bác nhiều.
<<

Filename: 72377_cxf.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 199233
Tên lệnh: gifpr
viết lisp lấy tọa độ điểm và tên điểm

Hề hề hề,
Cái bạn đoán chả sai tí nào.
Lỗi là do cái cấu tạo acad_proxy_entity của bạn chả hề có các mã điểm và số thứ tự điểm như bản vẽ trước bạn đã post. Đồng thời cấu tạo của nó khác hẳn, vị trí tương đối của diểm đặt text cao độ so với circle không giống như bản vẽ trước.
Vì thế nên khi lọc text nó đã loại tuốt luốt và không hề có được...
>>

Hề hề hề,
Cái bạn đoán chả sai tí nào.
Lỗi là do cái cấu tạo acad_proxy_entity của bạn chả hề có các mã điểm và số thứ tự điểm như bản vẽ trước bạn đã post. Đồng thời cấu tạo của nó khác hẳn, vị trí tương đối của diểm đặt text cao độ so với circle không giống như bản vẽ trước.
Vì thế nên khi lọc text nó đã loại tuốt luốt và không hề có được các biến bạn cần và hàm acet-str-find báo lỗi bạn ạ.
Bạn thử dùng lisp đã sửa dưới đây để cho cái bản vẽ của bạn gửi xem đã thỏa mãn yêu cầu chưa nhé.

Nên nhớ rằng nếu có được thì mình cũng chỉ đảm bảo nó dùng được cho hai loại đối tượng Acad_proxy_entity của hai bản vẽ bạn đã post mà thôi. Các Acad_proxy_entity khác mà bạn có thì mình không biết nên bạn hãy tự điều chỉnh nếu có thể khi gặp. Còn nếu không điều chỉnh được thì hãy post lên diễn đàn mình sẽ xem xét xem có thể điều chỉnh được không. Lỗi không phải của lisp bạn nhé.
<<

Filename: 199233_gifpr.lsp
Tác giả: Thaistreetz
Bài viết gốc: 199289
Tên lệnh: mkb
- Tạo Dynamic block (Block động) bằng Lisp
Topic này được lập theo nhu cầu của bạn Skywings - cần tạo code để tích hợp luôn các block cần dùng vào trong code của chương trình của bạn ấy, trong đó có cả dynamic block hay còn gọi là block động. Mình lập topic trả lời cho skywings cũng đồng thời để chia sẻ phương pháp cho bác nào có nhu cầu và để chúng ta thảo luận,
Bác nào có phương pháp hay hơn muốn chia sẻ thì thảo luận tại...
>>
Topic này được lập theo nhu cầu của bạn Skywings - cần tạo code để tích hợp luôn các block cần dùng vào trong code của chương trình của bạn ấy, trong đó có cả dynamic block hay còn gọi là block động. Mình lập topic trả lời cho skywings cũng đồng thời để chia sẻ phương pháp cho bác nào có nhu cầu và để chúng ta thảo luận,
Bác nào có phương pháp hay hơn muốn chia sẻ thì thảo luận tại đây tránh làm loãng topic giới thiệu chương trình của Skywings.


Cho đến thời điểm này có thể nói 1 chắc chắn rằng chúng ta không có phương pháp để tạo block động bằng lisp, hay kể cả là vba, trong help cũng nói rõ điều này. các ngôn ngữ khác thì mình không rõ. Vậy mình tạo nó bằng cách nào? thực tế nó rất đơn giản nếu chúng ta nghĩ khác cách làm thông thường 1 chút.

Ở đây mình tận dụng khả năng đọc, ghi và lưu 1 tập tin bất kì ở định dạng không mã hóa của lisp. Và may mắn là Autocad cung cấp cho chúng ta khả năng đọc và ghi 1 file bản vẽ ra 2 loại định dạng:
- DWG: Định dạng mã hóa mà mặc định chúng ta hay dùng.
- DXF: Định dạng mở, không mã hóa, có thể đọc được cấu trúc của nó bằng bất kỳ công cụ đọc văn bản nào. Định dạng này do chưa được biên dịch nên tải vào cad chậm hơn dwg, đồng thời dung lượng file thường cao hơn.
Thay vì cố gắng tìm cách make 1 dynamic block ngay trong bản vẽ thì mình sẽ make 1 file dxf chứa dynamic block đó rồi sau đó tải nó vào bản vẽ.

Ý tưởng là vậy. mình cụ thể hóa nó bằng các bước như sau:
- Tạo 1 dynamic block bằng cad theo ý muốn cho chương trình của bạn và lưu nó lại với định dạng dxf. Vì cad có khả năng tương thích ngược với các bản cad đời trước khá tốt nên lời khuyên là chọn định dạng dxf của phiên bản 2007 để lưu. Nó nhẹ hơn mấy thằng ku em nó sau này. dxf của cad2007 được chọn cũng là vì đây là bản cad đầu tiên hỗ trợ dynamic block.
- Dùng lisp mình viết dưới đây để đọc nội dung file dxf trên và tạo ra code để make.
- kết quả thu được là 1 file lisp, nội dung của nó là 1 hàm con có thể make được block của bạn.

;;; Make Dynamic block by Lisp
;;; Copyright 2012 Thaistreetz - Cadviet.com
(defun c:mkb (/ lst openfile path)
(setq path (getfiled "Chon File block" "" "dxf" 8))
(setq openfile (open path "r"))
(while (setq readline (read-line openfile)) (setq lst (cons (strcat "\"" (acet-str-replace "\"" "\\\"" readline )"\"") lst)))
(close openfile)
(setq path (getfiled "Nhap ten File lisp" "" "lsp" 1))
(setq openfile (open path "w"))
(write-line "(defun insert-block (point scale / temp file lst)" openfile)
(write-line "(setq lst (list" openfile)
(foreach ll (reverse lst) (write-line ll openfile))
(write-line "))" openfile)
(write-line "(setq temp (strcat (string-right-trim 8 (findfile \"acad.dcl\")) \"temp.dxf\")" openfile)
(write-line " file (open temp \"W\"))" openfile)
(write-line " (foreach ll lst (write-line ll file))" openfile)
(write-line " (close file)" openfile)
(write-line " (command \"-insert\" temp point scale 0)" openfile)
(write-line " (vl-file-delete temp))" openfile)
(close openfile))

PS:
- Ngoài Dynamic block, bằng phương pháp này bạn có thể tạo được các đối tương khác của cad mà chúng ta chưa có phương pháp tạo theo cách thông thường. Ví dụ các linetype có chứa true type font, hay các bảng đối tượng...
- Có thể bạn sẽ hoảng nếu đọc cấu trúc của hàm con được tạo, vì nó...dài lê thêê...ê...ê. Kệ nó, cái này bạn có thể yên tâm vì lisp xử lý chuỗi (string) rất nhanh. Con máy cùi bắp của mình xử lý 1 file dưới 1Mb đủ nhanh để không cảm thấy khó chịu vì độ trễ trong khi file tạo ra chỉ khoảng vài chục Kb đến vài trăm Kb là cùng.
- Lisp trên mình sử dụng command để insert block, nếu có thể hãy thay thế bằng các hàm vla để tránh lỗi có thể sảy ra khi insert block
<<

Filename: 199289_mkb.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 199290
Tên lệnh: ha
chuyển text các cao độ trong Autocad sang file dạng *.txt

Khi post bài lên forum bạn nên giản lược file để cho nó nhẹ nhất nhưng vẫn nói lên đủ ý nghĩa. Ý của Ketxu là file cad bạn chỉ nên để lại vài ba điểm tượng trưng, cũng như file txt cũng thế (file txt của bạn lên tới mấy ngàn điểm lận).
Về lisp này thì viết được.
Đây: lisp xuất các điểm của phần mềm Softdesk (kiểu Block_Att) ra file txt.

Filename: 199290_ha.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 199387
Tên lệnh: elale
Lisp lấy cao độ và khoảng cách lẻ giữa các đỉnh của pline

Hề hề hề,
Redsea_tq đi vắng, bạn dùng thử cái này coi đã ưng ý chưa nhé.
Mình test thử trên file bản vẽ bạn gửi thì cao độ ra đúng nhưng chiều dài từng khúc trên pline có sai lệch nhất định. Có lẽ là do bạn đã tính toán bằng tay nên sinh ra sai số. Còn mình tin là lisp chạy không sai.
Do bạn không nói rõ các yêu cầu nên mình tạm thời để bạn tự chọn chiều cao text, vị...
>>

Hề hề hề,
Redsea_tq đi vắng, bạn dùng thử cái này coi đã ưng ý chưa nhé.
Mình test thử trên file bản vẽ bạn gửi thì cao độ ra đúng nhưng chiều dài từng khúc trên pline có sai lệch nhất định. Có lẽ là do bạn đã tính toán bằng tay nên sinh ra sai số. Còn mình tin là lisp chạy không sai.
Do bạn không nói rõ các yêu cầu nên mình tạm thời để bạn tự chọn chiều cao text, vị trí đặt text sao cgo vừa mắt bạn. Nếu bạn có thể xác định vị trí của các text theo một quy luật nào đó thì mình có thể chỉnh sửa điều này.
Đây chỉ là lisp sơ bộ bước đầu theo ý phỏng đoán của mình về yêu cầu của bạn nên có thể chưa thực sự đạt yêu cầu. muốn hoàn thiện nó bạn cần phải nói rõ hơn các yêu cầu của bạn mới được.
Rất mong bạn test thử và cho ý kiến.

Chúc bạn vui.
<<

Filename: 199387_elale.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 199395
Tên lệnh: xpbl2t
chuyển text các cao độ trong Autocad sang file dạng *.txt

Hề hề hề,
Phải chăng bạn muốn cái này:

Hề hề hề,
cái này là mình xem voi nên có thể đoán chửa trúng ý bạn. Mình chỉ thử chơi để bạn thấy đã đúng ý chửa, nếu chửa đúng thì lại làm lại chứ chả biết bạn muốn gì sốt.
Block point của bạn có tới 3 thuộc tính mà mỗi thuộc tính lại có điểm chèn khác nhau. Do vậy mình cứ doán bừa rằng thuộc tính...
>>

Hề hề hề,
Phải chăng bạn muốn cái này:

Hề hề hề,
cái này là mình xem voi nên có thể đoán chửa trúng ý bạn. Mình chỉ thử chơi để bạn thấy đã đúng ý chửa, nếu chửa đúng thì lại làm lại chứ chả biết bạn muốn gì sốt.
Block point của bạn có tới 3 thuộc tính mà mỗi thuộc tính lại có điểm chèn khác nhau. Do vậy mình cứ doán bừa rằng thuộc tính point sẽ đặt tại điểm bạn cần và giá trị của thuộc tính này là số thứ tự của điểm.
Hề hề hề, nếu có đoán sai mong bạn chớ chửi cái thằng mù này nhé.
Còn cái thuộc tính DESc mình chửa biết dùng nó vào việc chi bạn ạ.
Dù trúng hay trật cũng mong bạn test vài phát rồi cho mình biết ý kiến nhé. Nếu có thể được mình sẽ chỉnh sửa lại theo ý của bạn.
Chúc bạn vui.
<<

Filename: 199395_xpbl2t.lsp
Tác giả: Tue_NV
Bài viết gốc: 51865
Tên lệnh: lo
Cần nhờ viết list về kích thước

Đúng như lời của bác PhamThanhBinh nói. Có lẽ rằng bạn Doanvinh_hai đã chưa nói hết ý của bạn.
điểm chuẩn (tức là cái gốc toạ độ 0,0,0 của toạ độ tương đối) đó nằm ở đâu?
Mình đã bổ sung vào đoạn Lisp này thêm một câu : Chon diem moc chuan 0,0,0 cua toa do tuong doi
Tức là bạn xác định cái điểm chuẩn 0,0,0 của toạ độ tương đối để tâm mọi cái đường tròn...
>>

Đúng như lời của bác PhamThanhBinh nói. Có lẽ rằng bạn Doanvinh_hai đã chưa nói hết ý của bạn.
điểm chuẩn (tức là cái gốc toạ độ 0,0,0 của toạ độ tương đối) đó nằm ở đâu?
Mình đã bổ sung vào đoạn Lisp này thêm một câu : Chon diem moc chuan 0,0,0 cua toa do tuong doi
Tức là bạn xác định cái điểm chuẩn 0,0,0 của toạ độ tương đối để tâm mọi cái đường tròn đều xác định dựa trên điểm chuẩn này mà xác định.
Và mình đã dùng thêm lệnh Donut để vẽ vào ngay chính cái gốc toạ độ tươpng đối để bạn dễ xác định.
Còn nếu bạn muốn vẽ với toạ độ tuyệt đối thì chỉ cần nhập 0,0,0 vào dòng này Chon diem moc chuan 0,0,0 cua toa do tuong doi
thì Lisp sẽ chạy ra kết quả cho bạn và tâm mọi đường tròn sẽ xác định theo toạ độ tuyệt đối

Trên tinh thần giúp cho người cũng chính là giúp cho mình để tự hoàn thiện bản thân. Bạn Doanvinh_hai hãy nêu ra yêu cầu của bạn thêm 1 lần nữa. Và hãy nêu thật rõ ràng, chi tiết, mạch lạc. Mình sẽ hoàn thiện đoạn Lisp này.
<<

Filename: 51865_lo.lsp
Tác giả: Tue_NV
Bài viết gốc: 52978
Tên lệnh: lte
Vẽ 1 đường Line(có 2 đoạn) sau đó cho phép người dùng nhập ký tự vào 2 text1, text2

Lẽ ra bạn nên nói thêm các thuuọc tính của các layer "PLine trich dan" ; "Text do rong tren" ; "Text do rong duoi" để người viết Lisp viết thêm trong đoạn Code nữa.
Đây là đoạn code theo ý bạn

Filename: 52978_lte.lsp
Tác giả: tdvn
Bài viết gốc: 55145
Tên lệnh: vespl
Autolisp 3D

Ðây là file dữ liệu mẫu dạng TEXT, cứ mỗi dòng trống là kết thúc một spline : http://www.cadviet.com/upfiles/spline.txt
Còn ðây là code, bạn tham khảo xem ðýợc không. Mình không có nhiều thời gian nên có lẽ cũng không tốt lắm

Filename: 55145_vespl.lsp

Trang 89/330

89