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会员的众多原因之一!
希望这能帮助你们中的一些人,就像它帮助我一样。
干杯 这是我为曲线/轴承工具做的一个。。。
这是我开始的一个,但太懒/太忙了(你选),无法添加任何其他工具。它适用于我必须进行竣工调查的随机场合。这很少见,所以更新工具的优先级很低。。。
(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)
) 是的,当然!我忘记了eval(因此我重新构建了lst)!! 别担心。我只是想再举几个例子。我希望我没有踩到任何脚趾。 一点也不。 不幸的是,带负载无法工作
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)
) 为什么不能使用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))) DOSLib安装了dober吗? 是的,我有,他不仅要我执行加载命令。
我会在装货之前离开。
(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))
) 您有两个选项,可以将调用包装在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