Đến nội dung


Hình ảnh
- - - - -

lisp chuyển layer


  • Please log in to reply
13 replies to this topic

#1 Nghia_XD

Nghia_XD

    biết vẽ polygon

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

Đã gửi 29 December 2010 - 03:49 PM

các bạn cho mình xin lissp chuyển layer nhanh với. ví dụ như mình đang ở layer cắt mình muốn chuyển sang layêr khác. mình chỉ cần thục hiện 1 thao tác gì đó chẳng hạn như nhấn số 0
  • 1

Xây dựng dân dụng và công nghiệp


#2 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 29 December 2010 - 04:30 PM

Hix thế thì bác làm như sau nhé
(defun c:0 () (vl-cmdf "clayer" "1" ))
Đó là ví dụ chuyển sang layer khác, còn chuyển layer của đối tượng thì lại khác bạn ạ.
  • 1
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#3 matden_304

matden_304

    biết vẽ line

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

Đã gửi 19 August 2011 - 10:36 PM

Anh viết dùm em cái lisp mà chuyển từ layer hiện hành sang layer mình kích chuột được ko ạ.
Ví dụ như là em đang ở layer hiện hành là layer GACH, em muốn chuyển sang layer WALL thì chỉ cần gõ lệnh(như là LAYY chẳng hạn :blush: ) xog rồi là kích vô cái layer WALL trên bản vẽ đã có sẵn từ trước. Lúc này WALL chính là layer hiện hành. CẢm ơn các trước :wub:
  • 0

#4 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 19 August 2011 - 10:49 PM

Anh viết dùm em cái lisp mà chuyển từ layer hiện hành sang layer mình kích chuột được ko ạ.
Ví dụ như là em đang ở layer hiện hành là layer GACH, em muốn chuyển sang layer WALL thì chỉ cần gõ lệnh(như là LAYY chẳng hạn :blush: ) xog rồi là kích vô cái layer WALL trên bản vẽ đã có sẵn từ trước. Lúc này WALL chính là layer hiện hành. CẢm ơn các trước :wub:

Lisp này mình sưu tầm được.Có lẽ là đúng ý của bạn.Vì không biết là nguồn ở đâu nên mình không chú thích trong lisp, mong tác giả lisp thông cảm
(defun layset (/ LAY) (setvar "cmdecho" 0)
(setq LAY (entsel "\nChon doi tuong cho Layer hien hanh : "))
(if LAY (progn
(setq LAY (cdr (assoc 8 (entget (car LAY)))))
(command "_.layer" "set" LAY "") (princ (strcat "\nLayer : " LAY " da la hien hanh.")) )
(progn
(if (not ddlop) (load "ddlop")) (if (setq LAY (ddlop))
(progn
(command "_.LAYER" "ON" LAY "THAW" LAY "SET" LAY "") (princ (strcat "\nLayer : " LAY " da la hien hanh.")) ) ) ) )(princ) )
(defun c:cg () (layset))

  • 1

#5 matden_304

matden_304

    biết vẽ line

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

Đã gửi 20 August 2011 - 12:15 AM

Cảm ơn bạn nha...
Có lisp nào mà kích vào layer nào đó thì tất cả các layer còn lại sẽ bị ẩn đi, chỉ có layer được kích hiện lên thôi,còn muốn hiện lại tất cả các layer thì minh dùng lệnh LO ( DO bác nào đó trên cadviet viết, mình ko nhớ rõ nữa)
Cảm ơn các bạn nha. Hỏi nhiều ngại quá.hiii
  • 0

#6 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 20 August 2011 - 07:27 AM

Cảm ơn bạn nha...
Có lisp nào mà kích vào layer nào đó thì tất cả các layer còn lại sẽ bị ẩn đi, chỉ có layer được kích hiện lên thôi,còn muốn hiện lại tất cả các layer thì minh dùng lệnh LO ( DO bác nào đó trên cadviet viết, mình ko nhớ rõ nữa)
Cảm ơn các bạn nha. Hỏi nhiều ngại quá.hiii

