コード例 #1
0
ファイル: Class1.cs プロジェクト: tbaofang/revitPractice
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            Document   doc   = uiDoc.Document;
            FilteredElementCollector collector = new FilteredElementCollector(doc);//创建元素收集器


            collector = collector.OfCategory(BuiltInCategory.OST_Windows).OfClass(typeof(FamilySymbol));//QuickFilter过滤所有的墙

            //FamilyInsetanceFilter找406*610mm的窗
            var query = from Element in collector
                        where Element.Name == "0406 x 0610mm"
                        select Element;
            List <Autodesk.Revit.DB.Element> famSyms = query.ToList <Autodesk.Revit.DB.Element>();
            ElementId            symbolId            = famSyms[0].Id;
            FamilyInstanceFilter fiFilter            = new FamilyInstanceFilter(doc, symbolId);

            FilteredElementCollector c1    = new FilteredElementCollector(doc);
            ICollection <Element>    found = c1.WherePasses(fiFilter).ToElements();

            //LogicalOrFilter计算门窗总和
            ElementCategoryFilter    doorFilter   = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
            ElementCategoryFilter    windowFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows);
            LogicalOrFilter          lFilter      = new LogicalOrFilter(doorFilter, windowFilter);
            FilteredElementCollector c3           = new FilteredElementCollector(doc);
            ICollection <Element>    fds          = c3.OfClass(typeof(FamilyInstance)).WherePasses(lFilter).ToElements();

            //taskdialog输出结果
            TaskDialog.Show("查找",
                            "已找到型号为“406*610mm的窗:”" + found.Count.ToString() + "个" + "\n" + "门窗个数总和为:" + fds.Count.ToString());

            return(Result.Succeeded);
        }
