Chuyển đến nội dung
Diễn đàn CADViet
proconeng86

[Xin] lisp chuyển màu các thuộc tính dynamic block

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

Trong CAD có phần chèn field rất là hay, mình chỉ cần đổi cái FIELD gốc là các cái khác tự động đổi theo. Mình có tìm được 1 lisp có thể chèn field trong block nhưng chỉ trong block thường thôi, còn dynamic block thì bó tay

Cái chèn field này mình cũng rất hay dùng trong các dynamic block ghi chú cốt thép như trong field đính kèm nên mình mong các bạn chỉnh sửa lại lisp giúp mình để có thể sử dụng được với dynamic block thì tốt quá.

nội dung lisp như sau:

 - đưa ra lựa chọn dynamic block mẫu

 - hiện lên bảng lựa chọn tên các attribute trong dynamic block mẫu để chọn gán giá trị (như trong file đính kèm)

 - đưa ra lựa chọn những dynamic block sẽ gán theo attribute đã lựa chọn

 - hiện bảng lựa chọn tên attribute để gán giá trị (hoặc nếu cùng 1 loại dynamic block thì gán giá trị luôn, ko phải hiện)

 - gán giá trị của attribute mẫu cho attribute đã lựa chọn

 - kết thúc lệnh

Lưu ý: lisp cũng dùng được với text thì tốt quá. Các bạn có ý nào hay hơn mình cho lisp thì cho ý kiến nhé

Mong các bạn giúp đỡ nhất là bạn @Tot77 nhé  :)

Mình cám ơn nhiều

http://www.cadviet.com/upfiles/3/9928_chen_field.lsp

http://www.cadviet.com/upfiles/3/9928_dynamic_block_5.dwg

  • 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

Gửi bạn lisp link field giữa dynamic block.


 
;;;===========chen field 1 dynamic block vao dynamic block khac ======================
 
(defun C:FFL (/ blk_name ent field i obj obj1 ss ss1)
;|  By : Gia Bach, gia_bach@www.CadViet.com   |;
  (princ "\nChon Block thuoc tinh nguon :")
  (if (setq ss1 (ssget "+.:S:N" (list (cons 0 "INSERT") (cons 66 1))))
      (setq obj1 (vlax-Ename->Vla-Object (ssname ss1 0))
   blk_name (vla-get-effectivename obj1)
   field (mapcar '(lambda(x) (list (vla-get-TagString x) x)) (vlax-invoke Obj1 'GetAttributes))
      )
  )
  (princ "\nChon Block thuoc tinh can Link :")
  (if (setq ss (ssget (list (cons 0 "INSERT") (cons 66 1))))
    (progn
      (setq i -1)
      (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-Ename->Vla-Object ent))
(if (= (vla-get-effectivename obj) blk_name)
 (foreach v (vlax-invoke Obj 'GetAttributes)
   (if (setq tm (assoc (vla-get-TagString v) field))
     (vla-put-TextString v (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-Objectid (cadr tm)))
      ">%).TextString>%")))))
     ))
  )
  (vl-cmdf "regen")
  (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

Gửi bạn lisp link field giữa dynamic block.


 
;;;===========chen field 1 dynamic block vao dynamic block khac ======================
 
(defun C:FFL (/ blk_name ent field i obj obj1 ss ss1)
;|  By : Gia Bach, gia_bach@www.CadViet.com   |;
  (princ "\nChon Block thuoc tinh nguon :")
  (if (setq ss1 (ssget "+.:S:N" (list (cons 0 "INSERT") (cons 66 1))))
      (setq obj1 (vlax-Ename->Vla-Object (ssname ss1 0))
   blk_name (vla-get-effectivename obj1)
   field (mapcar '(lambda(x) (list (vla-get-TagString x) x)) (vlax-invoke Obj1 'GetAttributes))
      )
  )
  (princ "\nChon Block thuoc tinh can Link :")
  (if (setq ss (ssget (list (cons 0 "INSERT") (cons 66 1))))
    (progn
      (setq i -1)
      (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-Ename->Vla-Object ent))
(if (= (vla-get-effectivename obj1) blk_name)
 (foreach v (vlax-invoke Obj 'GetAttributes)
   (if (setq tm (assoc (vla-get-TagString v) field))
     (vla-put-TextString v (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-Objectid (cadr tm)))
      ">%).TextString>%")))))
     ))
  )
  (vl-cmdf "regen")
  (princ)
)

 

