明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 760|回复: 4

[提问] 双击多段线能弹出对话框但是不能更新数据 这是为什么

[复制链接]
发表于 2016-8-5 11:08:05 | 显示全部楼层 |阅读模式
本帖最后由 lea丶丶 于 2016-8-5 11:09 编辑
  1. ;;; 下面程序定义双击反应器
  2. (princ "\n修改电缆数据:双击")
  3. (vl-load-com)
  4. (if (member "acdblclkedit.arx" (arx))
  5.   (arxunload "acdblclkedit.arx" nil)
  6. )
  7. (or
  8.   *dblclkcirclereactor*
  9.   (setq *dblclkcirclereactor* (vlr-mouse-reactor nil' ((:vlr-begindoubleclick . dblclkedit))))
  10. )
  11. ;;; 回调函数
  12. (defun dblclkedit (reactorobject point / p owner en_data doc)
  13.   (setvar "cmdecho" 0)         ; 关闭命令响应
  14.   (if (setq owner (nentselp (setq p (trans (car point) 0 1)))) ; 指定点来选择对象
  15.     (progn
  16.       (if (> (length owner) 2)
  17. (setq lea_ent (last (last owner)))
  18. (setq lea_ent (car owner))
  19.       )
  20.       (sssetfirst nil)
  21.       (redraw lea_ent 4)
  22.       (setq en_data (entget ent '("*"))
  23.            doc (vlax-get (vlax-get-acad-object) "activedocument")
  24.       )
  25.       (if (and (cdr (assoc -3 en_data)) (= (cdr (assoc 0 en_data)) "LWPOLYLINE"))
  26.             (show_dcl lea_ent)
  27.       
  28.     )
  29.    
  30.   ))
  31.   (setvar "CMDECHO" 1)
  32. )

  33. (defun show_dcl (lea_ent / en_data old_data lst dclname tempname filen stream Dcl_Id r0 r1 r2 r3 new_data)
  34.   (setq en_data (entget ent '("*")))
  35.   (setq old_data (cdr (assoc -3 en_data)))
  36.   (setq lst    (mapcar '(lambda (x)
  37.                                (cdr (cadr x))
  38.                               )
  39.                        old_data
  40.                      ))
  41.   (setq dclname
  42.     (cond
  43.       ((setq tempname (vl-filename-mktemp "temp.dcl")
  44.          filen (open tempname "w")
  45.        )
  46.         (foreach stream '(
  47. " RENAME:dialog {label = "Lea电缆参数" ;"  
  48. " :boxed_column   {"  
  49. "       :edit_box { key = "K0" ; label = "电缆序号" ;   edit_width  = 20 ; fixed_width = true ; }"
  50. "       :edit_box { key = "K1" ; label = "电缆型号" ;   edit_width  = 20 ;  fixed_width = true ;}"
  51. "       :edit_box { key = "K2" ; label = "电缆根数" ;   edit_width  = 20;  fixed_width = true ;}"
  52. "       :edit_box { key = "K3" ; label = "单根长度" ;   edit_width  = 20;  fixed_width = true ;}"                                
  53. " }"
  54. "spacer_1;"                           
  55. " ok_cancel;"                           
  56. " }"
  57.                          )
  58.           (write-line stream filen)
  59.         )
  60.         (close filen)
  61.         tempname
  62.       )
  63.     )
  64.   )
  65.   (setq Dcl_Id (load_dialog dclname))  
  66.   (vl-file-delete tempname)
  67.   (new_dialog "RENAME" Dcl_Id)
  68.   (set_tile "K0" (setq r0 (nth 0 lst)))
  69.   (set_tile "K1" (setq r1 (nth 1 lst)))
  70.   (set_tile "K2" (setq r2 (nth 2 lst)))
  71.   (set_tile "K3" (setq r3 (nth 3 lst)))
  72.   (action_tile "K0" "(setq r0 (get_tile "K0"))")
  73.   (action_tile "K1" "(setq r1 (get_tile "K1"))")
  74.   (action_tile "K2" "(setq r2 (get_tile "K2"))")
  75.   (action_tile "K3" "(setq r3 (get_tile "K3"))")
  76.   (action_tile "accept" "(done_dialog)")
  77.   (start_dialog)
  78.   (unload_dialog Dcl_Id)
  79.   (setq new_data (list '-3 (list "电缆序号" (cons 1000 r0))(list "电缆型号" (cons 1000 r1))(list "电缆根数" (cons 1000 r2))(list "单根长度" (cons 1000 r3))))
  80.   (entmod (subst new_data (cons -3 old_data)  en_data))
  81.   (princ)
  82. )


为什么我用程序可以直接更新数据,
但是用双击反应器后能弹出对话框 却不能更新数据。在线求教!

本帖子中包含更多资源

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

x
发表于 2016-8-5 14:28:52 | 显示全部楼层
把entmod改成vla方法......事实上应该是你的entmod在双击反应器调用下根本就没有起到作用,在双击模式下,此时的选择的多段线应该是只读的,用vla方法应该属于异步进行。。。。
 楼主| 发表于 2016-8-8 14:22:06 | 显示全部楼层
danxingpen 发表于 2016-8-5 14:28
把entmod改成vla方法......事实上应该是你的entmod在双击反应器调用下根本就没有起到作用,在双击模式下,此 ...

哦哦  那我试试
发表于 2016-8-23 14:31:51 | 显示全部楼层
应该是程序本身有问题,entmod是可以的
如果没有扩展数据(and (cdr (assoc -3 en_data)) (= (cdr (assoc 0 en_data)) "LWPOLYLINE")),返回nil,就修改不成了。
 楼主| 发表于 2016-9-12 10:40:09 | 显示全部楼层
自贡黄明儒 发表于 2016-8-23 14:31
应该是程序本身有问题,entmod是可以的
如果没有扩展数据(and (cdr (assoc -3 en_data)) (= (cdr (assoc 0 ...

已解决 用vla-SendCommand 调用命令就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 04:14 , Processed in 0.169343 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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