BuildingCoder.ScottWilsonVoodooMagic.GetInstanceEdgeFromSymbolRef C# (CSharp) Method

GetInstanceEdgeFromSymbolRef() public static method

public static GetInstanceEdgeFromSymbolRef ( System.Reference symbolRef, Document dbDoc ) : System.Edge
symbolRef System.Reference
dbDoc Document
return System.Edge
        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;
        }