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

Viết lisp theo yêu cầu [phần 2]

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

vẫn khônh được bác pham thanh binh a

bác thử sửa từ lisp này xem

nhưng trừ layer: cut,glass,hide,hatch,funitures,tree,text,center

lisp này không biết pro nào viết tẩy cả block và dim cực kỳ pro

mong pro nào rảnh giúp đỡ

 

Hề hề hề,

Mình test thử thấy nó chạy phăm phăm và chuyển tất cả những thằng nào không phải ở các lớp đã chỉ định về lớp Wall mà. Thậm chí cả màu cũng đã chuyển ngon lành về màu 7 bất kể là màu by layer hay không.

Cái bạn bảo không được là cái chi nhỉ?? Chắc là cái vụ purge thì phải vì trong lisp mình quên chưa bổ sung thằng cu này. Việc này bạn có thể tự bổ sung được rồi mà.

Hề hề hề.

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

Cảm ơn anh Ketxu cái lisp Nut. Mục đích của lisp là đúng rồi, làm trên Line thì tốt.

Nhưng sao "chọn đối tượng" là PLine thì không được

Cái lisp mình sửa trên lisp bạn gửi, theo yêu cầu change của bạn, cũng chẳng biết mục đích là gì đâu ^^

Bạn sửa lại lisp thành thế này cho chắc :

(defun C:nut() (setq ent (car(entsel "\n Chon doi tuong"))) 
(if (=(cdadr (entget ent)) "LINE")(command "pedit" ent "" "E" "I" pause "x" ""))
(if	(=(cdadr (entget ent)) "LWPOLYLINE")(command "pedit" ent "E" "I" pause "x" ""))		
	)

 

Hề hề hề,

Mình test thử thấy nó chạy phăm phăm và chuyển tất cả những thằng nào không phải ở các lớp đã chỉ định về lớp Wall mà. Thậm chí cả màu cũng đã chuyển ngon lành về màu 7 bất kể là màu by layer hay không.

Cái bạn bảo không được là cái chi nhỉ?? Chắc là cái vụ purge thì phải vì trong lisp mình quên chưa bổ sung thằng cu này. Việc này bạn có thể tự bổ sung được rồi mà.

Hề hề hề.

E cũng thử test trên 1 bản vẽ nhiều layer, có 1 layer bị khoá, thì thấy nó cứ chạy hoài, chạy hoài bác ạ...

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

Hề hề hề,

Mình test thử thấy nó chạy phăm phăm và chuyển tất cả những thằng nào không phải ở các lớp đã chỉ định về lớp Wall mà. Thậm chí cả màu cũng đã chuyển ngon lành về màu 7 bất kể là màu by layer hay không.

Cái bạn bảo không được là cái chi nhỉ?? Chắc là cái vụ purge thì phải vì trong lisp mình quên chưa bổ sung thằng cu này. Việc này bạn có thể tự bổ sung được rồi mà.

Hề hề hề.

em dùng rồi

lisp chạy hơi nặng và hơi lâu pro à

lisp tẩy( chuyển đổi ) nhầm một số layer em định trừ lại, nhiều lúc chuyển tất cả layer về layer wall

nhiều lúc chuyển ko hết để lại một số layer thừa ( em định chuyển về layer wall

 

hehe em lại tạm chế được rồi

lisp clear.lsp của pro ketxu em lock những layer ko cần chuyển

sau đó chạy lisp

những layer lock sẽ không bị chuyển

kakaka

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

Vì bạn không chịu đọc bài mình nói

 

Cái theo yêu cầu Nhờ anh tạo lại cái lisp Nut vẫn sử dụng lệnh PE nhưng vào thẳng "Specify location for new vertex:"

không phải gõ "e" -> "i"

 

Update code : cho phép bạn chèn liên tiếp, đến bao giờ ấn Esc thì thôi!

(defun C:pe(/ ent) (setq ent (car(entsel "\n Chon doi tuong"))) 
 (cond ((=(cdadr (entget ent)) "LINE")
	(command "pedit" ent "" "E" )
	(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))			
	)
 ((=(cdadr (entget ent)) "LWPOLYLINE")
	(command "pedit" ent "E")
	(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))		
 )
))

 