Bạn xem lại hộ mình nhé, nó bị lỗi gì đó không dùng được

9928_5122014_55631_pm_loi_lisp_chen_fiel

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ôi sửa lại rồi, có sai 1 chỗ, bạn down lại theo link dưới đây.

http://www.mediafire.com/download/k11y41q4temc49b/CHEN_FIELD.lsp

 

Cám ơn bạn nhiều, lisp đã dùng được cho dynamic block nhưng nó chèn tất cả các attribute rồi, không phải khi nào cũng cần chèn hết thế, nên có bảng lựa chọn như ý trước của mình thì sẽ dễ hơn. ngoài ra phải là 2 block giống hệt nhau mới dùng được, mình có 2 dynamic block như trong file đính kèm, muốn chèn field cho nhau nhưng không được, bạn xem hộ mình cái nhé

http://www.mediafire.com/download/c6nfoyf38zs09h0/dynamic_block.dwg

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ậy thì dùng cái này, bạn nhấp vào Att nào đó của block mẫu, sau đó chọn các block khác, cái nào có tag giống tag mẫu sẽ link.


 
;;;===========chen field 1 dynamic block vao dynamic block khac ======================
 
(defun C:FFL (/ v1 obj1 field ss ent i obj)
  (if (setq v1 (car (nentsel "\nChon Attribute  nguon :")))
      (setq obj1 (vlax-Ename->Vla-Object v1)
   field (list (vla-get-TagString obj1) obj1)
      )
  )
  (princ "\nChon Dynamic Block can Link :")
  (if (setq ss (ssget (list (cons 0 "INSERT") (cons 66 1))))
    (progn
      (setq i -1)
      (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-Ename->Vla-Object ent))
(foreach v (vlax-invoke Obj 'GetAttributes)
   (if (member (vla-get-TagString v) field)
     (vla-put-TextString v (strcat "%<\\AcObjProp Object(%<\\_ObjId "
 (itoa (vla-get-Objectid obj1)) ">%).TextString>%")))))
  ))
  (vl-cmdf "regen")
  (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

Vậy thì dùng cái này, bạn nhấp vào Att nào đó của block mẫu, sau đó chọn các block khác, cái nào có tag giống tag mẫu sẽ link.


 
;;;===========chen field 1 dynamic block vao dynamic block khac ======================
 
(defun C:FFL (/ v1 obj1 field ss ent i obj)
  (if (setq v1 (car (nentsel "\nChon Attribute  nguon :")))
      (setq obj1 (vlax-Ename->Vla-Object v1)
   field (list (vla-get-TagString obj1) obj1)
      )
  )
  (princ "\nChon Dynamic Block can Link :")
  (if (setq ss (ssget (list (cons 0 "INSERT") (cons 66 1))))
    (progn
      (setq i -1)
      (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-Ename->Vla-Object ent))
(foreach v (vlax-invoke Obj 'GetAttributes)
   (if (member (vla-get-TagString v) field)
     (vla-put-TextString v (strcat "%<\\AcObjProp Object(%<\\_ObjId "
 (itoa (vla-get-Objectid obj1)) ">%).TextString>%")))))
  ))
  (vl-cmdf "regen")
  (princ)
)

Cám ơn bạn nhiều lắm, lisp này dùng với dynamic block thế là ổn rồi nhưng bạn sửa lại lisp chèn toàn bộ attribute nhé, vì lisp đó chưa dùng được cho 2 dynamic block khác nhau.

Ngoài ra bạn chế thêm cho mình để nó áp dụng được với cả text nhé, text chèn vào text, chèn luôn content của text 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

Vậy thì dùng cái này, bạn nhấp vào Att nào đó của block mẫu, sau đó chọn các block khác, cái nào có tag giống tag mẫu sẽ link.


 
;;;===========chen field 1 dynamic block vao dynamic block khac ======================
 
(defun C:FFL (/ v1 obj1 field ss ent i obj)
  (if (setq v1 (car (nentsel "\nChon Attribute  nguon :")))
      (setq obj1 (vlax-Ename->Vla-Object v1)
   field (list (vla-get-TagString obj1) obj1)
      )
  )
  (princ "\nChon Dynamic Block can Link :")
  (if (setq ss (ssget (list (cons 0 "INSERT") (cons 66 1))))
    (progn
      (setq i -1)
      (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-Ename->Vla-Object ent))
(foreach v (vlax-invoke Obj 'GetAttributes)
   (if (member (vla-get-TagString v) field)
     (vla-put-TextString v (strcat "%<\\AcObjProp Object(%<\\_ObjId "
 (itoa (vla-get-Objectid obj1)) ">%).TextString>%")))))
  ))
  (vl-cmdf "regen")
  (princ)
)

 

