Đến nội dung


Hình ảnh
- - - - -

Edit trực tiếp text Attribute trong block


  • Please log in to reply
35 replies to this topic

#21 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 14 October 2009 - 08:29 AM

Thiep có 1 ý tưởng như thế này: Bản vẽ chèn block có nhiều thuộc tính: ví dụ: TENBANVE, NGUOIVE, NGUOIKIEMTRA, GIAMDOC, SOBANVE,... Các số liệu thuộc tính này của từng bản vẽ được lưu và đã hoàn thịện trước ở trong 1 file excel chuyển qua đuôi *.csv; các cột thuộc tính được sắp xếp đúng trình tự trước sau của các thuộc tính có trong block. ví dụ như sau:
http://www.cadviet.c...eu_khungten.rar
Tạo lisp để tải file dữ liệu *.csv, pick lần lượt từng block 1, các dữ liệu từng hàng 1 từ trên xuống dưới trong file *.csv sẽ nhảy vào các thuộc tính trong block và tự động update ngay không cần phải regen.
.... không biết ý tưởng này có hay không? mời các bạn cùng Thiep tham gia viết lisp nhé.

Mời Thiệp tham khảo ở topic này: http://www.cadviet.c...o...c=7056&st=0 bài #11
  • 1

#22 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 November 2009 - 09:35 PM

Trong block có sử dụng nhiều text attribute thì việc gõ ed để sửa nội dung hơi vất vả một chút.
Giờ em muốn thực hiện việc này thông qua một hộp thoại. hộp thoại đó có 2 nút Cancel và OK.
Xin nhờ các huynh viết hộ cái này, em không có rành khoản này lắm.

Lang thang trên mạng, Tue_NV tìm được cái này rất hay, xin được chia sẻ và Lisp này cũng viết theo ý của Thaistreetz : (lệnh là edatt)
Lisp đây : http://www.cadviet.c...on_suite_v6.lsp
Lisp này của tác giả Lee McDonnell gồm 3 lệnh chính :
1 . Mvatt : Move ATT có cùng Tagname
Ví dụ :
Command: mvatt
Select Attribute: Pick chọn ATT
Select Blocks or <[A]ll> : -> chọn Block -> Các ATT cùng Tagname được chọn sẽ move. Nếu dòng này nhấn enter thì toàn bộ ATT cùng Tagname của toàn bộ Block chọn sẽ được move
Select Base Point: Điểm gốc Move
Specify Distance or Move Attributes... : -> có thể nhập Direct Distance hoặc pick điểm đích Move

2 . Roatt : Rotate ATT có cùng Tagname

3. Edatt : Edit ATT có cùng Tagname
Command: EDATT
Select Attribute: Pick chọn ATT
Select Blocks or <[A]ll> : -> chọn Block -> Các ATT cùng Tagname được chọn sẽ edit. Nếu dòng này nhấn enter thì toàn bộ ATT cùng Tagname của toàn bộ Block chọn sẽ được edit -> sẽ hiện lên hộp thoại Edit Attribute -> để sửa. Hộp thoại này có 3 nút OK; Cancel và Advanced rất tiện dụng. Đặc biết là nút Advanced -> các bạn thử nhé

Quả thật anh em CADVIET mình còn phải học hỏi rất nhiều, rất nhiều các bạn ạ. Mình thấy code rất hay. :tongue2:
  • 5

#23 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 November 2009 - 11:34 AM

Lang thang trên mạng, Tue_NV tìm được cái này rất hay, xin được chia sẻ và Lisp này cũng viết theo ý của Thaistreetz : (lệnh là edatt)
Lisp đây : http://www.cadviet.c...on_suite_v6.lsp
Lisp này của tác giả Lee McDonnell gồm 3 lệnh chính :
1 . Mvatt : Move ATT có cùng Tagname
Ví dụ :
Command: mvatt
Select Attribute: Pick chọn ATT
Select Blocks or <[A]ll> : -> chọn Block -> Các ATT cùng Tagname được chọn sẽ move. Nếu dòng này nhấn enter thì toàn bộ ATT cùng Tagname của toàn bộ Block chọn sẽ được move
Select Base Point: Điểm gốc Move
Specify Distance or Move Attributes... : -> có thể nhập Direct Distance hoặc pick điểm đích Move

2 . Roatt : Rotate ATT có cùng Tagname

3. Edatt : Edit ATT có cùng Tagname
Command: EDATT
Select Attribute: Pick chọn ATT
Select Blocks or <[A]ll> : -> chọn Block -> Các ATT cùng Tagname được chọn sẽ edit. Nếu dòng này nhấn enter thì toàn bộ ATT cùng Tagname của toàn bộ Block chọn sẽ được edit -> sẽ hiện lên hộp thoại Edit Attribute -> để sửa. Hộp thoại này có 3 nút OK; Cancel và Advanced rất tiện dụng. Đặc biết là nút Advanced -> các bạn thử nhé

Quả thật anh em CADVIET mình còn phải học hỏi rất nhiều, rất nhiều các bạn ạ. Mình thấy code rất hay. :tongue2:

