Jump to content

Recommended Posts

Posted

I had these for a bit and figured I'd share. I was surprised I couldn't find anything to rename the layout tab automatically, I am probably the only person too lazy to type them in, if there are some LISPs out there I couldn't find them. 

 

They do what I need, but I am sure more options could be added and most likely improved so feel free to comment or ask, no guarantee I can get time to work on them in the near future. I am busy busy at work right now.

 

I use the first and last one the most.

 

I have them set for drag and drop, just comment or delete the (c:---------) at the bottom to not run on load.

 

The first I had for a bit, I just drag and drop into a drawing with a single tab and the tab name is the drawing name.

 

;;; Layout tab with drawing name. (Works with only one layout tab)
;;;
;;; By SLW210 (a.k.a. Steve Wilson)
;;;


(defun c:DwgNameLayTab ()
  (setq dName (vl-filename-base (getvar "DWGNAME")))
  (setq lout (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object))))
  (vla-put-Name lout dName)
)
(c:DwgNameLayTab)

 

Another one I did, does same as above, but if more than one tab adds -1, -2, etc.

 

;;; Adds suffix to drawing name in layout tabs, if one tab dwgname only.
;;;
;;; By SLW210 (a.k.a. Steve Wilson)
;;;

(defun c:LayoutNameFromDWG ( / dwgName layouts layCount addSuffix idx doc layObj)
  (vl-load-com)

  ;; Get drawing name without extension
  (setq dwgName (vl-filename-base (getvar "DWGNAME")))

  ;; Get list of layouts excluding Model
  (setq layouts (vl-remove "Model" (layoutlist)))
  (setq layCount (length layouts))

  ;; Determine suffix behavior
  (cond
    ;; Only one layout no suffix
    ((= layCount 1)
     (setq addSuffix nil)
    )

    ;; More than one layout suffix REQUIRED
    ((> layCount 1)
     (setq addSuffix T)
    )
  )

  ;; Get active document
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

  ;; Rename layouts
  (setq idx 1)
  (foreach lay layouts
    (setq layObj (vla-item (vla-get-Layouts doc) lay))
    (vla-put-Name
      layObj
      (if addSuffix
        (strcat dwgName "-" (itoa idx))
        dwgName
      )
    )
    (setq idx (1+ idx))
  )

  (princ "\nLayout tabs renamed successfully.")
  (princ)
)

(c:LayoutNameFromDWG)

 

This does the exact same as the LayoutNameFromDWG.lsp , I think I had lost it and rewrote it, I don't see any advantage in one over the other, maybe someone else can tell.

 

;;; Layout tab with drawing name adds suffix if more than one tab (-1, -2).
;;;
;;; By SLW210 (a.k.a. Steve Wilson)
;;;

(defun c:DwgNameLayTab1 ( / dName doc layouts layCount idx lout)
  (vl-load-com)

  ;; Drawing name (no extension)
  (setq dName (vl-filename-base (getvar "DWGNAME")))

  ;; Get document and layouts
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq layouts (vl-remove "Model" (layoutlist)))
  (setq layCount (length layouts))

  ;; Rename layouts
  (setq idx 1)
  (foreach lay layouts
    (setq lout (vla-item (vla-get-Layouts doc) lay))
    (vla-put-Name
      lout
      (if (> layCount 1)
        (strcat dName "-" (itoa idx))
        dName
      )
    )
    (setq idx (1+ idx))
  )

  (princ)
)

(c:DwgNameLayTab1)

 

This one does a bit more, first tab is the DwgName, if more than one tab it adds a suffix to the second, third, etc. but first tab is still DwgName only, if as is often my case the DwgName ends in a number like I often have M-10-001, it just adds 1 to each of the next tabs.

 

Example, M-10-001,M-10-002, M-10-003, M-10-004, etc.

 

;;; Layout tab drawing name to first tab, more than one tab adds suffix after first tab (-1, -2), if ends in numbers adds 1 to number
;;; for example M-10-001,M-10-002, M-10-003, M-10-004. 
;;;
;;; By SLW210 (a.k.a. Steve Wilson)
;;;

(defun c:DwgNameLayTab2 ( / dName doc layouts idx lout
                          baseName numStr startNum numLen pos)

  (vl-load-com)

  ;; Drawing name (no extension)
  (setq dName (vl-filename-base (getvar "DWGNAME")))

  ;; Get layouts (exclude Model)
  (setq layouts (vl-remove "Model" (layoutlist)))

  ;; Extract trailing number (with padding) ---
  (setq pos (strlen dName))
  (while (and (> pos 0)
              (<= 48 (ascii (substr dName pos 1)) 57))
    (setq pos (1- pos))
  )

  (if (< pos (strlen dName))
    (progn
      (setq baseName (substr dName 1 pos))
      (setq numStr  (substr dName (1+ pos)))
      (setq startNum (atoi numStr))
      (setq numLen (strlen numStr))   ;; number of digits
    )
    (setq baseName dName
          startNum 1
          numLen 0)
  )

  ;; Get document
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

  ;; Rename layouts
  (setq idx 0)
  (foreach lay layouts
    (setq lout (vla-item (vla-get-Layouts doc) lay))
    (vla-put-Name
      lout
      (cond
        ;; First layout: exact drawing name
        ((= idx 0) dName)

        ;; Subsequent layouts
        (T
         (if (> numLen 0)
           ;; DWG ends with number increment & pad
           (strcat
             baseName
             (vl-string-right-trim
               " "
               (strcat
                 (substr "0000000000" 1 (- numLen (strlen (itoa (+ startNum idx)))))
                 (itoa (+ startNum idx))
               )
             )
           )
           ;; No trailing number add -1, -2, ...
           (strcat dName "-" (itoa idx))
         )
        )
      )
    )
    (setq idx (1+ idx))
  )

  (princ)
)

(c:DwgNameLayTab2)

 

 

  • Like 2

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...