I had a better look in the ResultsBuilder functionality and decided to summarize and share some information here that other users may find helpful.
- Reference to the relevant Dll "Autodesk.ResultsBuilder.DBApplication.dll" may be found under the revit installation directory \addins\ResultsManagerExplorer e.g. C:\Program Files\Autodesk\Revit 2025\AddIns\ResultsManagerExplorer
- Examples of the SDK are a little old. Thus, code needs some changes as for example using ForgeTypeId. For example AddMeasurement(result.Item1, MeasurementResultType.Surface, UnitType.UT_Area, DisplayUnitType.DUT_SQUARE_METERS, MeasurementDependencyType.LoadCaseIndependent); Should be changed to AddMeasurement(result.Item1, MeasurementResultType.Surface, SpecTypeId.Area, UnitTypeId.SquareMeters, MeasurementDependencyType.LoadCaseIndependent);
- In a similar manner you have to take into account the changes in the Structures API and the newer structural analysis model.
E.g.
AnalyticalModel analyticalModel = (doc.GetElement(elementId) as AnalyticalModel);
IList<Curve> curves = analyticalModel.GetCurves(AnalyticalCurveType.RawCurves);
is now
AnalyticalPanel analyticalModel = (doc.GetElement(elementId) as AnalyticalPanel);
IList<Curve> curves = analyticalModel.GetOuterContour().ToList(); - It is not always clear in the examples but the results are provided in Units and not relative to the length of the member. E.g. xCoordinateValues = new List<double>() { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 }; means 0.1, 0.2 …. meters and not 10% of the length.
- Care should be taken with units when introducing data. In contrast with the rest of the API that the internal units of Revit should be used when sending data, the results builder does not. Have not tested it with imperial units and I am not sure if it is related with the UnitsSystem declared in the CreateResultsPackage method, but in my case(and the example of the SDK) data (length area etc) are in metric system. So do not convert to Internal. On the other hand you might need to convert from internal. The reason I did not get any results for the surface element was that the GetSurfaceContourPoints method returned the XYZ points in the Internal Units of Revit (Imperial) so I had to convert them to metric.
From my understanding, the ResultManager actually uses the AVF so it is up to you to decide whether it is more suited for your case to go for the ResultsBuilder and Manager or directly for the AVF. Here are some pros and cons.
- Using the ResultsBuilder will get you where you want to be probably faster since you do not have to set up your own handling of results packages data. Also no need to create your own user interface for handling result presentation. Last but not least you do not have to handle AVF, with clearing and creating spatialfieldmanagers schemas etc …
- On the other hand you will “inherit” the limitations of the ResultsBuilder meaning you cannot intervene with how data are stored and sometimes presented. For example, when using AVF directly you can flag which data points are to be tagged with text for diagrams. Also did not find a way to present results that are not based on an analytical member with ResultsBuilder. AVF supports the presentation of results with references that are not based on actually Revit elements.
Thus, I think that if you want just to show some results in Revit that are typical in the structural discipline go with ResultsBuilder. On the other hand if you want to present more complex data or need more control on the data you are better off with implementing your own datastructure and use AVF directly.