Revit二次开发之实现按梁高给给梁设置不同的颜色

按梁高给给梁设置不同的颜色

在没有插件的情况下,要给不同梁高的梁设置不同的颜色需要在过滤器里面设置。有了这个样的插件以后就可以更加方便的设置了。下面上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;

namespace 自动添加梁材质
{
    [Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(RegenerationOption.Manual)]
    [Autodesk.Revit.Attributes.Journaling(JournalingMode.UsingCommandData)]
    public class Command:IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData,ref string message,ElementSet elementSet)
        {
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            Selection selection = uidoc.Selection;
            View v = doc.ActiveView;
                
            FilteredElementCollector collector = new FilteredElementCollector(doc);
           IList<ElementId> ids= collector.OfCategory(BuiltInCategory.OST_StructuralFraming).WhereElementIsNotElementType().ToElementIds() as List<ElementId>;

            Dictionary<string, List<ElementId>> idDictionary = GetElementsId(ids, doc);
            using (Transaction ts = new Transaction(doc, "创建颜色填充"))
            {
                ts.Start();
                CreateFillPattern(doc, idDictionary);
                ts.Commit();
            }


                return Result.Succeeded;
        }
        /// <summary>
        /// 收集每一个类型的梁
        /// </summary>
        /// <param name="ids"></param>
        /// <param name="doc"></param>
        /// <returns></returns>
        public static Dictionary<string,List<ElementId>>GetElementsId(IList<ElementId> ids,Document doc)
        {
            Dictionary<string, List<ElementId>> idDictionary = new Dictionary<string, List<ElementId>>();
            foreach (ElementId id in ids)
            {
                string name = doc.GetElement(id).Name;
                if (idDictionary.ContainsKey(name))
                {
                    idDictionary[name].Add(id);
                }
                else
                {
                    idDictionary.Add(name, (new List<ElementId>()));
                    idDictionary[name].Add(id);
                }
            }
            return idDictionary;
        }
        /// <summary>
        /// 创建颜色填充
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="ids"></param>
        /// <param name="color"></param>
        public static void CreateFillPattern(Document doc,Dictionary<string,List<ElementId>> ids)
        {
            
           
            //遍历字典
            foreach(string key in ids.Keys)
            {
                Random r = new Random();
                Color cl = new Color((byte)r.Next(0, 255), (byte)r.Next(0, 255), (byte)r.Next(0, 255));
                foreach (ElementId id in ids[key])
                {
                   
                    CreateColor(doc, id, cl);
                }
            }
            
               
            
        }
        /// <summary>
        /// 创建颜色
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="id"></param>
        /// <param name="color"></param>
        public static void CreateColor(Document doc,ElementId id,Color color)
        {
            FilteredElementCollector fillFilter = new FilteredElementCollector(doc);
            fillFilter.OfClass(typeof(FillPatternElement));
            //获取实体
            FillPatternElement fp = fillFilter.First(m => (m as FillPatternElement).GetFillPattern().IsSolidFill) as FillPatternElement;
            OverrideGraphicSettings ogs = doc.ActiveView.GetElementOverrides(id);
            //填充图案
            ogs.SetProjectionFillPatternId(fp.Id);
            //颜色
            ogs.SetProjectionFillColor(color);
            //应用到视图
            doc.ActiveView.SetElementOverrides(id, ogs);
        }
    }
}

效果如下:
点我看效果

发布了65 篇原创文章 · 获赞 8 · 访问量 3245

猜你喜欢

转载自blog.csdn.net/yasenRK/article/details/103327137