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

[yêu cầu] lisp đổi layer cho các text.

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

Trong 1 file cad mình có các text là số và chữ. Các text này cùng 1 layer. Làm thế nào để đổi layer tùy theo từng loại text nhưa sau:

1.Text là số dương.

2.Text là số âm

3.Text là chữ số

Diển giải lệnh:

+ nhập lệnh: doi_layer

+ loại text đổi layer <1;2;3>: chọn 1 Text là số dương

chọn 2.Text là số âm

chọn 3.Text là chữ số

+ chọn đối tượng: (dùng chuột chọn đối tượng)

+ nhập tên name layer sau khi thay đổi:

vi dụ:trong file cad có các text: 1 ; 2; 3; 4; 5; 6; -5; -2; ab; cd. và các layer là : text; text am; text duong; text xh. Ban đầu 9 đối tượng text này cùng layer name là :text.

diển giải lisp:

+ nhập lệnh: doi_layer

+ loại text đổi layer <1;2;3>: 1

+ chọn đối tượng: (dùng chuột chọn các text 1 ; 2; 3; 4; 5; 6; -5; -2; ab; cd)

+ nhập tên name layer sau khi thay đổi: text duong

 

sau khi chạy lệnh trên: các text: -5; -2; ab; cd có layer là text. Các text 1 ; 2; 3; 4; 5; 6 có layer là text duong!

rất mong được sự giúp đỡ của các bạn!

Chỉnh sửa theo lolo0011
  • 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

Trong 1 file cad mình có các text là số và chữ. Các text này cùng 1 layer. Làm thế nào để đổi layer tùy theo từng loại text nhưa sau:

1.Text là số dương.

2.Text là số âm

3.Text là chữ số

Diển giải lệnh:

+ nhập lệnh: doi_layer

+ loại text đổi layer <1;2;3>: chọn 1 Text là số dương

chọn 2.Text là số âm

chọn 3.Text là chữ số

+ chọn đối tượng: (dùng chuột chọn đối tượng)

+ nhập tên name layer sau khi thay đổi:

vi dụ:trong file cad có các text: 1 ; 2; 3; 4; 5; 6; -5; -2; ab; cd. và các layer là : text; text am; text duong; text xh. Ban đầu 9 đối tượng text này cùng layer name là :text.

diển giải lisp:

+ nhập lệnh: doi_layer

+ loại text đổi layer <1;2;3>: 1

+ chọn đối tượng: (dùng chuột chọn các text 1 ; 2; 3; 4; 5; 6; -5; -2; ab; cd)

+ nhập tên name layer sau khi thay đổi: text duong

 

sau khi chạy lệnh trên: các text: -5; -2; ab; cd có layer là text. Các text 1 ; 2; 3; 4; 5; 6 có layer là text duong!

rất mong được sự giúp đỡ của các bạn!

Quick Code đây bạn :

(defun c:test(/ Layer1 Layer2 ss e str)
(setq Layer1 "1") ;; thay ten layer text duong "1" o day
(setq Layer2 "2") ;; thay ten layer text âm "2" o day
(setq Layer3 "3") ;; thay ten layer text chu "3" o day
(setq i -1)
(if (setq ss (ssget '((0 . "*TEXT") (1 . "*"))))
(while (setq e (ssname ss (setq i (1+ i))))
(setq str (cdr(assoc 1 (entget e))))
(command "chprop" e "" "LA" (if (not (distof str)) layer3
  		     (if (>= (atof str) 0) layer1 layer2)
  	     	) ""
)
)
)
)

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 đây:

(defun C:HA()
(if (not (tblsearch "layer" "Text am")) (Command "layer" "N" "Text am" ""))
(if (not (tblsearch "layer" "Text duong")) (Command "layer" "N" "Text duong" ""))
(if (not (tblsearch "layer" "Text xh")) (Command "layer" "N" "Text xh" ""))
(princ "\nChon doi tuong...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))))
(initget "1 2 3") (setq kieu (getkword "\nLoai Text doi Layer [1/2/3]<1>: "))
(if (= kieu nil) (setq kieu "1"))
(foreach ent entlst
 (cond
  ((and (= kieu "1") (> (distof (cdr (assoc 1 (entget ent)))) 0))
(entmod (subst (cons 8 "Text duong") (assoc 8 (entget ent)) (entget ent))))
  ((and (= kieu "2") (< (distof (cdr (assoc 1 (entget ent)))) 0))
(entmod (subst (cons 8 "Text am") (assoc 8 (entget ent)) (entget ent))))
  ((and (= kieu "3") (/= (distof (cdr (assoc 1 (entget ent)))) nil))
(entmod (subst (cons 8 "Text xh") (assoc 8 (entget ent)) (entget ent))))))
(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

Hoặc đây:

(defun C:HA()
(if (not (tblsearch "layer" "Text am")) (Command "layer" "N" "Text am" ""))
(if (not (tblsearch "layer" "Text duong")) (Command "layer" "N" "Text duong" ""))
(if (not (tblsearch "layer" "Text xh")) (Command "layer" "N" "Text xh" ""))
(princ "\nChon doi tuong...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))))
(initget "1 2 3") (setq kieu (getkword "\nLoai Text doi Layer [1/2/3]<1>: "))
(if (= kieu nil) (setq kieu "1"))
(foreach ent entlst
 (cond
  ((and (= kieu "1") (> (distof (cdr (assoc 1 (entget ent)))) 0))
(entmod (subst (cons 8 "Text duong") (assoc 8 (entget ent)) (entget ent))))
  ((and (= kieu "2") (< (distof (cdr (assoc 1 (entget ent)))) 0))
(entmod (subst (cons 8 "Text am") (assoc 8 (entget ent)) (entget ent))))
  ((and (= kieu "3") (/= (distof (cdr (assoc 1 (entget ent)))) nil))
(entmod (subst (cons 8 "Text xh") (assoc 8 (entget ent)) (entget ent))))))
(princ))

he he! Hôm qua cũng vấn đề này nhưng diễn giải mãi bay giờ bạn đã hiểu ý mình và cách làm rất là Ok. Cảm ơn sự nhiệt tình của bạn van Ha; cảm ơn bạn Tue_NV nữa nhé. Mình chạy 2 lisp của 2 bạn rồi. Bạn Tue_NV hiểu nhầm ý mình lisp của bạn là đổi layer đang có. Ý của mình giống như lisp của bạn Ha ấy! hình như chọn 3 không chọn layer cho test là chữ. Chỉ được 1 và 2 thôi.Nhưng dù sao sao như vay cũng OK lắm 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

Đăng nhập để thực hiện theo  

×