langjs 发表于 2011-11-11 22:22:49

求助反应器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-11 22:41:20

本帖最后由 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)          ; 更新图元
)

highflybir 发表于 2011-11-11 23:51:10

langjs 发表于 2011-11-11 22:41 static/image/common/back.gif
重新上传一下

在某些情况下,entmod 不一定能显示,有必要用entupd
或者vla-update。

langjs 发表于 2011-11-12 00:00:12

highflybir 发表于 2011-11-11 23:51 static/image/common/back.gif
在某些情况下,entmod 不一定能显示,有必要用entupd
或者vla-update。

本人愚钝,按版主指点依然没有成功……

you_boss 发表于 2021-2-24 16:45:41

我也无聊的写了两段关于文本修改的,一个是点击现有的文本进行替换,一个是输入文本进行替换,写的比较简陋,
(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)
)

you_boss 发表于 2021-3-16 09:13:21

highflybir 发表于 2011-11-11 23:51
在某些情况下,entmod 不一定能显示,有必要用entupd
或者vla-update。

还有些时候得用regen,
页: [1]
查看完整版本: 求助反应器entmod无法更新图元(已解决)