예제 #1
0
            public void ShouldReturnFalseWhenOtherAsObjectIsNotEqual()
            {
                var color = new ColorHSL(1, 2, 3);
                var other = new ColorHSL(3, 2, 1);

                Assert.False(color.Equals((object)other));
            }
예제 #2
0
            public void ShouldReturnTheCorrectValueWhenOtherIsHigher()
            {
                var color = new ColorHSL(0.5, 0.5, 0.5);
                var other = new ColorHSL(1.0, 1.0, 1.0);

                Assert.Equal(-1, color.CompareTo(other));
            }
예제 #3
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            var h = property.FindPropertyRelative("_h");
            var s = property.FindPropertyRelative("_s");
            var l = property.FindPropertyRelative("_l");
            var a = property.FindPropertyRelative("_a");

            EditorGUI.BeginChangeCheck();

            var newColor = EditorGUI.ColorField(position, label, new ColorHSL(h.floatValue, s.floatValue, l.floatValue, a.floatValue).ToColor(), true,
                                                true, false);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(property.serializedObject.targetObject, "Changing color");
                var newColorHSL = new ColorHSL(newColor);
                h.floatValue = newColorHSL.H;
                s.floatValue = newColorHSL.S;
                l.floatValue = newColorHSL.L;
                a.floatValue = newColorHSL.A;

                property.serializedObject.ApplyModifiedProperties();
            }

            EditorGUI.EndProperty();
        }
        public static SplitComplementaryColorScheme FromColor(ColorRGB color)
        {
            var swatches = new Swatch[] {
                new Swatch(PrimaryColorID, ColorHSL.Empty),
                new Swatch(SecondaryColorID, ColorHSL.Empty),
                new Swatch(TertiaryColorID, ColorHSL.Empty)
            };

            var primary = ColorHSL.FromColor(color);
            var h       = primary.H;
            var s       = primary.S;
            var l       = primary.L;

            swatches[0].Color = primary;

            var secondary = new ColorHSL(h, s, l);

            secondary.H      += 0.416666666666667;
            swatches[1].Color = secondary;

            var tertiary = new ColorHSL(h, s, l);

            tertiary.H        = h + 0.5 + 0.0833333333333333;
            swatches[2].Color = tertiary;

            return(new SplitComplementaryColorScheme(swatches));
        }
예제 #5
0
        public static RectangleColorScheme FromColor(ColorRGB color)
        {
            var swatches = new Swatch[] {
                new Swatch(QuaternaryColorID, ColorHSL.Empty),
                new Swatch(PrimaryColorID, ColorHSL.Empty),
                new Swatch(SecondaryColorID, ColorHSL.Empty),
                new Swatch(TertiaryColorID, ColorHSL.Empty)
            };

            var primary = ColorHSL.FromColor(color);
            var h       = primary.H;
            var s       = primary.S;
            var l       = primary.L;

            // quaternary
            var quaternary = new ColorHSL(h, s, l);

            quaternary.H     -= 0.166666666666667;
            swatches[0].Color = quaternary;

            // Primary
            swatches[1].Color = primary;

            // secondary
            swatches[2].Color = quaternary.Complementary();

            // tertiary
            swatches[3].Color = primary.Complementary();

            return(new RectangleColorScheme(swatches));
        }
예제 #6
0
 public ColorHSL(ColorHSL hsl)
 {
     this._alpha = hsl._alpha;
     this._h     = hsl._h;
     this._s     = hsl._s;
     this._l     = hsl._l;
 }
예제 #7
0
        public override void ComputeLookupTableForAnalysis(double sensorElevation)
        {
            var north = new ColorHSL(0.7, 1, 0.90); // North = Blue
            var east  = new ColorHSL(0.9, 1, 0.5);  // East = Pink
            var south = new ColorHSL(0.5, 0, 0.10); // South = Black
            var west  = new ColorHSL(0.5, 1, 0.5);  // West = Teal

            // The angle range coming from the calculation is -180 to +180; which then has 180 added to normalise as 0-360
            // So our color span starts at South (-180 > 0) and proceeds clockwise to North (0 > 180) and then South (180 > 360)
            var NWAspect = new Analysis.VisualisationRangeWithColor
            {
                ValueSpan = 90, ColorStart = south, ColorEnd = east
            };
            var SWAspect = new Analysis.VisualisationRangeWithColor
            {
                ValueSpan = 90, ColorStart = east, ColorEnd = north
            };
            var SEAspect = new Analysis.VisualisationRangeWithColor
            {
                ValueSpan = 90, ColorStart = north, ColorEnd = west
            };
            var NEAspect = new Analysis.VisualisationRangeWithColor
            {
                ValueSpan = 90, ColorStart = west, ColorEnd = south
            };

            ComputeLinearRanges(NWAspect, SWAspect, SEAspect, NEAspect);
        }
