diff --git a/layout-build.lsp b/layout-build.lsp new file mode 100644 index 0000000..f675224 --- /dev/null +++ b/layout-build.lsp @@ -0,0 +1,87 @@ +(defun c:LayoutBuild ( / ss count i ent val layoutLabels curFolder dwgFolder dwgName newDoc baseName baseNum basePrefix numStr numLen) + + (princ "\nScanning model space for layout labels...") + + ;; Get all text entities in model space + (setq ss (ssget "_X" '((0 . "TEXT")(410 . "Model")))) + (setq count 0 layoutLabels '()) + + (if ss + (progn + (setq i 0) + (while (< i (sslength ss)) + (setq ent (ssname ss i)) + (setq val (strcase (cdr (assoc 1 (entget ent))))) + (if (wcmatch val "LAYOUT [0-9]*") + (progn + (setq layoutLabels (cons val layoutLabels)) + (princ (strcat "\nFound: " val)) + (setq count (1+ count)) + ) + ) + (setq i (1+ i)) + ) + (setq layoutLabels (reverse layoutLabels)) + (princ (strcat "\nTotal layouts found: " (itoa count))) + ) + (princ "\nNo layout labels found.") + ) + + ;; Prompt for base name with default + (initget 1) + (setq baseName (getstring T "\nEnter base name : ")) + (if (= baseName "") + (setq baseName "hello-something-100") + ) + ;; Extract numeric suffix + (setq numStr "") + (setq i (1- (strlen baseName))) + (while (and (>= i 0) (>= (ascii (substr baseName (1+ i) 1)) 48) (<= (ascii (substr baseName (1+ i) 1)) 57)) + (setq numStr (strcat (substr baseName (1+ i) 1) numStr)) + (setq i (1- i)) + ) + (if (= numStr "") + (progn + (princ "\nError: Base name must end with a number.") + (exit) + ) + ) + (setq basePrefix (substr baseName 1 i)) + ;; If the last char of the prefix is a separator, keep it + (if (and (> i 0) + (wcmatch (substr baseName (1+ i) 1) "-_/")) + (setq basePrefix (strcat basePrefix (substr baseName (1+ i) 1))) + ) + (setq baseNum (atoi numStr)) + (setq numLen (strlen numStr)) + + ;; Check if current drawing is saved + (setq curFolder (getvar "DWGPREFIX")) + (if (or (not curFolder) (= curFolder "")) + (progn + (princ "\nError: Please save the current drawing first.") + (exit) + ) + ) + + ;; Ensure the path doesn't end with double backslash + (setq dwgFolder + (if (= (substr curFolder (strlen curFolder) 1) "\\") + (strcat curFolder "drawings") + (strcat curFolder "\\drawings") + ) + ) + + ;; Create each layout as a new DWG file and close it + (foreach label layoutLabels + (setq dwgName (strcat dwgFolder "\\" basePrefix "-" (rtos baseNum 2 0) ".dwg")) + (princ (strcat "\nCreating drawing: " dwgName)) + (setq newDoc (vla-add (vla-get-documents (vlax-get-acad-object)))) + (vla-saveas newDoc dwgName) + (vla-close newDoc :vlax-false) + (setq baseNum (1+ baseNum)) + ) + + (princ "\nAll drawings created and closed.") + (princ) +)