BlackBox 发表于 2022-7-6 09:25:00

DOSLib |开发者工具Pop

这篇文章的灵感来自Alanjt,他亲切地提醒我DOSLib的有用性,我之前已经忘记和/或忽略了它。
 
下面是我制作的一个弹出菜单示例(多亏了Alan的kick start),其中包含一些开发人员工具:
 

(defun c:`(/ *error* lst opt oldCmdecho)
;; © RenderMan, 2011, CADTutor.net
;; Inspired by Alan J. Thompson

;; Error handler
(defun *error*(msg)
   (cond ((not msg))                                                   ; Normal exit
         ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
         ((princ (strcat "\n** Error: " msg " ** "))))               ; Fatal error, display it
   (and oldCmdecho (setvar 'cmdecho oldCmdecho))
   (princ))

;; Main code
(if (setq opt
            (dos_popupmenu
            (setq lst '("DUMP      | Dump Object"
                        "DUMPDOC | Dump Active Document"
                        "DUMPLAY| Dump Layer" ""
                        "BATT         | List Block Attributes"
                        "ELS            | List Entity Data" ""
                        "Load ACAD.lsp" "Load ACADDOC.lsp" ""
                        "System Variable Editor" "" "Visual LISP IDE"
                        "" "Visual Basic for Applications IDE" "" "Visual Basic 2010 Express"
                        "Visual C++ 2010 Express" "Visual C# 2010 Express" ))
            (mapcar (function (lambda (x)
                                  (if (eq "" x)
                                    1
                                    0)))
                      lst)))
   (progn
   (and (setq oldCmdecho (getvar 'cmdecho)) (setvar 'cmdecho 0))
   (cond ((= 0 opt)
            (princ "\rDUMP OBJECT ")
            (c:DUMP))
         ((= 1 opt)
            (princ "\rDUMP ACTIVE DOCUEMENT")
            (c:DUMPDOC))
         ((= 2 opt)
            (princ "\rDUMP LAYER ")
            (C:DUMPLAY))
         ((= 3 opt)
            (princ "\rLIST BLOCK ATTRIBUTES ")
            (c:BATT))
         ((= 4 opt)
            (princ "\rLIST ENTITY DATA ")
            (c:ELS))
         ((= 5 opt)
            (load "acad.lsp"))
         ((= 6 opt)
            (load "acaddoc.lsp"))
         ((= 7 opt)
            (princ "\rSYSTEM VARIABLE EDITOR ")
            (command "._sysvdlg"))
         ((= 8 opt)
            (princ "\rVLIDE ")
            (c:VLIDE))
         ((= 9 opt)
            (princ "\rVBAIDE ")
            (command "vbaide"))
         ((= 10 opt)
            (princ "\rSTART: VISUAL BASIC 2010 EXPRESS ")
            (command "start" "vbexpress.exe"))
         ((= 11 opt)
            (princ "\rSTART: VISUAL C++ 2010 EXPRESS ")
            (command "start" "VCExpress.exe"))
         ((= 12 opt)
            (princ "\rSTART: VISUAL C# 2010 EXPRESS ")
            (command "start" "VCSExpress.exe")))
   (setvar 'cmdecho oldCmdecho)))
(princ))

 
注-不包括子功能。
 
屏幕截图:

 
无论我发多少帖子,总有更多的东西需要学习——这也是我喜欢成为CADTutor会员的众多原因之一!
 
希望这能帮助你们中的一些人,就像它帮助我一样。
 
干杯

alanjt 发表于 2022-7-6 09:29:08

这是我为曲线/轴承工具做的一个。。。
 
这是我开始的一个,但太懒/太忙了(你选),无法添加任何其他工具。它适用于我必须进行竣工调查的随机场合。这很少见,所以更新工具的优先级很低。。。
 
(defun c:ABT (/ foo lst opt)
;; As-Built Tools
;; Alan J. Thompson, 05.02.11

(defun foo (lg / lst) (while (< (length lst) lg) (setq lst (cons 0 lst))))

(if (setq opt (dos_popupmenu
               (append '(" * - * AS-BUILT TOOLS * - * " "")
                         (mapcar (function car)
                                 (setq lst '(("Remove TOP/INV prefixes" . (c:AB_NoTopOrInvLabels))
                                             ("Move Structure label" . (c:AB_MoveLabel))
                                             ("Slope Calculator" . (c:SlopeCalcLabel))
                                          )
                                 )
                         )
               )
               (append '(1 1) (foo (length lst)))
               )
   )
   (eval (cdr (nth (1- opt) lst)))
)
(princ)
)

BlackBox 发表于 2022-7-6 09:34:17

是的,当然!我忘记了eval(因此我重新构建了lst)!!

alanjt 发表于 2022-7-6 09:36:32

别担心。我只是想再举几个例子。我希望我没有踩到任何脚趾。

BlackBox 发表于 2022-7-6 09:41:25

一点也不。

dober 发表于 2022-7-6 09:45:26

不幸的是,带负载无法工作
 
mit load funktioniert das leider nicht公司
 
(defun c:A (/ foo lst opt)
;; As-Built Tools
;; Alan J. Thompson, 05.02.11

(defun foo (lg / lst) (while (< (length lst) lg) (setq lst (cons 0 lst))))

(if (setq opt (dos_popupmenu
               (append '(" * - * ZÄHLER TOOLS * - * " "")
                         (mapcar (function car)
                                 (setq lst '(("Nummer + +0" . ((load"zahl_plus")(c:Zahl_plus)))
                                             ("Nummer - -0" . ((load"zahl_minus")(c:Zahl_minus)))
                                             ("Nummer + 200/1/+" . ((load"nummerhoch")(c:nummerhoch)))
                         ("Nummer - 200/1/-" . ((load"nummerminus")(c:nummerminus)))
                                    )
                                 )
                         )
               )
               (append '(1 1) (foo (length lst)))
               )
   )
   (eval (cdr (nth (1- opt) lst)))
)
(princ)
)

dober 发表于 2022-7-6 09:49:17

为什么不能使用load命令
 
Warum kann man hier den负载befehl nicht verwenden
 
丹克
 
(mapcar(功能车)(setq lst’((“Nummer++0”。((load“zahl\u plus”)(c:zahl\u plus))(“Nummer--0”。((load“zahl\u负号”)(c:zahl\u负号))(“Nummer+200/1/+”((load“nummerhoch”)(c:nummerhoch))(“Nummer-200/1/-”((load“nummerminus”)(c:nummerminus)))

Lee Mac 发表于 2022-7-6 09:53:04

DOSLib安装了dober吗?

dober 发表于 2022-7-6 09:53:24

是的,我有,他不仅要我执行加载命令。
我会在装货之前离开。
 
(if (setq opt (dos_popupmenu
               (append '(" * - * ZÄHLER TOOLS * - * " "")
                         (mapcar (function car)
                                 (setq lst '(("Nummer + +0" . ((load "plusnummer.lsp")(c:plusnummer)))
                                             ("Nummer - -0" . ((load "minusnummer.lsp")(c:minusnummer)))
                                             ("Nummer + 200/1/+" . (c:nummerhoch))
                         ("Nummer - 200/1/-" . (c:nummerminus))
                         ("Nummer + 200/+/0" . (c:z3hoch))
                         ("Nummer - 200/-/0" . (c:z3minus))
                                    )

alanjt 发表于 2022-7-6 10:00:00

您有两个选项,可以将调用包装在progn语句中,也可以单独评估每个项。
 
如。
(defun c:A (/ foo lst opt)
;; Alan J. Thompson, 05.02.11
;; Modified by: dober

(defun foo (lg / lst) (while (< (length lst) lg) (setq lst (cons 0 lst))))

(if (setq
       opt (dos_popupmenu
             (append
               '(" * - * ZÄHLER TOOLS * - * " "")
               (mapcar (function car)
                     (setq lst '(("Nummer + +0" . (progn (load "zahl_plus") (c:Zahl_plus)))
                                 ("Nummer - -0" . (progn (load "zahl_minus") (c:Zahl_minus)))
                                 ("Nummer + 200/1/+" . (progn (load "nummerhoch") (c:nummerhoch)))
                                 ("Nummer - 200/1/-" . (progn (load "nummerminus") (c:nummerminus)))
                                  )
                     )
               )
             )
             (append '(1 1) (foo (length lst)))
         )
   )
   (eval (cdr (nth (1- opt) lst)))
)
(princ)
)
 


(defun c:A (/ foo lst opt)
;; Alan J. Thompson, 05.02.11
;; Modified by: dober

(defun foo (lg / lst) (while (< (length lst) lg) (setq lst (cons 0 lst))))

(if (setq
       opt (dos_popupmenu
             (append
               '(" * - * ZÄHLER TOOLS * - * " "")
               (mapcar (function car)
                     (setq lst '(("Nummer + +0" . ((load "zahl_plus") (c:Zahl_plus)))
                                 ("Nummer - -0" . ((load "zahl_minus") (c:Zahl_minus)))
                                 ("Nummer + 200/1/+" . ((load "nummerhoch") (c:nummerhoch)))
                                 ("Nummer - 200/1/-" . ((load "nummerminus") (c:nummerminus)))
                                  )
                     )
               )
             )
             (append '(1 1) (foo (length lst)))
         )
   )
   (mapcar (function eval) (cdr (nth (1- opt) lst)))
)
(princ)
)
页: [1] 2
查看完整版本: DOSLib |开发者工具Pop