xudongchu 发表于 2022-7-18 00:16:31

迈总面板问题(求帮修改)

原帖地址:

简单的自定面板函数 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)

启动面板 点击使用一个命令后,点击空格启动的是面板,请问能否修改成 空格重复上次的命令不启动面板。
请大神帮忙修改一下 谢谢!


[*](defun c:Da ()
[*](mai_make_panel
[*]    (list
[*]      (list "测试"
[*]      (list "测试A1" "DaMo_GD_ZNSX")
[*]      (list "测试A2" "DaMo_GD_PMFH")
[*]      (list "测试A3" "DaMo_GD_JYST")
[*]      )
[*]      (list ""
[*]      (list "测试B1" "DaMo_GD_DTBL")
[*]      (list "测试B2" "DaMo_GD_ZHDQ")
[*]      (list "测试B3" "DaMo_GD_DQXZ")
[*]      )
[*]      (list ""
[*]      (list "测试C1" "DaMo_GD_GYZJ")
[*]      (list "测试C2" "DaMo_GD_DXFX")
[*]      (list "测试C3" "DaMo_GD_PLDQ")
[*]      )
[*]    )
[*])
[*](princ)
[*])
[*](defun mai_make_panel (menulist / m n nn nnn menuname val_lst tt order_lst)
[*](defun add_dclrow (dstr) (if dstr (setq val_lst (cons dstr val_lst))    ))
[*](add_dclrow "curbutton : button{width=10;vertical_margin=none;vertical_margin=none;}")
[*](add_dclrow "curpanel : dialog{label=\"迷你自定义面板\";alignment=centered;vertical_margin=none;horizontal_margin=none;")
[*](add_dclrow ":row{")
[*](setqlen    (apply 'max (mapcar 'length menulist))
[*]    order_lst (apply 'append (mapcar 'cdr menulist))
[*]    n    0
[*]    m    0
[*])
[*](foreach nn menulist
[*]    (add_dclrow (strcat " : boxed_column{label=\"" (car nn) "\";vertical_margin=none; horizontal_margin=none;")    )
[*]    (foreach nnn (cdr nn)
[*]      (setq n(1+ n)
[*]      tt (car nnn)
[*]      tt (if tt
[*]             tt
[*]             ""
[*]         )
[*]      )
[*]      (add_dclrow (strcat " : curbutton{key=\"but" (vl-princ-to-string n) "\";label=\"" tt "\";}")))
[*]    (repeat (- len (length nn))
[*]      (setq m (1+ m))
[*]      (add_dclrow (strcat " : curbutton{key=\"butno" (vl-princ-to-string m) "\";}")) )
[*]    (add_dclrow "}")
[*])
[*](add_dclrow "}:button{label=\"退出\";key=\"cancel\";is_cancel=true;width=20;height=2.5;fixed_width=true;alignment=centered;}}")
[*](setq menuname (vl-filename-mktemp "temp_pannel.dcl"))
[*](setq nn (open menuname "w"))
[*](foreach n (reverse val_lst) (write-line n nn))
[*](close nn)
[*](setq nnn (load_dialog menuname))
[*](vl-file-delete menuname)
[*](if (not (new_dialog "curpanel" nnn))
[*]    (exit)
[*])
[*](setq n 0)
[*](repeat m (mode_tile (strcat "butno" (vl-princ-to-string m)) 1) (setq m (1- m)))
[*](foreach nn menulist
[*]    (foreach nnn (cdr nn)
[*]      (setq n(1+ n)
[*]      tt (car nnn)
[*]      tt (if tt
[*]             tt
[*]             ""
[*]         )
[*]      )
[*]      (if (= tt "")
[*]      (mode_tile (strcat "but" (vl-princ-to-string n)) 1)
[*]      (action_tile
[*]          (strcat "but" (vl-princ-to-string n))
[*]          (strcat "(done_dialog " (vl-princ-to-string n) ")")
[*]      )
[*]      )
[*]    )
[*])
[*](setq nn (start_dialog))
[*](unload_dialog nnn)
[*](if (> nn 0)
[*]    (progn (setq tt (cadr (nth (1- nn) order_lst)))
[*]      (if (= (eval (read (strcat "(type c:" tt ")"))) 'SUBR)
[*]      (progn (princ "\n")
[*]          (eval (read (strcat "(c:" tt ")")))
[*]      )
[*]      (progn
[*]          (princ "\n")
[*]          (vla-SendCommand (vla-get-ActiveDocument(vlax-get-acad-object)) (strcat tt "\n"))
[*]      )
[*]      )
[*]    )
[*])
[*])
[*](princ)

liunian0524 发表于 2022-7-22 08:02:06

记得论坛有人求救过,是定义一个按键重复上一次命令。自己搜下

