(defun gml2dwg (odabir) ;; RANDOM CODE ;; ;; This is the part where I should open a filepath "odabir" (setq datoteka (open odabir "r")) ;; CODE IS CONTINUED ) (defun c:gml2dwg (/ odabir) (setq odabir (getstring "Odabir:")) (gml2dwg odabir) (princ) ) (defun c:gmlimport (/ allfiles fpath) (setq allfiles (vl-directory-files "C:\Users\Admin\Documents\gml2" "*.gml")) (foreach file allfiles ((setq fpath (strcat "C:\Users\Admin\Documents\gml2\" file)) (gml2dwg fpath)) ) (princ) )
因此,如上所示,我有第一个长 lisp 函数 gml2dwg,它获取一个 gml 文件作为输入,并从 AutoCAD 中的文件中绘制多边形。该函数只能将一个文件作为输入,因此我在将 6000+ gml 文件输入 cad 时遇到问题。我写了另外两个函数,其中 c:gml2dwg 是能够接受参数的函数,因为 gml2dwg 不能用作命令。第三个 - c:gmlimport 用于从目录中获取所有文件并通过 c:gml2dwg 循环播放,但我得到的只是这个错误:
Pogreška: 糟糕的参数类型: stringp nil! ********** 无法在未事先调用 (推送错误使用命令)。将(命令)调用转换为 (命令-s) 是建议使用的。
第一个函数以在VLISP控制台(gml2dwg"somefilepath")中调用它的形式工作正常。 谁能告诉我其他两个功能有什么问题?这可能是带有参数/参数或设置变量的东西,但我是 lisp 的业余爱好者,所以我需要您的帮助来弄清楚。谢谢。
如果我没误解的话,gml2dwg是一个LISP定义的命令:
(defun c:gml2dwg ...)
如果是这样,则无法使用命令函数调用 gml2dwg 并向其传递参数。 您需要将 c:gml2dwg 函数拆分为 2 个函数:
1)一个标准的LISP函数,它有2个参数:一些选项("k"?)和文件路径。此函数包含根据参数绘制多边形的代码。
(defun gml2dwg (option fpath) ...)
2)一个LISP定义的命令,它获取用户输入并调用gml2dwg函数,向其传递输入结果。
(defun c:gml2dwg (/ option fpath ...)
(setq option ...)
(setq fpath ...)
(gml2dwg option fpath)
(princ)
)
这样,你可以从 c:gmlimport 调用 gml2dwg 函数:
(defun c:gmlimport (/ allfiles fpath)
(setq allfiles (vl-directory-files
"C:\Users\Admin\Documents\gml2"
"*.gml"
)
)
(foreach file allfiles
(setq fpath (strcat "C:\Users\Admin\Documents\gml2\" file))
(gml2dwg "k" fpath)
)
(princ)
)
注意:我删除了一个多余的左括号。