コード例 #2
0
        private void StoreDataOfFamilySymbol(FamilySymbol familySymbol)
        {
            try
            {
                FilteredElementCollector collector  = new FilteredElementCollector(doc);
                FamilyInstanceFilter     instFilter = new FamilyInstanceFilter(doc, familySymbol.Id);
                List <Element>           instances  = collector.WherePasses(instFilter).ToList <Element>();

                if (instances.Count > 0)
                {
                    foreach (Element instance in instances)
                    {
                        FamilyInstance     fi = (FamilyInstance)instance;
                        InstanceProperties ip = new InstanceProperties(fi);
                        AddParameterInfo(ip.InstParameters);

                        if (instanceDictionary.ContainsKey(ip.CategoryName))
                        {
                            instanceDictionary[ip.CategoryName].Add(ip.InstanceID, ip);
                        }
                        else
                        {
                            instanceDictionary.Add(ip.CategoryName, new Dictionary <int, InstanceProperties>());
                            instanceDictionary[ip.CategoryName].Add(ip.InstanceID, ip);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to collect selected Element Types: " + familySymbol.Name + " \n" + ex.Message, "ElementDataCollector Error:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
コード例 #3
0
        private bool FindLocatorFamily()
        {
            var found = false;

            try
            {
                var collector   = new FilteredElementCollector(m_doc);
                var symbols     = collector.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericModel).WhereElementIsElementType().ToElements().Cast <FamilySymbol>().ToList();
                var symbolFound = from symbol in symbols where symbol.Family.Name == locationFamilyName select symbol;
                if (symbolFound.Any())
                {
                    var familySymbols = symbolFound.ToList();
                    var filters       = new List <ElementFilter>();
                    foreach (var symbol in familySymbols)
                    {
                        var filter = new FamilyInstanceFilter(m_doc, symbol.Id);
                        filters.Add(filter);
                    }
                    var orFilter = new LogicalOrFilter(filters);

                    collector   = new FilteredElementCollector(m_doc);
                    instanceIds = collector.OfClass(typeof(FamilyInstance)).WherePasses(orFilter).ToElementIds().ToList();
                    if (instanceIds.Count > 0)
                    {
                        found = true;
                    }
                }
            }
            catch (Exception ex)
            {
                var message = ex.Message;
            }
            return(found);
        }
コード例 #4
0
        protected internal static IList <FamilyInstance> GetProjectZones(Document doc)
        {
            FamilySymbol             revitZoneSymbol = GetRevitZoneSymbol(doc);
            FamilyInstanceFilter     val             = new FamilyInstanceFilter(doc, revitZoneSymbol.get_Id());
            FilteredElementCollector val2            = new FilteredElementCollector(doc).WhereElementIsNotElementType().OfCategory(-2000151).WherePasses(val);

            return(val2.ToElements().Cast <FamilyInstance>().ToList());
        }
コード例 #5
0
ファイル: RevitUtil.cs プロジェクト: webdada/HOK-Revit-Addins
        private static Dictionary <int /*paramId*/, ParameterInfo> GetComponentFamilyParameters(Document doc, Category category, List <ElementId> instanceIds)
        {
            Dictionary <int, ParameterInfo> paramDictionary = new Dictionary <int, ParameterInfo>();

            try
            {
                FilteredElementCollector collector     = new FilteredElementCollector(doc);
                List <FamilySymbol>      familySymbols = collector.OfCategoryId(category.Id).OfClass(typeof(FamilySymbol)).ToElements().Cast <FamilySymbol>().ToList();
                List <string>            familyNames   = new List <string>();

                foreach (FamilySymbol symbol in familySymbols)
                {
                    string familyName = symbol.Family.Name;
                    if (string.IsNullOrEmpty(familyName))
                    {
                        continue;
                    }
                    if (familyNames.Contains(familyName))
                    {
                        continue;
                    }

                    FamilyInstanceFilter instanceFilter = new FamilyInstanceFilter(doc, symbol.Id);
                    collector = new FilteredElementCollector(doc, instanceIds);
                    List <FamilyInstance> instances = collector.WherePasses(instanceFilter).ToElements().Cast <FamilyInstance>().ToList();
                    if (instances.Count > 0)
                    {
                        FamilyInstance instance = instances.First();
                        foreach (Parameter param in instance.Parameters)
                        {
                            string paramName = param.Definition.Name;
                            if (!paramDictionary.ContainsKey(param.Id.IntegerValue) && !paramName.Contains("Extensions."))
                            {
                                ParameterInfo paramInfo = new ParameterInfo(param, true);
                                paramDictionary.Add(paramInfo.ParamId.IntegerValue, paramInfo);
                            }
                        }

                        foreach (Parameter param in symbol.Parameters)
                        {
                            string paramName = param.Definition.Name;
                            if (!paramDictionary.ContainsKey(param.Id.IntegerValue) && !paramName.Contains("Extensions."))
                            {
                                ParameterInfo paramInfo = new ParameterInfo(param, false);
                                paramDictionary.Add(paramInfo.ParamId.IntegerValue, paramInfo);
                            }
                        }

                        familyNames.Add(familyName);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to get family parameters.\n" + ex.Message, "Get Family Parameters", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            return(paramDictionary);
        }
コード例 #6
0
        /// <summary>
        /// 通过族类型id获得该族类型的实例
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="FamilySymbolId"></param>
        /// <returns></returns>
        static public ICollection <ElementId> getFamilyInsancesByFamilySymbolId(Document doc, ElementId familySymbolId)
        {
            FamilyInstanceFilter     familyInstanceFilter = new FamilyInstanceFilter(doc, familySymbolId);
            FilteredElementCollector filteredElements     = new FilteredElementCollector(doc);

            filteredElements = filteredElements.WherePasses(familyInstanceFilter);
            ICollection <ElementId> familyInsanceIds = filteredElements.ToElementIds();

            return(familyInsanceIds);
        }
コード例 #7
0
        /// <summary> 返回项目文档中某族类型FamilySymbol的所有实例 </summary>
        /// <param name="FamilySymbol"></param>
        public static FilteredElementCollector Instances(this FamilySymbol FamilySymbol)
        {
            Document  doc            = FamilySymbol.Document;
            ElementId FamilySymbolId = FamilySymbol.Id;
            FilteredElementCollector InsancesColl = new FilteredElementCollector(doc);
            FamilyInstanceFilter     FIFilter     = new FamilyInstanceFilter(doc, FamilySymbolId);

            InsancesColl.WherePasses(FIFilter);
            return(InsancesColl);
        }
コード例 #8
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var uiApp = commandData.Application;
            var uiDoc = uiApp.ActiveUIDocument;
            var app   = uiApp.Application;
            var doc   = uiDoc.Document;

            // Start code here

            // Lay nhung doi tuong dang chon

            try
            {
                var refObject = uiDoc.Selection.PickObject(ObjectType.Element);

                if (refObject != null)
                {
                    var elementId = refObject.ElementId;
                    var element   = doc.GetElement(elementId);
                    var elementID = element.Id;

                    var elementTypeId    = element.GetTypeId();
                    var elementType      = element.GetType();
                    var revitElementType = doc.GetElement(elementTypeId) as ElementType;
                    var typeId           = revitElementType.Id;

                    var categoryName = element.Category.Name;
                    if (categoryName == "Doors")
                    {
                        var familyInstanceFilter = new FamilyInstanceFilter(doc, elementId);
                        //var familyInstanceFilter = new FamilyInstanceFilter(doc, elementTypeId);
                        var collector = new FilteredElementCollector(doc);
                        var doors     = collector.WherePasses(familyInstanceFilter).ToElements();
                        TaskDialog.Show("Count Similar Doors", doors.Count().ToString());
                        return(Result.Succeeded);
                    }

                    TaskDialog.Show("Warning", "Please select a Doors");

                    return(Result.Failed);
                }
            }
            catch (Exception e)
            {
                message = e.Message;
                return(Result.Failed);
            }


            return(Result.Succeeded);
        }
コード例 #9
0
        /// <summary>
        /// Returns number of placed Family Instances of given Family.
        /// </summary>
        /// <param name="f">Family.</param>
        /// <returns></returns>
        private static int CountFamilyInstances(Family f)
        {
            var count        = 0;
            var famSymbolIds = f.GetFamilySymbolIds();

            if (famSymbolIds.Count == 0)
            {
                count = 0;
            }
            else
            {
                foreach (var id in famSymbolIds)
                {
                    var famSymbol = (FamilySymbol)f.Document.GetElement(id);
                    var filter    = new FamilyInstanceFilter(Doc, famSymbol.Id);
                    count = count + new FilteredElementCollector(Doc).WherePasses(filter).GetElementCount();
                }
            }
            return(count);
        }
コード例 #10
0
ファイル: AMEPEquip.cs プロジェクト: ycruan/P58_Loss
        protected virtual void ExtractObjects(MEPComponents mepComp)
        {
            MEPId mepId = null;
            int   num   = 0;

            try
            {
                mepId = MEPHelper.GetId(mepComp);
                num   = mepId.builtInCategories.Count;
            }
            catch { }
            for (int i = 0; i < num; ++i)
            {
                BuiltInCategory          bic  = mepId.builtInCategories[i];
                ElementType              et   = mepId.elementTypes[i];
                FilteredElementCollector coll = new FilteredElementCollector(_doc);
                FamilyInstanceFilter     fif  = new FamilyInstanceFilter(_doc, et.Id);
                _equips.AddRange(coll.OfCategory(bic).WherePasses(fif).Cast <FamilyInstance>().ToList());
            }
        }
コード例 #11
0
ファイル: FilterElementCommand.cs プロジェクト: wzfxue/Revit
 public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
 {
     try
     {
         StringBuilder sb       = new StringBuilder();
         Document      document = commandData.Application.ActiveUIDocument.Document;
         //类型过滤器 快
         ElementClassFilter classFilter = new ElementClassFilter(typeof(FamilyInstance));
         //族实例过滤器 慢
         FamilyInstanceFilter familyInstanceFilter = new FamilyInstanceFilter(document, new ElementId(1));
         //内建类型过滤
         ElementCategoryFilter categoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
         //逻辑过滤器,组合前两者过滤
         LogicalAndFilter logicalAndFilter = new LogicalAndFilter(classFilter, categoryFilter);
         //过滤处理
         FilteredElementCollector collector = new FilteredElementCollector(document);
         ICollection <ElementId>  doorIds   = collector.WherePasses(logicalAndFilter).ToElementIds();
         foreach (var elementId in doorIds)
         {
             var element = document.GetElement(elementId);
             sb.AppendLine($"{element.Name}");
         }
         //简写
         var classFilteredCollector = new FilteredElementCollector(document)
                                      .OfClass(typeof(FamilyInstance));
         var categoryFilteredCollector = new FilteredElementCollector(document)
                                         .OfCategory(BuiltInCategory.OST_Doors);
         foreach (Category category in document.Settings.Categories)
         {
             var categoryIdFilteredCollector = new FilteredElementCollector(document)
                                               .OfCategoryId(category.Id);
         }
         TaskDialog.Show("vl selected elements", "所有的实例门如下:" + sb.ToString());
     }
     catch (Exception ex)
     {
         message = ex.Message;
         return(Result.Failed);
     }
     return(Result.Succeeded);
 }
コード例 #12
0
ファイル: Utils.cs プロジェクト: magicmax15/BLOCKTools
        /// <summary>
        /// Находит все экземпляры указанного типа
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="typeName"></param>
        /// <returns></returns>
        public static List <Element> GetAllFamilyTypeInstances(Document doc, string typeName)
        {
            // Находит все типоразмеры семейств в текущем документе
            FilteredElementCollector collector = new FilteredElementCollector(doc);

            collector = collector.OfClass(typeof(FamilySymbol));

            // Находит среди всех типоразмеров типоразмеры с заданным именем "typeName" и определяет Id первого из списка
            var            query    = from element in collector where element.Name == typeName select element;
            List <Element> famSyms  = query.ToList <Element>();
            ElementId      symbolId = famSyms[0].Id;

            // Создает FamilyInstance фильтр по найденному FamilySymbol Id
            FamilyInstanceFilter filter = new FamilyInstanceFilter(doc, symbolId);

            // Применяет фильтр к элементам из текущего документа
            collector = new FilteredElementCollector(doc);
            List <Element> familyInstances = collector.WherePasses(filter).ToElements().ToList();

            return(familyInstances);
        }
コード例 #13
0
ファイル: Class1.cs プロジェクト: libocom/revit
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            //FilterElementCollect的使用
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            Document   doc   = uiDoc.Document;
            FilteredElementCollector collector = new FilteredElementCollector(doc);

            //QuickFilter过滤所有窗
            collector = collector.OfCategory(BuiltInCategory.OST_Windows).OfClass(typeof(FamilySymbol));
            //FamilyInstanceFilter找1200*1500mm的窗
            IEnumerable <Element> query = from element in collector
                                          where element.Name == "1200*1500mm"
                                          select element;
            List <Element>           famSyms  = query.ToList <Element>();
            ElementId                symbolId = famSyms[1].Id;
            FamilyInstanceFilter     fiFilter = new FamilyInstanceFilter(doc, symbolId);
            FilteredElementCollector c1       = new FilteredElementCollector(doc);
            ICollection <Element>    found    = c1.WherePasses(fiFilter).ToElements();
            //ElementParameterFilter找到标记小于五的窗
            ElementId                ruleValId = new ElementId(-10010203);
            FilterRule               fr        = ParameterFilterRuleFactory.CreateLessRule(ruleValId, "5", true);
            ElementParameterFilter   pFilter   = new ElementParameterFilter(fr);
            FilteredElementCollector c2        = new FilteredElementCollector(doc);

            c2 = c2.OfCategory(BuiltInCategory.OST_Windows).WherePasses(fiFilter).WherePasses(pFilter);
            //LogicalOrFilter计算门窗总和
            ElementCategoryFilter    doorFilter   = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
            ElementCategoryFilter    windowFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows);
            LogicalOrFilter          lFilter      = new LogicalOrFilter(doorFilter, windowFilter);
            FilteredElementCollector c3           = new FilteredElementCollector(doc);
            ICollection <Element>    fds          = c3.OfClass(typeof(FamilyInstance)).WherePasses(lFilter).ToElements();

            //taskdialog输出结果
            TaskDialog.Show("查找", "已找到型号为“1200*1500mm”的推拉窗" + found.Count.ToString() +
                            "个\n其中标记小于5的有" + c2.ToList().Count.ToString() + "个\n门窗总和为:" +
                            fds.Count.ToString());

            return(Result.Succeeded);
        }
コード例 #14
0
        /// <summary> 返回项目文档中某族Family的所有实例 </summary>
        /// <param name="Category">此族所属的 BuiltInCategory 类别,如果不确定,就不填。</param>
        /// <param name="Family"></param>
        public static FilteredElementCollector Instances(this Family Family,
                                                         BuiltInCategory Category = BuiltInCategory.INVALID)
        {
            Document                 doc        = Family.Document;
            List <ElementId>         SymbolsId  = Family.GetFamilySymbolIds().ToList();
            FilteredElementCollector Collector1 = new FilteredElementCollector(doc);

            if (SymbolsId.Count > 0)
            {
                // 创建过滤器
                FamilyInstanceFilter Filter = new FamilyInstanceFilter(doc, SymbolsId[0]);
                // 执行过滤条件
                if (Category != BuiltInCategory.INVALID)
                {
                    Collector1 = Collector1.OfCategory(Category);
                }
                Collector1.WherePasses(Filter);
            }
            // 当族类型多于一个时,才进行相交
            if (SymbolsId.Count > 1)
            {
                for (int index = 1; index <= SymbolsId.Count - 1; index++)
                {
                    // 创建过滤器
                    FamilyInstanceFilter     Filter     = new FamilyInstanceFilter(doc, SymbolsId[index]);
                    FilteredElementCollector Collector2 = new FilteredElementCollector(doc);
                    // 执行过滤条件
                    if (Category != BuiltInCategory.INVALID)
                    {
                        Collector2 = Collector2.OfCategory(Category);
                    }
                    Collector2.WherePasses(Filter);

                    // 将此FamilySymbol的实例添加到集合中
                    Collector1.UnionWith(Collector2);
                }
            }
            return(Collector1);
        }
コード例 #15
0
        private void AssertTypeAndCountWhenSelectingFromDropDown(int selectedIndex)
        {
            var slider = ViewModel.Model.AllNodes.FirstOrDefault(x => x is IntegerSlider) as IntegerSlider;

            var typeSelector = ViewModel.Model.AllNodes.FirstOrDefault(x => x is AllElementsInBuiltInCategory) as RevitDropDownBase;
            typeSelector.SelectedIndex = selectedIndex;

            RunCurrentModel();
            
            var dynamoSymbol = typeSelector.GetValue(0).Data as FamilySymbol;
            var revitSymbol = dynamoSymbol.InternalElement;

            Console.WriteLine("Family type is now set to {0}", revitSymbol);

            var symbolFilter = new FamilyInstanceFilter(
                DocumentManager.Instance.CurrentDBDocument,
                revitSymbol.Id);
            var fec = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument);
            fec.WherePasses(symbolFilter);

            Assert.AreEqual(fec.ToElements().Count, slider.Value);
        }
コード例 #16
0
        private void AssertTypeAndCountWhenSelectingFromDropDown(int selectedIndex)
        {
            var slider = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(x => x is IntegerSlider) as IntegerSlider;

            var typeSelector = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(x => x is AllElementsInBuiltInCategory) as RevitDropDownBase;

            typeSelector.SelectedIndex = selectedIndex;

            RunCurrentModel();

            var dynamoSymbol = typeSelector.GetValue(0, ViewModel.Model.EngineController).Data as FamilySymbol;
            var revitSymbol  = dynamoSymbol.InternalElement;

            Console.WriteLine("Family type is now set to {0}", revitSymbol);

            var symbolFilter = new FamilyInstanceFilter(
                DocumentManager.Instance.CurrentDBDocument,
                revitSymbol.Id);
            var fec = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument);

            fec.WherePasses(symbolFilter);

            Assert.AreEqual(fec.ToElements().Count, slider.Value);
        }
コード例 #17
0
        private Dictionary <string, ParameterProperties> GetParameterProperties(Category category)
        {
            Dictionary <string, ParameterProperties> paramDictionary = new Dictionary <string, ParameterProperties>();

            try
            {
                Element     firstElement           = null;
                ElementType firstTypeElement       = null;
                FilteredElementCollector collector = new FilteredElementCollector(m_doc);
                List <Element>           elements  = collector.OfCategoryId(category.Id).WhereElementIsNotElementType().ToElements().ToList();

                if (elements.Count > 0)
                {
                    firstElement     = elements.First();
                    firstTypeElement = m_doc.GetElement(firstElement.GetTypeId()) as ElementType;
                }
                else
                {
                    return(paramDictionary);
                }

                List <ElementId> categoryIds = new List <ElementId>();
                categoryIds.Add(category.Id);

                //add builtIn Parameter
                ICollection <ElementId> supportedParams = ParameterFilterUtilities.GetFilterableParametersInCommon(m_doc, categoryIds);
                foreach (ElementId eId in supportedParams)
                {
                    if (eId.IntegerValue < 0)
                    {
                        BuiltInParameter bltParam  = (BuiltInParameter)eId.IntegerValue;
                        string           paramName = LabelUtils.GetLabelFor(bltParam);

                        if (paramName.Contains("Extensions."))
                        {
                            continue;
                        }

                        ParameterProperties pp    = null;
                        Parameter           param = firstElement.LookupParameter(paramName);

                        if (null != param)
                        {
                            pp              = new ParameterProperties(param);
                            pp.IsInstance   = true;
                            pp.BltParameter = bltParam;
                            if (!paramDictionary.ContainsKey(pp.ParameterName))
                            {
                                paramDictionary.Add(pp.ParameterName, pp);
                            }
                        }
                        else if (null != firstTypeElement)
                        {
                            param = firstTypeElement.LookupParameter(paramName);

                            if (null != param)
                            {
                                pp              = new ParameterProperties(param);
                                pp.IsInstance   = false;
                                pp.BltParameter = bltParam;
                                if (!paramDictionary.ContainsKey(pp.ParameterName))
                                {
                                    paramDictionary.Add(pp.ParameterName, pp);
                                }
                            }
                        }
                    }
                }
                //add project parameter
                if (projectParameters.ContainsKey(category.Name))
                {
                    Dictionary <string, ParameterProperties> dictionary = projectParameters[category.Name];
                    foreach (string paramName in dictionary.Keys)
                    {
                        if (paramName.Contains("Extensions."))
                        {
                            continue;
                        }

                        ParameterProperties property = dictionary[paramName];
                        if (property.IsInstance && null != firstTypeElement)
                        {
                            Parameter param = firstElement.LookupParameter(property.ParameterName);

                            if (null != param)
                            {
                                ParameterProperties pp = new ParameterProperties(param);
                                pp.IsInstance = true;

                                if (!paramDictionary.ContainsKey(pp.ParameterName))
                                {
                                    paramDictionary.Add(pp.ParameterName, pp);
                                }
                            }
                        }
                        else if (null != firstTypeElement)
                        {
                            Parameter param = firstTypeElement.LookupParameter(property.ParameterName);

                            if (null != param)
                            {
                                ParameterProperties pp = new ParameterProperties(param);
                                pp.IsInstance = false;
                                if (!paramDictionary.ContainsKey(pp.ParameterName))
                                {
                                    paramDictionary.Add(pp.ParameterName, pp);
                                }
                            }
                        }
                    }
                }

                //add family parameter
                //sorting
                collector = new FilteredElementCollector(m_doc);
                ICollection <ElementId> familyInstanceIds = collector.OfCategoryId(category.Id).OfClass(typeof(FamilyInstance)).ToElementIds();
                collector = new FilteredElementCollector(m_doc);
                List <FamilySymbol> familySymbols = collector.OfCategoryId(category.Id).OfClass(typeof(FamilySymbol)).ToElements().Cast <FamilySymbol>().ToList();
                List <string>       familyNames   = new List <string>();

                if (familyInstanceIds.Count > 0)
                {
                    foreach (FamilySymbol symbol in familySymbols)
                    {
                        string familyName = symbol.Family.Name;
                        if (!string.IsNullOrEmpty(familyName))
                        {
                            if (!familyNames.Contains(familyName))
                            {
                                FamilyInstanceFilter instanceFilter = new FamilyInstanceFilter(m_doc, symbol.Id);
                                collector = new FilteredElementCollector(m_doc, familyInstanceIds);
                                List <Element> familyInstances = collector.WherePasses(instanceFilter).ToElements().ToList();
                                if (familyInstances.Count > 0)
                                {
                                    FamilyInstance firstFamilyInstance = familyInstances.First() as FamilyInstance;
                                    foreach (Parameter param in firstFamilyInstance.Parameters)
                                    {
                                        if (param.Id.IntegerValue > 0)
                                        {
                                            ParameterProperties pp = new ParameterProperties(param);
                                            pp.IsInstance = true;
                                            if (!paramDictionary.ContainsKey(pp.ParameterName) && !pp.ParameterName.Contains("Extensions."))
                                            {
                                                paramDictionary.Add(pp.ParameterName, pp);
                                            }
                                        }
                                    }

                                    FamilySymbol firstFamilySymbol = firstFamilyInstance.Symbol;
                                    foreach (Parameter param in firstFamilySymbol.Parameters)
                                    {
                                        if (param.Id.IntegerValue > 0)
                                        {
                                            ParameterProperties pp = new ParameterProperties(param);
                                            pp.IsInstance = false;
                                            if (!paramDictionary.ContainsKey(pp.ParameterName) && !pp.ParameterName.Contains("Extensions."))
                                            {
                                                paramDictionary.Add(pp.ParameterName, pp);
                                            }
                                        }
                                    }
                                }
                                familyNames.Add(familyName);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to get parameter properties.\n" + ex.Message, "Get Parameter Properties", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            return(paramDictionary);
        }
コード例 #18
0
ファイル: CmdRenumber.cs プロジェクト: ezhangle/SetoutPoints
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument    uidoc = uiapp.ActiveUIDocument;
            Document      doc   = uidoc.Document;

            FamilySymbol[] symbols
                = CmdGeomVertices.GetFamilySymbols(
                      doc, false);

            if (null == symbols)
            {
                TaskDialog.Show("Setout Points",
                                "Setout point family not loaded, "
                                + "so no setout points present.");

                return(Result.Succeeded);
            }

            // Filter for key setout points.
            // They are family instances with the generic
            // model category whose Key_Setout_Point
            // shared parameter is set to true.
            // To get the key points only, we initially set
            // up a parameter filter. For that, we need a
            // parameter definition to set up the parameter
            // filter.
            // Later, we decided to switch type when we
            // promote a setout point to a major or key
            // point, so there is no need to filter for
            // a parameter value at all; we can just
            // filter for the major setout point type
            // instead.

            //FamilySymbolFilter symbolFilter
            //  = new FamilySymbolFilter( symbol.Family.Id );

            //Element e
            //  = new FilteredElementCollector( doc )
            //    .WherePasses( symbolFilter )
            //    .FirstElement();

            //LogicalOrFilter f = new LogicalOrFilter(
            //  new FamilyInstanceFilter( doc, symbols[0].Id ),
            //  new FamilyInstanceFilter( doc, symbols[1].Id ) );

            FamilyInstanceFilter instanceFilter
                = new FamilyInstanceFilter(doc, symbols[0].Id);

            FilteredElementCollector col
                = new FilteredElementCollector(doc)
                  .OfCategory(BuiltInCategory.OST_GenericModel)
                  .OfClass(typeof(FamilyInstance))
                  .WherePasses(instanceFilter);

            //if( null == e )
            //{
            //  TaskDialog.Show( "Setout Points",
            //    "No key setout point found. " );
            //  return Result.Succeeded;
            //}

            //Parameter shared_parameter
            //  = e.get_Parameter( Command._parameter_key );
            //ParameterValueProvider provider
            //  = new ParameterValueProvider(
            //    shared_parameter.Id );
            //FilterNumericRuleEvaluator evaluator
            //  = new FilterNumericEquals();
            //FilterRule rule
            //  = new FilterIntegerRule(
            //    provider, evaluator, 1 );
            //ElementFilter paramFilter
            //  = new ElementParameterFilter( rule );
            //FilteredElementCollector col
            //  = new FilteredElementCollector( doc )
            //    .WherePasses( symbolFilter )
            //    .WherePasses( paramFilter );

            Guid guid = CmdGeomVertices._parameter_point_nr;

            using (Transaction tx = new Transaction(doc))
            {
                tx.Start("Renumber Setout Points");

                int    i = 0;
                string s;

                foreach (Element p in col)
                {
                    s = _sop_prefix + (++i).ToString();

                    p.get_Parameter(guid).Set(s);
                }

                tx.Commit();
            }
            return(Result.Succeeded);
        }
コード例 #19
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elementset)
        {
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            Document   doc   = commandData.Application.ActiveUIDocument.Document;

            #region 获取项目内的标高
            FilteredElementCollector levelcollector = new FilteredElementCollector(doc);
            ElementCategoryFilter    levelfilter    = new ElementCategoryFilter(BuiltInCategory.OST_Levels);
            levelcollector.WhereElementIsNotElementType();
            levelcollector.WherePasses(levelfilter);
            List <Level> levellist = levelcollector.Select(e => e as Level).ToList();
            #endregion


            #region 窗口
            MyWindow mywindow = new MyWindow();
            List <System.Windows.Controls.CheckBox> checkboxs = new List <System.Windows.Controls.CheckBox>();
            foreach (Level level in levellist)
            {
                System.Windows.Controls.CheckBox checkbox = new System.Windows.Controls.CheckBox();
                checkbox.Content   = level.Name;
                checkbox.IsChecked = true;
                checkboxs.Add(checkbox);
            }
            mywindow.listbox.ItemsSource = checkboxs;

            if (mywindow.ShowDialog() == true)
            {
                List <string> uncheckeds = new List <string>();
                foreach (System.Windows.Controls.CheckBox whoisunchecked in mywindow.listbox.ItemsSource)
                {
                    if (whoisunchecked.IsChecked != true)
                    {
                        uncheckeds.Add(whoisunchecked.Content as string);
                    }
                }

                for (int i = levellist.Count - 1; i >= 0; i--)
                {
                    foreach (string str in uncheckeds)
                    {
                        if (levellist[i].Name == str)
                        {
                            levellist.Remove(levellist[i]);
                            break;
                        }
                    }
                }
            }
            #endregion

            #region 根据类别和类型和标高处理框的图元(保留一个filters)
            List <ElementId>      elementids = uiDoc.Selection.GetElementIds().ToList();
            List <ElementFilter>  filters    = new List <ElementFilter>();
            ElementCategoryFilter filter2    = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
            ElementCategoryFilter filter3    = new ElementCategoryFilter(BuiltInCategory.OST_Windows);
            ElementCategoryFilter filter4    = new ElementCategoryFilter(BuiltInCategory.OST_GenericModel);
            ElementCategoryFilter filter5    = new ElementCategoryFilter(BuiltInCategory.OST_Furniture);
            ElementCategoryFilter filter6    = new ElementCategoryFilter(BuiltInCategory.OST_SpecialityEquipment);
            filters.Add(filter2);
            filters.Add(filter3);
            filters.Add(filter4);
            filters.Add(filter5);
            filters.Add(filter6);
            LogicalOrFilter orfilter = new LogicalOrFilter(filters);

            List <ElementFilter> filters2 = new List <ElementFilter>();
            foreach (Level level in levellist)
            {
                ElementLevelFilter filterlevel = new ElementLevelFilter(level.Id);
                filters2.Add(filterlevel);
            }
            LogicalOrFilter orfilter2 = new LogicalOrFilter(filters2);
            #endregion


            foreach (ElementId elementid in elementids)
            {
                //使用过滤器过滤不需要的图元
                FilteredElementCollector collector = new FilteredElementCollector(doc);
                collector.WherePasses(orfilter);
                collector.WherePasses(orfilter2);
                collector.WhereElementIsNotElementType(); //去掉类型,仅保留模型图元.


                Element element = doc.GetElement(elementid);
                //先判断选中的图元是不是在  常规模型\家具\窗\门\专用设备  五个类别内.
                Category        category        = element.Category;
                BuiltInCategory builtincategory = (BuiltInCategory)category.Id.IntegerValue;
                if ((builtincategory != BuiltInCategory.OST_Furniture) && (builtincategory != BuiltInCategory.OST_GenericModel) && (builtincategory != BuiltInCategory.OST_Windows) &&
                    (builtincategory != BuiltInCategory.OST_Doors) && (builtincategory != BuiltInCategory.OST_SpecialityEquipment))
                {
                    continue;
                }


                //再根据类型进行筛选.
                ElementId            typeid  = element.GetTypeId();
                FamilyInstanceFilter filter7 = new FamilyInstanceFilter(doc, typeid);
                collector.WherePasses(filter7);


                //TaskDialog.Show("revit", Convert.ToString(collector.Count()));

                //根据XY相同 Z不同进行判断是否删除
                Location      location      = element.Location;
                LocationPoint locationpoint = location as LocationPoint;

                List <ElementId> ids = new List <ElementId>();

                XYZ point = locationpoint.Point;

                foreach (Element ele in collector)
                {
                    if (ele.Location as LocationPoint == null)
                    {
                        continue;
                    }
                    XYZ point2 = (ele.Location as LocationPoint).Point;
                    if (point.X == point2.X && point.Y == point2.Y && point.Z != point2.Z)
                    {
                        ids.Add(ele.Id);
                    }
                }

                using (Transaction transaction = new Transaction(doc))  //删除重复图元
                {
                    transaction.Start("GroupLike");
                    doc.Delete(ids);
                    transaction.Commit();
                }
            }
            TaskDialog.Show("revit", "已删除处于相同XY坐标不同Z坐标的同类型图元.");
            return(Result.Succeeded);
        }