求助反应器entmod无法更新图元(已解决)
本帖最后由 langjs 于 2011-11-13 14:34 编辑编写了一个修改单行文本的程序,采用点选文本图元能够正常entmod更新,而采用双击反应器取得的文本图元虽然表项替换正常却entmod无法更新,觉得很奇怪。请老大们帮我看看问题出在什么地方?
;;; 修改单行文本,命令:双击单行文本
;;; 下面程序定义双击反应器
(vl-load-com)
(if (member "acdblclkedit.arx" (arx))
(arxunload "acdblclkedit.arx" nil)
)
(or
*dblclkCircleReactor*
(setq *dblclkCircleReactor* (VLR-Mouse-Reactor nil' ((:VLR-beginDoubleClick . dblclkedit))))
)
;;; 回调函数
(defun dblclkedit (reactorObject point / ent owner p)
(setvar "cmdecho" 0) ; 关闭命令响应
(if (setq owner (nentselp (setq p (trans (car point) 0 1)))) ; 指定点来选择对象
(progn
(if (> (length owner) 2)
(setq ent (last (last owner)))
(setq ent (car owner))
)
(princ "\nent1=====================================")
(princ ent)
(showwzbz ent)
)
)
)
(defun showwzbz (ent / t1)
(setq T1 "ssssssssssssssssssssss") ; 新的文字内容
(setq ent (entget ent))
(princ "\nent2=====================================")
(princ ent)
(setq ent (subst
(cons 1 T1)
(assoc 1 ent)
ent
)
)
(princ "\nent3=====================================")
(entmod ent) ; 更新图元
(princ ent)
)
本帖最后由 langjs 于 2011-11-13 14:37 编辑
上面程序出错的原因是反应器中不能修改自身,程序修改后传上来
;;; 修改单行文本,命令:双击单行文本
;;; 下面程序定义双击反应器
(vl-load-com)
(if (member "acdblclkedit.arx" (arx))
(arxunload "acdblclkedit.arx" nil)
)
(or
*dblclkCircleReactor*
(setq *dblclkCircleReactor* (VLR-Mouse-Reactor nil' ((:VLR-beginDoubleClick . dblclkedit))))
)
;;; 回调函数
(defun dblclkedit (reactorObject point / doc owner p)
(setvar "cmdecho" 0) ; 关闭命令响应
(if (setq owner (nentselp (setq p (trans (car point) 0 1)))) ; 指定点来选择对象
(progn
(setq ent (car owner))
(setq doc (vlax-get (vlax-get-acad-object) "activedocument"))
(vla-sendcommand doc "showwzbz ")
)
)
)
(defun C:showwzbz ()
(showwzbz ent)
(princ)
)
(defun showwzbz (ent / t1)
(setq T1 "ssssssssssssssssssssss") ; 新的文字内容
(setq ent (entget ent))
(setq ent (subst
(cons 1 T1)
(assoc 1 ent)
ent
)
)
(entmod ent) ; 更新图元
)
langjs 发表于 2011-11-11 22:41 static/image/common/back.gif
重新上传一下
在某些情况下,entmod 不一定能显示,有必要用entupd
或者vla-update。 highflybir 发表于 2011-11-11 23:51 static/image/common/back.gif
在某些情况下,entmod 不一定能显示,有必要用entupd
或者vla-update。
本人愚钝,按版主指点依然没有成功…… 我也无聊的写了两段关于文本修改的,一个是点击现有的文本进行替换,一个是输入文本进行替换,写的比较简陋,
(defun c:th1()
(setq a_date(vlax-ename->vla-object (car(nentsel"\n点击目标文字"))))
(setq text_date(vla-get-TextString a_date))
(setq b_date(vlax-ename->vla-object (car(nentsel"\n点击需要替换的文字"))))
(vla-put-TextString b_date text_date)
(vla-update b_date)
)
(defun c:xg1()
(setq b_date(vlax-ename->vla-object (car(nentsel"\n点击需要修改的文字"))))
(setq text2_date(getstring"\n输入文字"))
(vla-put-TextString b_date text2_date)
(vla-update b_date)
) highflybir 发表于 2011-11-11 23:51
在某些情况下,entmod 不一定能显示,有必要用entupd
或者vla-update。
还有些时候得用regen,
页:
[1]