2017-02-15 54 views
0

我正在写一个lisp应用程序来为CNC切割器创建2D模式。我有一个Excel程序,可以为每个模式输出3-10个短lisp子例程,并且我可以在我的“while”循环中获取任意数量的这些子文件到加载并绘制该部分,但没有任何方法我可以工作到创建 .dxf文件从图形子生成的图纸将让我恢复循环。如果我拉出dxfout和擦除步骤,并让它们全部相互重叠,就像魅力一样。Autolisp:“While”循环与.dxf输出

(defun c:CreateDXF (/ owd ofd sdate) 

    (setq owd (acet-file-cwd)) 
    (acet-file-chdir "P:\\") 
    (setq ofd (getvar "filedia")) 
    (setvar "filedia" 0) 

    (setq sdate (getstring "\nEnter the order start date in YYYYMMDD format: ")) 

    (setq fpath (strcat "P:\\LSP\\" sdate)) 
    (setq wopath (acet-ui-pickdir "Select Work Order Folder" fpath)) 
    (setq flist (vl-directory-files wopath "*.lsp" 1)) 

    (while (> (length flist) 0) 
    (setq fname (car flist)) 
    (setq wfile (strcat wopath "\\" fname)) 
    (vl-file-rename wfile "P:\\LSP\\temp.lsp") 
    (load "P:\\LSP\\temp.lsp") 
    (vl-file-rename "P:\\LSP\\temp.lsp" wfile) 

    (setq savepath (strcat "P:\\DXF\\" sdate)) 
    (setq savename (strcat (vl-filename-base wfile) ".dxf")) 

    (setq patt (ssget "x")) 

    (command "_.dxfout" savepath "_Objects" patt "" "_Version" "2013" "16" "" "") 

    (command "erase" "all" "") 
    (setq flist (cdr flist)) 

    );while 

    (acet-file-chdir owd) 
    (setvar "filedia" ofd) 

    (alert "Done") 
    (princ) 

);defun 

以书面形式运行此操作会在第一个dxfout步骤中挂起。我可以通过lisp编辑器重置程序,然后文件出现在输出目录中,dxf出现在新选项卡中,但显然退出循环而不处理剩余的部分。

我错过了一些明显的东西吗?将同一图形中的所有模式片段与命名实体绘制在一起,然后在每个实体的末尾批量绘制它们会更好吗?

回答

0

从AutoCAD以外处理这个可能更容易。也许使用PowerShell脚本获取.dwg文件列表,打开AutoCAD,然后遍历绘图列表,导出.dxf,关闭.dwg并执行下一步,然后关闭AutoCAD。