예제 #8
0
    public static Color ToColor(ColorHSL color)
    {
        float r, g, b, a = color.a;

        r = g = b = color.l;

        if (color.l <= 0)
        {
            color.l = 0.001f;
        }
        if (color.l >= 1)
        {
            color.l = 0.999f;
        }

        if (color.s != 0f)
        {
            var m2 = color.l < 0.5f ? color.l * (color.s + 1f) : color.l + color.s - color.l * color.s;
            var m1 = color.l * 2 - m2;
            r = ExtractRGB(m1, m2, color.h + 1f / 3f);
            g = ExtractRGB(m1, m2, color.h);
            b = ExtractRGB(m1, m2, color.h - 1f / 3f);
        }

        return(new Color(r, g, b, a));
    }
예제 #9
0
        public override void DrawViewportWires(IGH_PreviewArgs args)
        {
            if (autoColor)
            {
                gradientList = new System.Drawing.Color[_plan.getCells().Count];

                for (int i = 0; i < gradientList.Length; i++)
                {
                    var multiplier = sunAccess[i];

                    var gColor = new ColorHSL(multiplier, multiplier, 0, multiplier);
                    var rgb    = gColor.ToArgbColor();
                    gradientList[i] = (rgb);
                }
                for (int i = 0; i < rectangles.Count; i++)
                {
                    Rhino.Display.DisplayMaterial mat = new Rhino.Display.DisplayMaterial(gradientList[i]);
                    mat.Shine = 0.25;
                    {
                        var curve = rectangles[i].ToNurbsCurve();
                        var pts   = rectangles[i].ToPolyline();
                        args.Display.DrawPolyline(pts, gradientList[i], 1);
                        var mesh = Mesh.CreateFromPlanarBoundary(curve, Rhino.Geometry.MeshingParameters.FastRenderMesh, 0.01);
                        args.Display.DrawMeshShaded(mesh, mat);
                    }
                }
            }
        }
예제 #10
0
            public void ShouldReturnTrueWhenOtherAsObjectIsEqual()
            {
                var color = new ColorHSL(1, 2, 3);
                var other = new ColorHSL(1, 2, 3);

                Assert.True(color.Equals((object)other));
            }
        public static AnalogousColorScheme FromColor(ColorRGB color)
        {
            var swatches = new Swatch[] {
                new Swatch(TertiaryColorID, ColorHSL.Empty),
                new Swatch(PrimaryColorID, ColorHSL.Empty),
                new Swatch(SecondaryColorID, ColorHSL.Empty)
            };

            var primary = ColorHSL.FromColor(color);
            var h       = primary.H;
            var s       = primary.S;
            var l       = primary.L;

            // Teriary
            var tertiary = new ColorHSL(h, s, l);

            tertiary.H       -= 0.0833333333333333;
            swatches[0].Color = tertiary;

            // Primary
            swatches[1].Color = primary;

            // Secondary
            var secondary = new ColorHSL(h, s, l);

            secondary.H      += 0.0833333333333333;
            swatches[2].Color = secondary;

            return(new AnalogousColorScheme(swatches));
        }
예제 #12
0
    public VertexBrush(ColorHSL _hsl, float _size, float _opacity, float _hardness)
    {
        hsl = _hsl;

        size     = _size;
        opacity  = _opacity;
        hardness = _hardness;
    }
            public void ShouldReturnDifferentValueWhenChannelChanged()
            {
                ColorHSL first    = new ColorHSL(0.0, 0.0, 0.0);
                int      hashCode = first.GetHashCode();

                first.Hue = first.Saturation = first.Lightness = 1.0;
                Assert.NotEqual(hashCode, first.GetHashCode());
            }