Nếu mà att có tag khác thì không dùng được, bạn có thể sửa thành mình chọn att nào thì sẽ chèn được luôn vào att đó được khô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

Lisp dưới đây có 2 lệnh:

1. Lệnh LK1 : chọn 1 att hoặc 1 text làm nguồn, nhấp vào att hoặc text khác để chèn link. Lệnh này không phụ thuộc tag của att.

2. Lệnh LK2 : chọn nhiều att của block nguồn, xong enter, rồi quét chọn các block khác, nếu att nào của block đó có tag giống tag của att nguồn thì sẽ link. Lệnh này không phụ thuộc tên block, chỉ phụ thuộc tên tag.

http://www.mediafire.com/download/qj1hnwxlone4zh9/CHEN_FIELD_1.lsp

  • 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

Lisp dưới đây có 2 lệnh:

1. Lệnh LK1 : chọn 1 att hoặc 1 text làm nguồn, nhấp vào att hoặc text khác để chèn link. Lệnh này không phụ thuộc tag của att.

2. Lệnh LK2 : chọn nhiều att của block nguồn, xong enter, rồi quét chọn các block khác, nếu att nào của block đó có tag giống tag của att nguồn thì sẽ link. Lệnh này không phụ thuộc tên block, chỉ phụ thuộc tên tag.

http://www.mediafire.com/download/qj1hnwxlone4zh9/CHEN_FIELD_1.lsp

 

OK, cám ơn Tot77 nhiều nhé, lisp này là ngon 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

 

 

Trước mình dùng cad 2010 thì ok nhưng giờ mình sử dụng cad 2014 ko hiểu sao lisp đó lại có 1 trên  lệnh bị lỗi, ko hiểu vì sao nữa, là lệnh MAT4, các bạn chỉnh lại cho mình cái nhé

ngoài ra mình nhờ các bạn giúp mình bổ sung thêm 1 lệnh cũng gần gần như vậy

lisp đó như sau:

   - chọn att có chứa đường kính có mầu gốc (mình chỉ sử dụng kí hiệu %%C để kí hiệu đường kính thép)

   - sau đó chọn block att cần đổi mầu và chỉ đổi màu những att nào chứa đường kính giống như đường kính đã chọn trong block trước. ví dụ chọn att ghi là 5fi10 màu 15 (fi là kí hiệu %%C nhé) làm gốc, sau đó chọn các block att khác và chỉ đổi màu att nào chứa kí hiệu fi10 (chỉ cần có fi10 là đổi màu luôn chứ ko cần chính xác nội dung như lẹnh MAT 1 nhé)

Mình cám ơn nhiều

 

http://www.mediafire.com/download/0fpmefqod70t7ol/loi+lenh+MAT4+tren+cad+2014.png

http://www.mediafire.com/download/e8ak1vrd2fcsdcl/mau+block+thep.dwg

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

 

Trước mình dùng cad 2010 thì ok nhưng giờ mình sử dụng cad 2014 ko hiểu sao lisp đó lại có 1 trên  lệnh bị lỗi, ko hiểu vì sao nữa, là lệnh MAT4, các bạn chỉnh lại cho mình cái nhé

ngoài ra mình nhờ các bạn giúp mình bổ sung thêm 1 lệnh cũng gần gần như vậy

lisp đó như sau:

   - chọn att có chứa đường kính có mầu gốc (mình chỉ sử dụng kí hiệu %%C để kí hiệu đường kính thép)

   - sau đó chọn block att cần đổi mầu và chỉ đổi màu những att nào chứa đường kính giống như đường kính đã chọn trong block trước. ví dụ chọn att ghi là 5fi10 màu 15 (fi là kí hiệu %%C nhé) làm gốc, sau đó chọn các block att khác và chỉ đổi màu att nào chứa kí hiệu fi10 (chỉ cần có fi10 là đổi màu luôn chứ ko cần chính xác nội dung như lẹnh MAT 1 nhé)

Mình cám ơn nhiều

 

http://www.mediafire.com/download/0fpmefqod70t7ol/loi+lenh+MAT4+tren+cad+2014.png

