Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
xaakiii_mboet

LISP voi thuoc tinh

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

Em có một cái lisp có đoạn sau:

(defun PUT-GC (VALUE GROUP ENTITY / PROPERTIES)

(setq PROPERTIES (entget ENTITY))

(setq PROPERTIES (subst (cons GROUP VALUE) (assoc GROUP PROPERTIES) PROPERTIES))

(entmod PROPERTIES)

) ;_ end defun

 

Cái em muốn hỏi các anh chị trên diễn đàn là trước đây em vẫn dùng cái LISP EDATT trên diễn đàn:

http://www.cadviet.com/forum/index.php?sho...near&start=

bình thwờng, nhưng khi viết lisp em chỉnh sửa các biến có liên quan đến thuộc tính BlockATT mà bây giờ mỗi lần lệnh là phải đánh thêm lệnh regen mới đwợc, mặc dù em đã thêm thêm hàm (entupd PROPERTIES) cũng phải regen lại, mong các anh chị giúp cái này.

Mong tin.

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
Em có một cái lisp có đoạn sau:

(defun PUT-GC (VALUE GROUP ENTITY / PROPERTIES)

(setq PROPERTIES (entget ENTITY))

(setq PROPERTIES (subst (cons GROUP VALUE) (assoc GROUP PROPERTIES) PROPERTIES))

(entmod PROPERTIES)

) ;_ end defun

 

Cái em muốn hỏi các anh chị trên diễn đàn là trước đây em vẫn dùng cái LISP EDATT trên diễn đàn:

http://www.cadviet.com/forum/index.php?sho...near&start=

bình thwờng, nhưng khi viết lisp em chỉnh sửa các biến có liên quan đến thuộc tính BlockATT mà bây giờ mỗi lần lệnh là phải đánh thêm lệnh regen mới đwợc, mặc dù em đã thêm thêm hàm (entupd PROPERTIES) cũng phải regen lại, mong các anh chị giúp cái này.

Mong tin.

Bạn thêm (command "regen") sau các thao tác trên là xong.

  • 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êm (command "regen") sau các thao tác trên là xong.

Cảm ơn ssg nhưng ý mình là vì sao lại thế kia, và nó bị biến hệ thống nào làm ảnh hưởng tới, do trước đây khi mình dùng có thế đâu, thêm thêm lệnh REGEN nữa thì với bản vẽ nặng thì mệt lắm...

Các bác cho cái biến điều khiển cái này đi.

Mogn tinx

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
Em có một cái lisp có đoạn sau:

(defun PUT-GC (VALUE GROUP ENTITY / PROPERTIES)

(setq PROPERTIES (entget ENTITY))

(setq PROPERTIES (subst (cons GROUP VALUE) (assoc GROUP PROPERTIES) PROPERTIES))

(entmod PROPERTIES)

) ;_ end defun

 

Cái em muốn hỏi các anh chị trên diễn đàn là trước đây em vẫn dùng cái LISP EDATT trên diễn đàn:

http://www.cadviet.com/forum/index.php?sho...near&start=

bình thwờng, nhưng khi viết lisp em chỉnh sửa các biến có liên quan đến thuộc tính BlockATT mà bây giờ mỗi lần lệnh là phải đánh thêm lệnh regen mới đwợc, mặc dù em đã thêm thêm hàm (entupd PROPERTIES) cũng phải regen lại, mong các anh chị giúp cái này.

Mong tin.

Bạn tham khảo Lisp : Cập nhật Text ATT trong Block thuộc tính.