예제 #14
0
    /// <summary>
    /// Convert this color to its grayscale representation.
    /// </summary>
    public static Color Grayscale(this Color c)
    {
        ColorHSL c2 = c;

        c2.s = 0;

        return(c2);
    }
예제 #15
0
        public static Color ModHSL(this Color col, double fShiftHue, double fMultiplySaturation, double fMultiplyLightness)
        {
            ColorHSL hsl = new ColorHSL(col);

            hsl.Hue        += fShiftHue;
            hsl.Saturation *= fMultiplySaturation;
            hsl.Lightness  *= fMultiplyLightness;
            return(hsl.ToColorRGB());
        }
예제 #16
0
        public static Color ShiftHSL(this Color col, double fHue, double fSaturation, double fLightness)
        {
            ColorHSL hsl = new ColorHSL(col);

            hsl.Hue        += fHue;
            hsl.Saturation += fSaturation;
            hsl.Lightness  += fLightness;
            return(hsl.ToColorRGB());
        }
            public void ShouldInitializeTheProperties()
            {
                var color    = new MagickColor(Quantum.Max, Quantum.Max, (QuantumType)(Quantum.Max * 0.02));
                var hslColor = ColorHSL.FromMagickColor(color);

                Assert.AreEqual(0.16, hslColor.Hue, 0.01);
                Assert.AreEqual(0.5, hslColor.Lightness, 0.01);
                Assert.AreEqual(1.0, hslColor.Saturation, 0.01);
            }
예제 #18
0
    public ColorHSL(Color c)
    {
        ColorHSL temp = FromColor(c);

        h = temp.h;
        s = temp.s;
        l = temp.l;
        a = temp.a;
    }
예제 #19
0
    public static VertexBrush Blend(VertexBrush a, VertexBrush b, float value)
    {
        MathHelper.Clamp(value, 0f, 1f);

        return(new VertexBrush(
                   ColorHSL.Blend(a.hsl, b.hsl, value),
                   a.size, a.opacity, a.hardness
                   ));
    }
예제 #20
0
    public static void xDrawTitleBar(string title, float barDx = 0f)
    {
        var r = GUILayoutUtility.GetRect(0, Screen.width, 20f, 20f);
        var c = new ColorHSL(0f, 0f, 0.5f).xProSkinAdjust();

        GUI.DrawTexture(r.dx(barDx), c.xGetTexture2D());
        GUI.Label(r.dy(2f), title, EditorStyles.boldLabel);
        //temp = EditorGUILayout.Slider(temp, -1f, 1f);
    }
            public void ShouldInitializeTheProperties()
            {
                var color    = new MagickColor(Quantum.Max, Quantum.Max, (QuantumType)(Quantum.Max * 0.02));
                var hslColor = ColorHSL.FromMagickColor(color);

                Assert.InRange(hslColor.Hue, 0.16, 0.17);
                Assert.InRange(hslColor.Lightness, 0.5, 0.6);
                Assert.InRange(hslColor.Saturation, 0.10, 1.1);
            }
예제 #22
0
        public static Color MultiplyHSL(this Color col, double fHue, double fSaturation, double fLightness)
        {
            ColorHSL hsl = new ColorHSL(col);

            hsl.Hue        *= fHue;
            hsl.Saturation *= fSaturation;
            hsl.Lightness  *= fLightness;
            return(hsl.ToColorRGB());
        }