http://www.mediafire.com/download/e8ak1vrd2fcsdcl/mau+block+thep.dwg

 

 

Các cao thủ  Tue_NV, Tot77, ketxu, Doan Van Ha, Nguyen Hoanh đâu hết rồi, giúp mình cái

Mình cám ơn nhiều

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

 

Trước mình dùng cad 2010 thì ok nhưng giờ mình sử dụng cad 2014 ko hiểu sao lisp đó lại có 1 trên  lệnh bị lỗi, ko hiểu vì sao nữa, là lệnh MAT4, các bạn chỉnh lại cho mình cái nhé

ngoài ra mình nhờ các bạn giúp mình bổ sung thêm 1 lệnh cũng gần gần như vậy

lisp đó như sau:

   - chọn att có chứa đường kính có mầu gốc (mình chỉ sử dụng kí hiệu %%C để kí hiệu đường kính thép)

   - sau đó chọn block att cần đổi mầu và chỉ đổi màu những att nào chứa đường kính giống như đường kính đã chọn trong block trước. ví dụ chọn att ghi là 5fi10 màu 15 (fi là kí hiệu %%C nhé) làm gốc, sau đó chọn các block att khác và chỉ đổi màu att nào chứa kí hiệu fi10 (chỉ cần có fi10 là đổi màu luôn chứ ko cần chính xác nội dung như lẹnh MAT 1 nhé)

Mình cám ơn nhiều

 

http://www.mediafire.com/download/0fpmefqod70t7ol/loi+lenh+MAT4+tren+cad+2014.png

http://www.mediafire.com/download/e8ak1vrd2fcsdcl/mau+block+thep.dwg

 

 