Nếu mình muốn chèn new vertex tại vị trí giữa vertex thứ 3 và thứ 4 thì lisp này chắc sẽ bị problem nhỏ. ko biết Ketxu đã tính đến chưa?

  • 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

mình cần tẩy layer thôi còn các block giữ nguyên thuộc tính, chỉ là chuyển layer thôi

ko cần xref vì mình không dùng xref

chịu thua, chưa 1 lisp nào có thể tẩy được layer của bản vẽ mà thuộc tính của Block được giữ nguyên, nói chung bạn phải định nghĩa lại block của bạn bằng phương pháp thủ công trước khi bạn sử dụng lệnh dlay của bạ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

chịu thua, chưa 1 lisp nào có thể tẩy được layer của bản vẽ mà thuộc tính của Block được giữ nguyên, nói chung bạn phải định nghĩa lại block của bạn bằng phương pháp thủ công trước khi bạn sử dụng lệnh dlay của bạn

Sao lại có kết luận này bác nhỉ :blink:

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

Sao lại có kết luận này bác nhỉ :blink:

bạn có chắc dùng lisp để tẩy hết các layer thừa trong bản vẽ trong khi các blocl của bản vẽ đó vẫn giữ nguyên thuộc tính đượ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

 

 

E cũng thử test trên 1 bản vẽ nhiều layer, có 1 layer bị khoá, thì thấy nó cứ chạy hoài, chạy hoài bác ạ...

Hề hề hề,

Xin lỗi bác ketxu vì mình chưa test với layer bị khóa. Có nhẽ do bị khóa mà lisp nó tức quá vì không chuyển được nên nó cứ chạy loanh quanh hoài như vậy. Để mình kiểm tra lại bác nhé.

 

@ bạn 3d.decor: Lisp tẩy nhầm vì cái tên của layer đó không có trong đề bài bạn đưa ra. Bạn hãy xem kỹ cái lisp để biết những layer sẽ không bị chuyển. Ngoài các layer đã được thống kê trong hàm (or .....) nếu bạn muốn thêm layer nào nữa thì chỉ việc thêm nó vào trong hàm này bạn nhé.

Tương tự với cái không muốn mà bị chuyển, bạn phải loại cái tên layer đó ra khỏi cái hàm (or ....)

 

Hề hề hề,...

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

Hề hề hề,

Xin lỗi bác ketxu vì mình chưa test với layer bị khóa. Có nhẽ do bị khóa mà lisp nó tức quá vì không chuyển được nên nó cứ chạy loanh quanh hoài như vậy. Để mình kiểm tra lại bác nhé.

 

@ bạn 3d.decor: Lisp tẩy nhầm vì cái tên của layer đó không có trong đề bài bạn đưa ra. Bạn hãy xem kỹ cái lisp để biết những layer sẽ không bị chuyển. Ngoài các layer đã được thống kê trong hàm (or .....) nếu bạn muốn thêm layer nào nữa thì chỉ việc thêm nó vào trong hàm này bạn nhé.

Tương tự với cái không muốn mà bị chuyển, bạn phải loại cái tên layer đó ra khỏi cái hàm (or ....)

 

Hề hề hề,...

lisp của bạn chỉ có tác dụng cho 1 bản vẽ duy nhất, nếu bản vẽ khác, layer khác thì lại phải lisp khác, bạn nên cải tiến cho tham số đầu vào để linh hoạt với tất cả bản vẽ

  • 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

lisp của bạn chỉ có tác dụng cho 1 bản vẽ duy nhất, nếu bản vẽ khác, layer khác thì lại phải lisp khác, bạn nên cải tiến cho tham số đầu vào để linh hoạt với tất cả bản vẽ

Bạn tomboy chú ý đây là khu vực viết lisp theo yêu cầu: nên lisp viết ra phục vụ cho ng yêu cầu là chính (1 mục đích) ng khác thấy dùng dc thì down về edit lại để xài.

 

