明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2913|回复: 5

求助反应器entmod无法更新图元(已解决)

[复制链接]
发表于 2011-11-11 22:22 | 显示全部楼层 |阅读模式
本帖最后由 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)
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2011-11-11 22:41 | 显示全部楼层
本帖最后由 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)          ; 更新图元
)
发表于 2011-11-11 23:51 | 显示全部楼层
langjs 发表于 2011-11-11 22:41
重新上传一下

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

本人愚钝,按版主指点依然没有成功……
发表于 2021-2-24 16:45 | 显示全部楼层
我也无聊的写了两段关于文本修改的,一个是点击现有的文本进行替换,一个是输入文本进行替换,写的比较简陋,
(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)
)
发表于 2021-3-16 09:13 | 显示全部楼层
highflybir 发表于 2011-11-11 23:51
在某些情况下,entmod 不一定能显示,有必要用entupd
或者vla-update。

还有些时候得用regen,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 16:43 , Processed in 0.257462 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表