Hic, không bạn nào giúp mình được ah  :(

  • Vote giảm 2

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

 

Trước mình dùng cad 2010 thì ok nhưng giờ mình sử dụng cad 2014 ko hiểu sao lisp đó lại có 1 trên  lệnh bị lỗi, ko hiểu vì sao nữa, là lệnh MAT4, các bạn chỉnh lại cho mình cái nhé

ngoài ra mình nhờ các bạn giúp mình bổ sung thêm 1 lệnh cũng gần gần như vậy

lisp đó như sau:

   - chọn att có chứa đường kính có mầu gốc (mình chỉ sử dụng kí hiệu %%C để kí hiệu đường kính thép)

   - sau đó chọn block att cần đổi mầu và chỉ đổi màu những att nào chứa đường kính giống như đường kính đã chọn trong block trước. ví dụ chọn att ghi là 5fi10 màu 15 (fi là kí hiệu %%C nhé) làm gốc, sau đó chọn các block att khác và chỉ đổi màu att nào chứa kí hiệu fi10 (chỉ cần có fi10 là đổi màu luôn chứ ko cần chính xác nội dung như lẹnh MAT 1 nhé)

Mình cám ơn nhiều

 

http://www.mediafire.com/download/0fpmefqod70t7ol/loi+lenh+MAT4+tren+cad+2014.png

http://www.mediafire.com/download/e8ak1vrd2fcsdcl/mau+block+thep.dwg

 

 

Có bạn nào giúp mình chút với, mình nghĩ cái này đâu khó nhỉ  :(

  • Vote giảm 2

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

Đâu có khó, nhất là với 1 thành viên kỳ cựu như bạn. Trong 5 cao thủ trên thì bạn là member trước 3 cao thủ: Tot77, ketxu, Doan Van Ha.

Sao bạn không tự hỏi tại sao họ trở thành cao thủ còn bạn thì là thêm 1 ngày nữa là thành viên 7 năm 4 tháng tuổi cadviet mà vẫn còn là cao thủ chuyên "Xin, xin nữa, xin mãi"

  • 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

Đâu có khó, nhất là với 1 thành viên kỳ cựu như bạn. Trong 5 cao thủ trên thì bạn là member trước 3 cao thủ: Tot77, ketxu, Doan Van Ha.

Sao bạn không tự hỏi tại sao họ trở thành cao thủ còn bạn thì là thêm 1 ngày nữa là thành viên 7 năm 4 tháng tuổi cadviet mà vẫn còn là cao thủ chuyên "Xin, xin nữa, xin mãi"

 

Mình là kĩ sư kết cấu, mình không được học qua về CAD nâng cao như lisp đâu nên hoàn toàn mù tịt về lisp. các bạn được học qua rồi, biết nhiều thì chia sẻ cho mọi người thì rất tốt mà. ngoài ra nghĩ ra được yêu cầu lisp cũng là một điều tốt, không có yêu cầu thì làm sao mà viết được. yêu cầu của mình thì nhiều người cũng giống như vậy, các bạn viết cho mình nhưng thật ra là được cho nhiều người, diễn đàn ta ngày một phát triển, đó không phải là điều tốt sao

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

K lạm bàn n Ketxu học Ngoại thương ^^ Lisp cũng không khó lắm đâu, bạn mà có hứng thú thì sẽ chủ động hơn nhiều. Trừ khi chúng ta quay lại bài toán Thời gian, mà, ai trên diễn đàn cũng phải giả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

K lạm bàn n Ketxu học Ngoại thương ^^ Lisp cũng không khó lắm đâu, bạn mà có hứng thú thì sẽ chủ động hơn nhiều. Trừ khi chúng ta quay lại bài toán Thời gian, mà, ai trên diễn đàn cũng phải giải

 

Trước mình cũng thích học chứ, cũng mò vào topic dạy lisp rồi đó nhưng mà nhiều quá, thời gian lại không có. hiện tại mình còn đang phải học revit, adap, ko có thời gian, mà học lisp chắc mất cả năm mất. do đó mới nhờ các bạn. mà có phải nghĩ yêu cầu là dễ đâu, phải làm, va vấp mới thấy bất cập, mới thấy mất thời gian thì mới nghĩ dc yêu cầu chứ. mình nhờ nhưng chắc chắn nhiều người cũng dùng được, mọi người chưa nghĩ ra thôi, cứ theo lối mòn thôi.

mong các bạn giúp đỡ. mình cám ơn

  • Vote giảm 2

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

Trước mình cũng thích học chứ, cũng mò vào topic dạy lisp rồi đó nhưng mà nhiều quá, thời gian lại không có. hiện tại mình còn đang phải học revit, adap, ko có thời gian, mà học lisp chắc mất cả năm mất. do đó mới nhờ các bạn. mà có phải nghĩ yêu cầu là dễ đâu, phải làm, va vấp mới thấy bất cập, mới thấy mất thời gian thì mới nghĩ dc yêu cầu chứ. mình nhờ nhưng chắc chắn nhiều người cũng dùng được, mọi người chưa nghĩ ra thôi, cứ theo lối mòn thôi.

mong các bạn giúp đỡ. mình cám ơn

Tôi không có Cad 2014 để Test -_- , nhưng xem qua Code bác Tot77 là không có lỗi gì. Chỉ trừ trường hợp bản vẽ của bạn không có attchuan = "KT" thì có khả năng lỗi xảy ra :). Chắc bạn phải kiên nhẫn chờ bác Tot77 tái xuất giang hồ  :D 

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

Trước mình cũng thích học chứ, cũng mò vào topic dạy lisp rồi đó nhưng mà nhiều quá, thời gian lại không có. hiện tại mình còn đang phải học revit, adap, ko có thời gian, mà học lisp chắc mất cả năm mất. do đó mới nhờ các bạn. mà có phải nghĩ yêu cầu là dễ đâu, phải làm, va vấp mới thấy bất cập, mới thấy mất thời gian thì mới nghĩ dc yêu cầu chứ. mình nhờ nhưng chắc chắn nhiều người cũng dùng được, mọi người chưa nghĩ ra thôi, cứ theo lối mòn thôi.

mong các bạn giúp đỡ. mình cám ơn

mem này nói cũng có lý đấy chứ,

một yêu cầu xuất phát từ việc phải qua biết bao nhiêu là va vấp. bầm dập, thời gian .....

suy nghĩ nát ... "cái trái nho" mới ra

cái yêu cầu giúp cho anh em ... cách thoát khỏi  ... lối mòn thì đáng trân trọng lắm chứ!

 

PS :

1- proconeng gửi ý tưởng này cho AutoDesk càng sớm càng tốt, họ nhận được chắc là mùng lắm, không khéo lại thưởng cho 1 bộ AutoCad mới ra lò giá trị hàng nghìn mĩ kim chứ lị. (nhắc lại : lộn tiệm rùi, gửi qua CadMỹ nhé)

2- Để tránh kiện tụng sau này, tôi yêu cầu Anh em viết Lisp CadViệt cũng cần quan tâm trả phí bản quyền cho "ý tưởng của người yêu cầu" nhé. (nhớ trả phí ý tưởng này cho tôi luôn)

  • 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

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

×