Drawing Deliverables: How to Remove Sheet Set "Fields" Quickly and Easily

Drawing Deliverables: How to Remove Sheet Set "Fields" Quickly and Easily 


In certain cases, a client may be unfamiliar with Sheet Set Manager, request that we do not deliver a SSM project, and/or require deliverables to align to their specific standards. In these instances, do we (company) avoid using SSM entirely for the project? No….

We can still use SSM internally and capitalize on all the efficiency gains, yet still ensure we meet the client (or project) deliverable requirements. How?

I stumbled upon an AutoLISP routine several years ago that converts “fielded attributes” to “attributes”, thus removing any SSM properties. This process does not explode title blocks.

Whenever the requirement is to provide non-SSM Sheet Border deliverables, simply run the AutoLISP routine (FLD2TXT, as follows) to convert your SSM Sheet Borders into typical attributed Sheet Borders. 

Note: You will need to run this AutoLISP on each drawing contained within the project, individually (or potentially through a script to apply to all drawings equally). 

Important: Ensure you COPY all the drawings to a separate location to prepare the deliverable as you do not want to “break” the SSM properties on drawings that are currently being used with SSM.

For more information on this AutoLISP code and a demonstration, please refer to my Autodesk University 2018 class, titled: 6 Sheet Set Manager Strategies for Success. (discussion starts at the 44:00 minute mark of the recorded video).

The AutoLISP code is below:

(defun c:FLD2TXT (/ ss n bn an ad s)
     (prompt "Select the blocks you wish to remove the field links from: ") ;_ end of prompt
     (setq ss (ssget '((0 . "INSERT")))) 
  ;Get selection set from user
     (setq n 0) 
  ;Initialize counter
  ;; Step through selection set one entity at a time
     (while (< n (sslength ss))
     (setq bn (ssname ss n)) 
  ;Get the nth entity in the selection set
     (setq an (entnext bn)) 
  ;Get the next enity after bn
  ;; Step through each next entity until it is not an attribute
     (while (and an 
  ;Check if entity is found
     (setq ad (entget an)) 
  ;Get data
     (= "ATTRIB" (cdr (assoc 0 ad))) 
  ;Check if attribute
     ) 
  ;_ end of and
     (setq s (cdr (assoc 1 ad))) 
  ;Get text value
     (setq ad (subst (vl-list* 1 "") (assoc 1 ad) ad))
  ;Clear the attribute's value
     (entmod ad) 
  ;Modify the entity
     (setq ad (subst (vl-list* 1 s) (assoc 1 ad) ad))
  ;Set the attribute's value back to only the text
     (entmod ad) 
  ;Modify the entity
     (entupd an) 
  ;Update screen to show change
     (setq an (entnext an)) 
  ;Get next entity
     ) 
  ;_ end of while
     (setq n (1+ n)) 
  ;Increment counter
     ) 
  ;_ end of while
     (setq ss nil) 
  ;Clear selection set
     (gc) 
  ;Clear unused memory
     (princ)
     ) 

;_ end of defun