Boost Your BIM – making Revit even better

January 17, 2013

Quick way to renumber doors, grids, and family instances

Filed under: Parameters — Harry Mattison @ 9:10 am

A friend asked about a macro to renumber grids in the order they are picked. Here’s how:

public void renumberByPicks()
    UIDocument uidoc = this.ActiveUIDocument;
    Document doc = uidoc.Document;

    // list that will contain references to the selected elements
    IList<Reference> refList = new List<Reference>();
        // create a loop to repeatedly prompt the user to select an element
        while (true)
            refList.Add(uidoc.Selection.PickObject(ObjectType.Element, "Select elements in order to be renumbered. ESC when finished."));
    // When the user hits ESC Revit will throw an OperationCanceledException which will get them out of the while loop

    using (Transaction t = new Transaction(doc,"Renumber"))
        // need to avoid encountering the error "The name entered is already in use. Enter a unique name."
        // for example, if there is already a grid 2 we can't renumber some other grid to 2
        // therefore, first renumber everny element to a temporary name then to the real one
        int ctr = 1;
        int startValue = 0;
        foreach (Reference r in refList)
            Parameter p = getParameterForReference(doc, r);

            // get the value of the first element to use as the start value for the renumbering in the next loop
            if (ctr == 1)
                startValue = Convert.ToInt16(p.AsString()); 

            setParameterToValue(p, ctr + 12345); // hope this # is unused (could use Failure API to make this more robust

        ctr = startValue;
        foreach (Reference r in refList)
            Parameter p = getParameterForReference(doc, r);
            setParameterToValue(p, ctr);

private Parameter getParameterForReference(Document doc, Reference r)
    Element e = doc.GetElement(r);
    Parameter p = null;
    if (e is Grid)
        p = e.get_Parameter("Name");
    else if (e is Room)
        p = e.get_Parameter("Number");
    else if (e is FamilyInstance)
        p = e.get_Parameter("Mark");
        TaskDialog.Show("Error","Unsupported element");
        return null;
    return p;
private void setParameterToValue(Parameter p, int i)
    if (p.StorageType == StorageType.Integer)
    else if (p.StorageType == StorageType.String)
About these ads


  1. Hi Harry, can you suggest how to improve this code to include the Viewport > Detail Number? I can’t seem to find the string in 2012 API Guide.

    Is it:
    else if (e is ViewSheetSetting)
    p = e.get_Parameter(“Detail Number”);




    Comment by Jeff — March 5, 2013 @ 5:08 pm

  2. [...] is a response to the comment from Jeff at on how to extend that tool to work with the Viewport > Detail Number [...]

    Pingback by Extending the Renumber command for Viewports & Detail Number | Boost Your BIM - making Revit even better — March 6, 2013 @ 11:12 am

  3. Thanks a lot Harry!

    Comment by Jeff — March 6, 2013 @ 3:42 pm

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

The WordPress Classic Theme Blog at


Get every new post delivered to your Inbox.

Join 972 other followers