Theo yêu cầu của bạn -> Bạn nên tạo thread mới chẳng hạn: viết software theo yêu cầu sau đó tập hợp nhiều ý tưởng cho từng chuyên ngành cụ thể -> viết soft để giải quyết tất cả những yêu cầ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

Bạn tomboy chú ý đây là khu vực viết lisp theo yêu cầu: nên lisp viết ra phục vụ cho ng yêu cầu là chính (1 mục đích) ng khác thấy dùng dc thì down về edit lại để xài.

 

Theo yêu cầu của bạn -> Bạn nên tạo thread mới chẳng hạn: viết software theo yêu cầu sau đó tập hợp nhiều ý tưởng cho từng chuyên ngành cụ thể -> viết soft để giải quyết tất cả những yêu cầu đó.

mình không tán thành với cách nói của bạn, thực ra diễn đàn là để chia sẻ và học hỏi, mình tham gia diễn đàn cũng vì mục đích này, mình thấy đây là sân chơi bổ ích, ai cũng có thể tham gia vì ai cũng có khiếm khuyết hay những lỗ hổng trong kiến thức của mình vì vậy đây là sân chơi lành mạnh nhằm củng cố kiến thức cho ngưòi chơi là chính . Nếu bạn nói "đây là khu vực viết lisp theo yêu cầu " có nghĩa là đây là một xưởng chuyên gia công các loại mặt hàng theo yêu cầu của khách hàng, nếu ai không phải là khách hàng của xưởng này thì xin mời đi chỗ khác hoặc là không được có ý kiến gì phải không bạn. Nói như bạn thì các bạn là thầy hết rồi, giỏi hết rồi không cần phải học nữa mà chỉ đi dậy người ta 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

trích dẫn tomboy

chịu thua, chưa 1 lisp nào có thể tẩy được layer của bản vẽ mà thuộc tính của Block được giữ nguyên, nói chung bạn phải định nghĩa lại block của bạn bằng phương pháp thủ công trước khi bạn sử dụng lệnh dlay của bạn

bạn có chắc dùng lisp để tẩy hết các layer thừa trong bản vẽ trong khi các blocl của bản vẽ đó vẫn giữ nguyên thuộc tính được không?

 

bác ơi bác dùng thử lisp này xem

 

