Đến nội dung


Hình ảnh
- - - - -

LISP voi thuoc tinh


  • Please log in to reply
10 replies to this topic

#1 xaakiii_mboet

xaakiii_mboet

    biết vẽ line

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

Đã gửi 09 July 2010 - 11:12 AM

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.c...o...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.
  • 0

#2 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 09 July 2010 - 12:00 PM

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.c...o...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.
  • 1

#3 xaakiii_mboet

xaakiii_mboet

    biết vẽ line

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

Đã gửi 09 July 2010 - 12:07 PM

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
  • 0

#4 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 09 July 2010 - 01:51 PM

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.c...o...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))

  • 0

#5 xaakiii_mboet

xaakiii_mboet

    biết vẽ line

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

Đã gửi 09 July 2010 - 03:25 PM

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......
  • 0

#6 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 09 July 2010 - 08:28 PM

(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
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#7 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

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

Đã gửi 10 July 2010 - 09:52 AM

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.c...o...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
  • 0

#8 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 July 2010 - 12:06 PM

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.
  • 1

#9 dkkx3a

dkkx3a

    biết lệnh trim

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

Đã gửi 10 July 2010 - 12:40 PM

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.
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#10 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 July 2010 - 01:33 PM

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...
  • 1

#11 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 10 July 2010 - 01:35 PM

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.
  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD