【问题标题】:Autolisp: "While" loop with .dxf outputAutolisp:带有 .dxf 输出的“While”循环
【发布时间】:2017-04-20 10:35:10
【问题描述】:

我正在编写一个 lisp 应用程序来为 CNC 刀具创建 2D 图案。我有一个 Excel 程序,它为与每个模式相关联的单个片段输出 3-10 个短 lisp 子例程,我可以在我的“while”循环中获取任意数量的这些子例程 load 并绘制片段,但是我可以从其中一个模式子生成的图纸中create .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出现在一个新选项卡中,但显然退出循环而不处理其余部分。

我是否遗漏了一些明显的东西?将所有样片与命名实体一起绘制在同一张图纸中,然后在最后批量处理每个实体会更好吗?

【问题讨论】:

    标签: dxf autolisp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-02
      • 2013-09-28
      • 2018-03-23
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 2012-12-02
      相关资源
      最近更新 更多