Beispiel #1
0
        public RectangleElement()
        {
            Styles = new VisualElementStyles {
                DefaultBorderColor  = Color.FromScRgb(1, 1, 0, 0),
                SelectedBorderColor = Color.FromScRgb(1, 1, 1, 0),
            };

            BorderColor = Styles.DefaultBorderColor;
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
 private void SetBorderColor(float a, float r, float g, float b)
 {
     SetBorderColor(Color.FromScRgb(a, r, g, b));
 }
Beispiel #4
0
        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);
        }
Beispiel #5
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)));
 }