Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết Lisp theo yêu cầu

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

Anh làm ơn viết giúp em một lisp có chức năng gán giá trị của text cho elevation của pline.

cú pháp lệnh: gõ tên lệnh chương trình yêu cầu chọn text sau đó yêu cầu chọn pline cần gán text vào elevation.

(nếu có thể gán được 1 text cho nhiều pline thì càng tốt)

em cám ơn anh nhiều!

lệnh là T2H (text to H)

(defun c:t2h()
 (setq ent (car (entsel "\nChon text cao do: ")))
 (redraw ent 3)
 (princ "\nchon cac pline: ")
 (setq
   ss (ssget '((0 . "LWPOLYLINE")))
   new (cons 38 (atof (cdr (assoc 1 (entget ent)))))
   i 0
 )
 (redraw ent 4)
 (repeat (sslength ss)
   (setq
     x (ssname ss i)
     i (1+ i) 	  
   )
   (entmod (subst new (assoc 38 (setq tt (entget x))) tt))
 )
 (princ)
)

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
lệnh là T2H (text to H)

(defun c:t2h()
 (setq ent (car (entsel "\nChon text cao do: ")))
 (redraw ent 3)
 (princ "\nchon cac pline: ")
 (setq
   ss (ssget '((0 . "LWPOLYLINE")))
   new (cons 38 (atof (cdr (assoc 1 (entget ent)))))
   i 0
 )
 (redraw ent 4)
 (repeat (sslength ss)
   (setq
     x (ssname ss i)
     i (1+ i) 	  
   )
   (entmod (subst new (assoc 38 (setq tt (entget x))) tt))
 )
 (princ)
)

Lisp chạy tốt lắm, cám ơn 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
Tại sao nhỉ?

 

Khẳng định với bạn 2 điều:

- Không thể tối ưu lisp đó được nữa vì nó đã quá tối ưu.

- Lisp này dành để chọn một loạt đối tượng chứ không phải chọn theo cặp.

 

Tôi cũng đã test, mọi người dùng cũng không sao.

 

Có 2 khả năng:

1. Mật độ điểm của bạn quá lớn, khoảng cách các điểm quá bé so với kích thước text.

2. Text của bạn Justify không phải là Left.

 

Bạn có thể upload file của bạn lên diễn đàn được không?

Trích dẫn(vbao @ Aug 15 2007, 02:26 PM)

cảm ơn anh Hoành, anh cho tôi hỏi thêm: chương trình chỉ cho chọn từng cặp đối tượng (text +point) một, nếu chọn nhiều cặp đối tượng tôi gặp lỗi khi move xảy ra tình trạng vị trí text 1 sẽ hoán đổi cho vị trí text 2

 

Bạn Hoành xem lại giúp tôi chạy bị y như bạn Vbao nêu ra.

Đây là file bản vẽ: điểm có cao độ khác với giá trị ghi trên text (EXP: t=6.01 trong khi cao độ z=3.23)

http://www.cadviet.com/upfiles/MTPtest_1.dwg

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 cũng đã tìm chủ đề về Wipeout trên diễn đàn nhưng chưa được như mong muốn.

Tôi muốn biến 1 đường tròn thành 1 Wipeout. Thực ra, đường tròn cũng tạo bởi các đoạn thẳng, nên có thể chia nó ra thành nhiều đoạn thẳng nhỏ, sau đó Join chúng lại thành 1 Pline kín và dùng lệnh Wipeout. Độ mịn của đường tròn lúc đó sẽ phụ thuộc vào số khoảng chia mà ta chọn.

Như vậy Lisp sẽ yêu cầu chọn đối tượng là đường tròn cần chuyển. Chọn số khoảng chia.và sau đó thực hiện.

Mong các bác giúp đỡ!

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 cũng đã tìm chủ đề về Wipeout trên diễn đàn nhưng chưa được như mong muốn.

Tôi muốn biến 1 đường tròn thành 1 Wipeout. Thực ra, đường tròn cũng tạo bởi các đoạn thẳng, nên có thể chia nó ra thành nhiều đoạn thẳng nhỏ, sau đó Join chúng lại thành 1 Pline kín và dùng lệnh Wipeout. Độ mịn của đường tròn lúc đó sẽ phụ thuộc vào số khoảng chia mà ta chọn.

Như vậy Lisp sẽ yêu cầu chọn đối tượng là đường tròn cần chuyển. Chọn số khoảng chia.và sau đó thực hiện.

Mong các bác giúp đỡ!

Theo tôi bạn ko cần tìm lisp!

Bạn dùng lệnh _polygon ; dòng nhắc :Enter number of sides <4>: 400(số nguyên này là tuỳ bạn nhập vào, nhấn enter.

dòng nhắc tiếp theo : Enter an option [inscribed in circle/Circumscribed about circle] <I>: C (chọn C cho đa giác nằm ngoài vòng tròn)

Thế là bạn có 1 pline ; kế tiếp dùng lệnh wipeout mà bạn đã biết.

Bạn xem hình minh hoạ bên dưới

 

mhwptron.jpg

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
Trích dẫn(vbao @ Aug 15 2007, 02:26 PM)

cảm ơn anh Hoành, anh cho tôi hỏi thêm: chương trình chỉ cho chọn từng cặp đối tượng (text +point) một, nếu chọn nhiều cặp đối tượng tôi gặp lỗi khi move xảy ra tình trạng vị trí text 1 sẽ hoán đổi cho vị trí text 2

 

Bạn Hoành xem lại giúp tôi chạy bị y như bạn Vbao nêu ra.

Đây là file bản vẽ: điểm có cao độ khác với giá trị ghi trên text (EXP: t=6.01 trong khi cao độ z=3.23)

MTPtest_1.dwg

Xin lỗi và cảm ơn bạn đã phát hiện ra lỗi của lisp. Quả thật ban đầu tôi nhầm với lisp khác.

 

Bạn hãy quay lại mục move text với dấu chấm thập phân để download lại. Tôi đã sửa bài viết của tô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
Tôi cũng đã tìm chủ đề về Wipeout trên diễn đàn nhưng chưa được như mong muốn.

Tôi muốn biến 1 đường tròn thành 1 Wipeout. Thực ra, đường tròn cũng tạo bởi các đoạn thẳng, nên có thể chia nó ra thành nhiều đoạn thẳng nhỏ, sau đó Join chúng lại thành 1 Pline kín và dùng lệnh Wipeout. Độ mịn của đường tròn lúc đó sẽ phụ thuộc vào số khoảng chia mà ta chọn.

Như vậy Lisp sẽ yêu cầu chọn đối tượng là đường tròn cần chuyển. Chọn số khoảng chia.và sau đó thực hiện.

Mong các bác giúp đỡ!

Bạn dùng lệnh Pol với number of size lớn một chút (khoảng 20-30) để vẽ 'đường tròn'. Đỡ phải load lisp.

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 dùng lệnh SB trong bộ ACV 1.0

 

Em cũng đã từng biết ACV 1.0.

Nhưng chỉ khi chèn block rồi mới sử dụng đc lish a. Hoành ah

Em muốn có 1 lish khi nhập lệnh insert, block tự scale theo tỷ lệ dim hiện hành

Mong anh giúp em!

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 cũng đã từng biết ACV 1.0.

Nhưng chỉ khi chèn block rồi mới sử dụng đc lish a. Hoành ah

Em muốn có 1 lish khi nhập lệnh insert, block tự scale theo tỷ lệ dim hiện hành

Mong anh giúp em!

Bạn thử lisp của gia_bach chưa?

Hy vọng là đúng ý bạn.

(command "insert" "cot" (getpoint "\nDiem dat :") (getvar "dimscale") "" (getangle "\nGoc xoay :"))

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 cũng đã tìm chủ đề về Wipeout trên diễn đàn nhưng chưa được như mong muốn.

Tôi muốn biến 1 đường tròn thành 1 Wipeout. Thực ra, đường tròn cũng tạo bởi các đoạn thẳng, nên có thể chia nó ra thành nhiều đoạn thẳng nhỏ, sau đó Join chúng lại thành 1 Pline kín và dùng lệnh Wipeout. Độ mịn của đường tròn lúc đó sẽ phụ thuộc vào số khoảng chia mà ta chọn.

Như vậy Lisp sẽ yêu cầu chọn đối tượng là đường tròn cần chuyển. Chọn số khoảng chia.và sau đó thực hiện.

Mong các bác giúp đỡ!

Thường tôi dùng cách như của meohoang và cũng đã đề cập ở các bài về Wipeout trước rồi nhưng nếu bạn thíc dùng lisp thì đây:

 

(Defun c:wipc ()

(setq luubatdiem (getvar "osmode"))

(setvar "osmode" 0)

 

(Princ "\nHay chon CIRCLE :")

(setq XX (ssget '((0 . "CIRCLE"))))

 

(setq L 0)

(setq M (sslength XX))

(while (< L M)

(setq DT (ssname XX L))

(setq DT (entget DT))

(setq TAM (cdr (assoc 10 DT)))

(setq BANKINH (cdr (assoc 40 DT)))

 

(command ".polygon" "30" TAM "" BANKINH)

(command ".wipeout" "" "last" "y")

 

(setq L (1+ L))

)

 

(setvar "osmode" luubatdiem)

 

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")

(Princ)

)

 

Gỏ lệnh : wipc

Chọn các hình tròn cần tạo (nhiều hình 1 lúc cumh4 được).

Enter là xong. Mặc định đa giác tạo ra có 30 cạnh.

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 hiện đang Ctác tại 1 CTy Thiết kế điện, thường xuyên vẽ các MC mương chôn cáp điện . Nếu cứ dùng lệnh Copy sau đó chỉnh sữa thì rất ư là nhàm chán, các bác có thể viết giúp 1 lisp để vẽ mặt cắt này được không , hình mặt cắt kèm theo các kích thước có dấu ? là cần thay đổi, các đường kính ống cũng vậy, các bác có thể thêm hatch cát lấp vào bên trong các layer vẽ thì tùy các bác . Xin cám ơn trước ( file kèm theo MC.pdf

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 hiện đang Ctác tại 1 CTy Thiết kế điện, thường xuyên vẽ các MC mương chôn cáp điện . Nếu cứ dùng lệnh Copy sau đó chỉnh sữa thì rất ư là nhàm chán, các bác có thể viết giúp 1 lisp để vẽ mặt cắt này được không , hình mặt cắt kèm theo các kích thước có dấu ? là cần thay đổi, các đường kính ống cũng vậy, các bác có thể thêm hatch cát lấp vào bên trong các layer vẽ thì tùy các bác . Xin cám ơn trước ( file kèm theo MC.pdf

Mặt cắt nào cũng có 12 ống?

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
Nói ra ngại quá ... em là lính mới nên có bác nào chỉ em cách add LSP , VLX ... nhúng cào cad ko ...

Nhân tiện chỉ cho em cách dấu hay xóa cái ... à bấm f2 thì hiện ra những tác vụ đã làm , muốn bản vẽ của ta không ai coppy được thí sao nhỉ ,,, hì :s_big:

Dễ ợt!

Bạn vào Tool/Load Applycation sau đó chọn tời file *.lsp hoặc *.VLXđể tải lên.

Nếu LISP có cả hộp thoại *.DCL bạn phải vào Tools/Option. Chọn thẻ File sau đó bạ add đuòng dẫn tới thư mục chứa file *DCL.

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
Multi đây:

 

(defun c:ND (/ Ename Elist Msg Oldtext Oldlist Newtext Newlist)
 (defun ss2ent	(ss / sodt index lstent)
   (setq
     sodt  (cond
      (ss (sslength ss))
      (t 0)
    )
     index 0
   )
   (repeat sodt
     (setq ent	   (ssname ss index)
    index  (1+ index)
    lstent (cons ent lstent)
     )
   )
   (reverse lstent)
 )

 (prompt "\nChon chu muon chinh.")
 (setq ssEname (ssget '((0 . "TEXT"))))
 (if (not ssEname)
   (prompt "\nChua chon duoc doi tuong.")
   (progn
     (prompt "\nChon chu lam chuan.")
     (setq lstEname (ss2ent ssEname))
     (setq Newtext (car (entsel)))
     (setq Newtext (entget Newtext))
     (setq Newtext (assoc 1 Newtext))
     (setq Newtext (cdr Newtext))
     (setq Newlist (cons '1 Newtext))

     (foreach Ename lstEname
(setq Elist (entget Ename))
(setq Oldlist (assoc 1 Elist))
(setq Oldtext (cdr Oldlist))
(setq Elist (subst Newlist Oldlist Elist))
(entmod Elist)
     )
   )					; end progn
 )					; end if
 (princ)
)

 

 

Muốn Multi thì bạn chỉ cần thêm vồng lặp While là xong thô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
Bạn thử lisp của gia_bach chưa?

 

Không phải. Em muốn lish scale tất cả các block chèn vào bản vẽ theo tỷ lệ dim hiện hành

Chứ không chỉ có mỗi block tên "cot"

Gõ lệnh insert, đánh tên 1 block bất kỳ có trong bản vẽ

Lish sẽ scale block đó theo tỷ lệ dim hiện hành

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 Nguyen Hoanh!

E có sử dụng lisp mà a đã viết để sắp xếp các lớp dim theo 1 khoảng cách xác định.

TRong lisp của a là 270 cho các lớp dim cách nhau.

Đoạn lisp đó cũng rất hoàn chỉnh nhưng a có thể cho người dùng chọn khoảng cách các lớp dim thay vì cứ 270.

VD: khoảng cách các lớp dim của em có lúc là 200,300, hay một số bất kỳ.

Chân thành cảm ơ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
Mặt cắt nào cũng có 12 ống?

Mỗi mặt cắt ít nhất là 1 và nhiều nhất là 12 ống , ít nhất là 1 lớp và nhiều nhất là 3 lớp lúc nào cũng tính từ tim mương đó bác Hòanh ạ, Theo ý tôi thì có thê khi nhập khỏang cách thì cho nó =0 thì 2 họac nhiều ống sẽ chồng lên nhau thôi, mong bá Hòanh giúp một tay. Cám ơn 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
Mỗi mặt cắt ít nhất là 1 và nhiều nhất là 12 ống , ít nhất là 1 lớp và nhiều nhất là 3 lớp lúc nào cũng tính từ tim mương đó bác Hòanh ạ, Theo ý tôi thì có thê khi nhập khỏang cách thì cho nó =0 thì 2 họac nhiều ống sẽ chồng lên nhau thôi, mong bá Hòanh giúp một tay. Cám ơn nhiều

Nếu bạn cần vẽ 7 ống, bạn sẽ vẽ 8 ống rồi xóa thủ công đi 1 ống?

 

Đừng làm thế vì như thế là phản autolisp. Bạn hãy upload 1 file dwg chứa hình mặt cắt của bạn lên diễn đàn, Trong file dwg đó, bạn hãy thể hiện 12 mặt cắt vẽ từ 1-12 ống. Tôi sẽ giúp bạn có được lisp tự động hoàn toà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
Không phải. Em muốn lish scale tất cả các block chèn vào bản vẽ theo tỷ lệ dim hiện hành

Chứ không chỉ có mỗi block tên "cot"

Gõ lệnh insert, đánh tên 1 block bất kỳ có trong bản vẽ

Lish sẽ scale block đó theo tỷ lệ dim hiện hành

 

Bạn tạo vòng lặp nhập tên Block cần scale tỉ lệ thay cho tên "cot".

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

Trong Cad2008 có lệnh Torient có thể quay text theo hướng của một đường bất kỳ mà không cần dùng đến lệnh rotate với tham số R. Vậy có lệnh nào tương tự như vậy mà có thể áp dụng cho các đối tượng khác như hình chữ nhật, hình tam giác vv.. không các bác. Nếu không có nhờ các bác viết hộ cho một lisp như vậy được không.

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

Xin nhờ A N Hoành viết dùm e cái lisp này.

E có hàng loạt text font Vni - times có dạng chữ số dấu chấm (.) thập phân.

E muốn có 1 lisp chuyển dấu chấm (.) thành dấu phẩy (,).

VD: 1.325 thành 1,325

cám ơn 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
Xin nhờ A N Hoành viết dùm e cái lisp này.

E có hàng loạt text font Vni - times có dạng chữ số dấu chấm (.) thập phân.

E muốn có 1 lisp chuyển dấu chấm (.) thành dấu phẩy (,).

VD: 1.325 thành 1,325

cám ơn nhiều.

bạn dùng lệnh FIND của AutoCAD.

  • 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

Tôi xin up lên các mặt cắt mương cáp nhờ bác Hòanh giúp dùm, ghi chú: các kích thước ký hiệu h và v sẽ thay đổi tùy theo hạng mục, ĐK các lọai ống cũng vậy, bác Hòanh có thể thêm hatch cho phần cát lấp và đất đắp tùy ý. Chân thành cám ơn bác đã quan tâm ( link của DWG : MCMUONGCAP.rar)

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
Trong Cad2008 có lệnh Torient có thể quay text theo hướng của một đường bất kỳ mà không cần dùng đến lệnh rotate với tham số R. Vậy có lệnh nào tương tự như vậy mà có thể áp dụng cho các đối tượng khác như hình chữ nhật, hình tam giác vv.. không các bác. Nếu không có nhờ các bác viết hộ cho một lisp như vậy được không.

Lệnh ROTATE đã có đủ rồi, chọn đối tượng cần quay, chọn R (reference), chế độ bắt dính là parallel, chọn đường thẳng cần song song, OK.

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×