Đến nội dung


Hình ảnh
- - - - -

Nhờ viết lisp đổi màu về bylayer


  • Please log in to reply
11 replies to this topic

#1 nguyennhulinh

nguyennhulinh

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 January 2011 - 10:14 AM

E có bản vẽ các layer bị đổi màu lung tung, giờ muốn nhờ các bác viết giúp e lisp khi mình chọn vào đối tượng thì nó sẽ tự động chuyển về bylayer.Không phải đổi thủ công trên thanh công cụ.
E tìm đc cái lisp này trên mạng mà ko hiểu sai ở đâu.Bác nào cao thủ lisp giúp e với.
(defun C:CBL (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "l" "" ));màu theo lop - by Layer
(defun C:CBB (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "b" "" ));màu theo khoi - by Block
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 06 January 2011 - 10:31 AM

Chuyển về Bylayer các đối tượng chọn theo ý tưởng của bạn thì :

;; free lisp from cadviet.com @ssg

;;;-------------------------------------------------------------------------------
(defun remc(s / sn i OK sc ch) ;;;Remove color code
(setq sn "" i 1 OK T)
(repeat (strlen s)
(setq
sc (substr s i 2)
ch (substr s i 1)
)
(if (= sc "\\C") (setq OK nil))
(if OK
(setq sn (strcat sn ch))
(if (= ch ";") (setq OK T))
)
(setq i (1+ i))
)
sn
)
;;;-------------------------------------------------------------------------------
(defun C:CBL(/ ss e d old new) ;;;Reset all objects ByLayer
(setq ss (ssget "X" '((0 . "MTEXT"))))
(while (setq e (ssname ss 0))
(setq
d (entget e)
old (assoc 1 d)
new (cons 1 (remc (cdr old)))
d (subst new old d)
)
(entmod d)
(ssdel e ss)
)
(command "change" (ssget "X") "" "p" "C" "bylayer" "LT" "bylayer" "LW" "bylayer" "")
(princ)
)
;;;-------------------------------------------------------------------------------

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 nguyennhulinh

nguyennhulinh

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 January 2011 - 11:00 AM

Chuyển về Bylayer các đối tượng chọn theo ý tưởng của bạn thì :


;; free lisp from cadviet.com @ssg

;;;-------------------------------------------------------------------------------
(defun remc(s / sn i OK sc ch) ;;;Remove color code
(setq sn "" i 1 OK T)
(repeat (strlen s)
(setq
sc (substr s i 2)
ch (substr s i 1)
)
(if (= sc "\\C") (setq OK nil))
(if OK
(setq sn (strcat sn ch))
(if (= ch ";") (setq OK T))
)
(setq i (1+ i))
)
sn
)
;;;-------------------------------------------------------------------------------
(defun C:CBL(/ ss e d old new) ;;;Reset all objects ByLayer
(setq ss (ssget "X" '((0 . "MTEXT"))))
(while (setq e (ssname ss 0))
(setq
d (entget e)
old (assoc 1 d)
new (cons 1 (remc (cdr old)))
d (subst new old d)
)
(entmod d)
(ssdel e ss)
)
(command "change" (ssget "X") "" "p" "C" "bylayer" "LT" "bylayer" "LW" "bylayer" "")
(princ)
)
;;;-------------------------------------------------------------------------------


  • 0

#4 nguyennhulinh

nguyennhulinh

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 January 2011 - 11:02 AM

E dùng lệnh remc hay cbl mà ko đc bác à.Ko hiểu sao nó cứ báo lỗi.
  • 0

#5 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 06 January 2011 - 11:26 AM

remc là hàm con,không phải là lệnh.Trên diễn đàn thì lệnh của file lisp thường được hiện lên bên trên tên file luôn :D
Nếu dùng cbl mà lỗi thì bạn post lỗi lên mình xem sao :D
Mí lị bạn dùng CBL nào, trên hay dưới ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 06 January 2011 - 11:36 AM

remc là hàm con,không phải là lệnh.Trên diễn đàn thì lệnh của file lisp thường được hiện lên bên trên tên file luôn :D
Nếu dùng cbl mà lỗi thì bạn post lỗi lên mình xem sao :D
Mí lị bạn dùng CBL nào, trên hay dưới ^^

Lỗi này chắc do trong bản vẽ không có MTEXT nào -> dẫn đến lỗi
=> Nên kiểm tra tập ss có chứa anh MTEXT nào hay không?
=> Nếu tập chọn ss có chứa MTEXT mới thực thi code tiếp theo
Bạn Nguyennhulinh sử dụng code này nhé
Lệnh là CBL

(defun remc(s / sn i OK sc ch) ;;;Remove color code
(setq sn "" i 1 OK T)
(repeat (strlen s)
(setq
sc (substr s i 2)
ch (substr s i 1)
)
(if (= sc "\\C") (setq OK nil))
(if OK
(setq sn (strcat sn ch))
(if (= ch ";") (setq OK T))
)
(setq i (1+ i))
)
sn
)
;;;-------------------------------------------------------------------------------
(defun C:CBL(/ ss e d old new) ;;;Reset all objects ByLayer
(if(setq ss (ssget "X" '((0 . "MTEXT"))))
(while (setq e (ssname ss 0))
(setq
d (entget e)
old (assoc 1 d)
new (cons 1 (remc (cdr old)))
d (subst new old d)
)
(entmod d)
(ssdel e ss)
)
)
(command "change" (ssget "X") "" "p" "C" "bylayer" "LT" "bylayer" "LW" "bylayer" "")

(princ)
)

  • 2

#7 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 06 January 2011 - 01:12 PM

Có lẽ đúng là bạn ấy bị lỗi đó thật :D
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 nguyennhulinh

nguyennhulinh

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 January 2011 - 01:41 PM

Hi`, đúng rồi.Cảm ơn các bác nhiều lắm.:D
  • 0

#9 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 07 January 2011 - 09:39 AM

Trước mình cũng viết cái Líp này mà dài loàng ngoằng ra. hehe

(defun moddxf (dxf chdxf ss)
(entmod
(subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))
)
)
(vl-load-com)
(defun c:bylayer (/ ss en el i)
(vl-load-com)
(setvar "cmdecho" 0)
(command ".UNDO" "E")
(princ "\n >>> Dang xu ly .....")
(princ "\nChuyen ve ByLayer")
;25/11/2010
;nguyentuyen86@gmail.com
(setq ss (ssget "x"))
(setq i 0)
(while (< i (sslength ss))
(setq en (ssname ss i))
(if (/= (cdr (assoc 0 (entget en))) "INSERT")
(progn
(if (/= (cdr (assoc 62 (entget en))) nil)
(moddxf 62 256 en)
)
(setq el (vlax-ename->vla-object en))
(vlax-put-property el 'Linetype "ByLayer")
(vlax-put-property el 'Lineweight -1)
)
(upwblock en)
)
(entupd en)
(setq i (1+ i))
)
(command ".REGEN")
(command ".UNDO" "E")
(setvar "cmdecho" 0)
(princ "\n....DONE....")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun upwblock (blk / s en els el)
(setq s (cdr (assoc 2 (entget blk))))
(setq en (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while en
(setq els (entget en))
(if (wcmatch (cdr (assoc 0 els)) "INSERT")
(upwblock en)
(progn
(if (/= (cdr (assoc 62 (entget en))) nil)
(moddxf 62 256 en)
)
(setq el (vlax-ename->vla-object en))
(vlax-put-property el 'Linetype "ByLayer")
(vlax-put-property el 'Lineweight -1)

)
)
(entupd en)
(setq en (entnext en))
)
)

  • 1

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#10 AutoTay.com

AutoTay.com

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 27 December 2011 - 11:03 AM

Come on!

Nhờ các bác viết dùm em đoạn lisp chuyển đặc tính (chỉ riêng) đối tượng được chọn về Bylayer!
Thack all!!!!!!!!!
  • 0

#11 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 27 December 2011 - 11:54 AM

Come on!

Nhờ các bác viết dùm em đoạn lisp chuyển đặc tính (chỉ riêng) đối tượng được chọn về Bylayer!
Thack all!!!!!!!!!

Hề hề hề,
Đặc tình chi hè??? Gì chứ cái đặc tình Autotay là thua luôn đấy.....
Hề hề hề,....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#12 nhimret

nhimret

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 29 December 2011 - 11:54 AM

Come on!

Nhờ các bác viết dùm em đoạn lisp chuyển đặc tính (chỉ riêng) đối tượng được chọn về Bylayer!
Thack all!!!!!!!!!


đoạn đấy đây :D lệnh là 0

(defun c:0 () (ssget) (command  "change"  "p" "" "p" "c" "bylayer" ""))

  • 0