コード例 #1
0
        void RefreshList()
        {
            var selectedItems = ListItems.Where(x => x.Selected).Select(x => x.Expression).ToList();

            ListItems.Clear();

            if (Revit.ActiveDBDocument is DB.Document doc)
            {
                using (var collector = new DB.FilteredElementCollector(doc))
                {
                    foreach (var family in collector.OfClass(typeof(DB.Family)).Cast <DB.Family>().OrderBy((x) => $"{x.FamilyCategory.Name} : {x.Name}"))
                    {
                        var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), family.UniqueId);
                        var item        = new GH_ValueListItem($"{family.FamilyCategory.Name} : {family.Name}", $"\"{ referenceId }\"");
                        item.Selected = selectedItems.Contains(item.Expression);
                        ListItems.Add(item);
                    }
                }
            }
        }
コード例 #2
0
        void RefreshList()
        {
            var selectedItems = ListItems.Where(x => x.Selected).Select(x => x.Expression).ToList();

            ListItems.Clear();

            if (Revit.ActiveDBDocument is DB.Document doc)
            {
                using (var collector = new DB.FilteredElementCollector(doc))
                {
                    foreach (var level in collector.OfClass(typeof(DB.Level)).Cast <DB.Level>().OrderByDescending(x => x.GetHeight()))
                    {
                        var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), level.UniqueId);
                        var item        = new GH_ValueListItem(level.Name, $"\"{ referenceId }\"");
                        item.Selected = selectedItems.Contains(item.Expression);
                        ListItems.Add(item);
                    }
                }
            }
        }
コード例 #3
0
        public override bool CastFrom(object source)
        {
            if (source is IGH_Goo goo)
            {
                if (source is IGH_Element element)
                {
                    var document = element.Document;
                    var id       = element.Id;

                    if (id == DB.ElementId.InvalidElementId)
                    {
                        SetValue(document, id);
                        return(true);
                    }
                    else
                    {
                        source = document?.GetElement(id);
                    }
                }
                else
                {
                    source = goo.ScriptVariable();
                }
            }

            if (source is string uniqueid)
            {
                if (FullUniqueId.TryParse(uniqueid, out var documentId, out var uniqueId))
                {
                    if (Revit.ActiveUIApplication.TryGetDocument(documentId, out var doc))
                    {
                        try { source = doc.GetElement(uniqueId); }
                        catch { }
                    }
                }
            }

            return(SetValue(source as DB.Element));
        }
コード例 #4
0
        protected override void RefreshList(IEnumerable <IGH_Goo> goos)
        {
            var selectedItems = ListItems.Where(x => x.Selected).Select(x => x.Expression).ToList();

            ListItems.Clear();

            if (Revit.ActiveDBDocument is DB.Document doc)
            {
                int selectedItemsCount = 0;
                using (var collector = new DB.FilteredElementCollector(doc))
                    using (var elementTypeCollector = collector.WhereElementIsElementType())
                    {
                        foreach (var goo in goos)
                        {
                            var e = new Types.Element();
                            if (e.CastFrom(goo))
                            {
                                switch (e.Value)
                                {
                                case DB.Family family:
                                    foreach (var elementType in elementTypeCollector.Cast <DB.ElementType>())
                                    {
                                        if (elementType.GetFamilyName() != family.Name)
                                        {
                                            continue;
                                        }

                                        var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), elementType.UniqueId);
                                        var item        = new GH_ValueListItem($"{elementType.GetFamilyName()} : {elementType.Name}", $"\"{referenceId}\"");
                                        item.Selected = selectedItems.Contains(item.Expression);
                                        ListItems.Add(item);

                                        selectedItemsCount += item.Selected ? 1 : 0;
                                    }
                                    break;

                                case DB.ElementType elementType:
                                {
                                    var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), elementType.UniqueId);
                                    var item        = new GH_ValueListItem(elementType.GetFamilyName() + " : " + elementType.Name, $"\"{referenceId}\"");
                                    item.Selected = selectedItems.Contains(item.Expression);
                                    ListItems.Add(item);

                                    selectedItemsCount += item.Selected ? 1 : 0;
                                }
                                break;

                                case DB.Element element:
                                {
                                    var type        = doc.GetElement(element.GetTypeId()) as DB.ElementType;
                                    var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), type.UniqueId);
                                    var item        = new GH_ValueListItem(type.GetFamilyName() + " : " + type.Name, $"\"{referenceId}\"");
                                    item.Selected = selectedItems.Contains(item.Expression);
                                    ListItems.Add(item);

                                    selectedItemsCount += item.Selected ? 1 : 0;
                                }
                                break;
                                }
                            }
                            else
                            {
                                var c = new Types.Category();
                                if (c.CastFrom(goo))
                                {
                                    foreach (var elementType in elementTypeCollector.WhereCategoryIdEqualsTo(c.Id).Cast <DB.ElementType>())
                                    {
                                        var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), elementType.UniqueId);
                                        var item        = new GH_ValueListItem(elementType.GetFamilyName() + " : " + elementType.Name, $"\"{referenceId}\"");
                                        item.Selected = selectedItems.Contains(item.Expression);
                                        ListItems.Add(item);

                                        selectedItemsCount += item.Selected ? 1 : 0;
                                    }
                                }
                                else
                                {
                                    AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Unable to convert some input data.");
                                }
                            }
                        }
                    }

                // If no selection and we are not in CheckList mode try to select default model types
                if (ListItems.Count > 0 && selectedItemsCount == 0 && ListMode != GH_ValueListMode.CheckList)
                {
                    var defaultElementTypeIds = new HashSet <string>();
                    foreach (var typeGroup in Enum.GetValues(typeof(DB.ElementTypeGroup)).Cast <DB.ElementTypeGroup>())
                    {
                        var elementTypeId = doc.GetDefaultElementTypeId(typeGroup);
                        if (elementTypeId != DB.ElementId.InvalidElementId)
                        {
                            var type        = doc.GetElement(elementTypeId);
                            var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), type.UniqueId);
                            defaultElementTypeIds.Add(elementTypeId.IntegerValue.ToString());
                        }
                    }

                    foreach (var item in ListItems)
                    {
                        item.Selected = defaultElementTypeIds.Contains(item.Expression);
                    }
                }
            }
        }
