lea丶丶 发表于 2016-8-5 11:08:05

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

本帖最后由 lea丶丶 于 2016-8-5 11:09 编辑

;;; 下面程序定义双击反应器
(princ "\n修改电缆数据:双击")
(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 / p owner en_data doc)
(setvar "cmdecho" 0)         ; 关闭命令响应
(if (setq owner (nentselp (setq p (trans (car point) 0 1)))) ; 指定点来选择对象
    (progn
      (if (> (length owner) 2)
(setq lea_ent (last (last owner)))
(setq lea_ent (car owner))
      )
      (sssetfirst nil)
      (redraw lea_ent 4)
      (setq en_data (entget ent '("*"))
         doc (vlax-get (vlax-get-acad-object) "activedocument")
      )
      (if (and (cdr (assoc -3 en_data)) (= (cdr (assoc 0 en_data)) "LWPOLYLINE"))
            (show_dcl lea_ent)
      
    )
   
))
(setvar "CMDECHO" 1)
)

(defun show_dcl (lea_ent / en_data old_data lst dclname tempname filen stream Dcl_Id r0 r1 r2 r3 new_data)
(setq en_data (entget ent '("*")))
(setq old_data (cdr (assoc -3 en_data)))
(setq lst    (mapcar '(lambda (x)
                               (cdr (cadr x))
                              )
                     old_data
                     ))
(setq dclname
    (cond
      ((setq tempname (vl-filename-mktemp "temp.dcl")
         filen (open tempname "w")
       )
      (foreach stream '(
" RENAME:dialog {label = \"Lea电缆参数\" ;"
" :boxed_column   {"
"       :edit_box { key = \"K0\" ; label = \"电缆序号\" ;   edit_width= 20 ; fixed_width = true ; }"
"       :edit_box { key = \"K1\" ; label = \"电缆型号\" ;   edit_width= 20 ;fixed_width = true ;}"
"       :edit_box { key = \"K2\" ; label = \"电缆根数\" ;   edit_width= 20;fixed_width = true ;}"
"       :edit_box { key = \"K3\" ; label = \"单根长度\" ;   edit_width= 20;fixed_width = true ;}"                              
" }"
"spacer_1;"                           
" ok_cancel;"                           
" }"
                         )
          (write-line stream filen)
      )
      (close filen)
      tempname
      )
    )
)
(setq Dcl_Id (load_dialog dclname))
(vl-file-delete tempname)
(new_dialog "RENAME" Dcl_Id)
(set_tile "K0" (setq r0 (nth 0 lst)))
(set_tile "K1" (setq r1 (nth 1 lst)))
(set_tile "K2" (setq r2 (nth 2 lst)))
(set_tile "K3" (setq r3 (nth 3 lst)))
(action_tile "K0" "(setq r0 (get_tile \"K0\"))")
(action_tile "K1" "(setq r1 (get_tile \"K1\"))")
(action_tile "K2" "(setq r2 (get_tile \"K2\"))")
(action_tile "K3" "(setq r3 (get_tile \"K3\"))")
(action_tile "accept" "(done_dialog)")
(start_dialog)
(unload_dialog Dcl_Id)
(setq new_data (list '-3 (list "电缆序号" (cons 1000 r0))(list "电缆型号" (cons 1000 r1))(list "电缆根数" (cons 1000 r2))(list "单根长度" (cons 1000 r3))))
(entmod (subst new_data (cons -3 old_data)en_data))
(princ)
)


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

danxingpen 发表于 2016-8-5 14:28:52

把entmod改成vla方法......事实上应该是你的entmod在双击反应器调用下根本就没有起到作用,在双击模式下,此时的选择的多段线应该是只读的,用vla方法应该属于异步进行。。。。

lea丶丶 发表于 2016-8-8 14:22:06

danxingpen 发表于 2016-8-5 14:28 static/image/common/back.gif
把entmod改成vla方法......事实上应该是你的entmod在双击反应器调用下根本就没有起到作用,在双击模式下,此 ...

哦哦那我试试

自贡黄明儒 发表于 2016-8-23 14:31:51

应该是程序本身有问题,entmod是可以的
如果没有扩展数据(and (cdr (assoc -3 en_data)) (= (cdr (assoc 0 en_data)) "LWPOLYLINE")),返回nil,就修改不成了。

lea丶丶 发表于 2016-9-12 10:40:09

自贡黄明儒 发表于 2016-8-23 14:31 static/image/common/back.gif
应该是程序本身有问题,entmod是可以的
如果没有扩展数据(and (cdr (assoc -3 en_data)) (= (cdr (assoc 0 ...

已解决 用vla-SendCommand 调用命令就可以了
页: [1]
查看完整版本: 双击多段线能弹出对话框但是不能更新数据 这是为什么