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;
}