AutoCAD中的AutoLISP函数错误参数


(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)
)

注意:我删除了一个多余的左括号。

相关内容

最新更新