Jump to content
InfoFile
Tác giả: phamthanhbinh
Bài viết gốc: 195716
Tên lệnh: td
Lisp Mắt lưới toạ độ


Hề hề hề,
Thật tình chư hiểu ý của bạn là chi.
Cái lisp bạn post lên dâu có cho chọn snap sờ niếc gì đâu . cái scale cũng đã mặc định là 500. Nó chỉ yêu cầu pick điể và nó ghi ra tọa độ tại điểm đó mà thôi.
Cái yêu cầu " lsp sẽ tự động chạy ra các mắt lưới như vậy.." là như thế nào??? bạn có thể nói rõ hơn không???
Phải chăng là bạn cần cái...
>>

Hề hề hề,
Thật tình chư hiểu ý của bạn là chi.
Cái lisp bạn post lên dâu có cho chọn snap sờ niếc gì đâu . cái scale cũng đã mặc định là 500. Nó chỉ yêu cầu pick điể và nó ghi ra tọa độ tại điểm đó mà thôi.
Cái yêu cầu " lsp sẽ tự động chạy ra các mắt lưới như vậy.." là như thế nào??? bạn có thể nói rõ hơn không???
Phải chăng là bạn cần cái như thế này:


Vì không rõ ý bạn nên mình đoán mò vậy, nếu chưa đúng xin chớ trách và hãy post cái đúng bạn cần lên nhé.
Hề hề hề.
<<

Filename: 195716_td.lsp
Tác giả: nguyentienthanhddksct
Bài viết gốc: 195706
Tên lệnh: xy
Lisp Mắt lưới toạ độ

Mình có lsp chèn mắt lưới toạ độ vào bản vẽ các thao tác của lsp là :
Đầu tiên: chọn Snap and grid điều chỉnh khoảng bao nhiêu tuỳ ý ( theo tỷ lệ vd: tỷ lệ 500 thì sẽ điều chỉnh snap là 50
còn tỷ lệ 1000 thì snap sẽ là 100)
sau đó gọi lệnh của lsp nó sẽ chèn mắt toạ độ từng điểm mình pick vào.

Giờ mình muốn mọi người chỉnh sửa giúp vẽ một đường...
>>
Mình có lsp chèn mắt lưới toạ độ vào bản vẽ các thao tác của lsp là :
Đầu tiên: chọn Snap and grid điều chỉnh khoảng bao nhiêu tuỳ ý ( theo tỷ lệ vd: tỷ lệ 500 thì sẽ điều chỉnh snap là 50
còn tỷ lệ 1000 thì snap sẽ là 100)
sau đó gọi lệnh của lsp nó sẽ chèn mắt toạ độ từng điểm mình pick vào.

Giờ mình muốn mọi người chỉnh sửa giúp vẽ một đường bao
sau đó gọi lệnh
chọn đường bao
chọn snap là bao nhiêu
lsp sẽ tự động chạy ra các mắt lưới như vậy..
Đây là lsp

;;;CT chich toa do tren ban do
;;;
(Defun Init()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setvar "LUPREC" 0)
(setq stl "standard")
(setq scale 500)
(setq hi (* 0.002 scale))
(setq wi 0.9)
)
(Defun Reinit()
(setvar "BLIPMODE" 1)
(setvar "CMDECHO" 1)
(setvar "LUPREC" 4)
(princ)
)
(Defun C:XY( / x y xx yy pt ptx pty)
(Init)
(setq pt (getpoint "Can lay toa do diem nao : "))
(setq y (car pt))
(setq x (cadr pt))
(command "_Line"
(list (- y (* 0.0025 scale)) x 0.0)
(list (+ y (* 0.012 scale)) x 0.0) ""
)
(command "_Line"
(list y (- x (* 0.0025 scale)) 0.0)
(list y (+ x (* 0.0025 scale)) 0.0) ""
)
(setq xx (rtos x 2))
(setq yy (rtos y 2))
(setq pt y)
(setq y x)
(setq x pt)
(setq ptx (list (+ x (* 0.001 scale)) (- y (* 0.0025 scale)) 0.0))
(setq pty (list (+ x (* 0.0025 scale)) (+ y (* 0.001 scale)) 0.0))
(Maketext ptx 0 xx)
(Maketext pty 90 yy)
(Reinit)
)
(Defun Maketext( diem ang string / etd)
(setq edt (list (cons 0 "text")
(cons 8 "GhichuTD")
(cons 62 5)
(cons 10 diem)
(cons 1 string)
(cons 7 stl)
(cons 40 hi)
(cons 41 wi)
(cons 50 (/ (* ang PI) 180.0))
)
)
(entmake edt)
)


