GetSpecialFamilyReference() public static method

public static GetSpecialFamilyReference ( FamilyInstance inst, SpecialReferenceType refType ) : System.Reference
inst FamilyInstance
refType SpecialReferenceType
return System.Reference
        public void test(UIDocument uidoc)
        {
            Document doc = uidoc.Document;

            ReferenceArray refs = new ReferenceArray();

            Reference myRef = uidoc.Selection.PickObject(
                ObjectType.Element,
                new MySelectionFilter("Walls"),
                "Select a wall");

            Wall wall = doc.GetElement(myRef) as Wall;

            // Creates an element e from the selected object
            // reference -- this will be the wall element
            Element e = doc.GetElement(myRef);

            // Creates a selection filter to dump objects
            // in for later selection
            ICollection <ElementId> selSet = new List <ElementId>();

            // Gets the bounding box of the selected wall
            // element picked above
            BoundingBoxXYZ bb = e.get_BoundingBox(doc.ActiveView);

            // adds a buffer to the bounding box to ensure
            // all elements are contained within the box
            XYZ buffer = new XYZ(0.1, 0.1, 0.1);

            // creates an ouline based on the boundingbox
            // corners of the panel and adds the buffer
            Outline outline = new Outline(
                bb.Min - buffer, bb.Max + buffer);

            // filters the selection by the bounding box of the selected object
            // the "true" statement inverts the selection and selects all other objects
            BoundingBoxIsInsideFilter bbfilter
                = new BoundingBoxIsInsideFilter(outline, false);

            ICollection <BuiltInCategory> bcat
                = new List <BuiltInCategory>();

            //creates a new filtered element collector that
            // filters by the active view settings
            FilteredElementCollector collector
                = new FilteredElementCollector(
                      doc, doc.ActiveView.Id);

            //collects all objects that pass through the
            // requirements of the bbfilter
            collector.WherePasses(bbfilter);

            //add all levels and grids to filter -- these
            // are filtered out by the viewtemplate, but
            // are nice to have
            bcat.Add(BuiltInCategory.OST_StructConnections);

            //create new multi category filter
            ElementMulticategoryFilter multiCatFilter
                = new ElementMulticategoryFilter(bcat);

            //create new filtered element collector, add the
            // passing levels and grids, then remove them
            // from the selection
            foreach (Element el in collector.WherePasses(
                         multiCatFilter))
            {
                if (el.Name.Equals("EMBEDS"))
                {
                    selSet.Add(el.Id);
                }
            }

            XYZ[] pts = new XYZ[99];

            //View3D view = doc.ActiveView as View3D;
            View3D view = Get3dView(doc);

            // THIS IS WHERE IT RETURNS THE WALL OPENING REFERENCES.
            // HOWEVER THEY ONLY ARE ABLE TO BE USED FOR DIMENSIONS
            // IF THE OPENING IS CREATED USING A FAMILY SUCH AS A
            // WINDOW OR DOOR. OPENING BY FACE/WALL DOES NOT WORK,
            // EVEN THOUGH IT RETURNS PROPER REFERENCES

            List <Reference> openings = GetWallOpenings(e as Wall, view);

            foreach (Reference reference in openings)
            {
                refs.Append(reference);
            }

            TaskDialog.Show("REFERE", refs.Size.ToString());

            Curve wallLocation = (wall.Location as LocationCurve).Curve;

            int i = 0;

            foreach (ElementId ele in selSet)
            {
                FamilyInstance fi = doc.GetElement(ele) as FamilyInstance;
                Reference      reference
                    = ScottWilsonVoodooMagic.GetSpecialFamilyReference(
                          fi, ScottWilsonVoodooMagic.SpecialReferenceType.CenterLR,
                          doc);

                refs.Append(reference);

                pts[i] = (fi.Location as LocationPoint).Point;
                i++;
            }

            XYZ offset = new XYZ(0, 0, 4);

            Line line = Line.CreateBound(
                pts[0] + offset, pts[1] + offset);

            using (Transaction t = new Transaction(doc))
            {
                t.Start("dimension embeds");

                Dimension dim = doc.Create.NewDimension(doc.ActiveView, line, refs);

                t.Commit();
            }
        }