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

lisp chuyển layer

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

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

  • 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

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 ạ.

  • 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 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:

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 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))

  • 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

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

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 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)

)           

  • Vote tăng 2

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 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 đỏ:

lay.jpg

  • 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

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!

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

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

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í 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)
)  

  • 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

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))

  • Vote tăng 2

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

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! ^^

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ạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×