コード例 #5
0
        protected override void RefreshList(string familyName)
        {
            var selectedItems = ListItems.Where(x => x.Selected).Select(x => x.Expression).ToList();

            ListItems.Clear();

            if (familyName.Length == 0 || familyName[0] == '\'')
            {
                return;
            }

            if (Revit.ActiveDBDocument is DB.Document doc)
            {
                int selectedItemsCount = 0;
                using (var collector = new DB.FilteredElementCollector(doc))
                {
                    var elementCollector = collector.WhereElementIsElementType();

                    if (Components.ElementCollectorComponent.TryGetFilterStringParam(DB.BuiltInParameter.SYMBOL_FAMILY_NAME_PARAM, ref familyName, out var familyNameFilter))
                    {
                        elementCollector = elementCollector.WherePasses(familyNameFilter);
                    }

                    var elementTypes = elementCollector.Cast <DB.ElementType>();

                    foreach (var elementType in elementTypes)
                    {
                        if (familyName is object)
                        {
                            if (!elementType.GetFamilyName().IsSymbolNameLike(familyName))
                            {
                                continue;
                            }
                        }

                        if (SourceCount == 0)
                        {
                            // If is a no pattern match update NickName case
                            if (string.Equals(elementType.GetFamilyName(), familyName, StringComparison.OrdinalIgnoreCase))
                            {
                                familyName = elementType.GetFamilyName();
                            }
                        }

                        var referenceId = FullUniqueId.Format(doc.GetFingerprintGUID(), elementType.UniqueId);
                        var item        = new GH_ValueListItem($"{elementType.GetFamilyName()}  : {elementType.Name}", $"\"{referenceId}\"");
                        item.Selected = selectedItems.Contains(item.Expression);
                        ListItems.Add(item);

                        selectedItemsCount += item.Selected ? 1 : 0;
                    }
                }

                // If no selection and we are not in CheckList mode try to select default model types
                if (ListItems.Count == 0)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, string.Format("No ElementType found using pattern \"{0}\"", familyName));
                }
                else if (selectedItemsCount == 0 && ListMode != GH_ValueListMode.CheckList)
                {
                    var defaultElementTypeIds = new HashSet <string>();
                    foreach (var typeGroup in Enum.GetValues(typeof(DB.ElementTypeGroup)).Cast <DB.ElementTypeGroup>())
                    {
                        var elementTypeId = Revit.ActiveDBDocument.GetDefaultElementTypeId(typeGroup);
                        if (elementTypeId != DB.ElementId.InvalidElementId)
                        {
                            defaultElementTypeIds.Add(elementTypeId.IntegerValue.ToString());
                        }
                    }

                    foreach (var item in ListItems)
                    {
                        item.Selected = defaultElementTypeIds.Contains(item.Expression);
                    }
                }
            }
        }