//(9.03,10.13,0) --> (-14.59,10.13,0)
        //(-14.59,10.13,0) --> (-14.59,1.93,0)
        //(-14.59,1.93,0) --> (-2.45,1.93,0)
        //(-2.45,1.93,0) --> (-2.45,-3.98,0)
        //(-2.45,-3.98,0) --> (9.03,-3.98,0)
        //(9.03,-3.98,0) --> (9.03,10.13,0)
        //(0.98,-0.37,0) --> (0.98,1.93,0)
        //(0.98,1.93,0) --> (5.57,1.93,0)
        //(5.57,1.93,0) --> (5.57,-0.37,0)
        //(5.57,-0.37,0) --> (0.98,-0.37,0)

        //(9.03,10.13) --> (-14.59,10.13)
        //(-14.59,10.13) --> (-14.59,1.93)
        //(-14.59,1.93) --> (-2.45,1.93)
        //(-2.45,1.93) --> (-2.45,-3.98)
        //(-2.45,-3.98) --> (9.03,-3.98)
        //(9.03,-3.98) --> (9.03,10.13)
        //(0.98,-0.37) --> (0.98,1.93)
        //(0.98,1.93) --> (5.57,1.93)
        //(5.57,1.93) --> (5.57,-0.37)
        //(5.57,-0.37) --> (0.98,-0.37)

        //Room Rooms <212639 Room 1> has 2 loops:
        //  0: (2753,3087), (-4446,3087), (-4446,587), (-746,587), (-746,-1212), (2753,-1212)
        //  1: (298,-112), (298,587), (1698,587), (1698,-112)
        #endregion // Get room boundary loops

        #region Get furniture contained in given room
        /// <summary>
        /// Return the element ids of all furniture and
        /// equipment family instances contained in the
        /// given room.
        /// </summary>
        static List <Element> GetFurniture(Room room)
        {
            BoundingBoxXYZ bb = room.get_BoundingBox(null);

            Outline outline = new Outline(bb.Min, bb.Max);

            BoundingBoxIntersectsFilter filter
                = new BoundingBoxIntersectsFilter(outline);

            Document doc = room.Document;

            // Todo: add category filters and other
            // properties to narrow down the results

            // what categories of family instances
            // are we interested in?

            BuiltInCategory[] bics = new BuiltInCategory[] {
                BuiltInCategory.OST_Furniture,
                BuiltInCategory.OST_PlumbingFixtures,
                BuiltInCategory.OST_SpecialityEquipment
            };

            LogicalOrFilter categoryFilter
                = new LogicalOrFilter(bics
                                      .Select <BuiltInCategory, ElementFilter>(
                                          bic => new ElementCategoryFilter(bic))
                                      .ToList <ElementFilter>());

            FilteredElementCollector familyInstances
                = new FilteredElementCollector(doc)
                  .WhereElementIsNotElementType()
                  .WhereElementIsViewIndependent()
                  .OfClass(typeof(FamilyInstance))
                  .WherePasses(categoryFilter)
                  .WherePasses(filter);

            int roomid = room.Id.IntegerValue;

            List <Element> a = new List <Element>();

            foreach (FamilyInstance fi in familyInstances)
            {
                if (null != fi.Room &&
                    fi.Room.Id.IntegerValue.Equals(roomid))
                {
                    Debug.Assert(fi.Location is LocationPoint,
                                 "expected all furniture to have a location point");

                    a.Add(fi);
                }
            }
            return(a);
        }
        /// <summary>
        /// Return the element ids of all furniture and 
        /// equipment family instances contained in the 
        /// given room.
        /// </summary>
        static List<Element> GetFurniture( Room room )
        {
            BoundingBoxXYZ bb = room.get_BoundingBox( null );

              Outline outline = new Outline( bb.Min, bb.Max );

              BoundingBoxIntersectsFilter filter
            = new BoundingBoxIntersectsFilter( outline );

              Document doc = room.Document;

              // Todo: add category filters and other
              // properties to narrow down the results

              // what categories of family instances
              // are we interested in?

              BuiltInCategory[] bics = new BuiltInCategory[] {
            BuiltInCategory.OST_Furniture,
            BuiltInCategory.OST_PlumbingFixtures,
            BuiltInCategory.OST_SpecialityEquipment
              };

              LogicalOrFilter categoryFilter
            = new LogicalOrFilter( bics
              .Select<BuiltInCategory,ElementFilter>(
            bic => new ElementCategoryFilter( bic ) )
              .ToList<ElementFilter>() );

              FilteredElementCollector familyInstances
            = new FilteredElementCollector( doc )
              .WhereElementIsNotElementType()
              .WhereElementIsViewIndependent()
              .OfClass( typeof( FamilyInstance ) )
              .WherePasses( categoryFilter )
              .WherePasses( filter );

              int roomid = room.Id.IntegerValue;

              List<Element> a = new List<Element>();

              foreach( FamilyInstance fi in familyInstances )
              {
            if( null != fi.Room
              && fi.Room.Id.IntegerValue.Equals( roomid ) )
            {
              Debug.Assert( fi.Location is LocationPoint,
            "expected all furniture to have a location point" );

              a.Add( fi );
            }
              }
              return a;
        }