Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
vodoifx

[Yêu Cầu] Cộng, Trừ, Nhân, Chia Hàng Loạt Att Cùng Tagname Trong Block Với Cùng 1 Số

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

vodoifx    1

Em có tham khảo lisp đánh số thứ tự bản vẽ để viết Cộng, trừ, nhân, chia hàng loạt Att cùng tagName trong Block với 1 số, nhưng khả năng có hạn nên chưa thể viết được. Mong các bác giúp em 
Lisp đánh sốt thứ tự Block

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=38369&st=0&p=139366&hl=esport113&fromsearch=1entry139366
(defun c:stt (/ ans ins lst blkName tagName ent);Block Order
;; By : Gia_Bach, www.CadViet.com ;;
(vl-load-com)
(while (not (and
(setq ent (car (nentsel "\n Chon thuoc tinh can danh so: ")))
(if ent (eq (cdr (assoc 0 (entget ent))) "ATTRIB") ) ) )
(princ "\n Ban chon nham roi! ") )
(setq blkName (cdr (assoc 2 (entget (cdr (assoc 330 (entget ent))))))
tagName (cdr (assoc 2 (entget ent))) )

(initget 1 "Yes No")
(setq x (getkword "\nBan co muon nhap Tien to ? (Yes or No) "))
(if (= x "Yes")
(progn
(or prefix (setq prefix "KC-"))
(setq ans (getstring t (strcat "\n Nhap tien to <<"prefix ">> :")))
(if (/= ans "")(setq prefix ans)) )
(setq prefix ""))

(or stt (setq stt 1))
(initget 6)
(setq ans (getint (strcat "\n Nhap so bat dau <<"(itoa stt) ">> :")))
(if ans (setq stt ans))
(if (> stt 9)
(setq str (strcat prefix (itoa stt)))
(setq str (strcat prefix "0" (itoa stt))) )

(princ "\nChon Khung ten can danh so thu tu :")
(if (ssget(list (cons 0 "INSERT")(cons 66 1)(cons 2 blkName)))
(progn
(vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(setq ins (vlax-safearray->list (variant-value (vla-get-InsertionPoint e)))
lst (cons (list e ins)lst)) )
(setq lst (vl-sort lst '(lambda (x y) (or (> (cadr (cadr x)) (cadr (cadr y)))
(and (< (car (cadr x)) (car (cadr y)))
(= (cadr (cadr x)) (cadr (cadr y))) ) ) ) ))
(foreach e (append (mapcar 'car lst) )
(foreach Att (vlax-invoke e 'GetAttributes)
(if (= (vla-get-TagString att) tagName)
(vla-put-TextString att str) ))
(setq stt (+ 1 stt))
(if (> stt 9)
(setq str (strcat prefix (itoa stt)))
(setq str (strcat prefix "0" (itoa stt))) ) ) ) )
(princ))

 

 

Lisp cộng trừ nhân chia ATT với 1 số 

 

(defun c:at (/ goc cal e1 en numb Kieudoc)
(setq Kieudoc (cond (Kieudoc) ("Cong")))
(initget "1 2 3 4")
(setq Kieudoc (cond ((getkword (strcat "\Chon kieu can text [1 - Cong/2 - Tru/3 - Nhan/4 - Chia]<" Kieudoc ">"))) (Kieudoc)))
(setq goc1 (car (nentsel "\n Chon ATT can tinh")))
(redraw goc1 3)
(setq goc (atof (cdr (assoc 1 (entget goc1 )))))
(setq numb (getreal "\nNhap so Or bo qua de chon so: "))
(if (or (= numb nil) (= numb ""))
(setq numb (atof (cdr (assoc 1 (entget (car (entsel "\nChon so : "))))))))
(cond
((eq Kieudoc "1") (setq goc (+ goc numb)))
((eq Kieudoc "2") (setq goc (- goc numb)))
((eq Kieudoc "3") (setq goc (* goc numb)))
((eq Kieudoc "4") (setq goc (/ goc numb))))
(entmod (subst (cons 1 (rtos goc 2 2)) (assoc 1 (entget goc1)) (entget goc1)))
(entupd goc1))
  • Vote giảm 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
Bee    108

Em có tham khảo lisp đánh số thứ tự bản vẽ để viết Cộng, trừ, nhân, chia hàng loạt Att cùng tagName trong Block với 1 số, nhưng khả năng có hạn nên chưa thể viết được. Mong các bác giúp em 

Lisp đánh sốt thứ tự Block

;; free lisp from cadviet.com

;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=38369&st=0&p=139366&hl=esport113&fromsearch=1entry139366

(defun c:stt (/ ans ins lst blkName tagName ent);Block Order

;; By : Gia_Bach, www.CadViet.com ;;

(vl-load-com)

(while (not (and

(setq ent (car (nentsel "\n Chon thuoc tinh can danh so: ")))

(if ent (eq (cdr (assoc 0 (entget ent))) "ATTRIB") ) ) )

(princ "\n Ban chon nham roi! ") )

(setq blkName (cdr (assoc 2 (entget (cdr (assoc 330 (entget ent))))))

tagName (cdr (assoc 2 (entget ent))) )

 

(initget 1 "Yes No")

(setq x (getkword "\nBan co muon nhap Tien to ? (Yes or No) "))

(if (= x "Yes")

(progn

(or prefix (setq prefix "KC-"))

(setq ans (getstring t (strcat "\n Nhap tien to <<"prefix ">> :")))

(if (/= ans "")(setq prefix ans)) )

(setq prefix ""))

 

(or stt (setq stt 1))

(initget 6)

(setq ans (getint (strcat "\n Nhap so bat dau <<"(itoa stt) ">> :")))

(if ans (setq stt ans))

(if (> stt 9)

(setq str (strcat prefix (itoa stt)))

(setq str (strcat prefix "0" (itoa stt))) )

 

(princ "\nChon Khung ten can danh so thu tu :")

(if (ssget(list (cons 0 "INSERT")(cons 66 1)(cons 2 blkName)))

(progn

(vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-Acad-Object)))

(setq ins (vlax-safearray->list (variant-value (vla-get-InsertionPoint e)))

lst (cons (list e ins)lst)) )

(setq lst (vl-sort lst '(lambda (x y) (or (> (cadr (cadr x)) (cadr (cadr y)))

(and (< (car (cadr x)) (car (cadr y)))

(= (cadr (cadr x)) (cadr (cadr y))) ) ) ) ))

