Jump to content
InfoFile
Tác giả: Tue_NV
Bài viết gốc: 99853
Tên lệnh: ktra
Viết lisp theo yêu cầu [phần 2]
Chào bác PhamThanhBinh và bạn Sony :
Bạn hãy thử đoạn Code này :
Đoạn code này kiểm tra điểm P có nằm trên P1P2 hay không. Vấn đề nội suy còn lại -> hy vọng Sony tự giải quyết được



@Bác PhamThanhBinh :
Chế độ ortho, osmode nếu không ở chế độ mặc định thì ta làm cho nó theo ý của mình. Có thể là trong quá trình viết Lisp, hoặc là trong quá trình chạy Lisp,...
>>
Chào bác PhamThanhBinh và bạn Sony :
Bạn hãy thử đoạn Code này :
Đoạn code này kiểm tra điểm P có nằm trên P1P2 hay không. Vấn đề nội suy còn lại -> hy vọng Sony tự giải quyết được



@Bác PhamThanhBinh :
Chế độ ortho, osmode nếu không ở chế độ mặc định thì ta làm cho nó theo ý của mình. Có thể là trong quá trình viết Lisp, hoặc là trong quá trình chạy Lisp, user cũng có thể thiết lập nó. Code trên là 1 ví dụ
Chúc bác luôn vui, khoẻ nữa. :cheers:
<<

Filename: 99853_ktra.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 184800
Tên lệnh: getpr
HỎI>Cách xuất tọa độ file cad sang text

