Chuyển đến nội dung
Diễn đàn CADViet
Học AutoCAD Online cùng CADViet
Đăng nhập để thực hiện theo  
conghoa

[request] Gán nhanh giá trị trong Dynamic Block sang Block Att

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

Chào các bạn!

Mình đã tìm trên Cv và GG nhưng chưa có chỗ nào đề cập đến vấn đề này, mình nhờ các bạn làm giúp lisp có nội dung sau:

 

- Mình có 1 DynamicBlock và 1 AttBlock, mình muốn gán 1 giá trị bất kỳ(do mình chọn) của DynamicBlock qua 1 att bất kỳ(Do mình chọn) trong AttBlock và giá trị đó để dưới dạng Field, để sau này có thay đổi DynamicBlock thì AttBlock cũng tự động thay đổi giá trị

 

 

 

Mô tả lisp như file bên dưới

http://www.cadviet.com/upfiles/3/1969_gangiatri.dwg

 

Thanks so much!

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

Có lúc cần chọn giá trị của Distance1, có lúc lại chọn giá trị của Distance2 để gán cho Dim1, vậy Tot77 có thể làm cách nào hiện thông báo để người dùng chủ động trong việc lựa chọn giá trị Dítance gán cho Dim1 đượ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

Mình đã làm mọi cách mà không biết cách viết bài lên trang cadviet này, quá khổ. Chỉ biết nhờ topic bạn này nhờ các bac pro viết cho cái hatch như này, mình xin chân thành cảm ơn!!!

http://www.mediafire.com/view/o7wg61z5b97who1/untitled.bmp

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

Có lúc cần chọn giá trị của Distance1, có lúc lại chọn giá trị của Distance2 để gán cho Dim1, vậy Tot77 có thể làm cách nào hiện thông báo để người dùng chủ động trong việc lựa chọn giá trị Dítance gán cho Dim1 được không?

Tôi nghĩ có thể nhấp vào cạnh nào nó sẽ chọn cạnh đó để copy giá tri.

Như g nếu nó là line thì dễ hơn pline.

  • 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

Cái này mình đã thấy bạn làm từ CAD đã dùng Field -> Link giá trị của distance trong Block Dynamic -> sang Att rồi mà

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

@Tue_NV, nếu chỉ có 1 vài cái làm thủ công thì không nói, nhưng đằng này lại nhiều block như thế nên mình mới post lên :) chứ ko phải lười gì!

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

Bạn thử cái này. Nhưng có 1 điều cần chú ý là cái dyn block phải là "đã qua sử dụng", tức là sau khi insert nó thì bạn phải kéo tới kéo lui nó thì nó mới tạo 1 cái block mới với các entities mới chứ không còn là của block gốc nữa.

Nhấp chọn tại cái cạnh nào muốn copy giá trị, rồi nhấp vào cái att (ở đây là DIM1).

 

(defun c:ggt (/  pl att )  
  (setq pl  (car (nentsel "\nChon Dynamic block theo vi tri de lay gia tri :"))
   att (car (nentsel "\nChon Attribute de gan gia tri :" ))
  )
  (princ (cdr (assoc 2 (entget att)))) (setvar 'cmdecho 0)
  (vla-put-TextString (vlax-ename->vla-object att)
    (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object pl))) ">%).Length \\f \"%lu2%pr0>%"))
  (vl-cmdf "regen") (setvar 'cmdecho 1) (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

@Tot77, Sau khi gán giá trị, copy cái Dynamic ra thêm 1 đối tượng nữa thì cái giá trị của Att nó lại thay đổi theo cái đối tượng Dynamic mới được copy thêm chứ không thay đổi theo cái Dynamic đầu tiên.

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

3 cái dyn block trong file của bạn có cùng 1 tên là *U8, có lẽ do bạn copy từ 1 cái mà ra.

Sở dĩ bảo bạn phải kéo tới kéo lui là để đổi tên block cho nó là duy nhất, k có 2 cái trùng tên, vì trùng tên thì nó cứ theo 1 cái nào đó nó làm thôi. Như bạn nói thì nó theo cái mới chứ không theo cái cũ.

Tôi cũng chưa biết cách khắc phục cái vụ tên này của dyn block.

Bạn chịu khó khi copy ra thì lại đổi tên và ggt nó 1 lần nữa.

  • 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

Cái này mình nghĩ nên Link theo distance (Parameter) trong Block dynamic

Code của bác Tot đang link theo Length của Line trong Block Dynamic

  • 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

Bạn thử cái này xem.

 

(defun c:ggt (/ att cdyn ndyn dyn len as num)  
  (setq cdyn  (car (setq ndyn (nentsel "\nChon Dynamic block theo vi tri de lay gia tri :")))
dyn (car (last ndyn))
len (vla-get-Length (vlax-ename->vla-object cdyn))
   att (car (nentsel "\nChon Attribute de gan gia tri :" ))
l   (mapcar '(lambda (x) (cons (vla-get-propertyname x) (vlax-get x 'value)))
              (vlax-invoke (vlax-ename->vla-object dyn) 'GetDynamicBlockProperties))
as  (caar (vl-remove-if-not '(lambda (x) (= len (cdr x))) l))
num (if (= as "Distance1") "1" "8")
  )
  
  (princ (cdr (assoc 2 (entget att))))
  (setvar 'cmdecho 0)
  (vla-put-TextString (vlax-ename->vla-object att)
    (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object dyn)))
   ">%).Parameter(" num ").UpdatedDistance \\f \"%lu6%pr0>%"))
  (vl-cmdf "regen")
  (setvar 'cmdecho 1) (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

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  

×