Đó là lệnh layiso của Autocad (nếu cad cài tools express).
Còn nếu chưa cài thì dùng lisp này:
- 12: Hiện tất cả các layer (Lệnh layon của Cad khi cài tools express)
- 23: Kích chọn đối tượng có layer cần ẩn (Lệnh layoff của Cad khi cài tools express)
- 34: Kích chọn đối tượng có layer giữ lại còn các layer khác ẩn (Lệnh layiso của Cad khi cài tools express)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun restore_old_error ( / )

(setq bonus_alive (- bonus_alive 1))
(if (>= bonus_alive 0)
(b_restore_sysvars)
(setq bonus_varlist nil)
);if
(if (<= bonus_alive 0)
(progn
(b_restore_undo)
(if bonus_old_error
(setq *error* bonus_old_error);put the old error routine back.
);if
);progn then
);if

(princ)
);defun restore_old_error
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun b_restore_sysvars ( / lst n a B)

(if (<= bonus_alive 0)
(setq lst (car bonus_varlist)
bonus_varlist (list lst)
);setq
(setq lst (last bonus_varlist))
);if

(setq n 0);setq
(repeat (length lst)
(setq a (nth n lst)
b (cadr a)
a (car a)
)
(setvar a B)
(setq n (+ n 1));setq
);repeat
(setq bonus_varlist (reverse (cdr (reverse bonus_varlist))))

);defun b_restore_sysvars

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun b_restore_undo ()

(if bonus_undoctl
(progn
(b_set_sysvars (list "cmdecho" 0))

(while (equal 8 (logand 8 (getvar "undoctl")))
(command "_.undo" "_end")
);while

(if (not (equal bonus_undoctl (getvar "undoctl")))
(progn
(cond
((equal 0 bonus_undoctl)
(command "_.undo" "_control" "_none")
)
((equal 2 (logand 2 bonus_undoctl))
(command "_.undo" "_control" "_one")
)
);;cond
(if (equal 4 (logand 4 bonus_undoctl))
(command "_.undo" "_auto" "_on")
);if

);progn then restore undoctl to the status the user had it set to.
);if
(if (not (equal 2 (logand 2 (getvar "undoctl"))))
(b_restore_sysvars)
);if
);progn then restore undo to it's original setting
);if
(setq bonus_undoctl nil)

);defun b_restore_undo


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun C:34 (/ SS CNT LAY LAYLST VAL)

;(init_bonus_error
(list
(list "cmdecho" 0
"expert" 0
)
T ;flag. True means use undo for error clean up.
);list
;);init_bonus_error

(if (not (setq SS (ssget "i")))
(progn
(prompt "\nChon doi tuong thuoc lop muon giu lai: ")
(setq SS (ssget))
)
)

(if SS
(progn

(setq CNT 0)

(while (setq LAY (ssname SS CNT))
(setq LAY (cdr (assoc 8 (entget LAY))))
(if (not (member LAY LAYLST))
(setq LAYLST (cons LAY LAYLST))
)
(setq CNT (1+ CNT))
)

(if (member (getvar "CLAYER") LAYLST)
(setq LAY (getvar "CLAYER"))
(setvar "CLAYER" (setq LAY (last LAYLST)))
)

(command "_.-LAYER" "_OFF" "*" "_Y")
(foreach VAL LAYLST (command "_ON" VAL))
(command "")

(if (= (length LAYLST) 1)
(prompt (strcat "\nLop " (car LAYLST) " duoc giu lai va la lop hien hanh."))
(prompt (strcat "\n" (itoa (length LAYLST)) " Lop duoc giu lai. "
"Lop " LAY " la lop hien hanh."
)
)
)
)
)

(restore_old_error)