(defun c:EdAtt(/ blk ent obj tag val)  
 (while
   (progn
     (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))
tag (vla-get-tagstring Obj))
 (and
   (setq val(getstring t (strcat "\nNhap gia tri moi cho Tag <" tag "> :" )))
   (foreach att (vlax-invoke Blk 'getattributes)
     (if (= tag (vla-get-tagstring att))
(progn
  (vla-put-textstring att val)
(vla-update att)  ) ) )  )
 (princ))

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ảm ơn ssg nhưng ý mình là vì sao lại thế kia, và nó bị biến hệ thống nào làm ảnh hưởng tới, do trước đây khi mình dùng có thế đâu, thêm thêm lệnh REGEN nữa thì với bản vẽ nặng thì mệt lắm...

Các bác cho cái biến điều khiển cái này đi.

Mogn tinx

 

Híc, em hỏi cái biến hệ thống mà, các bác ...... chạy xa wá em theo không kịp, cho em xin cái biến hệ thống đi, thanks mấy bác......

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

(setvar "regenmode" 1)

 

Nếu bạn muốn tìm hiểu thêm về các biến trong AutoCad trong 1 bản vẽ đang xài biến gì

Đánh lệnh :

Command : setvar

Command : ?

Command : Enter

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
Em có một cái lisp có đoạn sau:

(defun PUT-GC (VALUE GROUP ENTITY / PROPERTIES)

(setq PROPERTIES (entget ENTITY))

(setq PROPERTIES (subst (cons GROUP VALUE) (assoc GROUP PROPERTIES) PROPERTIES))

(entmod PROPERTIES)

) ;_ end defun

 

Cái em muốn hỏi các anh chị trên diễn đàn là trước đây em vẫn dùng cái LISP EDATT trên diễn đàn:

http://www.cadviet.com/forum/index.php?sho...near&start=

bình thwờng, nhưng khi viết lisp em chỉnh sửa các biến có liên quan đến thuộc tính BlockATT mà bây giờ mỗi lần lệnh là phải đánh thêm lệnh regen mới đwợc, mặc dù em đã thêm thêm hàm (entupd PROPERTIES) cũng phải regen lại, mong các anh chị giúp cái này.

Mong tin.

Bạn thử sửa thế này xem (entupd entity) vì đối số của entupd là ename

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ử sửa thế này xem (entupd entity) vì đối số của entupd là ename

Đúng là như vậy:

entupd

Updates the screen image of an object (entity)

(entupd ename)

Arguments

ename

The name of the entity to be updated on the screen.

Return Values

The entity (ename) updated; otherwise nil, if nothing was updated.

 

Tuy nhiên:

Note

If entupd is used on a nested entity (an entity within a block) or on a block that contains nested entities, some of the entities might not be regenerated. To ensure complete regeneration, you must invoke the REGEN command.

 

Bản thân ssg cũng đã từng bị như vậy rồi và cũng phải "invoke" đến cái "REGEN". Thật ra thì ssg là dân cơ khí, rất hiếm khi làm việc với bản vẽ có dung lượng quá lớn -> regen chẳng mất bao nhiêu time nên tạm chấp nhận và không quan tâm nữa.

Nếu entupd không đạt kết quả, bạn thử dùng (vla-update att) theo kiểu của gia_bach xem sao.

  • 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ác bác cho em hỏi, tại sao em chèn cái Block ATT vào bản vẽ mà nó không hiện lên dòng đòi nhập giá trị cho các thuộc tính cả trên command hay Dialog luôn, mặc dầu biến ATTREQ của em đang là 1. Rất thắc mắc mong giải đáp, cảm ơn các bác.

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ác bác cho em hỏi, tại sao em chèn cái Block ATT vào bản vẽ mà nó không hiện lên dòng đòi nhập giá trị cho các thuộc tính cả trên command hay Dialog luôn, mặc dầu biến ATTREQ của em đang là 1. Rất thắc mắc mong giải đáp, cảm ơn các bác.

Bạn thử chọn ATTMODE = 1 hoặc 2 xem sao...

  • 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ới đối tượng là block, để cập nhật lại giá trị của các đối tượng con của block đó (Text, Mtext, attribute...) ta phải dùng entupd với đối số là ename của block đó. có nghĩa là cập nhật cho đối tượng chính chứ không phải đối tượng con.

Theo như code của bạn, mình hiểu là bạn muốn entupd cho chính đối tượng text con trong block thì phải.

  • Vote tăng 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

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  

×