Rất cám ơn bác Tue_NV đã chia xẻ.
Nhưng mà:
" Rằng hay thì thật là hay
Để hiểu được nó có ngày long răng"
Hề hề, khó gặm quá, nhiều xơ quá. Đúng như bác Tue_NV nói, còn phải mót dài dài mới mong hiểu và làm được như họ. Hề hề hề.....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#24 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 27 November 2009 - 05:39 AM

Lang thang trên mạng, Tue_NV tìm được cái này rất hay, xin được chia sẻ và Lisp này cũng viết theo ý của Thaistreetz : (lệnh là edatt)
Lisp đây : http://www.cadviet.c...on_suite_v6.lsp
Lisp này của tác giả Lee McDonnell......

Chào anh gia bach và mọi người

Tue_NV có 1 thắc mắc trong đoạn Code trên nhưng tìm mãi trong Help nhưng chẳng thấy đâu.
Dưới đây là trích dẫn 1 đoạn Code trong Lisp trên :

(setq ent
(car (nentsel "\nSelect Attribute: ")))
(cond
((eq 'ENAME (type ent))
(if (eq "ATTRIB" (cdr (assoc 0 (entget ent))))
(if (and (vlax-property-available-p
(setq Obj (vlax-ename->vla-object ent)) 'MTextAttribute)
(eq :vlax-true (vla-get-MtextAttribute Obj)))
(princ "\n** Incompatible with MText Attributes **") nil)
(princ "\n** Object is not an Attribute **")))
(t (princ "\n** Nothing Selected **")))))

(setq Blk
(vla-ObjectIdtoObject
(vla-get-ActiveDocument
(vlax-get-acad-object))
(vla-get-OwnerId Obj)))

(setq bNme
(strcase
(if (vlax-property-available-p Blk 'EffectiveName)
(vla-get-EffectiveName Blk)
(vla-get-Name Blk))))

Tue_NV đã đọc trong cuốn Help Developer và sử dụng cả chức năng Search trong Help Developer mà chẳng thấy property MTextAttributeEffectiveName đâu cả.
Tue_NV không biết tìm hiểu và đọc 2 thuộc tính của Block này ở đâu. Mong mọi người chỉ giúp
Xin cảm ơn rất nhiều
  • 1

#25 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 27 November 2009 - 07:55 AM

Chào anh gia bach và mọi người

.....................

Tue_NV đã đọc trong cuốn Help Developer và sử dụng cả chức năng Search trong Help Developer mà chẳng thấy property MTextAttributeEffectiveName đâu cả.
Tue_NV không biết tìm hiểu và đọc 2 thuộc tính của Block này ở đâu. Mong mọi người chỉ giúp
Xin cảm ơn rất nhiều

Chào Tue_NV
MTextAttribute EffectiveName là các thuộc tính (Property) của đối tuợng (Vla-Obj) trong môi truờng ActiveX and VBA.
Bạn xem trong Help Developer Documentation -> ActiveX and VBA Reference -> Properties :
- MTextAttribute Property
- EffectiveName Property
  • 2

#26 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 13 December 2010 - 11:00 AM

Mình đọc diễn đàn thấy file này rất hay (theo đường dẫn) nhưng không tải được. Bạn nào có thì up lên lại để cho mình xin, rất cám ơn.
http://www.cadviet.c...on_suite_v6.lsp
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#27 duyhung

duyhung

    biết vẽ rectang

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

Đã gửi 13 December 2010 - 03:00 PM

http://www.cadviet.c...n_suite_v10.lsp
đây mình mới dl và up lên cadviet cho mọi người dùng!
  • 1
Song va chien dau!

#28 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 13 December 2010 - 04:02 PM

http://www.cadviet.c...n_suite_v10.lsp
đây mình mới dl và up lên cadviet cho mọi người dùng!

Cám ơn bạn rất nhiều. Nhưng vì sao hàm VLA-GET-MTEXTATTRIBUTE không có nhỉ? dù đã (vl-load-com)?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#29 LiveView

LiveView

    biết zoom

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

Đã gửi 15 January 2011 - 12:08 AM

.........
Lisp này của tác giả Lee McDonnell gồm 3 lệnh chính :
1 . Mvatt : Move ATT có cùng Tagname

2 . Roatt : Rotate ATT có cùng Tagname

3. Edatt : Edit ATT có cùng Tagname

Cái này hay quá bác ơi ! :)
Cho mình hỏi thêm tí, có cách nào để chỉnh chiều cao chữ hàng loạt mà không ảnh hưởng đến Content ATT của các Block không ? Vì khi dùng lệnh EdATT thì nó buộc phải thay đổi tất cả Content ATT của các Block về cùng 1 giá trị !?
  • 0

#30 xuyencm

xuyencm

    Chưa sử dụng CAD

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

Đã gửi 01 November 2013 - 03:01 PM