(foreach e (append (mapcar 'car lst) )

(foreach Att (vlax-invoke e 'GetAttributes)

(if (= (vla-get-TagString att) tagName)

(vla-put-TextString att str) ))

(setq stt (+ 1 stt))

(if (> stt 9)

(setq str (strcat prefix (itoa stt)))

(setq str (strcat prefix "0" (itoa stt))) ) ) ) )

(princ))

 

 

Lisp cộng trừ nhân chia ATT với 1 số 

 

(defun c:at (/ goc cal e1 en numb Kieudoc)

(setq Kieudoc (cond (Kieudoc) ("Cong")))

(initget "1 2 3 4")

(setq Kieudoc (cond ((getkword (strcat "\Chon kieu can text [1 - Cong/2 - Tru/3 - Nhan/4 - Chia]<" Kieudoc ">"))) (Kieudoc)))

(setq goc1 (car (nentsel "\n Chon ATT can tinh")))

(redraw goc1 3)

(setq goc (atof (cdr (assoc 1 (entget goc1 )))))

(setq numb (getreal "\nNhap so Or bo qua de chon so: "))

(if (or (= numb nil) (= numb ""))

(setq numb (atof (cdr (assoc 1 (entget (car (entsel "\nChon so : "))))))))

(cond

((eq Kieudoc "1") (setq goc (+ goc numb)))

((eq Kieudoc "2") (setq goc (- goc numb)))

((eq Kieudoc "3") (setq goc (* goc numb)))

((eq Kieudoc "4") (setq goc (/ goc numb))))

(entmod (subst (cons 1 (rtos goc 2 2)) (assoc 1 (entget goc1)) (entget goc1)))

(entupd goc1))

Lisp chạy cho 1 att rồi còn gì.! Chạy nhiều thì cứ enter tiếp tục thoai. ^_^

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
vodoifx    1

Lisp chạy cho 1 att rồi còn gì.! Chạy nhiều thì cứ enter tiếp tục thoai. ^_^

Lisp dưới là em dựa trên lisp của bác phamthanhbinh để sửa thành. Dùng được nhưng chỉ áp dụng cho 1 ATT

Em muốn viết cho hàng loạt ATT và đang xem cách nào làm đc. Em có 1 số câu hỏi như sau

 

1 . làm thế nào để lấy đc giá trị 

(setq goc (atof (cdr (assoc 1 (entget ATT )))))

trong Block của lisp bác BachGia

 

2. Khi thay thế giá trị trong ATT thì làm sao biết được đối tương ATT đã được lọc ra từ Block

(vla-put-TextString att str) ))

(setq stt (+ 1 stt))

 

Note: em cũng chỉ vọc vạch thôi. chứ chưa được sâu sắc ạ.

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
Bee    108

Lisp dưới là em dựa trên lisp của bác phamthanhbinh để sửa thành. Dùng được nhưng chỉ áp dụng cho 1 ATT

Em muốn viết cho hàng loạt ATT và đang xem cách nào làm đc. Em có 1 số câu hỏi như sau

 

1 . làm thế nào để lấy đc giá trị 

(setq goc (atof (cdr (assoc 1 (entget ATT )))))

trong Block của lisp bác BachGia

 

2. Khi thay thế giá trị trong ATT thì làm sao biết được đối tương ATT đã được lọc ra từ Block

(vla-put-TextString att str) ))

(setq stt (+ 1 stt))

 

Note: em cũng chỉ vọc vạch thôi. chứ chưa được sâu sắc ạ.

2. đây, cho nó cái vòng lặp lựa chọn hết att, cái nào có tagstring trùng với tagName thì put-textstring.................

 

(foreach Att (vlax-invoke e 'GetAttributes) (if (= (vla-get-TagString att) tagName) (vla-put-TextString att str) ))

 

1. (setq goc (atof (cdr (assoc 1 (entget ATT ))))) ->goc- la gia tri cu the roi con gi !

 

 

^_^

 

"Lisp dưới là em dựa trên lisp của bác phamthanhbinh để sửa thành. Dùng được nhưng chỉ áp dụng cho 1 ATT

Em muốn viết cho hàng loạt ATT và đang xem cách nào làm đc. Em có 1 số câu hỏi như sau"

 

- chọn tên block có att cần sửa

- ssget hết tất block có tên trên

- cho vòng lặp duyệt từng block

- lấy tên từng att trong block và put texstring thôi.

 

Good luck.

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  

×