Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
vietduc147258

Nhờ sửa Lisp chuyển Layer khi DIM

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

Em có lisp chuyển layer khi Dim. Nhưng khi Dim góc thì có 2 trường hợp chọn đối tượng line với trường hợp là chọn point. Với 2 lệnh tương ứng là DAN và DAN2.

Các bác giúp em gộp 2 lệnh đó thành một với. Cảm ơn các bác đã quan tâm.

(defun c:DLI ()(Command ".DIMLINEAR"	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAl ()(Command ".DIMALIGNED" 	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DDI ()(Command ".DIMDIAMETER" 	pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DRA ()(Command ".DIMRADIUS" 	pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAR ()(Command ".DIMARC" 		pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAN ()(Command ".DIMANGULAR" 	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAN2()(Command ".DIMANGULAR" "" pause pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ)) ; Dim goc lon hon 180 do
(Defun c:QD  ()(Setvar "clayer" "DIM")(Prompt "\nChon doi tuong can Dim")(Setq ch (Ssget))(command "QDIM" ch "" Pause)(command "_LayerP")(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
1 giờ trước, vietduc147258 đã nói:

Em có lisp chuyển layer khi Dim. Nhưng khi Dim góc thì có 2 trường hợp chọn đối tượng line với trường hợp là chọn point. Với 2 lệnh tương ứng là DAN và DAN2.

Các bác giúp em gộp 2 lệnh đó thành một với. Cảm ơn các bác đã quan tâm.


(defun c:DLI ()(Command ".DIMLINEAR"	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAl ()(Command ".DIMALIGNED" 	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DDI ()(Command ".DIMDIAMETER" 	pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DRA ()(Command ".DIMRADIUS" 	pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAR ()(Command ".DIMARC" 		pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAN ()(Command ".DIMANGULAR" 	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAN2()(Command ".DIMANGULAR" "" pause pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ)) ; Dim goc lon hon 180 do
(Defun c:QD  ()(Setvar "clayer" "DIM")(Prompt "\nChon doi tuong can Dim")(Setq ch (Ssget))(command "QDIM" ch "" Pause)(command "_LayerP")(Princ))

 

Bạn thử cái này xem, Nếu góc <=180 độ thì đo bình thường, lớn hơn 180 độ thì Enter thêm cái nữa.

-----------------

(defun c:DAN ( / old )
    (setq old (getvar 'clayer))
    (setvar 'clayer "DIM")
    (command ".DIMANGULAR")
    (while (= 1 (logand 1 (getvar 'cmdactive)))
        (command "\\")
    )
    (setvar 'clayer old)
    (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
1 giờ} trướ}c, tien2005 đã nói:

Bạn sử dụng lisp này, áp dụng được cho DIM, TEXT,...

http://www.lee-mac.com/layerdirector.html

Thank! Đã dùng Lisp này rồi. khá là nặng nề. Cái kia sử dụng nhẹ nhàng, đơn giản hơn. Với lại lisp của lee-mac không hỗ trợ Qick dim

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
5 phút trước, namds86 đã nói:

Bạn thử cái này xem, Nếu góc <=180 độ thì đo bình thường, lớn hơn 180 độ thì Enter thêm cái nữa.

-----------------

(defun c:DAN ( / old )
    (setq old (getvar 'clayer))
    (setvar 'clayer "DIM")
    (command ".DIMANGULAR")
    (while (= 1 (logand 1 (getvar 'cmdactive)))
        (command "\\")
    )
    (setvar 'clayer old)
    (princ)
)

Tuyệt. Cảm ơn bạn đã giúp.

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

 

14 phút trước, vietduc147258 đã nói:

Thank! Đã dùng Lisp này rồi. khá là nặng nề. Cái kia sử dụng nhẹ nhàng, đơn giản hơn. Với lại lisp của lee-mac không hỗ trợ Qick dim

do Bạn chưa khai báo lệnh QuickDim cho lisp thôi

image.png.51f8d57856daa372d5ac1cbfef6419fe.png

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
26 phút trước, Nguyễn Hà Huy đã nói:

cho em hỏi nguyên lý hoạt động, cách sửa dụng lisp này với ạ, gõ lệnh lm, ldon vs ldoff mà ko biết sử dụng sao nữa

Bạn cứ gõ lệnh tạo text và tạo dim bình thường nhé. Lisp nó tự chuyển layer cho 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
1 giờ} trướ}c, Nguyễn Hà Huy đã nói:

cho em hỏi nguyên lý hoạt động, cách sửa dụng lisp này với ạ, gõ lệnh lm, ldon vs ldoff mà ko biết sử dụng sao nữa

Lisp này hỗ trợ text, dim, view port, xline. Hatch. Tự đổi layer theo các lệnh và layer tương ứng. Trong lisp hướng dẫn khai báo bằng tiếng anh. 

Bạn thêm dòng (c:ldon) vào cuối lisp để khi load vào dùng luôn cho tiệ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
5 giờ trước, Nguyễn Hà Huy đã nói:

Cho em hỏi khai báo như nào để nó tự động chuyển layer ạ

 

 

Vào lúc 6/10/2022 tại 16:38, tien2005 đã nói:

 

do Bạn chưa khai báo lệnh QuickDim cho lisp thôi

image.png.51f8d57856daa372d5ac1cbfef6419fe.png

 

- Bạn phải đảm bảo là lisp đã được load

- Bạn mở file lisp bằng notepad và tìm đến dòng tương ứng giống như hình rồi thêm các lệnh của Bạn vào, khai báo tên layer cần chuyển (màu, linestyle, plot,...). Mặc định là đủ dùng rồi không cần thêm. Như hình mình có thêm các lệnh về dim "[Q]DIM*,DIM*,*LEADER,HO,VE,CON,D1,DPL,HOC,VEC" và tạo ở layer "_DIM". Khi thay đổi xong thì lưu file lại và load lisp và dùng 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

Cái này mình dùng lệnh:
- TEXTLAYER: gán layer "text" sau này khi tạo text mới (dtext. mtext) sẽ tự động gán sang layer "text"
- DIMLAYER" gán layer "dim" sau này dim (tất cả các lệnh dim) sẽ tự động gán sang layer "dim"

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
21 giờ trước, nh0cxip0 đã nói:

Cái này mình dùng lệnh:
- TEXTLAYER: gán layer "text" sau này khi tạo text mới (dtext. mtext) sẽ tự động gán sang layer "text"
- DIMLAYER" gán layer "dim" sau này dim (tất cả các lệnh dim) sẽ tự động gán sang layer "dim"

Có xem Thân Lê lện DIMLAYER. Nhưng thử không có tác dụng. Mình đang dùng 2016, không thấy có lệnh TEXTLAYER. Lệnh DIMLAYER có thiết lập nhưng không thấy hoạt độ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
Vào lúc 31/5/2023 tại 11:06, PoTi đã nói:

Bác review cách dùng và cách sửa lệnh trong lisp cho e tham khảo 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

Mình chọn giải pháp cứ vẽ bình thường. Xong bản vẽ trước khi xuất làm cái lisp gán layer cho các loại đối tượng. Ví dụ dim thì như sau:

(defun c:cld ()

(setq chondim (ssget "X" (list (cons 0 "DIMENSION")) ))

(cond
((/= chondim nil) (command "change"  chondim "" "p" "la" "kthuoc-9" "") )
)

(princ))

Các loại đối tượng khác cũng vậy thích thì thêm vào như hatch, text, ...

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
1 giờ} trướ}c, tien2005 đã nói:

 

 

ok cảm ơn bác đã phản hồi. qua đến nay e cũng lần mò dc kha khá 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
Vào lúc 2/6/2023 tại 16:54, duy782006 đã nói:

Mình chọn giải pháp cứ vẽ bình thường. Xong bản vẽ trước khi xuất làm cái lisp gán layer cho các loại đối tượng. Ví dụ dim thì như sau:


(defun c:cld ()

(setq chondim (ssget "X" (list (cons 0 "DIMENSION")) ))

(cond
((/= chondim nil) (command "change"  chondim "" "p" "la" "kthuoc-9" "") )
)

(princ))

Các loại đối tượng khác cũng vậy thích thì thêm vào như hatch, text, ...

Lúc trước cũng hay dùng cách này. Làm xong rồi gõ 1 lệnh thế là đối tượng nào về layer đó. Rất gọn nhẹ, dễ dùng.

Nhưng cách này có nhược điểm là màu, nét lúc vẽ nhìn không quen mắt. Cái nữa là nếu mình làm việc trên bản vẽ của người khác, không có layer tương ứng cho từng đới tượng thì nó sẽ báo lỗ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ào lúc 6/10/2022 tại 14:48, vietduc147258 đã nói:

Em có lisp chuyển layer khi Dim. Nhưng khi Dim góc thì có 2 trường hợp chọn đối tượng line với trường hợp là chọn point. Với 2 lệnh tương ứng là DAN và DAN2.

Các bác giúp em gộp 2 lệnh đó thành một với. Cảm ơn các bác đã quan tâm.


(defun c:DLI ()(Command ".DIMLINEAR"	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAl ()(Command ".DIMALIGNED" 	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DDI ()(Command ".DIMDIAMETER" 	pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DRA ()(Command ".DIMRADIUS" 	pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAR ()(Command ".DIMARC" 		pause pause)		(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAN ()(Command ".DIMANGULAR" 	pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ))
(defun c:DAN2()(Command ".DIMANGULAR" "" pause pause pause pause)	(command "._chprop"  "L" "" "LA" "DIM" "") (princ)) ; Dim goc lon hon 180 do
(Defun c:QD  ()(Setvar "clayer" "DIM")(Prompt "\nChon doi tuong can Dim")(Setq ch (Ssget))(command "QDIM" ch "" Pause)(command "_LayerP")(Princ))

 

Bác dùng Lisp này thử xem!

;;;******************TU DONG CHUYEN LAYER THEO NET VE CAN DUNG********************
(vl-load-com)
(defun StartCommand (CALL CALLBACK / COMLAYLST)
(setq COMLAYLST (list
(list "DIMANGULAR" "DIM STYLE")
(list "DIMARC" "DIM STYLE")
(list "DIMALIGNED" "DIM STYLE")
(list "DIMBASELINE" "DIM STYLE")
(list "DIMCENTER" "DIM STYLE")
(list "DIMCONTINUE" "DIM STYLE")
(list "DIMDIAMETER" "DIM STYLE")
(list "DIMLINEAR" "DIM STYLE")
(list "DIMRADIUS" "DIM STYLE")
(list "QDIM" "DIM STYLE")
(list "LEADER" "DIM STYLE")
(list "MLEADER" "DIM STYLE")
(list "QLEADER" "DIM STYLE")
(list "HATCH" "VAT LIEU")
(list "MVIEW" "Defpoints")))
(if (setq N (assoc (strcase (car CALLBACK)) COMLAYLST))
(progn (setq *Currentlayers* (cons (getvar "CLAYER") *Currentlayers*))
(if (setq objLay(make_layers (cadr N)))
(vla-put-activelayer *DOC* objLay)))
(setq *Currentlayers* (cons nil *Currentlayers*)))
(princ))
(defun MAKE_LAYERS (LAY_NAM / LAYOBJ LAYSOBJ) (or *DOC* (setq *DOC* (vla-get-activedocument (vlax-get-acad-object))))
(setq LAYSOBJ (vla-get-layers *DOC*))
(if (tblobjname "layer" LAY_NAM) (setq LAYOBJ (vla-item LAYSOBJ LAY_NAM))
(setq LAYOBJ (vl-catch-all-apply 'vla-add (list LAYSOBJ LAY_NAM))))
(if (vl-catch-all-error-p LAYOBJ) (not (print (vl-catch-all-error-message LAYOBJ)))
(progn (if (= (strcase (vla-get-name LAYOBJ)) (strcase (getvar "clayer")))
(setvar "clayer" "0"))
(vla-put-lock LAYOBJ :vlax-false) (vla-put-layeron LAYOBJ :vlax-true) (vla-put-freeze LAYOBJ :vlax-false) LAYOBJ)))
(defun endCommand (CALL CALLBACK) (if *Currentlayers* (if (car *Currentlayers*)
(progn (vla-put-lock (vla-item (vla-get-layers *DOC*) (car *Currentlayers*)) :vlax-false) (setvar "CLAYER" (car *Currentlayers*)))))
(setq *Currentlayers* (cdr *Currentlayers*)))
(defun cancelCommand (CALL CALLBACK) (if *Currentlayers* (if (car *Currentlayers*)
(progn (vla-put-lock (vla-item (vla-get-layers *DOC*) (car *Currentlayers*)) :vlax-false) (setvar "CLAYER" (car *Currentlayers*)))))
(setq *Currentlayers* (cdr *Currentlayers*)))
(defun C:LAYER_ON ()
(and *vlr-CWS (not (vlr-added-p *vlr-CWS)) (vlr-add *vlr-CWS))
(and *vlr-CE (not (vlr-added-p *vlr-CE)) (vlr-add *vlr-CE))
(and *vlr-CC (not (vlr-added-p *vlr-CC)) (vlr-add *vlr-CC))
(or *vlr-CWS (setq *vlr-CWS (vlr-command-reactor nil '((:vlr-commandwillstart . StartCommand)))))
(or *vlr-CE (setq *vlr-CE (vlr-command-reactor nil '((:vlr-commandEnded . endCommand)))))
(or *vlr-CC (setq *vlr-CC (vlr-command-reactor nil '((:vlr-commandCancelled . cancelCommand)))))
(princ "\nLayer Reactor ON")
(princ))
(C:LAYER_ON)
(defun C:LAYER_OFF ()
(and *vlr-CWS (vlr-added-p *vlr-CWS) (vlr-remove *vlr-CWS))
(and *vlr-CE (vlr-added-p *vlr-CE) (vlr-remove *vlr-CE))
(and *vlr-CC (vlr-added-p *vlr-CC) (vlr-remove *vlr-CC))
(princ "\nLayer Reactor OFF")
(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
4 giờ trước, Nguyễn Phương Quang đã nói:

Bác dùng Lisp này thử xem!

;;;******************TU DONG CHUYEN LAYER THEO NET VE CAN DUNG********************
(vl-load-com)
(defun StartCommand (CALL CALLBACK / COMLAYLST)
(setq COMLAYLST (list
(list "DIMANGULAR" "DIM STYLE")
,.........
(defun C:LAYER_ON ()
(C:LAYER_ON)
(defun C:LAYER_OFF ()
 

Hiện tại đang dùng lisp của lee mac thấy cũng ổn. Với lên cad 2018 cũng hỗ trợ set layer khi dim, hatch, center... Rồi.

Rất cám ơn bạn đã quan tâm. Có thêm lisp để tham khảo.

  • Like 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ạ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
Đăng nhập để thực hiện theo  

×