Esempio n. 1
0
        private static FilteredElementCollector WorksetElements(Document doc, Workset workset)
        {
            FilteredElementCollector elementCollector     = new FilteredElementCollector(doc).OfClass(typeof(Family));
            ElementWorksetFilter     elementWorksetFilter = new ElementWorksetFilter(workset.Id, false);

            return(elementCollector.WherePasses(elementWorksetFilter));
        }
Esempio n. 2
0
        public static List <string> GetEmptyWorksets(Document doc)
        {
            List <string> wnames = new List <string>();

            if (!doc.IsWorkshared)
            {
                return(null);
            }

            List <Workset> wids = new FilteredWorksetCollector(doc)
                                  .OfKind(WorksetKind.UserWorkset)
                                  .ToWorksets()
                                  .ToList();

            foreach (Workset w in wids)
            {
                ElementWorksetFilter     wfilter = new ElementWorksetFilter(w.Id);
                FilteredElementCollector col     = new FilteredElementCollector(doc).WherePasses(wfilter);
                if (col.GetElementCount() == 0)
                {
                    wnames.Add(w.Name);
                }
            }
            return(wnames);
        }
Esempio n. 3
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Application app = commandData.Application.Application;
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;

            if (!doc.IsWorkshared) return Result.Failed;

            List<WorksetId> worksetIds = uidoc.Selection.GetElementIds().Select(id => doc.GetElement(id)).Select(e => e.WorksetId).Distinct().ToList();
            ICollection<ElementId> elementIdsWithSameWorkset = new List<ElementId>();

            foreach (var worksetsId in worksetIds)
            {
                ElementWorksetFilter elementWorksetFilter = new ElementWorksetFilter(worksetsId);
                var ids = new FilteredElementCollector(doc, doc.ActiveView.Id).WherePasses(elementWorksetFilter).ToElementIds();
                foreach (var id in ids)
                {
                    elementIdsWithSameWorkset.Add(id);
                }
            }
            if (elementIdsWithSameWorkset.Any())
            {
                uidoc.Selection.SetElementIds(elementIdsWithSameWorkset);
                return Result.Succeeded;
            }
            else
            {
                return Result.Succeeded;
            }
        }
        /// <inheritdoc/>
        internal override int Execute(string args)
        {
            var worksetList = new FilteredWorksetCollector(_doc)
                              .OfKind(WorksetKind.UserWorkset)
                              .ToDictionary(wSet => wSet.Name, wSet => wSet.Id);
            ElementFilter elementWorksetFilter = new ElementWorksetFilter(worksetList[args]);
            var           elementsOnWorkset    = new FilteredElementCollector(_doc).WherePasses(elementWorksetFilter).ToElements();

            return(HelperMethods.RemoveElements(Name, _doc, elementsOnWorkset));
        }
        /// <summary>
        /// Publishes Workset Item Count data when Document is closed.
        /// </summary>
        /// <param name="doc">Revit Document.</param>
        /// <param name="filePath">Revit Document central file path.</param>
        public void PublishData(Document doc, string filePath)
        {
            try
            {
                var worksets = new FilteredWorksetCollector(doc)
                               .OfKind(WorksetKind.UserWorkset)
                               .ToWorksets();

                var worksetInfo = new List <WorksetItem>();
                foreach (var w in worksets)
                {
                    // (Konrad) It turns out that for some reason Linked worksets
                    // contain things like CopyMonitor options and Sketch Planes.
                    var worksetFilter = new ElementWorksetFilter(w.Id, false);
                    var planeFilter   = new ElementClassFilter(typeof(SketchPlane), true);
                    var filter        = new LogicalAndFilter(worksetFilter, planeFilter);
                    var count         = new FilteredElementCollector(doc)
                                        .WherePasses(filter)
                                        .WhereElementIsNotElementType()
                                        .GetElementCount();

                    worksetInfo.Add(new WorksetItem
                    {
                        Name  = w.Name,
                        Count = count
                    });
                }

                var wItemData = new WorksetItemData
                {
                    CentralPath = filePath.ToLower(),
                    User        = Environment.UserName.ToLower(),
                    Worksets    = worksetInfo
                };
                if (!ServerUtilities.Post(wItemData, "worksets/itemcount", out WorksetItemData unused))
                {
                    Log.AppendLog(LogMessageType.ERROR, "Failed to publish Worksets Data.");
                }
            }
            catch (Exception ex)
            {
                Log.AppendLog(LogMessageType.EXCEPTION, ex.Message);
            }
        }