예제 #23
0
    private void DrawWindow(int windowID)
    {
        // Layout three sliders as a simple color picker
        GUILayout.BeginHorizontal();
        GUILayout.Label("Hue", GUILayout.MaxWidth(70));
        color.h = GUILayout.HorizontalSlider(color.h, 0, 1);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Saturation", GUILayout.MaxWidth(70));
        color.s = GUILayout.HorizontalSlider(color.s, 0, 1);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Lightness", GUILayout.MaxWidth(70));
        color.l = GUILayout.HorizontalSlider(color.l, 0, 1);
        GUILayout.EndHorizontal();

        // Draw a nice big box showing off the current color
        DrawColorPreview(color);

        // Finally, add some buttons to test various features
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Random Bright Color"))
        {
            color = ColorHelper.RandomBrightColor();
        }
        if (GUILayout.Button("Random Pastel Color"))
        {
            color = ColorHelper.RandomPastelColor();
        }
        if (GUILayout.Button("Random Dark Color"))
        {
            color = ColorHelper.RandomDarkColor();
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Invert Hue"))
        {
            color.InvertHue();
        }
        if (GUILayout.Button("Invert Saturation"))
        {
            color.InvertSaturation();
        }
        if (GUILayout.Button("Invert Lightness"))
        {
            color.InvertLightness();
        }
        if (GUILayout.Button("Invert"))
        {
            color.Invert();
        }
        GUILayout.EndHorizontal();
    }
예제 #24
0
    // The following Random color methods work in a similar way, but with different Satuation and lightness settings

    /// <summary>
    /// Returns a random dark color.
    /// </summary>
    public static Color RandomDarkColor()
    {
        ColorHSL randomColor = new ColorHSL();

        randomColor.h = RandomValue();
        randomColor.s = 0.8f;
        randomColor.l = 0.1f;
        randomColor.a = 1;

        return(randomColor);
    }
예제 #25
0
    public static Color RandomColor(float saturation, float lightness)
    {
        ColorHSL randomColor = new ColorHSL();

        randomColor.h = RandomValue();
        randomColor.s = saturation;
        randomColor.l = lightness;
        randomColor.a = 1;

        return(randomColor);
    }
예제 #26
0
    // Use this for initialization
    void Start()
    {
        color = ColorHelper.RandomBrightColor();

        // Make a tiny 1x1 texture, were going to use this to preview the color we have picked
        previewTexture = new Texture2D(1, 1);
        previewStyle   = new GUIStyle();
        previewStyle.normal.background = previewTexture;

        StartCoroutine(AnimateWindow());
    }
예제 #27
0
    /// <summary>
    /// Returns a random pastal color. A pastal color is one that has a low saturation and a medium lightness.
    /// </summary>
    public static Color RandomPastelColor()
    {
        ColorHSL randomColor = new ColorHSL();

        randomColor.h = RandomValue();
        randomColor.s = RandomRange(0.3f, 0.4f);
        randomColor.l = RandomRange(0.45f, 0.6f);
        randomColor.a = 1;

        return(randomColor);
    }
예제 #28
0
    public static void xDrawTitleBar(string title, ref bool enable, float barDx = 0f, float toggleDx = 0f)
    {
        var r = GUILayoutUtility.GetRect(0, Screen.width, 20f, 20f);
        var c = new ColorHSL(0f, 0f, 0.5f).xProSkinAdjust();

        GUI.DrawTexture(r.dx(barDx), c.xGetTexture2D());

        var r2 = r.dy(2f);

        GUI.Label(r2, title, EditorStyles.boldLabel);
        enable = GUI.Toggle(r2.xSubRectRight(20f).dx(toggleDx), enable, "");
    }
예제 #29
0
    /// <summary>
    /// Returns a random bright color. A bright color is one that has a high saturation.
    /// </summary>
    public static Color RandomBrightColor()
    {
        // Generating a bright color is easy in a HSL!
        ColorHSL randomColor = new ColorHSL();

        randomColor.h = RandomValue();            // Generate a random hue. This defines what color we will have.
        randomColor.s = RandomRange(0.6f, 1f);    // Set the saturation high to keep the color vivid.
        randomColor.l = RandomRange(0.45f, 0.6f); // Set lightness to the middle, so the color isnt dark or washed out
        randomColor.a = 1;

        return(randomColor); // ColorTool's HSL implementation implicity converts back to a Unity Color!
    }
예제 #30
0
            public void ShouldReturnTheCorrectValueWhenInstancesAreNotEqual()
            {
                var first  = new ColorHSL(1, 0.5, 0.5);
                var second = new ColorHSL(0.5, 0.5, 0.5);

                Assert.False(first == second);
                Assert.True(first != second);
                Assert.False(first < second);
                Assert.False(first <= second);
                Assert.True(first > second);
                Assert.True(first >= second);
            }
예제 #31
0
파일: LifeBar.cs 프로젝트: apautrot/gdp9
 internal void UpdateColor()
 {
     ColorHSL hslColor = new ColorHSL();
     hslColor.h = Mathf.Lerp ( hslNoLife.h, hslFullLife.h, Life );
     hslColor.l = Mathf.Lerp ( hslNoLife.l, hslFullLife.l, Life );
     hslColor.s = Mathf.Lerp ( hslNoLife.s, hslFullLife.s, Life );
     // 		hslColor.l = hslFullLife.l;
     // 		hslColor.s = hslFullLife.s;
     Color color = Color.white;
     ColorUtil.hslToRgb ( hslColor, ref color );
     spriteRenderer.color = color;
     cutOutParameter.CutOut = Life;
 }
예제 #32
0
    public static Color HSLtoRGB(ColorHSL color)
    {
        float r;
        float g;
        float b;

        if (color.s == 0) {
            r = g = b = color.l;
        } else {
            float q = color.l < .5f ? color.l * (1f + color.s) : color.l + color.s - color.l * color.s;
            float p = 2f * color.l - q;

            r = HUEtoRGB(p, q, color.h + 1f / 3f);
            g = HUEtoRGB(p, q, color.h);
            b = HUEtoRGB(p, q, color.h + 1f / 3f);
        }

        return new Color(r, g, b);
    }
예제 #33
0
 private bool Equals(ColorHSL other)
 {
     return (this.H == other.H && this.S == other.S && this.L == other.L);
 }
예제 #34
0
        protected static Microsoft.Xna.Framework.Color HSLtoRGB(ColorHSL hsl)
        {
            if (hsl.S == 0)
                return new Microsoft.Xna.Framework.Color(hsl.L, hsl.L, hsl.L, hsl.A);

            float temp1;
            float temp2;
            float Rtemp3, Gtemp3, Btemp3;
            float H;

            if (hsl.L < 0.5f)
                temp2 = hsl.L * (1.0f + hsl.S);
            else
                temp2 = hsl.L + hsl.S - hsl.L * hsl.S;

            temp1 = 2.0f * hsl.L - temp2;

            H = hsl.H / 360;

            Rtemp3 = H + 1.0f / 3.0f;
            Gtemp3 = H;
            Btemp3 = H - 1.0f / 3.0f;

            if (Rtemp3 < 0)
                Rtemp3 += 1.0f;
            if (Rtemp3 > 1)
                Rtemp3 -= 1.0f;
            if (Gtemp3 < 0)
                Gtemp3 += 1.0f;
            if (Gtemp3 > 1)
                Gtemp3 -= 1.0f;
            if (Btemp3 < 0)
                Btemp3 += 1.0f;
            if (Btemp3 > 1)
                Btemp3 -= 1.0f;

            float R, G, B;

            if ((6.0f * Rtemp3) < 1)
                R = temp1 + (temp2 - temp1) * 6.0f * Rtemp3;
            else if (2.0f * Rtemp3 < 1)
                R = temp2;
            else if (3.0f * Rtemp3 < 2)
                R = temp1 + (temp2 - temp1) * ((2.0f / 3.0f) - Rtemp3) * 6.0f;
            else
                R = temp1;

            if ((6.0f * Gtemp3) < 1)
                G = temp1 + (temp2 - temp1) * 6.0f * Gtemp3;
            else if (2.0f * Gtemp3 < 1)
                G = temp2;
            else if (3.0f * Gtemp3 < 2)
                G = temp1 + (temp2 - temp1) * ((2.0f / 3.0f) - Gtemp3) * 6.0f;
            else
                G = temp1;

            if ((6.0f * Btemp3) < 1)
                B = temp1 + (temp2 - temp1) * 6.0f * Btemp3;
            else if (2.0f * Btemp3 < 1)
                B = temp2;
            else if (3.0f * Btemp3 < 2)
                B = temp1 + (temp2 - temp1) * ((2.0f / 3.0f) - Btemp3) * 6.0f;
            else
                B = temp1;

            return new Microsoft.Xna.Framework.Color(R, G, B, hsl.A);
        }