Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
3 replies to this topic

#1 lolo0011

lolo0011

    biết pan

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

Đã gửi 20 August 2012 - 02:25 PM

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!

Bài viết đã được chỉnh sửa nội dung bởi lolo0011: 20 August 2012 - 02:28 PM

  • 1

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 20 August 2012 - 06:26 PM

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 &#226;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)
) ""
)
)
)
)

  • 0

#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 20 August 2012 - 06:36 PM

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

  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#4 lolo0011

lolo0011

    biết pan

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

Đã gửi 21 August 2012 - 08:09 AM

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.
  • 0