Autolisp:"而#34;循环使用.dxf输出

时间:2017-02-15 19:48:38

标签: dxf autolisp

我正在编写一个lisp应用程序来为CNC刀具创建2D图案。我有一个Excel程序,为每个模式关联的单个部分输出3-10个简短的lisp子程序,我可以在我的"中使用加载来获得任意数量的这些子程序。循环并绘制这个部分,但是我没有能够从其中一个模式subs生成的图形创建 .dxf文件的方法中让我恢复循环。如果我拉出dxfout并擦除步骤并让它们全部绘制在一起,它就像一个魅力。

(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出现在一个新选项卡中,但显然退出循环而不处理剩下的部分。

我错过了一些明显的东西吗?将所有图案片段绘制在与命名实体相同的图形中,然后在最后批量处理每个实体会不会更好?

1 个答案:

答案 0 :(得分:0)

从AutoCAD外部处理此方法可能更容易。也许使用PowerShell脚本获取.dwg文件列表,打开AutoCAD,然后循环绘制列表,导出.dxf,关闭.dwg并执行下一步,然后关闭AutoCAD。