public static void SetGradientBackground(this UIView view, GradientOptions gradientOptions) { var gradientLayer = new CAGradientLayer { Frame = view.Bounds, Colors = new CGColor[] { gradientOptions.Colors[0].ToNativeColor().CGColor , gradientOptions.Colors[1].ToNativeColor().CGColor }, Locations = new NSNumber[] { gradientOptions.Positions[0], gradientOptions.Positions[1] }, StartPoint = new CGPoint(gradientOptions.StartPoint.X, gradientOptions.StartPoint.Y), EndPoint = new CGPoint(gradientOptions.EndPoint.X, gradientOptions.EndPoint.Y), CornerRadius = view.Layer.CornerRadius, }; foreach (var subView in view.Subviews) { if (subView.Tag == 100) { subView.RemoveFromSuperview(); } } var gradientView = new UIView { Frame = view.Bounds, Tag = 100 }; gradientView.Layer.InsertSublayer(gradientLayer, 0); var i = view.Subviews.Length; view.InsertSubview(gradientView, 0); }
public static GradientOptions ApplyGradientOptions(this GradientOptions gradientOptions, IEnumerable <double> allValues = null, string defaultGradient = "BlueToRed") { if (gradientOptions == null) { BH.Engine.Reflection.Compute.RecordError("Cannot apply gradientOptions because gradientOptions is null or invalid."); return(null); } GradientOptions result = gradientOptions.ShallowClone(); // Checks if bounds exist or can be automatically set if ((double.IsNaN(result.UpperBound) || double.IsNaN(result.LowerBound)) && (allValues == null || allValues.Count() < 1)) { BH.Engine.Reflection.Compute.RecordError("No bounds have been manually set for Gradient, and no values are provided by which to set them."); return(result); } // Optional auto-domain if (double.IsNaN(result.LowerBound)) { result.LowerBound = allValues.Min(); } if (double.IsNaN(result.UpperBound)) { result.UpperBound = allValues.Max(); } // Sets a default gradient if none is already set if (result.Gradient == null) { result.Gradient = Library.Query.Match("Gradients", defaultGradient) as Gradient; if (result.Gradient == null) { Engine.Reflection.Compute.RecordError("Could not find gradient " + defaultGradient + " in the Library, make sure you have BHoM Datasets or create a custom gradient"); return(null); } } // Centering Options switch (result.GradientCenteringOptions) { case GradientCenteringOptions.Symmetric: result.UpperBound = Math.Max(Math.Abs(result.UpperBound), Math.Abs(result.LowerBound)); result.LowerBound = -result.UpperBound; break; case GradientCenteringOptions.Asymmetric: result.Gradient = result.Gradient.CenterGradientAsymmetric(result.LowerBound, result.UpperBound); break; case GradientCenteringOptions.None: default: break; } return(result); }
public static Output <List <List <RenderMesh> >, GradientOptions> DisplayMeshResults <TNode, TFace, TMeshElementResult>(this IEnumerable <IMesh <TNode, TFace> > meshes, IEnumerable <IMeshResult <TMeshElementResult> > meshResults, Type identifier = null, List <string> caseFilter = null, string meshResultDisplay = "", GradientOptions gradientOptions = null) where TNode : INode where TFace : IFace where TMeshElementResult : IMeshElementResult { if (meshes == null || meshes.Count() < 1) { Engine.Reflection.Compute.RecordError("No meshes found. Make sure that your meshes are input correctly."); return(new Output <List <List <RenderMesh> >, GradientOptions> { Item1 = new List <List <RenderMesh> >(), Item2 = gradientOptions }); } if (meshResults == null || meshResults.Count() < 1) { Engine.Reflection.Compute.RecordError("No results found. Make sure that your results are input correctly."); return(new Output <List <List <RenderMesh> >, GradientOptions> { Item1 = new List <List <RenderMesh> >(), Item2 = gradientOptions }); } if (gradientOptions == null) { gradientOptions = new GradientOptions(); } //Check if no identifier has been provided. If this is the case, identifiers are searched for in the objects identifier = meshes.First().FindIdentifier(identifier); List <IMesh <TNode, TFace> > meshList = meshes.ToList(); // Map the MeshResults to Meshes List <List <IMeshResult <TMeshElementResult> > > mappedResults = meshList.MapResults(meshResults, "ObjectId", identifier, caseFilter); gradientOptions = gradientOptions.ApplyGradientOptions(mappedResults.SelectMany(x => x.SelectMany(y => y.Results.Select(z => z.ResultToValue(meshResultDisplay))))); List <List <RenderMesh> > result = new List <List <RenderMesh> >(); for (int i = 0; i < meshList.Count; i++) { result.Add(new List <RenderMesh>()); for (int j = 0; j < mappedResults[i].Count; j++) { result[i].Add(meshList[i].DisplayMeshResults(mappedResults[i][j], identifier, meshResultDisplay, gradientOptions.Gradient, gradientOptions.LowerBound, gradientOptions.UpperBound)); } } return(new Output <List <List <RenderMesh> >, GradientOptions> { Item1 = result, Item2 = gradientOptions }); }