Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

[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ố


  • Please log in to reply
3 replies to this topic

#1 vodoifx

vodoifx

    biết vẽ line

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

Đã gửi 24 April 2017 - 03:33 PM

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=1&#entry139366
(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))


  • -1

#2 Bee

Bee

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 298 Bài viết
Điểm đánh giá: 98 (tàm tạm)

Đã gửi 25 April 2017 - 01:55 PM

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=1&#entry139366
(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. ^_^


  • 0

#3 vodoifx

vodoifx

    biết vẽ line

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

Đã gửi 25 April 2017 - 05:55 PM

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


  • 0

#4 Bee

Bee

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 298 Bài viết
Điểm đánh giá: 98 (tàm tạm)

Đã gửi 25 April 2017 - 06:14 PM

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.


  • 0