Mong các bác chỉ giáo, mình dùng lisp của bác Tue (tác giả McDonnell), có bản vẽ mình chọn attribute của block thì thấy có cái dialog "attribute modification suite" hiện lên, nhưng có bản vẽ mình cũng chọn tương tự lại không hiện cái dialog đó ???


  • 0

#31 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 08 January 2014 - 10:53 AM

Trong block có sử dụng nhiều text attribute thì việc gõ ed để sửa nội dung hơi vất vả một chút.
Đây là đoạn code để edit trực tiếp vào các text attribute do ta chọn bằng cách pick chuột.

(defun c:edt () (while (setq att (car(nentsel "\nChon text Attribute :")))(if (= (dxf 0 att) "ATTRIB")(progn     (setq 	TagName (dxf 2 att)	TagVal (dxf 1 att)	BlName (dxf 330 att))     (if 	(setq NewVal (getstring 5 (strcat "\nNhap gia tri moi cho " TagName " <" TagVal "> : ")) )	(putAtt BlName TagName NewVal));if);progn);if);while(princ) );end;------------------------------------------------------------------------------------------(defun dxf(id ent) (cdr (assoc id (entget ent))));------------------------------------------------------------------------------------------(defun putAtt (BlName TagName NewVal / AttName EntDxf dk)(setq AttName (entnext BlName ) dk 1)  (while (and AttName dk)    (if (equal (assoc 0 (entget AttName )) '(0 . "SEQEND"))        (setq AttName nil )        (if (= (cdr (assoc 2 (entget AttName ))) TagName ) ; <-- Your Attribute name            (progn              (setq EntDxf (entget AttName ) dk nil)              (setq EntDxf (subst (cons 1 NewVal ) (assoc 1 (entget AttName )) EntDxf ) )              (entmod EntDxf )              (entupd BlName )              (setq AttName (entnext AttName ))            );progn        (setq AttName (entnext AttName ))        );if    );if          );while      );end
Tuy nhiên lisp này phải gõ nội dung cần thay đổi ở dòng command.
Giờ em muốn thực hiện việc này thông qua một hộp thoại. hộp thoại đó có 2 nút Cancel và OK.
Xin nhờ các huynh viết hộ cái này, em không có rành khoản này lắm.

Lisp sử dụng rất đơn giản và tiện. Nhưng có một điều là nếu như ta cùng sửa text ở >1 block khác nhau thì ta lại phải chọn từng cái một. Anh có thể sửa thêm chức năng nữa là cho chọn những text (định sửa có cùng giá trị) sau đó nhập vào không ạ? 


  • 0

#32 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 January 2014 - 11:11 AM

Lisp sử dụng rất đơn giản và tiện. Nhưng có một điều là nếu như ta cùng sửa text ở >1 block khác nhau thì ta lại phải chọn từng cái một. Anh có thể sửa thêm chức năng nữa là cho chọn những text (định sửa có cùng giá trị) sau đó nhập vào không ạ? 

 

Chào bạn minhphuonghung!

Ý bạn là : Nếu định sửa text ATT 1 lần cùng giá trị thì cũng phải pick chọn từng cái rồi nhập giá trị thì các text ATT được pick đó thay đổi pk?


  • 0

#33 envirtech2002

envirtech2002

    biết vẽ polygon

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

Đã gửi 08 January 2014 - 04:52 PM

Hỏi khôn:

Sao e down lisp ở trên về add vào mà k chạy được nhỉ?


  • 0
thered

#34 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 09 January 2014 - 11:17 AM

Chào bạn minhphuonghung!

Ý bạn là : Nếu định sửa text ATT 1 lần cùng giá trị thì cũng phải pick chọn từng cái rồi nhập giá trị thì các text ATT được pick đó thay đổi pk?

Chào bác Tue_NV!

Đúng ý em là như thế đấy ạ. Trong lisp edt thì chỉ cho chọn 1 text rồi sửa trực tiếp luôn. Thật ra, nó giống như cái lệnh EdATT trong attribute_modification_suite_v6.lsp ấy ạ. Nhưng EDATT lại có nhược điểm là chọn được các text cùng một lúc để đưa về cùng một giá trị, thay vì chuột phải thì chúng ta lại phải nhấn Enter, làm như vậy thành ra em thấy đang dùng chuột để Select thì lại phải dùng tay Enter một cái.

Nói chung, nhu cầu của em không phức tạp như lệnh EDATT chỉ cần như cái lệnh edt rồi thêm chức năng là select nhiều text để chuyển về cùng một giá trị thôi ạ.

Cảm ơn bác nhiều.


  • 0

#35 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 09 January 2014 - 11:19 AM

Hỏi khôn:

Sao e down lisp ở trên về add vào mà k chạy được nhỉ?

Chả hiểu bạn hỏi gì.


  • 0

#36 envirtech2002

envirtech2002

    biết vẽ polygon

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

Đã gửi 10 January 2014 - 09:33 PM

Chả hiểu bạn hỏi gì.

Tức là appload sau đó gõ lệnh edittext thì k được ấy bác ợ, cad trả lời e là unknown command, press f1 for help


  • 0
thered