đây là bước làm thủ công pick từng điểm một nó sẽ được như thế này
http://nk2.upanh.com/b2.s24.d3/ffb24373e25564a560efedb10265628f_43068092.t11.jpg

Thanks!
<<

Filename: 195706_xy.lsp
Tác giả: Tue_NV
Bài viết gốc: 195727
Tên lệnh: dstt
Giúp mình Lisp đánh số bản vẽ này với!


Tue_NV viết thêm cho bạn đây :

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

Chào 'funnyzui'
1./ Lisp CST lấy text style của đối tượng đầu tiên trong tập chọn ss (thiết lập bởi hàm ssget)
Ta không nên sử dụng cách này.
'funnyzui' hãy sử dụng theo cách này : Pick chọn 1 đối tượng -> lấy Text Style của đối tượng này -> thiết lập làm Text style hiện hành

2./ Lisp NST gọi 1 file hộp thoại mang tên là TEST.DCL -> Load dialog :CHU trong file TEST.DCL.
>>

Chào 'funnyzui'
1./ Lisp CST lấy text style của đối tượng đầu tiên trong tập chọn ss (thiết lập bởi hàm ssget)
Ta không nên sử dụng cách này.
'funnyzui' hãy sử dụng theo cách này : Pick chọn 1 đối tượng -> lấy Text Style của đối tượng này -> thiết lập làm Text style hiện hành

2./ Lisp NST gọi 1 file hộp thoại mang tên là TEST.DCL -> Load dialog :CHU trong file TEST.DCL.
Trong dialog CHU này có định nghĩa 1 hộp danh sách gọi là List_box. Trong List_box này chứa tên Text Style, font chữ của Text Style và chiều cao của Text Style đó (Toàn bản vẽ). Khi bạn pick chọn 1 phần tử trong Listbox và OK thì phần tử mang tên Text style đó làm style hiện hành.
File Lísp của bạn không chạy được do thiếu file TEST.DCL nên không chạy được

@Sony : Code chỉnh lại cho Sony đây :

Chúc các bạn 1 ngày cuối tuần vui vẻ
<<

Filename: 101057_noisuy.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 195785
Tên lệnh: ctpl
Chọn tất cả đối tượng nằm trong polyline khép kín hoặc wipe out

1). Bạn lấy lisp này cho dễ thấy:

2). Một vấn đề thì bạn không được mở 2 topic như thế, phạm quy đấy!

Filename: 195785_ctpl.lsp
Tác giả: Tue_NV
Bài viết gốc: 195792
Tên lệnh: nsuy
nội suy cao độ đường cong

Lisp Bác PhamThanhbinh và DoanVanHa viết chỉ nội suy cao độ tăng dần từ điểm đầu -> điểm cuối của 1 Curve -> chưa hợp lý lắm vì không phải lúc nào cũng như vậy, và khi nhìn vào 1 Curve thì rất khó nhận biết được đâu là điểm đầu điểm cuối

Lisp này Tue_NV viết đã khá lâu, dành cho Line, nay nâng cấp lên cho 1 Curve

Filename: 195792_nsuy.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 195793
Tên lệnh: ha
nội suy cao độ đường cong

Đây bạn!

Filename: 195793_ha.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 195797
Tên lệnh: ha
nội suy cao độ đường cong

Cho "nợ" mai Like This

Filename: 195797_ha.lsp
Tác giả: Tue_NV
Bài viết gốc: 195807
Tên lệnh: nsuy
nội suy cao độ đường cong

