;;; ================================================================ ;;; MERGEDWG.lsp ;;; Hromadne vlozeni vsech DWG souboru ze zvolene slozky do ;;; AKTUALNIHO (jiz otevreneho) vykresu, vsechny na souradnici 0,0. ;;; Kazdy DWG se vlozi jako blok (INSERT), ktery se hned rozlozi ;;; (EXPLODE) na normalni entity - tim se zachovaji puvodni hladiny, ;;; styly textu, kotani apod. z kazdeho zdrojoveho souboru. ;;; ;;; POZOR: pred spustenim mej otevreny/pripraveny cilovy vykres, ;;; do ktereho se ma vse sloucit. ;;; ================================================================ (defun readTextFileLine (path / f line) (setq line nil) (if (setq f (open path "r")) (progn (setq line (read-line f)) (close f) ) ) line ) (defun c:MERGEDWG ( / *error* oldFiledia oldCmdecho oldExpert tmpfile psScript waitCount folder files f dwgPath okCount errList ) (defun *error* (msg) (if oldFiledia (setvar "FILEDIA" oldFiledia)) (if oldCmdecho (setvar "CMDECHO" oldCmdecho)) (if oldExpert (setvar "EXPERT" oldExpert)) (if (and msg (not (member msg '("Function cancelled" "quit / exit abort")))) (princ (strcat "\nChyba: " msg))) (princ) ) (setq oldFiledia (getvar "FILEDIA")) (setq oldCmdecho (getvar "CMDECHO")) (setq oldExpert (getvar "EXPERT")) ;; --- vyber slozky s DWG soubory pres skutecny Windows dialog --- (setq tmpfile (strcat (getenv "TEMP") "\\mergedwg_folder.txt")) (if (findfile tmpfile) (vl-file-delete tmpfile)) (setq psScript (strcat "powershell -NoProfile -STA -WindowStyle Hidden -Command " "\"Add-Type -AssemblyName System.Windows.Forms; " "$f = New-Object System.Windows.Forms.FolderBrowserDialog; " "$f.Description = 'Vyberte slozku s DWG soubory ke slouceni'; " "if ($f.ShowDialog() -eq 'OK') { [System.IO.File]::WriteAllText('" tmpfile "', $f.SelectedPath) } " "else { [System.IO.File]::WriteAllText('" tmpfile "', 'CANCELLED') }\"" )) (startapp psScript) (princ "\nOtevira se dialog pro vyber slozky, cekejte...") (setq waitCount 0) (while (and (not (findfile tmpfile)) (< waitCount 180)) (command "_.DELAY" 500) (setq waitCount (1+ waitCount)) ) (if (not (findfile tmpfile)) (princ "\nCasovy limit pro vyber slozky vyprsel.") (progn (setq folder (readTextFileLine tmpfile)) (if (findfile tmpfile) (vl-file-delete tmpfile)) (if (or (not folder) (= folder "CANCELLED") (= folder "")) (princ "\nVyber slozky byl zrusen.") (progn (setq files (vl-directory-files folder "*.dwg" 1)) (if (not files) (princ (strcat "\nVe slozce " folder " nebyly nalezeny zadne DWG soubory.")) (progn (setq okCount 0 errList '()) (setvar "FILEDIA" 0) (setvar "CMDECHO" 1) (setvar "EXPERT" 5) (princ (strcat "\nNalezeno " (itoa (length files)) " DWG souboru ve slozce " folder)) (foreach f files (setq dwgPath (strcat folder "\\" f)) (princ (strcat "\n\n=== Vkladam: " f " ===")) ;; vlozit jako blok na 0,0, meritko 1,1, rotace 0 (command "_.-INSERT" dwgPath "0,0" "1" "1" "0") ;; hned rozlozit posledni vlozeny blok na entity ;; (zachova puvodni hladiny jednotlivych entit) (command "_.EXPLODE" "L" "") (setq okCount (1+ okCount)) (princ (strcat "\n>>> OK -> " f)) ) (setvar "FILEDIA" oldFiledia) (setvar "CMDECHO" oldCmdecho) (setvar "EXPERT" oldExpert) (princ (strcat "\n\nHotovo. Vlozeno a rozlozeno: " (itoa okCount) " z " (itoa (length files)) " souboru.")) ) ) ) ) ) ) (setvar "FILEDIA" oldFiledia) (setvar "CMDECHO" oldCmdecho) (setvar "EXPERT" oldExpert) (princ) ) (princ "\nPrikaz MERGEDWG nacten. Otevrete/pripravte cilovy vykres a spustte napsanim MERGEDWG") (princ)