(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中的文件中绘制多边形。该函数只能将一个文件作为输入,因此我在向cad输入6000+ gml文件时遇到问题。我写了另外两个函数,其中c:gml2dwg是一个能够获取参数的函数,因为gml2dwg不能用作命令。第三个--c:gmlimport用于从目录中获取所有文件并将其循环通过c:gml2dwg,但我得到的只是这个错误:
*********Pogreška:错误的参数类型:stringp nil! **********无法事先调用,无法从错误调用(命令) (推错误使用命令)。将(命令)调用转换为 (命令-s)是推荐的。
第一个函数可以在VLISP控制台中调用它(gml2dwg“somefilepath”)。 谁能告诉我其他两个功能有什么问题?它可能是参数/参数或设置变量,但我在lisp中是一个业余爱好者,所以我需要你的帮助才能搞清楚。谢谢。
答案 0 :(得分:1)
如果我没有误解,gml2dwg是一个LISP定义的命令:
assign!{(val1, val2) = test()};
如果是这样,你不能用命令函数调用gml2dwg并传递参数。 您需要将c:gml2dwg函数拆分为2个函数:
1)标准的LISP函数,它有两个参数:一些选项(“k”?)和文件路径。此函数包含根据参数绘制多边形的代码。
(defun c:gml2dwg ...)
2)一个LISP定义的命令,它获取用户输入并调用gml2dwg函数传递输入结果。
(defun gml2dwg (option fpath) ...)
这样,您可以从c:gmlimport调用gml2dwg函数:
(defun c:gml2dwg (/ option fpath ...)
(setq option ...)
(setq fpath ...)
(gml2dwg option fpath)
(princ)
)
注意:我删除了一个多余的左括号。