Bạn dùng lệnh UN để chỉnh số lẻ thập phân rồi dùng Lisp này :

Filename: 195807_nsuy.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 195822
Tên lệnh: wobl
Nhờ viết lisp tạo nhanh wipeout

Hề hề hề,
Mấy hôm lu bu chưa làm được. Nay làm thử cái củ lisp theo cái luận lý mà mình đã nói bữa trước để các bác tham khảo và góp ý.
Gửi các bác cái củ chuối này để tạo wipeout từ các Lwpolyline kín nằm trong các block. Các bác thử xem nó có quá chát không nhé. Hy vọng rằng nó không đến nỗi là đồ bỏ.

Chúc các bác vui vẻ.

Filename: 195822_wobl.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 195839
Tên lệnh: gcoor
Lisp Mắt lưới toạ độ

Hề hề hề,
Trước hết phải nói là bạn gọi là chỉnh sửa nhưng hoàn toàn không phải vậy. Yêu cầu của bạn hoàn toàn khác với cái lisp bạn cung cấp. Có chăng cái lisp đó chỉ làm được duy nhất một việc là ghi tọa độ, còn các công việc khác phải hoàn toàn làm mới bạn ạ.
Từ chỉnh sửa chỉ dùng khi cái lisp của bạn đã cơ bản hoàn thành yêu cầu đặt ra, chỉ còn sai sót...
>>

Hề hề hề,
Trước hết phải nói là bạn gọi là chỉnh sửa nhưng hoàn toàn không phải vậy. Yêu cầu của bạn hoàn toàn khác với cái lisp bạn cung cấp. Có chăng cái lisp đó chỉ làm được duy nhất một việc là ghi tọa độ, còn các công việc khác phải hoàn toàn làm mới bạn ạ.
Từ chỉnh sửa chỉ dùng khi cái lisp của bạn đã cơ bản hoàn thành yêu cầu đặt ra, chỉ còn sai sót chút đỉnh thì mới chỉnh sửa được chứ còn yêu cầu hoàn toàn khác như vậy mà bảo là chỉnh sửa thì bạn coi thường cái việc viết lisp này quá.
Bạn hãy tìm hiểu thêm một chút về lisp sẽ thấy nó không thể đơn giản như bạn suy nghĩ đâu.
Điều thứ hai mình muốn nói với bạn là bạn chỉ nên đưa ra yêu cầu bằng bản vẽ trình bày cụ thể đầu vào bạn có và đầu ra bạn cần. Việc còn lại nên để cho các lisper được quyền tự quyết. Như vậy có lẽ sẽ thuận lợi hơn cho người viết lisp vì những điều bạn nghĩ chưa hẳn đã là cách duy nhất để đạt được tyêu cầu của bạn. Để lisp có thể đúng với yêu cầu của bạn chỉ cần bạn thể hiện rõ những yêu cầu đó bằng bản vẽ là đủ.
Cuối cùng: Sau khi xem cái video bạn gửi, mình cũng thực sự là không hiểu rõ lắm cái yêu cầu của bạn. Tuy nhiên mình cứ đoán mò một chút và dựa vào một số kinh nghiệm của bản thân để viết ra cái lisp sau, trong đó có sử dụng một phần cái lisp bạn gửi để ghi tọa độ theo kiểu của bạn quen dùng. Có thể nó chưa hoàn toàn đáp ứng yêu cầu của bạn, song bạn hãy dùng thử và nếu thấy cần bổ sung gì thì post lên mình sẽ chỉnh sửa lại.
Hy vọng bạn sẽ dùng được.

Chúc bạn vui.
<<

Filename: 195839_gcoor.lsp
Tác giả: pdle
Bài viết gốc: 195903
Tên lệnh: an
Đóng băng layer
Tại sao đoạn code này của em không chạy được?

(defun c:an (/ ob ss)
(
setq ss (ssget "_X" (list(cons 8 "3D")))
ob (ssname ss 0)
)
(command "layfrz" ob)
(princ)
)

