Autolisp: цикл while с выводом .dxf

Я пишу приложение Lisp для создания 2D-шаблонов для резака с ЧПУ. У меня есть программа Excel, которая выводит 3-10 коротких подпрограмм lisp для отдельных частей, связанных с каждым шаблоном, и я могу получить любое количество этих подпрограмм для загрузки внутри моего цикла while и нарисовать часть, но ни один из методов, которые я могу использовать для создания файлов .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 появится на новой вкладке, но, очевидно, это выходит из цикла без обработки остальных частей.

Я упускаю что-то очевидное? Было бы лучше нарисовать все части узора на том же чертеже, что и именованные объекты, а затем разделить каждый объект в конце?


person rcorgana    schedule 15.02.2017    source источник


Ответы (1)


Возможно, было бы проще подойти к этому вне AutoCAD. Возможно, используя сценарий PowerShell, чтобы получить список файлов .dwg, открыть AutoCAD, затем просмотреть список чертежей, экспортировать .dxf, закрыть .dwg и выполнить следующее, а затем закрыть AutoCAD.

person Skatterbrainz    schedule 20.04.2017