2017-02-15 361 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。