@ModPlus:
the level and grid u can use new refernce() to get reference , if the level or grid in linkinstance , u can covert them stable-string to get reference , in this code , show u how to get link-grid and link-level . when u create dimension , can lookup the target element stable-string and in code to convert them .
```
//ModelLine
var line = RevitCommandData.Document.GetElement(5679235) as ModelLine;
var linkInstance = RevitCommandData.Document.GetElement(5678360) as RevitLinkInstance;
var linkDoc = linkInstance.GetLinkDocument();
var referenceLine = line.GeometryCurve.Reference;
//Linked Grid
var linkGrid = linkDoc.GetElement(5684684) as Autodesk.Revit.DB.Grid;
var linkGridRefLine = (linkGrid.Curve.Reference).CreateLinkReference(linkInstance);
var linkGridStr = linkGridRefLine.ConvertToStableRepresentation(RevitCommandData.Document);
var strs = linkGridStr.Split(':').ToList();
var completeGridRef = $"{strs[0]}:0:RVTLINK:{strs[2]}:{strs[3]}:{strs[4]}";
var targetRef = Reference.ParseFromStableRepresentation(RevitCommandData.Document, completeGridRef);
// Local Level
var level = RevitCommandData.Document.GetElement(5672502) as Level;
var levelRefPlane = new Reference(level);
//Link Level
var linkLevel = linkDoc.GetElement(5672528) as Level;
var linkLevelRefLine = (new Reference(linkLevel)).CreateLinkReference(linkInstance);
var linkLevelStr = linkLevelRefLine.ConvertToStableRepresentation(RevitCommandData.Document);
var linkRefSplits = linkLevelStr.Split(':');
var completeLevelRef = $"{linkRefSplits[0]}:0:RVTLINK:{linkRefSplits[2]}:0:SURFACE";
var targetLevelRef = Reference.ParseFromStableRepresentation(RevitCommandData.Document, completeLevelRef);
TransactionUtils.Execute(RevitCommandData.Document , new Action<IDisposable>(x =>
{
//Create Link-Level And Local-Level
// var array = new ReferenceArray();
// array.Append(levelRefPlane);
// array.Append(targetLevelRef);
// var l = Line.CreateUnbound(new XYZ(160.658709208543, -55.1818640250467, 39.7924116653103), -XYZ.BasisZ);
// var dimLevel = RevitCommandData.Document.Create.NewDimension(RevitCommandData.ActiveView, l, array);
//Create Link-Grid And ModelLine
var array2 = new ReferenceArray();
array2.Append(referenceLine);
array2.Append(targetRef);
var l2 = Line.CreateUnbound(new XYZ(34.4348591859389, 52.0854280621026, 0), XYZ.BasisY);
var dimGrid = RevitCommandData.Document.Create.NewDimension(RevitCommandData.ActiveView, l2, array2);
}),"test");
```
LanHui Xu 徐兰辉
Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.
Blog
LinkedIn
Revit/CAD Development | Steel Product Manager