Filename: 195903_an.lsp
Tác giả: ssg
Bài viết gốc: 8779
Tên lệnh: cch
Viết Lisp theo yêu cầu

1) @vndes: bạn nêu còn thiếu 1 điều kiện. Pline không được chứa bất kỳ một cung tròn nào: code (42 . 0). Nếu không, hình tam giác có 3 góc bo tròn cũng sẽ... bị xem là lục giác!

2) @leolas: bạn thử code dưới đây trong nhiều trường hợp khác nhau xem có lỗi gì không? Riêng phần ghi kết quả, bạn không nói rõ quy cách ghi như thế nào. Ví dụ: chương trình đếm đuợc 3 hình tròn có bán...
>>

1) @vndes: bạn nêu còn thiếu 1 điều kiện. Pline không được chứa bất kỳ một cung tròn nào: code (42 . 0). Nếu không, hình tam giác có 3 góc bo tròn cũng sẽ... bị xem là lục giác!

2) @leolas: bạn thử code dưới đây trong nhiều trường hợp khác nhau xem có lỗi gì không? Riêng phần ghi kết quả, bạn không nói rõ quy cách ghi như thế nào. Ví dụ: chương trình đếm đuợc 3 hình tròn có bán kính r= 5.0 thì ghi:
- 3 ?
- Circles = 3 ?
- There are 3 circles with radius = 5.0 ?
-...?
- Cỡ chữ, font chữ?

Nhưng nói chung phần ghi kết quả rất đơn giản, nếu bạn biết một chút về lisp sẽ tự làm được. Bạn có thể sử dụng 3 giá trị nhận được trong các biến sau và trình bày text theo ý thích:
- ctyp: loại
- r: bán kính
- n: số lượng đếm được



Chú ý:
- Chương trình chỉ áp dụng cho các hình lục giác đều được tạo nên bởi lệnh Polygon hoặc lệnh Pline với tùy chọn c (close)
- Các hình lục giác bị explode, nằm trong block hoặc đã biến thành region sẽ không được tính
- Dòng code màu đỏ ssg mới sửa lại cho gọn hơn so với lần post trước
<<

Filename: 8779_cch.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 195923
Tên lệnh: gcoor
Lisp Mắt lưới toạ độ

Hề hề hề,
Nó cứ hỏi lại là do đoạn code đó nằm trong hàm con (init) mà mỗi lần ghi tọa độ bằng hàm (xy) lại phải lặp lại nó một lần.
Để tránh điều này bạn có thể đưa các hàm con (init) và (reinit) ra khỏi hàm con (xy) và đặt hàm (init) ở đầu hàm chính hàm (reinit) ở cuối hàm chính là ổn. Cụ thể như sau:

Chúc bạn vui.

Filename: 195923_gcoor.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 195874
Tên lệnh: dmla
Lisp chuyển Layer về thành Bylayer

Sửa lại:

Filename: 195874_dmla.lsp
Tác giả: Tue_NV
Bài viết gốc: 195970
Tên lệnh: test
Lisp block nhiều đối tượng 1 lúc

Quick code cho ban

Filename: 195970_test.lsp
Tác giả: nguyentuyen6
Bài viết gốc: 195953
Tên lệnh: mbl
Lisp block nhiều đối tượng 1 lúc
Mình chỉnh sửa tý trong mấy cái lisp cũ của mình
Chú ý: Lisp này chỉ dùng cho HCN, layer của HCN phải là 1 layer riêng của nguyên HCN bao đó.


;tao block cac doi tuong trong khung rec rieng biet

