Stable Reference Relationships

Håvard Leding of Symetri recently contributed new RevitLookup commands for edges, faces and linked elements.

He now brings up a different topic, related the intriguing undocumented ElementId relationships and stable representation magic voodoo.

In his own words:

We have a Revit Idea Station request to access the sketch association to the element being sketched.

As a developer, I need access to the model lines that constitute the sketch lines for objects like Floors/Walls/Roofs etc. As of now these sketch lines are contained in a Sketch. I need the stable reference of the Sketch element (or the ModelLines themselves) to reflect its subordinate relationship to the element being sketched. So, the first part of a Sketch stable reference could be the UniqueId of a Floor, followed by its own Id.

I printed out stable references for 3 floors, and also the references for each ModelLine in the 3 Sketch elements.

I copy/pasted those into Excel and sorted them. An obvious pattern emerges:

37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ff91***FLOOR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ff92:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ff93:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ff94:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ff95:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffa4***FLOOR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffa5:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffa6:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffa7:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffa8:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffad***FLOOR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffae:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffaf:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffb0:0:LINEAR
37627a50-6c26-4b9d-a7cc-0deeb5800e11-0004ffb1:0:LINEAR

I'm not sure this pattern can be fully trusted. This is currently the only way I have found to connect sketch lines to the element they are sketching. The lines would have to be sorted start to end. And, once in a Curveloop, sorted again by inner/outer loops.

An idea would be to put some data on the Sketch element that allows us to know which floor the sketch belongs to.

Stable references in Revit sometimes follow a format of "Parent + sub identification".

Here are some examples with the parent part underlined:

Investigating this, I was hoping Sketch was using the same "Parent + sub identification" format.

That way we could get the element being sketched, i.e., the Parent.

Having something analogous like this would be nice:

I guess there already is a request for getting the profile of a Floor or Wall.

To do it now, we have to analyse each edge of each triangulated face.

Here is an image of a Floor modelled by a landscape architect:

Floor modelled by a landscape architect

Many thanks to Håvard for sharing these observations!