Hề hề hề,
Như vậy, theo yêu cầu củ bạn thì cái lisp mình viết cơ bản đả đạt được, chỉ khác một vài điểm như sau:
1/- Lisp đã hoàn toàn tự động lấy các đối tượng trong vùng chọn của bạn. bạn có thể thêm vào báo nhiêu đường chăng nữa lisp vẫn chỉ chạy một lần là ra cái bảng thống kê cho bạn, với đầy đủ các đối tượng dạng đường (gồm line, lwpolyline,...
>>

Hề hề hề,
Như vậy, theo yêu cầu củ bạn thì cái lisp mình viết cơ bản đả đạt được, chỉ khác một vài điểm như sau:
1/- Lisp đã hoàn toàn tự động lấy các đối tượng trong vùng chọn của bạn. bạn có thể thêm vào báo nhiêu đường chăng nữa lisp vẫn chỉ chạy một lần là ra cái bảng thống kê cho bạn, với đầy đủ các đối tượng dạng đường (gồm line, lwpolyline, circle, polyline) còn các đường khác như arc ellipse, spline mình chưa viết nhưng co lẽ không quá khó khăn để làm với cấu trú tương tụ của lisp.
2/- Mình xuất riêng rẽ tọa độ x, y ,z, nay bạn muốn xuất cả cụm củng không thành vấn đề nhưng lưu ý bạn rằng không dùng cái dấu phẩy để ngăn cách các tọa độ x, y, z được vì như vậy khi xuất sang file csv nó sẽ hiểu là tách cột ra bạn ạ. Do vậy mình sẽ để một khoảng trắng ngăn cách giữa các tọa độ này, bạn có đồng ý không???
3/- Mình sẽ bổ sung phần xử lý các đường spline, arc và ellipse để bạn dùng thử.
Chịu khó chờ một chút nghen.

Của bạn đây:

Chúc bạn vui.
Chú ý mình vẫn để hai giá trị chỉ thuộc tính laỷe và màu của đối tượng trong líp. Nếu bạn không thích thì có thể thoải mái xóa nó đi.
<<

Filename: 184800_getpr.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 184805
Tên lệnh: ha
Lisp thay đổi giá trị trong block thuộc tính



Lisp thay đổi 1 thuộc tính của tất cả Att_Block được chọn theo tất cả giá trị của Text/Mtext được chọn.
Số lượng Block và Text được chọn phải bằng nhau.
Thứ tự tính theo thứ tự chọn. Chú ý điều này kẻo nó lấy râu ông nầy cắm cằm bà nọ nhé!

Filename: 184805_ha.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 184877
Tên lệnh: cawt
Lisp thay đổi giá trị trong block thuộc tính


Hề hề hề,
Lại làm trâu chậm rồi.
Mình không thạo lắm về vla-, vlax-, vl- , nên viết cái ni theo cái kiểu cắn dần. Nhờ các bác test thử cói nhé. Có lẽ nó sẽ chậm hơn của bác DoanVanHa, nhưng lỡ làm rối chả nhẽ vứt đi nên cứ post vào đây để ai thấy khoái thì dùng và cũng để nhờ bạn Cnatona30002000 test giùm. (mình không có các block thuộc tính như của bạn để test)
Hề...
>>

Hề hề hề,
Lại làm trâu chậm rồi.
Mình không thạo lắm về vla-, vlax-, vl- , nên viết cái ni theo cái kiểu cắn dần. Nhờ các bác test thử cói nhé. Có lẽ nó sẽ chậm hơn của bác DoanVanHa, nhưng lỡ làm rối chả nhẽ vứt đi nên cứ post vào đây để ai thấy khoái thì dùng và cũng để nhờ bạn Cnatona30002000 test giùm. (mình không có các block thuộc tính như của bạn để test)
Hề hề hề,

Xin lỗi mọi người nếu như bài này làm phiền mọi người nhé.
Hề hề hề,
<<

Filename: 184877_cawt.lsp
Tác giả: gia_bach
Bài viết gốc: 99651
Tên lệnh: addlay
Viết lisp theo yêu cầu [phần 2]



Còn vấn đề này "các hình chữ nhật có thể bị nổ ra thành line và có thể bị hở nhỏ nữa" thì pótay !
Bạn thử LISP này :

Filename: 99651_addlay.lsp
Tác giả: Tue_NV
Bài viết gốc: 99781
Tên lệnh: hbo
Viết lisp theo yêu cầu [phần 2]

Bạn romeo thử cái này nhé :

Filename: 99781_hbo.lsp
Tác giả: gia_bach
Bài viết gốc: 101498
Tên lệnh: cwf
Viết lisp theo yêu cầu [phần 2]

Bạn thử Lisp thay đổi Width Factor của Text

Filename: 101498_cwf.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 102669
Tên lệnh: blwipe
Viết lisp theo yêu cầu [phần 2]

Hề hề hề,
Đúng như bác ThaiStreetz đã nói, bạn đang làm một việc giống như "mua đường" vậy. Tuy nhiên có thể bạn khoái vì nhiều lý do nên mình cho bạn vay ít xìn để thuận tiện cho cái việc mua này nhé...

Nhớ là bạn phải tạo trước một polyline kín cho cái vùng bạn lấy làm block nhé. Có vậy mới có cái cho bạn chạy lisp, bằng không nó dễ ngoẻo lắm. Hề hề...
>>

Hề hề hề,
Đúng như bác ThaiStreetz đã nói, bạn đang làm một việc giống như "mua đường" vậy. Tuy nhiên có thể bạn khoái vì nhiều lý do nên mình cho bạn vay ít xìn để thuận tiện cho cái việc mua này nhé...

Nhớ là bạn phải tạo trước một polyline kín cho cái vùng bạn lấy làm block nhé. Có vậy mới có cái cho bạn chạy lisp, bằng không nó dễ ngoẻo lắm. Hề hề hề.....
Chúc bạn vui.
<<

Filename: 102669_blwipe.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 88992
Tên lệnh: lbd
Viết lisp theo yêu cầu [phần 2]

Chào bạn SVBA1608 và các bác trên diễn đàn,
Theo đề nghị của bạn, mình dựa vào cái lisp của bác Hoành và bổ sung chút chút để chạy thử. Kết quả là lisp chạy ve ve, cho ra được cả hai trường hợp bạn mong muốn, song rất tiếc là hai cái kết quả nó lại chả khớp nhau tẹo nào. Nguyên nhân thì mình vẫn chưa rõ nên mạo muội post nó lên đây, mong bác Hoành và các bác khác chỉ bảo...
>>

Chào bạn SVBA1608 và các bác trên diễn đàn,
Theo đề nghị của bạn, mình dựa vào cái lisp của bác Hoành và bổ sung chút chút để chạy thử. Kết quả là lisp chạy ve ve, cho ra được cả hai trường hợp bạn mong muốn, song rất tiếc là hai cái kết quả nó lại chả khớp nhau tẹo nào. Nguyên nhân thì mình vẫn chưa rõ nên mạo muội post nó lên đây, mong bác Hoành và các bác khác chỉ bảo thêm.
Theo mình nghĩ có thể do cái Boundary nó loằng ngoằng sao đó nhưng mà không hiểu nên chưa thể khắc phục. Mình post lên đây cả file lisp và file kết quả chạy ra để mọi người ngâm cứu thử
Đây là file lisp:


Trong code này, phần lập bảng vẫn giũ nguyên như code bác Hoành đã viết nên chắc không có sai sót gì nhiều. Phần code viết thêm để ghi kết quả vào bản vẽ chắc có sai sót nhưng mình chưa hiểu rõ.

Đây là file CAD đã chạy thử từ bản vẽ do bạn SVBA1608 cung cấp
http://www.cadviet.com/upfiles/2/test1.dwg

Còn một vấn đề nữa là khi chạy lisp lần đầu với bản vẽ của bạn svba1608, không hiểu sao nó không cho kết quả ngay mà báo lỗi, tuy nhiên cứ để nguyên chạy lại lần thứ hai thì nó cho kết quả đẹp như mơ vậy. Điều này mình đã thử khá nhiều lần với ngay cả cái lisp gốc của bác Hoành cũng vậy. Nếu bác nào có kinh nghiệm và có thể giải thích được điều này thì thật là cám ơn lắm lắm.
Sau khi mình bổ sung cái phần ghi kết quả lên bản vẽ vào giữa lisp, trước khi chạy lập bảng thì nó lại chạy phe phé ngay từ phát đầu tiên các bác ạ. hề hề , cứ như có ma vậy.
Rất mong các bác có nhiều kinh nghiệm chỉ dẫn thêm.
<<

Filename: 88992_lbd.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 184966
Tên lệnh: btk
Đo chiều dài và ghi ra text

Hề hề hề,
Không biết cái này đã vừa ý bạn chưa?? Cần nhắc lại để bạn nhớ là cái yêu cầu của bạn hoàn toàn khác với yêu cầu của bạn chủ thớt nên mình không thể cải chỉnh cái lisp của bác Ketxu cho bạn mà phải cấu trúc lại lisp mới. nếu bạn không post file dwg lên thì chắc hẳn sẽ có nhiều người lầm lẫn và sẽ phải làm đi làm lại mà vẫn không thể như ý bạn...
>>

Hề hề hề,
Không biết cái này đã vừa ý bạn chưa?? Cần nhắc lại để bạn nhớ là cái yêu cầu của bạn hoàn toàn khác với yêu cầu của bạn chủ thớt nên mình không thể cải chỉnh cái lisp của bác Ketxu cho bạn mà phải cấu trúc lại lisp mới. nếu bạn không post file dwg lên thì chắc hẳn sẽ có nhiều người lầm lẫn và sẽ phải làm đi làm lại mà vẫn không thể như ý bạn được. bạn hãy rút kinh nghiệm cho các lần post bài sau nhé.
Chúc bạn vui.
Đây là code:

Hề hề hề.
<<

Filename: 184966_btk.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 184299
Tên lệnh: dpl
Lisp vẽ đường thẳng nhập chiều cao va khoảng cách liên tục


Tôi chỉ sửa theo y/c của bạn, còn việc +-*/ là lấy theo lisp của bạn, nếu không đúng y/c thì bạn tự sửa vì tôi không hiểu bản chất ý đồ của bạn.

Filename: 184299_dpl.lsp
Tác giả: ketxu
Bài viết gốc: 184982
Tên lệnh: btk
Thống kê chiều dài đối tượng

- Thống kê chiều dài đối tượng chọn
- Xuất ra bảng CAD - Excel

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

Chào bác Bình.
Quả thật việc sắp xếp này đối với em là rất khó vì chưa làm trường hợp này bao giờ. Cái khó ở đây là sắp xếp lại trật tự của selection set. em đã làm riêng trong phần (defun sapxep () ....). Các bác nghiên cứu xem có thể giúp được cho em không. Em muốn sắp xếp đơn giản là từ trên xuống dưới từ trái qua phải thôi bác ạ.
code mới đây đã fix ý 2 và 3 của...
>>

Chào bác Bình.
Quả thật việc sắp xếp này đối với em là rất khó vì chưa làm trường hợp này bao giờ. Cái khó ở đây là sắp xếp lại trật tự của selection set. em đã làm riêng trong phần (defun sapxep () ....). Các bác nghiên cứu xem có thể giúp được cho em không. Em muốn sắp xếp đơn giản là từ trên xuống dưới từ trái qua phải thôi bác ạ.
code mới đây đã fix ý 2 và 3 của Bác Tue_VN.

<<

Filename: 112529_tdd.lsp
Tác giả: ketxu
Bài viết gốc: 184951
Tên lệnh: test
Hiện Grips nhóm đối tượng trước - sau khi thực hiện lệnh

- Sử dụng Reactor để làm hiện Grips của các đối tượng trước và sau khi thực hiện lệnh

Filename: 184951_test.lsp
Tác giả: Tue_NV
Bài viết gốc: 76600
Tên lệnh: cpp
Chọn đối tượng sau lệnh Copy

Chào study_forever
Lisp trên đã được Tue_NV hoàn thiện lại :

Chúc các bạn một buổi sáng tốt lành
Edit : Chức năng Download Lisp File của diễn đàn bị lỗi -> bạn hãy nhấn nút Reply bài viết này của Tue_NV -> copy hết code này về chạy thử nhé
:bigsmile:

Filename: 76600_cpp.lsp
Tác giả: Tue_NV
Bài viết gốc: 185145
Tên lệnh: brd
?Needle or Cannula Depth. A number of insertion depths that allow the needle or cannula to be used on a variety of fatty tissue levels are available. Two or three depths are available and a doctor can provide guidance on which one to use.

Lisp BRD theo như yêu cầu của bạn :

Khi chạy, Lisp yêu cầu :
1. Chọn Dimension
2. Chọn Các điểm nằm trên Dim Line,

PS :Code trên cũng chưa thật hoàn chỉnh lắm.

Filename: 185145_brd.lsp
Tác giả: 840244
Bài viết gốc: 185153
Tên lệnh: fe
[nhờ sửa 1 dòng code nhỏ xíu !
Cái dòng code để lưu giá trị cũ của em nó bị lỗi( Em tự copy từ lisp khác sang ), anh nào chỉnh giúp em với ạ !

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=60254&pid=183638&st=0&#entry183638
(defun C:fe ( / ss d);
(cond ( (and (setq ss (ssget (list (cons 0 "*LINE,ARC,CIRCLE"))))

;(setq d (getreal "\nLineType Scale :"))
>>
Cái dòng code để lưu giá trị cũ của em nó bị lỗi( Em tự copy từ lisp khác sang ), anh nào chỉnh giúp em với ạ !

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=60254&pid=183638&st=0&#entry183638
(defun C:fe ( / ss d);
(cond ( (and (setq ss (ssget (list (cons 0 "*LINE,ARC,CIRCLE"))))

;(setq d (getreal "\nLineType Scale :"))
(or *d* (setq *d* 1.0))
(setq d (getreal (strcat "\nLineType Scale <" (rtos *d* 2) ">: "))) ;;====> l&#224; c&#225;i d&#242;ng n&#224;y &#7841; !
(if (not d) (setq d *d*) (setq *d* d))
(vl-load-com)
(setq ss (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
)
(vlax-for obj ss (vla-put-LinetypeScale obj d))
)
((princ "\nError!"))
)
(princ)
)

<<

Filename: 185153_fe.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 185198
Tên lệnh: bggrey bgwhite bgblack bgt
Lisp đổi màu nền của cad


Đây bạn! Lisp này tôi mót được của By Jimmy Bergmark (thank you). Lệnh BGT. Gõ BGT: chuyển đen qua trắng, gõ tiếp BGT: chuyển trắng qua đen. Cứ thế tiếp tục...

Filename: 185198_bggrey_bgwhite_bgblack_bgt.lsp
Tác giả: gia_bach
Bài viết gốc: 185211
Tên lệnh: fe
[nhờ sửa 1 dòng code nhỏ xíu !

Thêm 1 cách khác :

(defun C:fe ( / d)
(if
(and
(ssget (list (cons 0 "*LINE,ARC,CIRCLE")))
(or *d* (setq *d* 1.0))
(if (setq d (getreal (strcat "\nLineType Scale <" (rtos *d* 2) ">: ")))
(setq *d* d)
(setq d *d*) )
(vl-load-com)
)
(vlax-for obj (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-put-LinetypeScale obj...
>>

Thêm 1 cách khác :

(defun C:fe ( / d)
(if
(and
(ssget (list (cons 0 "*LINE,ARC,CIRCLE")))
(or *d* (setq *d* 1.0))
(if (setq d (getreal (strcat "\nLineType Scale <" (rtos *d* 2) ">: ")))
(setq *d* d)
(setq d *d*) )
(vl-load-com)
)
(vlax-for obj (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-put-LinetypeScale obj d))
(princ "\nError!") )
(princ))

<<

Filename: 185211_fe.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 185198
Tên lệnh: bgwhite bgblack bgt
Lisp đổi màu nền của cad


Đây bạn! Lisp này tôi mót được của By Jimmy Bergmark (thank you). Lệnh BGT. Gõ BGT: chuyển đen qua trắng, gõ tiếp BGT: chuyển trắng qua đen. Cứ thế tiếp tục...

Filename: 185198_bgwhite_bgblack_bgt.lsp

Trang 69/330

69