public static Edge GetInstanceEdgeFromSymbolRef( Reference symbolRef, Document dbDoc) { Edge instEdge = null; Options gOptions = new Options(); gOptions.ComputeReferences = true; gOptions.DetailLevel = ViewDetailLevel.Undefined; gOptions.IncludeNonVisibleObjects = false; Element elem = dbDoc.GetElement( symbolRef.ElementId ); string stableRefSymbol = symbolRef .ConvertToStableRepresentation( dbDoc ); string[] tokenList = stableRefSymbol.Split( new char[] { ':' } ); string stableRefInst = tokenList[3] + ":" + tokenList[4] + ":" + tokenList[5]; GeometryElement geomElem = elem.get_Geometry( gOptions ); foreach( GeometryObject geomElemObj in geomElem ) { GeometryInstance geomInst = geomElemObj as GeometryInstance; if( geomInst != null ) { GeometryElement gInstGeom = geomInst .GetInstanceGeometry(); foreach( GeometryObject gGeomObject in gInstGeom ) { Solid solid = gGeomObject as Solid; if( solid != null ) { foreach( Edge edge in solid.Edges ) { string stableRef = edge.Reference .ConvertToStableRepresentation( dbDoc ); if( stableRef == stableRefInst ) { instEdge = edge; break; } } } if( instEdge != null ) { // already found, exit early break; } } } if( instEdge != null ) { // already found, exit early break; } } return instEdge; }