(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun C:12 ()

;(init_bonus_error
(list
(list "cmdecho" 0)
nil ;flag. True means use undo for error clean up.
);list
;);init_bonus_error

(Command "_.-LAYER" "_ON" "*" "")
(prompt "\nTat ca cac lop trong ban ve da duoc mo.")

(restore_old_error)

(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:23 ()
(layproc "off")
(princ)
)
(defun LAYPROC ( TASK / NOEXIT OPT BLKLST CNT EN PMT ANS LAY NEST BLKLST)


; --------------------- Error initialization ---------------------

;(init_bonus_error
(list
(list "cmdecho" 0
"expert" 0
)

nil ;flag. True means use undo for error clean up.
);list
;);init_bonus_error

; -------------------- Variable initialization -------------------

(setq NOEXIT T)

(setq OPT (getcfg (strcat "AppData/AC_Bonus/Lay" TASK))) ; get default option setting
(if (not (or (null OPT) (= OPT ""))) (setq OPT (atoi OPT)))

(setq CNT 0) ; cycle counter


(while NOEXIT

(initget "Options Undo")
(if (= TASK "off")
(setq EN (nentsel "\nOptions/Undo/<Chon doi tuong thuoc lop muom tat>: "))
(setq EN (nentsel "\nOptions/Undo/<Pick an object on the layer to be FROZEN>: "))
)

; ------------------------- Set Options --------------------------

(While (= EN "Options")
(initget "No Block Entity")
(cond
((= OPT 1)
(setq PMT "\nBlock level nesting/Entity level nesting/<No nesting>: ")
)
((= OPT 2)
(setq PMT "\nBlock level nesting/No nesting/<Entity level nesting>: ")
)
(T
(setq PMT "\nEntity level nesting/No nesting/<Block level nesting>: ")
)
)
(setq ANS (getkword PMT))

(cond
((null ANS)
(if (or (null OPT) (= OPT ""))
(progn
(print ANS)
(setq OPT 3)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "3")
)
)
)
((= ANS "No")
(setq OPT 1)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "1")
)
((= ANS "Entity")
(setq OPT 2)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "2")
)
(T
(setq OPT 3)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "3")
)
)

(initget "Options")
(if (= TASK "off")
(setq EN (nentsel "\nOptions/Undo/<Chon doi tuong thuoc lop muon tat>: "))
(setq EN (nentsel "\nOptions/Undo/<Pick an object on the layer to be FROZEN>: "))
)
)

; ------------------------- Find Layer ---------------------------

(if (and EN (not (= EN "Undo")))
(progn

(setq BLKLST (last EN))
(setq NEST (length BLKLST))

(cond

; If the entity is not nested or if the option for entity
; level nesting is selected.

((or (= OPT 2) (< (length EN) 3))
(setq LAY (entget (car EN)))
)

; If no nesting is desired

((= OPT 1)
(setq LAY (entget (car (reverse BLKLST))))
)

; All other cases (default)

(T
(setq BLKLST (reverse BLKLST))

(while (and ; strip out xrefs
( > (length BLKLST) 0)
(assoc 1 (tblsearch "BLOCK" (cdr (assoc 2 (entget (car BLKLST))))))
);and
(setq BLKLST (cdr BLKLST))
)
(if ( > (length BLKLST) 0) ; if there is a block present
(setq LAY (entget (car BLKLST))) ; use block layer
(setq LAY (entget (car EN))) ; else use layer of nensel
)
)
)

; ------------------------ Process Layer -------------------------

(setq LAY (cdr (assoc 8 LAY)))

(if (= LAY (getvar "CLAYER"))
(if (= TASK "off")
(progn
(prompt (strcat "\nDoi tuong thuoc lop " LAY " (day la lop hien hanh) ban co muon tat khong? Co/<Khong>: "))
(setq ANS (strcase (getstring)))
(if (not (or (= ANS "C") (= ANS "CO") (= ANS "c") (= ANS "co")))
(setq LAY nil)
)
)
(progn
(prompt (strcat "\nCannot freeze layer " LAY". It is the CURRENT layer."))
(setq LAY nil)
)
)
(setq ANS nil)
)

(if LAY
(if (= TASK "off")
(progn
(if ANS
(command "_.-LAYER" "_OFF" LAY "_Yes" "")
(command "_.-LAYER" "_OFF" LAY "")
)
(prompt (strcat "\nLop " LAY " da duoc tat."))
(setq CNT (1+ CNT))
)
(progn
(command "_.-LAYER" "_FREEZE" LAY "")
(prompt (strcat "\nLayer " LAY " has been frozen."))
(setq CNT (1+ CNT))
)
)
)
)

; -------------- Nothing selected or Undo selected ---------------

(progn
(if (= EN "Undo")
(if (> CNT 0)
(progn
(command "_.u")
(setq CNT (1- CNT))
)
(prompt "\nEverything has been undone.")
)
(setq NOEXIT nil)
)
)
)
)

(restore_old_error)

)

  • 2



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#7 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 25 August 2011 - 09:41 AM

