Tags: Sheets (1)


Renumber Views on a sheet

02 March 2017 - 11:34 pm
Python,Revit,Dynamo


The pain of renumbering



In most offices, your documentation set will consist of a set of sheets, and each sheet has a titleblock with a zone for details/views/drawings/etc...whatever you want to call them, in revit there called views. Now these views generally have a corresponding number ascending from the bottom right to top left, for two reasons. Referencing from other drawings, but also the order is due to the binding normally being on the left hand side, and drawings should try to be as far away from the binding as possible (to keep the contractor happy).

The annoying part is that in revit, your view number on the sheet does not update magically when you move views around on your invisible cell grid. Furthermore, manually renumbering is sometimes a pain because you occassionally will get a nasty alert message from revit if you attempt to renumber with a duplicate number that already exists...

So I made a tool (revit python shell or dynamo player) to automatically renumber the views based on the location of the view on the sheet.

How it Works, 2 Essentials.


Move your details around, run the script, and wallah, your views are renumbered by the script analyzing the titleblock lower left point, and what cell it currently resides in! To do this we need two pieces of information.

1. Your cells are defined by a matrix. (2 dimensional array string) of numbers/text


Detail Grid

The detail grid is a 2 dimensional (list of lists) array. Visually, it should make sense no? This matrix is hardcoded into both the rps python script and dynamo player, which you can edit. But alternatively, this can be embedded into titleblock, which is explained later below.

#<---------detail grid format --------->#
# detail grid typical, with line breaks for clarity..

detailGrid = [
["30" ,"25" ,"20" ,"15" ,"10","05"],
["29" ,"24" ,"19" ,"14" ,"09","04"],
["28" ,"23" ,"18" ,"13" ,"08" ,"03"],
["27" ,"22" ,"17" ,"12" ,"07" ,"02"],
["26" ,"21" ,"16" ,"11" ,"06" ,"01"]
]


#<---------detail grid can be anything, letters too :) --------->#
# detail grid can be any text
# here we have letters

detailGridLetters = [
["DD" ,"Y" ,"T" ,"O" ,"J","E"],
["CC" ,"X" ,"S" ,"N" ,"I","D"],
["BB" ,"W" ,"R" ,"M" ,"H" ,"C"],
["AA" ,"V" ,"Q" ,"L" ,"G" ,"B"],
["Z" ,"U" ,"P" ,"K" ,"F" ,"A"]
]



2. The bounds of the zone to subdivide with the aforementioned matrix. This generally represented as a line, top left corner to bottom right corner.


Bounds

The bounds are bascially 2 points (top left to bottom right).We define by defining these pts as offsets relative to the title block corners. Normally, the script will prompt you to select a representative detail line, but alternatively, this can be embedded into titleblock, which is explained later below.

# in pseudo code
# bounds = [
# [topLeft_corner_offset_X, topLeft_corner_offset_Y],
# [botRight_corner_offset_X, botRight_corner_offset_Y]
# ]
#
# here we have our bounds 1.5" horiz offset from top left corner of title block and .5" vert offset.
# bounds = [[1.5",.5"],[5",2.5"]]

#keep in mind that we need in units of our project..in our case imperial is feet so make sure to convert as such..see actual thing below.
bounds = [[0.125,0.0416666666666667],[0.416666666666667,0.208333333333333]]


Embedding bounds and matrix data in titleblock family


So for these two bits of info above, you have two methods to supply this Information.

1. You can open up the script and edit the hardcoded array (matrix), and hit run. It will then prompt you to click a detail line that represents the bounds on the sheet.

2. [RECOMMENDED] The second way is you can specify two text parameters in your title block to embed this information for you and avoid prompts / detail lines / editing code all together :). Both of these parameters should be devoid of line breaks, and follow the json array format.

Handling duplicates


Nothings perfect..so you might be wondering what if the views coincidentally share the same cell? Well if this happens the script will then look for the next closest cell and try that. If that fails, it will try the next...until finally if there are no more cells available, it will start incrementally increasing from the last cell. Additionally, a message will pop up telling you how many times this duplicate situation happened, as well as highlight that view with a detail line :).
Chris Malcolm

Chris Malcolm is an aspiring architect, web developer, and designer originally from Florida. A MIT M.Arch Graduate, he currently is based in San Francisco, employed by Skidmore Owings and Merrill. He enjoys creating tools both professionally and for fun. As for tooling, architecturally speaking, Rhino and Grasshopper is his first love, with revit,dynamo,passion as close seconds. Outside of architecture tooling, he loves all things javascript, html, python, and regular expressions.

More projects and info at my main site:
Chris-malcolm.com