(defun c:clear(/ nla)
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(setq nla  "funitures")
(if (not (tblsearch "layer" nla))(command "layer" "n" nla "c" "31" nla "lt" "continuous" nla ""))
(setvar "clayer" nla)
(command "change" (ssget "X") "" "p" "la" nla "c" "31" "")
 (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
 (vlax-for block (vla-get-blocks adoc) 
   (if   (not (wcmatch (strcase (vla-get-name block) t) "*_space*")) 
     (vlax-for   ent block 
	(progn
		(vla-put-color ent "31")
		(vla-put-layer ent "funitures")
	)    
   ) 
    ) 
  )
(acet-sysvar-set (list "dimclrt" 256 "dimclre" 256 "dimclrd" 256 "INSUNITS" 4 "INSUNITSDEFSOURCE" 4 "INSUNITSDEFTARGET" 4)) 
(command "dim1" "update" (ssget "X" '((0 . "Leader"))) "")	
(vla-regen adoc acactiveviewport) 
(command "-purge" "a" "" "N")
(command "undo" "e") 
(princ))    

 

hehe em lại tạm chế được rồi

lisp clear.lsp của pro ketxu em lock những layer ko cần chuyển

sau đó chạy lisp

những layer lock sẽ không bị chuyển

kakaka

em rất cám ơn các pro đã nhiệt tình giúp thành viên amater như em

bác nào không giúp thì em lại tìm cách tạm chế

bằng cách không hiểu về lập trình nhưng em copy các dòng lisp các pro viết sẵn để chế với nhau

không thành công cũng thành nhân vậy

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ình không tán thành với cách nói của bạn, thực ra diễn đàn là để chia sẻ và học hỏi, mình tham gia diễn đàn cũng vì mục đích này, mình thấy đây là sân chơi bổ ích, ai cũng có thể tham gia vì ai cũng có khiếm khuyết hay những lỗ hổng trong kiến thức của mình vì vậy đây là sân chơi lành mạnh nhằm củng cố kiến thức cho ngưòi chơi là chính . Nếu bạn nói "đây là khu vực viết lisp theo yêu cầu " có nghĩa là đây là một xưởng chuyên gia công các loại mặt hàng theo yêu cầu của khách hàng, nếu ai không phải là khách hàng của xưởng này thì xin mời đi chỗ khác hoặc là không được có ý kiến gì phải không bạn. Nói như bạn thì các bạn là thầy hết rồi, giỏi hết rồi không cần phải học nữa mà chỉ đi dậy người ta thôi.

Phần màu đỏ: Ai cũng có quyền yêu cầu -> ai cũng là khách hàng của xưởng nhưng ko phải yêu cầu nào cũng dc đáp ứng rolleyes.gif

 

 

Chỉ nhắc bạn yêu cầu nhầm chỗ thôi, bạn tạo cái topic mới giống mình vừa tạo đây : http://www.cadviet.com/forum/index.php?showtopic=44425

Ko thể chỉ vì 1 yêu cầu sửa 1 biến hệ thống mà bắt ng viết lisp (viết dùm) care hết tất cả các trường hợp -> xài ở đâu cũng dc.

 

p/s: bạn nhạy cảm với các bài viết có ý kiến ngược với mình như vậy thì khó mà học tập dc ở nơi mà đúng sai lẫn lộn như môi trường forum lắm. Chúc bạn vui.

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ình không tán thành với cách nói của bạn, thực ra diễn đàn là để chia sẻ và học hỏi, mình tham gia diễn đàn cũng vì mục đích này, mình thấy đây là sân chơi bổ ích, ai cũng có thể tham gia vì ai cũng có khiếm khuyết hay những lỗ hổng trong kiến thức của mình vì vậy đây là sân chơi lành mạnh nhằm củng cố kiến thức cho ngưòi chơi là chính . Nếu bạn nói "đây là khu vực viết lisp theo yêu cầu " có nghĩa là đây là một xưởng chuyên gia công các loại mặt hàng theo yêu cầu của khách hàng, nếu ai không phải là khách hàng của xưởng này thì xin mời đi chỗ khác hoặc là không được có ý kiến gì phải không bạn. Nói như bạn thì các bạn là thầy hết rồi, giỏi hết rồi không cần phải học nữa mà chỉ đi dậy người ta thôi.

Hề hề hề,

Không phải thế , không phải thế. Bác Tomboy chớ nóng.

Chỉ là góp ý với nhau thôi mà, đúng là mọi người đều có quyền góp ý, ý kiến của bác cũng rất tuyệt, tuy nhiên do thời gian có hạn và với mục tiêu là giúp đỡ được người cần sớm nhất nên mình cũng chưa nghĩ sâu hơn được. Rất cám ơn bác để mình sẽ nghĩ tiếp và hoàn chỉnh nó.

Còn bác detailing góp ý cũng chỉ là nhắc bác rằng do tính chất đặc biệt của chuyên mục mà thôi, chả phải phân biệt khách hành với chủ hàng chi đâu, và càng chả phải có ý không tôn trọng bác đâu.

Hề hề hề, Chớ giận, chớ giận nghen bác.

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

Hề hề hề,

Không phải thế , không phải thế. Bác Tomboy chớ nóng.

Chỉ là góp ý với nhau thôi mà, đúng là mọi người đều có quyền góp ý, ý kiến của bác cũng rất tuyệt, tuy nhiên do thời gian có hạn và với mục tiêu là giúp đỡ được người cần sớm nhất nên mình cũng chưa nghĩ sâu hơn được. Rất cám ơn bác để mình sẽ nghĩ tiếp và hoàn chỉnh nó.

Còn bác detailing góp ý cũng chỉ là nhắc bác rằng do tính chất đặc biệt của chuyên mục mà thôi, chả phải phân biệt khách hành với chủ hàng chi đâu, và càng chả phải có ý không tôn trọng bác đâu.

Hề hề hề, Chớ giận, chớ giận nghen bác.

hì hì, chỉ là trò đùa thôi mà.

Mình tham gia diễn đàn cũng lâu rồi, mình thường xuyên theo dõi diễn đàn này, nhất là ở chủ đề viết lisp theo yêu cầu và mình cũng học hỏi được rất nhiều từ diễn đàn. mình thấy một chương trình hoàn chỉnh là phải tính tới tất cả các điều kiện của bài toán, sai lầm lớn nhất của người lập trình là ở chỗ đó, bạn thử nghĩ xem nếu mình đưa ra bài toán giải pt bậc 2 như sau 7x2+15x+8=0 nếu chỉ là bài toán với các tham số có sẵn như thế này và người lập trình chỉ cần gán biến A=7, B=15 và C=8 thì chuyện gì sẽ sảy ra khi mình lại có bài toán khác nhỉ, không lẽ người sử dụng lại phải mò vào mã code để chỉnh sửa lại hay sao. cũng từ bài toán này mình có thể suy rộng ra thôi, do vậy trong chủ đề này mình cũng có đóng góp ý kiến chân thành rất mong các bạn thông cảm

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

(defun c:clear(/ nla)

(vl-load-com)

(command "undo" "be")

(setvar "cmdecho" 0)

(setq nla "funitures")

(if (not (tblsearch "layer" nla))(command "layer" "n" nla "c" "31" nla "lt" "continuous" nla ""))

(setvar "clayer" nla)

(command "change" (ssget "X") "" "p" "la" nla "c" "31" "")

(setq adoc (vla-get-activedocument (vlax-get-acad-object)))

(vlax-for block (vla-get-blocks adoc)

(if (not (wcmatch (strcase (vla-get-name block) t) "*_space*"))

(vlax-for ent block

(progn

(vla-put-color ent "31")

(vla-put-layer ent "funitures")

)

)

)

)

(acet-sysvar-set (list "dimclrt" 256 "dimclre" 256 "dimclrd" 256 "INSUNITS" 4 "INSUNITSDEFSOURCE" 4 "INSUNITSDEFTARGET" 4))

(command "dim1" "update" (ssget "X" '((0 . "Leader"))) "")

(vla-regen adoc acactiveviewport)

(command "-purge" "a" "" "N")

(command "undo" "e")

(princ))

hehe em lại tạm chế được rồi

lisp clear.lsp của pro ketxu em lock những layer ko cần chuyển

sau đó chạy lisp

những layer lock sẽ không bị chuyển

kakaka

em rất cám ơn các pro đã nhiệt tình giúp thành viên amater như em

bác nào không giúp thì em lại tìm cách tạm chế

bằng cách không hiểu về lập trình nhưng em copy các dòng lisp các pro viết sẵn để chế với nhau

không thành công cũng thành nhân vậy

mình test trên bản vẽ này báo lỗi: http://www.cadviet.com/upfiles/3/test_clear.dwg

Ôi chao, sao mà máy em function có tiếp đầu ngữ Vla lại không có trong phần Help trong máy mình nhỉ, lạ thật ấy vậy mà nó vẫn chạy vù vù các bác ạ, về phần này bác nào pro chia sẻ cho em vớ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

Vì bạn không chịu đọc bài mình nói

 

Cái theo yêu cầu Nhờ anh tạo lại cái lisp Nut vẫn sử dụng lệnh PE nhưng vào thẳng "Specify location for new vertex:"

không phải gõ "e" -> "i"

 

Update code : cho phép bạn chèn liên tiếp, đến bao giờ ấn Esc thì thôi!

(defun C:pe(/ ent) (setq ent (car(entsel "\n Chon doi tuong"))) 
 (cond ((=(cdadr (entget ent)) "LINE")
	(command "pedit" ent "" "E" )
	(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))			
	)
 ((=(cdadr (entget ent)) "LWPOLYLINE")
	(command "pedit" ent "E")
	(while (< 0 (getvar "CMDACTIVE")) (command "I" pause))		
 )
))

Theo cái sự biết + nghe ngóng của mình thì với lisp nút như trên chưa tính tới điểm muốn tạo mới nó nằm ở phân đoạn nào của pline nên đỉnh được chèn thên cứ được nối với đỉnh đầu của block thì phải.

  • 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

Anh Duy ơi ! cái lisp nội suy cao độ em dùng rất tốt, nhờ nó em đỡ biết bao nhiêu. Thành thật rất cảm ơn anh rất nhiều

Nhưng sao từ Tết đến giờ anh không vào http://duy782006.blogspot.com/2009/08/yeu-cau-viet-lisp.htmlgiúp mọi người nữa vậy. Mọi người chờ anh miết :rolleyes:

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ình test trên bản vẽ này báo lỗi: http://www.cadviet.com/upfiles/3/test_clear.dwg

Ôi chao, sao mà máy em function có tiếp đầu ngữ Vla lại không có trong phần Help trong máy mình nhỉ, lạ thật ấy vậy mà nó vẫn chạy vù vù các bác ạ, về phần này bác nào pro chia sẻ cho em với

Mình thấy hơi buồn nếu bạn dùng xref làm chuẩn mực test khi đang nói về Block :)

Mình xin khẳng định lisp clear không có tác dụng với Xref

 

Còn câu bạn nói mình chưa kịp lĩnh hội đã phải đi công trường rồi, giờ mới dám hỏi bạn : theo bạn, thuộc tính của block gồm những gì, và tại sao không thể thay đổi layer các đối tượng bên trong mà không làm thay đổi thuộc tính của block ??

  • 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

trích dẫn tomboy

chịu thua, chưa 1 lisp nào có thể tẩy được layer của bản vẽ mà thuộc tính của Block được giữ nguyên, nói chung bạn phải định nghĩa lại block của bạn bằng phương pháp thủ công trước khi bạn sử dụng lệnh dlay của bạn

bạn có chắc dùng lisp để tẩy hết các layer thừa trong bản vẽ trong khi các blocl của bản vẽ đó vẫn giữ nguyên thuộc tính được không?

 

bác ơi bác dùng thử lisp này xem

 

hehe em lại tạm chế được rồi

 

 

Hoặc đi theo hướng khác là dùng laymrg như thế này xem sao ? Mình viết vội, hi vọng bạn tiếp tục chế thêm được.lstLay-Re là danh sách các Layer giữ lại, bạn cứ thêm vào nhé ^^

(defun c:clay(/ clay lstLay lstCmd)
(command "undo" "be")
(setvar "cmdecho" 0)
(setq lstLay-Re '("defpoints" "KCVN-HATCH") ;Danh sach layer giu lai 
  Lay-dich "Test"  ;Ten layer chuyen tat ca ve
  color "100" ;Mau
  ltype "continuous" ;Linetype
  lstLay-Del (table "Layer")	  
  lstLay-Del (vl-remove-if '(lambda (i) (or (vl-position i lstLay-Re ) (= i Lay-dich))) lstLay-Del ))

(if (= (tblsearch "layer" Lay-dich) nil)
                     (command "layer" "n" Lay-dich "c" color Lay-dich "lt" ltype Lay-dich "")
)
(setq lstCmd (strcat "-laymrg\r" 
				(apply 'strcat (mapcar '(lambda(x) (strcat  "N\r" x "\r")) lstLay-Del))
				"\r"
				"N\r"
				Lay-dich
				"\rY\r"
				))
(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) lstCmd)
(command "undo" "en")
)
(defun Table (s / d r)
(while (setq d (tblnext s (null d)))
(setq r (cons (cdr (assoc 2 d)) r))
)
)

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

Nhờ anh Ketxu xem lại giúp em : cái lisp PE làm trên Cad 2007 thì không vấn đề gì,

nhưng sao làm trên Cad 14 hay 2002 nếu mình chọn PLine thì nó báo " Chon doi tuongnil " rồi thoát luôn

Phần mềm Nova nó chạy ổn trên Cad 14 hay 2002 nên em vẫn phải dùng nó.

Anh sửa lại sao cho dùng được 2 bản Cad này giúp em.

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

Hoặc đi theo hướng khác là dùng laymrg như thế này xem sao ? Mình viết vội, hi vọng bạn tiếp tục chế thêm được.lstLay-Re là danh sách các Layer giữ lại, bạn cứ thêm vào nhé ^^

(defun c:clay(/ clay lstLay lstCmd)
(command "undo" "be")
(setvar "cmdecho" 0)
(setq lstLay-Re '("defpoints" "KCVN-HATCH") ;Danh sach layer giu lai 
  Lay-dich "Test"  ;Ten layer chuyen tat ca ve
  color "100" ;Mau
  ltype "continuous" ;Linetype
  lstLay-Del (table "Layer")	  
  lstLay-Del (vl-remove-if '(lambda (i) (or (vl-position i lstLay-Re ) (= i Lay-dich))) lstLay-Del ))

(if (= (tblsearch "layer" Lay-dich) nil)
                     (command "layer" "n" Lay-dich "c" color Lay-dich "lt" ltype Lay-dich "")
)
(setq lstCmd (strcat "-laymrg\r" 
				(apply 'strcat (mapcar '(lambda(x) (strcat  "N\r" x "\r")) lstLay-Del))
				"\r"
				"N\r"
				Lay-dich
				"\rY\r"
				))
(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) lstCmd)
(command "undo" "en")
)
(defun Table (s / d r)
(while (setq d (tblnext s (null d)))
(setq r (cons (cdr (assoc 2 d)) r))
)
)

 

thank you pro lisp chạy rất ổn

phần chú thích tiếng việt tạo điều kiện cho amater sửa theo ý thích mỗi người rất dễ hiểu

block tấy sạch tinh layer xong vẫn giữ nguyên thuộc tính

lisp chạy cũng nhẹ không nặng lắm

rất cám ơn pro nhiệt tình giúp dỡ

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

Công việc của em rất hay phải bổ sung mặt cắt địa dình từ bình đồ

(Bình đồ 2D, chỉ có các đường đồng mức 2D và rất ít Text cao độ).

Mỗi lần vẽ thêm MCN rất mất thời gian và công sức...

Em có ý tưởng lập một lisp như sau: Chuyển bình đồ thành 3D (Các đường ĐM có cao độ Z),

sau khi vạch một đường (Line or Pline) thể hiện vị trí mặt cắt thì CT sẽ chuyển Line or Pline đó

thành Face (hoặc gì gì đó) rồi tìm giao điểm của nó với các đường Đ.Mức để vẽ được mặt cắt ngang

Đ.hình tại vị trí vừa vạch trên B.Đồ.

Em nhờ các Bác tư vấn giúp xem liệu có thể thực hiện được không ?.

Em xin cám ơn trước !

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

Nhờ anh Ketxu xem lại giúp em : cái lisp PE làm trên Cad 2007 thì không vấn đề gì,

nhưng sao làm trên Cad 14 hay 2002 nếu mình chọn PLine thì nó báo " Chon doi tuongnil " rồi thoát luôn

Phần mềm Nova nó chạy ổn trên Cad 14 hay 2002 nên em vẫn phải dùng nó.

Anh sửa lại sao cho dùng được 2 bản Cad này giúp em.

Cảm ơn anh nhiều

Rất tiếc mình không có 2 CAD này để kiểm tra giúp bạn. Do lisp dùng command nên có nguy cơ bị lệ thuộc vào phiên bản rất lớn :) Hi vọng các bác khác dùng CAD 2 đời này sẽ giúp bạ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

pro nào viết hộ em lisp dùng lệnh WIPEOUT kiểu như hach được không

chứ chon lần lượt mất công quá

kiểu như chỉ vào vùng chon và ok là được

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

×