Anh viết dùm em cái lisp mà chuyển từ layer hiện hành sang layer mình kích chuột được ko ạ.
Ví dụ như là em đang ở layer hiện hành là layer GACH, em muốn chuyển sang layer WALL thì chỉ cần gõ lệnh(như là LAYY chẳng hạn :blush: ) xog rồi là kích vô cái layer WALL trên bản vẽ đã có sẵn từ trước. Lúc này WALL chính là layer hiện hành. CẢm ơn các trước :wub:

Bây giờ người ta lạm dụng lisp quá rồi. Cài j có sẵn trong nhà thì xài, mua đồ hiện đại về xài thì chỉ có thêm tốn điện mà công suất thì cũng giống nhau. Lỡ may cái mua về bị hư hoặc bị mất thì ko biết lấy gì mà xài.
Lệnh Laymcur làm dc tất cả những j bạn cần. hoặc nhấp vào chổ màu đỏ:
Hình đã gửi
  • 1
Hình đã gửi

#8 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 03 October 2011 - 11:32 AM

Các bác cho e xin lisp đổi nhanh layer cho đối tượng.
Đại loại như: chọn đối tượng >>> lệnh >>> đối tượng được chuyển sang layer đích!
Thanksssssssssssssssssssssss!
  • 0

#9 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 03 October 2011 - 01:00 PM

Layer đích là layer như thế nào hả bạn
  • 0

#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 07 October 2011 - 03:21 PM

Layer đích là layer như thế nào hả bạn

Ví dụ thế này:
Mình muốn chuyển 1 đối tượng từ layer "0" sang layer "net lien". Thông thường là chọn đối tượng >>> qua Properties >>> đổi layer của đối tượng sang "nét liền" (hoặc dùng lệnh MA). Mình muốn thao tác ngắn gọn chỉ là: Chọn đt >>> lệnh (ví dụ là "1" chẳng hạn) >>> Enter >>> đối tượng chuyển sang layer "net lien".
Chỉ có thế bạn ạ!
Mong ban giúp! mình tìm mãi mà không thấy lisp giải quyết!
Thanks!!!!!
  • 0

#11 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 07 October 2011 - 04:34 PM

Ví dụ thế này:
Mình muốn chuyển 1 đối tượng từ layer "0" sang layer "net lien". Thông thường là chọn đối tượng >>> qua Properties >>> đổi layer của đối tượng sang "nét liền" (hoặc dùng lệnh MA). Mình muốn thao tác ngắn gọn chỉ là: Chọn đt >>> lệnh (ví dụ là "1" chẳng hạn) >>> Enter >>> đối tượng chuyển sang layer "net lien".
Chỉ có thế bạn ạ!
Mong ban giúp! mình tìm mãi mà không thấy lisp giải quyết!
Thanks!!!!!


 

(Defun c:1 ( )
(Prompt "\nChon doi tuong muon chuyen lop...")
(Setq chuyen (Ssget))
(command "chprop" chuyen "" "la" "netlien" "")
(Princ)
)

  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#12 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 07 October 2011 - 04:42 PM

Vậy mình mới nói với bạn là layer đích lấy ở đâu đó.ví dụ mình mặc định 1 là layer net liền cho bạn thì phải làm thêm điều kiện là tìm xem layer nét liền có tồn tại hay không nữa ah.Bạn hiểu ý mình chứ,chỉ có bạn vẽ thì bạn mới biết trong bạn vẽ của bạn có những layer nào để chuyển thôi bạn ah

(defun c:1()
(prompt "_.change ")
(princ "\n thay doi layer sang layer netlien")
(setq sset (ssget))
(if (null sset)
(progn
(princ "\nERROR: Nothing selected.")
(exit) ) )
(command "_.change" sset "" "P" "la" "netlien" "") ;muon doi layer khac thi ban doi ten layer netlien nhe
(princ))

  • 2

#13 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 07 October 2011 - 04:43 PM

Hix em post xong rùi mới thấy bài của bac duy.Sory bác
  • 0

#14 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 07 October 2011 - 04:47 PM

Thank các bạn nhiều!
Mình chỉ cần cấu trúc của đoạn code thôi mà. Còn layer thì tất nhiên là phải tùy theo bản vẽ của mình rùi! ^^
  • 0