[*]       (progn (setq tt (cadr (nth (1- nn) order_lst)))
[*]            (eval(read (strcat "(defun c:q()(Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object)
[*]'ActiveDocument) 'SendCommand (strcat \"" tt "\" \" \"))(princ)))")));自定义q为重复上次命令         
[*]            (vla-SendCommand (vla-get-ActiveDocument(vlax-get-acad-object)) (strcat tt "\n"))
[*]       )

xudongchu 发表于 2022-7-22 09:42:42

liunian0524 发表于 2022-7-22 08:02
记得论坛有人求救过,是定义一个按键重复上一次命令。自己搜下

[*]       (progn (setq tt (cadr (nth ( ...

谢谢你的回复!!!

gble119 发表于 2024-7-16 21:37:09

谢谢分享,.

xxyyzzlg 发表于 2024-7-18 10:53:36

我从论坛里下载迈总面板就是已改好的。 空格直接重复上次命令

KO你 发表于 2025-5-7 10:10:22

本帖最后由 KO你 于 2025-5-7 10:13 编辑


(defun c:Da ()
(mai_make_panel
(list
(list "测试"
(list "测试A1" "DaMo_GD_ZNSX")
(list "测试A2" "DaMo_GD_PMFH")
(list "测试A3" "DaMo_GD_JYST"))
(list ""
(list "测试B1" "DaMo_GD_DTBL")
(list "测试B2" "DaMo_GD_ZHDQ")
(list "测试B3" "DaMo_GD_DQXZ"))
(list ""
(list "测试C1" "DaMo_GD_GYZJ")
(list "测试C2" "DaMo_GD_DXFX")
(list "测试C3" "DaMo_GD_PLDQ"))))
(princ))

(defun mai_make_panel ( menulist / n num_nobut num_button nn nnn menuname val_lst add_dclrow tt order_lst in num_image)
(defun add_dclrow ( dstr / ) (if dstr (setq val_lst (cons dstr val_lst))))
(setq menuname (strcat (vl-filename-mktemp) "temp_pannel.dcl"))
(add_dclrow "curbutton:button{width=10;vertical_margin=none;vertical_margin=none;}")
(add_dclrow "curimage:image{width=10;height=0.2;vertical_margin=none;vertical_margin=none;}")
(add_dclrow "curpanel:dialog{label=\"迷你自定义面板\";alignment=centered;vertical_margin=none;horizontal_margin=none;")
(add_dclrow ":row{")
(setq len (apply 'max (mapcar 'length menulist))
      order_lst (apply 'append (mapcar 'cdr menulist))
      num_button 0
                num_nobut 0
                in 0
                num_image 0)
(foreach nn menulist
    (setq in 0)
          (add_dclrow (strcat " : boxed_column{label=\"" (car nn) "\";vertical_margin=none; horizontal_margin=none;"))
      (foreach nnn (cdr nn)
         (setq num_button (1+ num_button)
               in (1+ in)
               num_image (1+ num_image)
               tt (car nnn)
               tt (if tt tt ""))
         (add_dclrow (strcat ":curbutton{label=\"" tt "\";key=\"but" (itoa num_button) "\";}"))
         (if (= 0 in)
               (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";color=18;}"))
                  (setq in 0))))
      (repeat (- len (length nn))
         (setq num_nobut (1+ num_nobut)
               in (1+ in)
               num_image (1+ num_image))
         (add_dclrow (strcat " : curbutton{key=\"butno" (itoa num_nobut) "\";color=-2;}"))
         (if (= 10 in)
               (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";}"))
                  (setq in 0))))
      (add_dclrow "spacer;}"))
   (add_dclrow "}:button{label=\"关闭\";key=\"cancel\";is_cancel=true;width=10;fixed_width=true;alignment=centered;}}")
   (vl-file-delete menuname)
   (setq nn (open menuname "w"))
   (foreach n (reverse val_lst) (write-line n nn))
   (close nn)
   (setq nnn (load_dialog menuname))
   (if (not (new_dialog "curpanel" nnn)) (exit))
   (setq n 0)
   (repeat num_nobut (mode_tile (strcat "butno" (itoa num_nobut)) 1) (setq num_nobut (1- num_nobut)))
(foreach nn menulist
      (foreach nnn (cdr nn)
         (setq n (1+ n)
               tt (car nnn)
               tt (if tt tt "") tt order_lst)
         (if (= tt "")
         (mode_tile (strcat "but" (itoa n)) 1)
               (action_tile (strcat "but" (itoa n)) (strcat "\(done_dialog " (itoa n) "\)")))))
   (setq nn (start_dialog))
   (unload_dialog nnn)
   (vl-file-delete menuname)
(if (> nn 0)
       (progn (setq tt (cadr (nth (1- nn) order_lst)))
            (princ "\n")
(eval(read (strcat "(defun c:qqq()(Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand (strcat \"" tt "\" \" \"))))")))
         (Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand (strcat tt " "))
            ;(Vlax-Invoke-Method (Vlax-Get-Or-Create-Object "WScript.Shell" ) 'Sendkeys (strcat tt "{Enter}"))   
      )
   )
)
页: [1]
查看完整版本: 迈总面板问题(求帮修改)