public RectangleElement() { Styles = new VisualElementStyles { DefaultBorderColor = Color.FromScRgb(1, 1, 0, 0), SelectedBorderColor = Color.FromScRgb(1, 1, 1, 0), }; BorderColor = Styles.DefaultBorderColor; }
/// <summary> /// Adds two colors together by using the "SRC over DST" blending algorithm by Porter and Duff /// </summary> /// <param name="background">The background color</param> /// <param name="foreground">The foreground color</param> /// <returns>The sum of two colors including combined alpha</returns> public static MediaColor AddColors(MediaColor background, MediaColor foreground) { //Do not calculate anything when at least one Alpha is 0 also prevents "new_alpha" to become 0 (can't divide through 0) if (background.A <= 0 && foreground.A <= 0) { return(MediaColor.FromArgb(0, 0, 0, 0)); } if (background.A <= 0) { return(foreground); } if (foreground.A <= 0) { return(background); } float new_alpha = (background.ScA + foreground.ScA) - (background.ScA * foreground.ScA); var bg_a = CorrectWithAlpha(background); var fg_a = CorrectWithAlpha(foreground); var color_final_a = MediaColor.FromScRgb(1, 1, 1, 1); color_final_a.ScR = fg_a.ScR + (bg_a.ScR * (1 - foreground.ScA)); color_final_a.ScG = fg_a.ScG + (bg_a.ScG * (1 - foreground.ScA)); color_final_a.ScB = fg_a.ScB + (bg_a.ScB * (1 - foreground.ScA)); var color_final = MediaColor.FromScRgb(0, 0, 0, 0); color_final.ScR = color_final_a.ScR / new_alpha; color_final.ScG = color_final_a.ScG / new_alpha; color_final.ScB = color_final_a.ScB / new_alpha; color_final.ScA = new_alpha; return(color_final); }
private void SetBorderColor(float a, float r, float g, float b) { SetBorderColor(Color.FromScRgb(a, r, g, b)); }
public MainViewModel() { EffectsManager = new DefaultEffectsManager(); // camera setup Camera = new PerspectiveCamera { Position = new Point3D(0, -2000, 400), LookDirection = new Vector3D(0, 2000, 0), UpDirection = UpDirection, FarPlaneDistance = 5000000, }; // setup lighting //SkyboxTexture = LoadFileToMemory("Cubemap_Grandcanyon.dds"); LightDirection = new Vector3D(0, -0.5, -1); LightDirection.Normalize(); SetHeadLight(); AmbientLightColor = Colors.White * 1000; DirectionalLightColor = Color.FromScRgb(1, 10, 10, 10); BackgroundColor = Color.FromRgb(40, 40, 40); // model transform ModelTransform = Transform3D.Identity; //var r = new System.Windows.Media.Media3D.AxisAngleRotation3D(new Vector3D(0, 0, 1), 90); //EnvironmentTransform = new System.Windows.Media.Media3D.RotateTransform3D(r); // model materials var material = new PBRMaterial(); material.AlbedoColor = new Color4(0.8f, 0.4f, 0.05f, 1f); material.MetallicFactor = 0.2; material.ReflectanceFactor = 0.8; material.RenderEnvironmentMap = false; material.AmbientOcclusionFactor = 1; // floor plane grid Grid = LineBuilder.GenerateGrid(new Vector3(0, 0, 1), -10, 10, -10, 10); GridColor = Color.FromRgb(100, 100, 100); GridTransform = new System.Windows.Media.Media3D.ScaleTransform3D(100, 100, 100); // commands UpZCommand = new RelayCommand(_ => { Log = "test switch"; }); // robot program var test = new TestProgram(); Program = test.Program; Log = Program.Errors.Count == 0 ? Program.RobotSystem.Name : string.Join(" ", Program.Errors); // make robot var cell = Program.RobotSystem as Robots.RobotCell; var group = cell.MechanicalGroups.First(); var meshes = group.Joints.Select(j => j.Mesh).Prepend(group.Robot.BaseMesh); _origins = group.Joints.Select(j => j.Plane).Prepend(group.Robot.BasePlane).ToArray(); foreach (var joint in meshes) { var model = new MeshGeometryModel3D(); model.Geometry = joint.ToWPF(); model.Material = material; model.Transform = Transform3D.Identity; model.IsThrowingShadow = true; RobotModels.Add(model); } // timer _timer = new Timer(Tick, null, Timeout.Infinite, 0); }
/// <summary> /// Multiplies all non-alpha values by alpha. /// </summary> /// <param name="color">Color to correct</param> /// <returns>Corrected Color</returns> public static MediaColor CorrectWithAlpha(MediaColor color) { return(MediaColor.FromScRgb(1, (color.ScR * color.ScA), (color.ScG * color.ScA), (color.ScB * color.ScA))); }