/// <summary> /// Override the element's color in the active view. /// </summary> /// <param name="color">The color to apply to a solid fill on the element.</param> public Element OverrideColorInView(Color color) { TransactionManager.Instance.EnsureInTransaction(DocumentManager.Instance.CurrentDBDocument); var view = DocumentManager.Instance.CurrentUIDocument.ActiveView; var ogs = new Autodesk.Revit.DB.OverrideGraphicSettings(); var patternCollector = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument); patternCollector.OfClass(typeof(Autodesk.Revit.DB.FillPatternElement)); Autodesk.Revit.DB.FillPatternElement solidFill = patternCollector.ToElements().Cast <Autodesk.Revit.DB.FillPatternElement>().First(x => x.GetFillPattern().IsSolidFill); var overrideColor = new Autodesk.Revit.DB.Color(color.Red, color.Green, color.Blue); // the old functions SetProjectionFillColor and SetProjectionFillPatternId, // are obsoleted and suggested by the documentation that will be removed and // replaced by SetSurfaceForegroundPatternColor and SetSurfaceForegroundPatternId. ogs.SetSurfaceForegroundPatternColor(overrideColor); ogs.SetSurfaceForegroundPatternId(solidFill.Id); ogs.SetProjectionLineColor(overrideColor); view.SetElementOverrides(InternalElementId, ogs); TransactionManager.Instance.TransactionTaskDone(); return(this); }
/// <summary> /// Override the element's color in the active view. /// </summary> /// <param name="color">The color to apply to a solid fill on the element.</param> public Element OverrideColorInView(Color color) { TransactionManager.Instance.EnsureInTransaction(DocumentManager.Instance.CurrentDBDocument); var view = DocumentManager.Instance.CurrentUIDocument.ActiveView; var ogs = new Autodesk.Revit.DB.OverrideGraphicSettings(); var patternCollector = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument); patternCollector.OfClass(typeof(Autodesk.Revit.DB.FillPatternElement)); Autodesk.Revit.DB.FillPatternElement solidFill = patternCollector.ToElements().Cast <Autodesk.Revit.DB.FillPatternElement>().First(x => x.GetFillPattern().IsSolidFill); var overrideColor = new Autodesk.Revit.DB.Color(color.Red, color.Green, color.Blue); ogs.SetProjectionFillColor(overrideColor); ogs.SetProjectionFillPatternId(solidFill.Id); ogs.SetProjectionLineColor(overrideColor); view.SetElementOverrides(InternalElementId, ogs); TransactionManager.Instance.TransactionTaskDone(); return(this); }
/// <summary> /// Animate the color of an element. This will export images of the element, then revert the element back to where it was. /// Inspired by the Bad Monkeys team. /// </summary> /// <param name="element">The element to set color to.</param> /// <param name="startColor">The start color.</param> /// <param name="endColor">The end color.</param> /// <param name="iterations">Numnber of images.</param> /// <param name="directoryPath">Where to save the images.</param> /// <param name="view">View to export from.</param> /// <returns name="element">The element.</returns> /// <search> /// rhythm /// </search> public static object AnimateColor(List <global::Revit.Elements.Element> element, Color startColor, Color endColor, int iterations, string directoryPath, global::Revit.Elements.Element view) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; UIDocument uiDocument = new UIDocument(doc); Autodesk.Revit.DB.View internalView = (Autodesk.Revit.DB.View)view.InternalElement; //create a new form! DefaultProgressForm statusBar = new DefaultProgressForm("Exporting Images", "Exporting image {0} of " + iterations.ToString(), "Animate Element Color", iterations + 1); //default indices for start and end color List <double> defaultIndices = new List <double>(); defaultIndices.Add(0); defaultIndices.Add(1); //the color list generated from start and end color List <Color> colorList = new List <Color>(); colorList.Add(startColor); colorList.Add(endColor); //where to start double startValue = 0; //starts a transaction group so we can roolback the changes after using (TransactionGroup transactionGroup = new TransactionGroup(doc, "group")) { TransactionManager.Instance.ForceCloseTransaction(); transactionGroup.Start(); using (Transaction t2 = new Transaction(doc, "Animate Color")) { int num2 = 0; while (startValue <= 1) { statusBar.Activate(); t2.Start(); //declare the graphic settings overrides OverrideGraphicSettings ogs = new OverrideGraphicSettings(); //generate color range Color dscolor = DSCore.Color.BuildColorFrom1DRange(colorList, defaultIndices, startValue); //convert to revit color Autodesk.Revit.DB.Color revitColor = new Autodesk.Revit.DB.Color(dscolor.Red, dscolor.Green, dscolor.Blue); //solid fill id FilteredElementCollector fillPatternCollector = new FilteredElementCollector(doc); Autodesk.Revit.DB.Element solidFill = fillPatternCollector.OfClass(typeof(FillPatternElement)).ToElements().FirstOrDefault(x => x.Name.ToLower() == "solid fill"); ElementId pattId = new ElementId(20); //set the overrides to the graphic settings ogs.SetSurfaceForegroundPatternColor(revitColor); ogs.SetSurfaceForegroundPatternId(solidFill.Id); foreach (var e in element) { //apply the changes to view internalView.SetElementOverrides(e.InternalElement.Id, ogs); } t2.Commit(); uiDocument.RefreshActiveView(); var exportOpts = new ImageExportOptions { FilePath = directoryPath + num2.ToString(), FitDirection = FitDirectionType.Horizontal, HLRandWFViewsFileType = ImageFileType.PNG, ImageResolution = ImageResolution.DPI_300, ShouldCreateWebSite = false }; doc.ExportImage(exportOpts); ++num2; startValue = startValue + (1.0 / iterations); statusBar.Increment(); } } transactionGroup.RollBack(); } statusBar.Close(); return(element); }