(defun C:mbl (/ slayer tenlayer ss en toadodinh rpt2 rpt4 ssrec bn bn1)
(vl-load-com)
(setq OldEcho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "undo"...
>>
Mình chỉnh sửa tý trong mấy cái lisp cũ của mình
Chú ý: Lisp này chỉ dùng cho HCN, layer của HCN phải là 1 layer riêng của nguyên HCN bao đó.


;tao block cac doi tuong trong khung rec rieng biet

(defun C:mbl (/ slayer tenlayer ss en toadodinh rpt2 rpt4 ssrec bn bn1)
(vl-load-com)
(setq OldEcho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "undo" "be")
(princ "\n From nguyentuyen6 @CadViet ")
(princ "\n Cai Express-Tools truoc khi su dung!!!")
;chon mau layer
(setq slayer (car (entsel "\nChon Layer duong bao: "))
tenlayer (cdr (assoc 8 (entget slayer)))
ss (ssget "x" (list (cons 8 tenlayer)))
i
0
; bn (rtos (fix (* (getvar "CDATE") 100000)) 2 0) ; block ban ve
bn (getstring "\nTen Block:" )
)
(command "ZOOM" "e")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(while (< i (sslength ss))
(setq en (ssname ss i))
(setq toadodinh (acet-geom-vertex-list en)
rpt2 (nth 1 toadodinh)
rpt4 (nth 3 toadodinh)
)
(setq ssrec (ssget "_W" rpt4 rpt2))
(setq bn1 (strcat bn (rtos i 2 0)))
(taoblock ssrec rpt2)
(setq i (1+ i))
)
(setvar "cmdecho" 1)
(command "undo" "e")
)
(defun taoblock (ssbv ispoint)
(if (not (tblsearch "block" bn1))
(command "_.BLOCK" bn1 ispoint ssbv "" "_.INSERT" bn1 ispoint 1 1 0)
(command "_.BLOCK" bn1 "y" ispoint ssbv
"" "_.INSERT" bn1 ispoint 1
1 0
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


<<

Filename: 195953_mbl.lsp
Tác giả: duy782006
Bài viết gốc: 196008
Tên lệnh: ttbl
Lisp block nhiều đối tượng 1 lúc

Chôm của bác Tuệ sửa cho bạn đây.


(DEFUN c:ttbl()
(setq XX (ssget))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname XX L))
(setq DTM (entget DT))
(setq TEXT (cdr (assoc 10 DTM)))
(Command "copybase" TEXT DT "" "_pasteblock" TEXT "erase" DT "")
(setq L (1+ L))
)
(Princ)
)

Filename: 196008_ttbl.lsp
Tác giả: Tue_NV
Bài viết gốc: 196005
Tên lệnh: test
Lisp block nhiều đối tượng 1 lúc

Bạn có thể nhấn Like this ^_^
Lisp chỉ Lọc Polyline. Bạn tự lọc hình bất kì nhé và Lisp sẽ ... làm việc

Filename: 196005_test.lsp
Tác giả: ketxu
Bài viết gốc: 196033
Tên lệnh: ccl
Lisp chuyển Layer về thành Bylayer
Tức là đối tượng A đang nằm ở layer "A", ấn 1 -> Chọn đối tượng A -> Layer "A" sẽ mang màu 1 ?
Nếu vậy thì khái niệm Bylayer trong bài toán bạn đưa ra hơi thừa
Ví dụ minh họa ý bạn như sau, bạn xem có phải không :
1 - Không dùng Reactor :

(defun c:ccl (/ m dt la enLa)
(princ "\nChon mau muon doi :")
(setq
m (acad_colordlg 3)
enLa (entget...
>>
Tức là đối tượng A đang nằm ở layer "A", ấn 1 -> Chọn đối tượng A -> Layer "A" sẽ mang màu 1 ?
Nếu vậy thì khái niệm Bylayer trong bài toán bạn đưa ra hơi thừa
Ví dụ minh họa ý bạn như sau, bạn xem có phải không :
1 - Không dùng Reactor :

(defun c:ccl (/ m dt la enLa)
(princ "\nChon mau muon doi :")
(setq
m (acad_colordlg 3)
enLa (entget (tblobjname "LAYER" (cdr (assoc 8 (entget (car (entsel "\nChon doi tuong chua layer can doi mau: ")))))))
)
(entmod (subst (cons 62 m) (assoc 62 enLa) enLa))
(princ)
)

<<

Filename: 196033_ccl.lsp

Trang 85/330

85