Đến nội dung


Hình ảnh
- - - - -

Tạo liên kết Text với Block attribute trong cad


  • Please log in to reply
14 replies to this topic

#1 limfx

limfx

    biết pan

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

Đã gửi 31 May 2013 - 03:08 PM

Mình có file cad và hình ảnh bên dưới với yêu cầu: Tạo liên kết Text với Block attribute trong cad.

Nhờ các bạn giúp mình. Thanks!

lienket_zpsbe4195bb.jpg

 

file cad: http://www.mediafire...7eeeb4dmkzrfy8p


  • 0

#2 limfx

limfx

    biết pan

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

Đã gửi 03 June 2013 - 02:21 PM

Sao không thấy ai giúp mình?????????


  • -2

#3 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 04 June 2013 - 11:35 AM

@Tue_NV đi. Bác ấy có ứng dụng thống kê thép tự động nhảy block. Nhưng có phí


  • 0

#4 limfx

limfx

    biết pan

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

Đã gửi 04 June 2013 - 11:55 AM

Bác cho em địa chỉ liên hệ?


  • 0

#5 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 04 June 2013 - 01:43 PM

Sau khi gia công xong, nếu bạn hiệu chỉnh giá trị chiều dài biểu kiến trên thanh thép ---> kết quả tự động link vào Block Attribute thì thật là tiện dụng. Tuy nhiên, nếu có thể chấp nhận một chút phiền toái, sau khi bạn hiệu chỉnh giá trị chiều dài biểu kiến, sử dụng code sau để hiệu chỉnh giá trị trong Block:

(defun C:CBA( / ENT KQUA LST LST2 LST3 OBJLST SS SS1)
(vl-load-com)
(prompt"\nChon so lieu:\n") (setq ss (ssget '((0 . "TEXT")))) (setq kqua 0)
(while (and ss (> (sslength ss) 0))
(setq kqua (+ kqua (atof (cdr (assoc 1 (entget (setq ent (ssname ss 0))))))))
(ssdel ent ss))
(prompt"\nChon Block:\n") (setq ss1 (ssget '((0 . "INSERT"))))
(setq objlst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss1)))))
(foreach obj objlst (setq lst (GetAtt obj))
(foreach lst1 lst
(if (= (strcase (car lst1)) "LTHANH")
  (setq lst2 (cons (car lst1) kqua))
  (setq lst2 lst1))
  (setq lst3 (cons lst2 lst3)))
  (SetAtt obj lst3))
(princ))
;-----by MENZI ENGINEERING GmbH, Switzerland-----;
(defun GetAtt (obj) (mapcar '(lambda (att) (cons (vla-get-TagString att) (vla-get-TextString att))) (vlax-invoke obj 'GetAttributes)))
(defun SetAtt (obj lst / attval) (mapcar '(lambda (att) (if (setq attval (cdr (assoc (vla-get-TagString att) lst))) (vla-put-TextString att attval))) (vlax-invoke obj 'GetAttributes)) (vla-update obj))

Download LISP file
Download TEST file


P/S: À, nếu bạn muốn làm tròn 10 kết quả tổng chiều dài trước khi gán vào Block thì bổ xung thêm vào code nhé!


  • 1

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 04 June 2013 - 02:51 PM

Mình có file cad và hình ảnh bên dưới với yêu cầu: Tạo liên kết Text với Block attribute trong cad.

Nhờ các bạn giúp mình. Thanks!

lienket_zpsbe4195bb.jpg

 

file cad: http://www.mediafire...7eeeb4dmkzrfy8p

Lisp tạo liên kết các Text vào Block ứng với file Cad bạn gửi.

(defun c:linkT (/ blk fieldexp ss);link Text to Attribute
  ;; By : Gia_Bach 2013 ;;
  (vl-load-com)
  (if (> (atof (substr (getvar "ACADVER") 1 4)) 16.1)
    (if (and
	  (princ "\nChon cac Text nguon : ")
	  (setq ss (ssget '((0 . "TEXT"))))
	  (princ "\nChon Block can link : ")
	  (setq blk (ssget "_+.:S:E" (list (cons 0 "INSERT")(cons 2 "THONG KE THEP"))))) 
      (progn
	(setq fieldExp "%<\\AcExpr (0")
	(foreach e (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
	  (setq fieldExp (strcat fieldExp
				 "+%<\\AcObjProp Object(%<\\_ObjId "
				 (itoa (vla-get-objectid e))
				 ">%).TextString>%")) )
	(foreach att (vlax-invoke (vlax-Ename->Vla-Object (ssname blk 0)) 'GetAttributes)
	  (if (= (vla-get-TagString att) "LTHANH")
	    (progn
	      (vla-put-textstring att (strcat fieldExp ") \\f \"%lu2%pr0\">%"))
	      (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object))  acActiveViewport ) ) ) )
	(princ)))
    (alert "\nChi chay tu Autocad 2006")  )  )

  • 2

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 04 June 2013 - 03:37 PM

Mình có file cad và hình ảnh bên dưới với yêu cầu: Tạo liên kết Text với Block attribute trong cad.

Nhờ các bạn giúp mình. Thanks!

lienket_zpsbe4195bb.jpg

 

file cad: http://www.mediafire...7eeeb4dmkzrfy8p

Hề hề hề,

Không giúp được vì chưa hiểu ý của bạn muốn gì???

Khái niệm liên kết ở đây nghĩa là gì??? Là khi các giá trị text số thay đổi thì mặc nhiên giá trị att trong block cũng thay đổi theo ư??? hay là khi thay đổi hình mẫu thép thì giá trị att trong block thay đổi????

Bạn hãy giải thích rõ hơn nhé ....


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 04 June 2013 - 06:47 PM

http://www.cadviet.c...ong-block-dong/

có phải ý bác như trong topic này ko


  • 0

#9 limfx

limfx

    biết pan

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

Đã gửi 06 June 2013 - 09:35 AM

Lisp tạo liên kết các Text vào Block ứng với file Cad bạn gửi.

(defun c:linkT (/ blk fieldexp ss);link Text to Attribute
  ;; By : Gia_Bach 2013 ;;
  (vl-load-com)
  (if (> (atof (substr (getvar "ACADVER") 1 4)) 16.1)
    (if (and
	  (princ "\nChon cac Text nguon : ")
	  (setq ss (ssget '((0 . "TEXT"))))
	  (princ "\nChon Block can link : ")
	  (setq blk (ssget "_+.:S:E" (list (cons 0 "INSERT")(cons 2 "THONG KE THEP"))))) 
      (progn
	(setq fieldExp "%<\\AcExpr (0")
	(foreach e (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
	  (setq fieldExp (strcat fieldExp
				 "+%<\\AcObjProp Object(%<\\_ObjId "
				 (itoa (vla-get-objectid e))
				 ">%).TextString>%")) )
	(foreach att (vlax-invoke (vlax-Ename->Vla-Object (ssname blk 0)) 'GetAttributes)
	  (if (= (vla-get-TagString att) "LTHANH")
	    (progn
	      (vla-put-textstring att (strcat fieldExp ") \\f \"%lu2%pr0\">%"))
	      (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object))  acActiveViewport ) ) ) )
	(princ)))
    (alert "\nChi chay tu Autocad 2006")  )  )

Lisp này dùng giống như ý mình muốn nhưng phải thông qua lệnh, mình muốn khi sửa text thì giá trị L tự động tính theo!


  • -1

#10 limfx

limfx

    biết pan

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

Đã gửi 06 June 2013 - 09:36 AM

Hề hề hề,

Không giúp được vì chưa hiểu ý của bạn muốn gì???

Khái niệm liên kết ở đây nghĩa là gì??? Là khi các giá trị text số thay đổi thì mặc nhiên giá trị att trong block cũng thay đổi theo ư??? hay là khi thay đổi hình mẫu thép thì giá trị att trong block thay đổi????

Bạn hãy giải thích rõ hơn nhé ....

Ý mình là khi các giá trị text số thay đổi thì mặc nhiên giá trị att trong block cũng thay đổi theo


  • 0

#11 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 06 June 2013 - 12:44 PM

Lisp này dùng giống như ý mình muốn nhưng phải thông qua lệnh, mình muốn khi sửa text thì giá trị L tự động tính theo!

 
1. Theo bạn: "nhưng phải thông qua lệnh" nếu không thông qua lệnh, thì bạn muốn thông qua "cái gì" để giao tiếp với CAD nhỉ? Bằng ánh mắt nhìn ư?


2. Thì LISP của bác Gia_Bách đã đáp ứng được yêu cầu: "khi sửa text thì giá trị L tự động tính theo" đó chứ?!! Sau khi dùng LISP để link tổng giá trị các TEXT với ATT (LTHANH) của Block THONG KE THEP. Từ sau đó, bạn cứ sửa giá trị TEXT thoả mái, sau đó RE (REgen) lại bạn vẽ để update chứ bạn!
 

@Tue_NV đi. Bác ấy có ứng dụng thống kê thép tự động nhảy block. Nhưng có phí

 
Nếu bạn thấy như vậy bất tiện quá thì liên hệ với bác Tue_VN, Trong video của bác ấy biểu diễn, update tự động, không cần RE, bạn có thể tham khảo thêm ở đây.


  • 1

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#12 HoaVien

HoaVien

    biết vẽ arc

  • Members
  • PipPip
  • 44 Bài viết
Điểm đánh giá: 12 (tàm tạm)

Đã gửi 07 June 2013 - 08:15 PM

Lisp này dùng giống như ý mình muốn nhưng phải thông qua lệnh, mình muốn khi sửa text thì giá trị L tự động tính theo!

Chỉ việc "há mồm - mở miệng ra" là sung rụng ngay họng thôi mà cũng không làm được à ?


  • -1

#13 tranmthien

tranmthien

    biết zoom

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

Đã gửi 07 June 2013 - 09:42 PM

Biết bạn cần viết vấn đề này để thống kê, tin rằng khả năng Lisp bạn tốt hơn mình. Mình ít viết nên viết Lisp và text vất vả. Sau khi xem xong đoạn phim Text của bạn Tue-NV http://www.cadviet.c...ong-block-dong/. Mình đề xuất ý tưởng để bạn viết tiếp:

 + Bạn sửa lại lệnh ED thành lệnh mới EDS chẳng hạn (thực chất bạn Tue dùng lệnh sửa bảng thống kê).

 + Trong lệnh EDS gồm:

       * câu đầu là lệnh ED cho đối tượng kết thúc câu lệnh ED bạn viềt tiếp đoạn líp câu lệnh 2

       * Câu lệnh 2 (câu lệnh ES): Thủ tục để LINK kiểu Excel. Bạn chọn đối tượng SSget bằng cách điểm Pick (pick tự động!) điểm cách cuối cùng của lệnh ED một khoảng do bạn thiết kế (khoảng này bằng 1.25 lần chiều dài thanh thép bạn vẽ về phía tay phải) và thực hiện lệnh sửa Text của Attrible Block như các bạn đã làm. Nếu thành công với kỹ thuật này bạn sẽ làm cho người ngoài tưởng rằng bạn đang LINK.

Hy vọng bạn hiểu ý mình.


  • 0

#14 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 08 June 2013 - 09:31 AM

Duy thì nhìn màn hình ko được rỏ nên ko dám chém bừa nhưng tạm đoán.

Việc chủ thớt cần và việc bảng thống kê của Tue-NV là hoàn toàn khác nhau:

Việc dùng 1 lệnh lisp để chỉnh một vài giá trị att trong block att và vài giá trị att sẽ đổi theo theo công thức nào đó là đương đối dể (nói thế ko phải là Duy đã làm được việc này) hơn việc link như yêu cầu.

Đóan bừa đoán bừa hông phải thì thôi nghen.


  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#15 thienvuong

thienvuong

    biết zoom

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

Đã gửi 27 August 2014 - 09:48 AM

Mình có file cad và hình ảnh bên dưới với yêu cầu: Tạo liên kết Text với Block attribute trong cad.

Nhờ các bạn giúp mình. Thanks!

lienket_zpsbe4195bb.jpg

 

file cad: http://www.mediafire...7eeeb4dmkzrfy8p

 

Đã thử và giải quyết được vấn đề của bạn:

- 1000 bản thân nó là 1 att

- Tạo block với giá trị att 1000 như của bạn

- sau đó bạn dùng lẹnh edit att

- Tại giá trị text att bạn click chuột phải và chọn " insert field" >>> chọn Formula>>> trong khung nhập Formula bạn lại chọn tiếp "  insert field".

- Đến bước này thì Field phải nhập là Object, bạn chọn Object là Text có giá trị thay đổi, >>> chọn Content>>> Click Ok.

- Tiếp tục các giá trị trong công thức bằng cách lập lại tho tác " insert field" bên trên.

- Cuối cùng sẽ được Block attributes như bạn mong muốn ^^


  • 0