예제 #1
0
        public void ConstructRgbAttributeBadValues()
        {
            int testCount      = 0;
            int exceptionCount = 0;

            // Test values outside valid range [0, 255]
            int[,] rgbTestValues = new int[, ] {
                { -1, 0, 0 }, { 0, -1, 0 }, { 0, 0, -1 },
                { 256, 0, 0 }, { 0, 256, 0 }, { 0, 0, 256 }
            };

            for (int i = 0; i < rgbTestValues.GetLength(0); i++)
            {
                try
                {
                    testCount++;
                    RgbAttribute rgb = new RgbAttribute(rgbTestValues[i, 0], rgbTestValues[i, 1], rgbTestValues[i, 2]);
                }
                catch (ArgumentException)
                {
                    exceptionCount++;
                }
            }

            Assert.AreEqual(testCount, exceptionCount);
        }
예제 #2
0
 /// <summary>
 /// Creates a new instance of RgbAttribute with the specified RGB and alpha values.
 /// </summary>
 /// <param name="rgb">The colour's RGB value. MUST NOT BE NULL</param>
 /// <param name="alpha">The colour's alpha value. MUST BE WITHIN RANGE [0,1]</param>
 public Color(RgbAttribute rgb, double alpha)
 {
     Preconditions.IsNotNull(rgb, "Color rgb property must not be null");
     Preconditions.IsWithinRange(alpha, MIN_ALPHA, MAX_ALPHA, "alpha");
     this.Rgb   = rgb;
     this.Alpha = alpha;
 }
예제 #3
0
        /// <summary>
        /// Parses a URDF &lt;color&gt; element from XML.
        /// </summary>
        /// <param name="node">The XML node of a &lt;color&gt; element</param>
        /// <returns>A Color object parsed from the XML</returns>
        public override Color Parse(XmlNode node)
        {
            ValidateXmlNode(node);

            XmlAttribute rgbAttribute   = GetAttributeFromNode(node, UrdfSchema.RGB_ATTRIBUTE_NAME);
            XmlAttribute alphaAttribute = GetAttributeFromNode(node, UrdfSchema.ALPHA_ATTRIBUTE_NAME);
            XmlAttribute rgbaAttribute  = GetAttributeFromNode(node, UrdfSchema.RGBA_ATTRIBUTE_NAME);

            RgbAttribute rgb;
            double       alpha;

            if (rgbaAttribute != null && rgbAttribute == null && alphaAttribute == null)
            {
                Tuple <RgbAttribute, double> rgba = ParseRgba(rgbaAttribute);
                rgb   = rgba.Item1;
                alpha = rgba.Item2;
            }
            else if (rgbAttribute == null)
            {
                //Logger.Warn("Parsing {0} failed due to missing both {1} and {2} attributes", ElementName, UrdfSchema.RGBA_ATTRIBUTE_NAME, UrdfSchema.RGB_ATTRIBUTE_NAME);
                rgb   = new RgbAttribute(DEFAULT_RGB_VALUE, DEFAULT_RGB_VALUE, DEFAULT_RGB_VALUE);
                alpha = DEFAULT_ALPHA_VALUE;
            }
            else
            {
                rgb   = ParseRgb(rgbAttribute);
                alpha = ParseAlpha(alphaAttribute);
            }

            return(new Color(rgb, alpha));
        }
예제 #4
0
        private Tuple <RgbAttribute, double> ParseRgba(XmlAttribute rgbaAttribute)
        {
            RgbAttribute rgb   = new RgbAttribute(DEFAULT_RGB_VALUE, DEFAULT_RGB_VALUE, DEFAULT_RGB_VALUE);
            double       alpha = DEFAULT_ALPHA_VALUE;

            if (rgbaAttribute == null)
            {
                LogMissingOptionalAttribute(UrdfSchema.RGBA_ATTRIBUTE_NAME);
            }
            else
            {
                if (!RegexUtils.IsMatchNDoubles(rgbaAttribute.Value, 4))
                {
                    LogMalformedAttribute(UrdfSchema.RGBA_ATTRIBUTE_NAME);
                }
                else
                {
                    double[] values = RegexUtils.MatchDoubles(rgbaAttribute.Value);
                    rgb   = new RgbAttribute(values[0], values[1], values[2]);
                    alpha = values[3];
                }
            }

            return(new Tuple <RgbAttribute, double>(rgb, alpha));
        }
예제 #5
0
        public void ConstructColorNoAlpha()
        {
            RgbAttribute rgb    = new RgbAttribute(255, 255, 255);
            Color        colour = new Color(rgb);

            Assert.AreEqual(rgb, colour.Rgb);
            Assert.AreEqual(1d, colour.Alpha);
        }
예제 #6
0
        public void ConstructRgbAttributeDoubles()
        {
            double       r   = 0.5d;
            double       g   = 0.75d;
            double       b   = 0d;
            RgbAttribute rgb = new RgbAttribute(r, g, b);

            Assert.AreEqual((int)(255 * r), rgb.R);
            Assert.AreEqual((int)(255 * g), rgb.G);
            Assert.AreEqual((int)(255 * b), rgb.B);
        }
예제 #7
0
        public void ConstructRgbAttribute()
        {
            int          r   = 255;
            int          g   = 255;
            int          b   = 255;
            RgbAttribute rgb = new RgbAttribute(r, g, b);

            Assert.AreEqual(r, rgb.R);
            Assert.AreEqual(g, rgb.G);
            Assert.AreEqual(b, rgb.B);
        }
예제 #8
0
        public void ConstructColorWithAlpha()
        {
            double       alpha  = 0.5;
            RgbAttribute rgb    = new RgbAttribute(255, 255, 255);
            Color        colour = new Color(rgb, alpha);

            Assert.AreEqual(rgb, colour.Rgb);
            Assert.AreEqual(alpha, colour.Alpha);

            // Test bounds [0,1]
            colour = new Color(rgb, 0d);
            colour = new Color(rgb, 1d);
        }
예제 #9
0
        public void EqualsAndHash()
        {
            RgbAttribute rgb  = new RgbAttribute(1, 2, 3);
            RgbAttribute same = new RgbAttribute(1, 2, 3);
            RgbAttribute diff = new RgbAttribute(3, 2, 1);

            Assert.IsTrue(rgb.Equals(rgb));
            Assert.IsFalse(rgb.Equals(null));
            Assert.IsTrue(rgb.Equals(same));
            Assert.IsTrue(same.Equals(rgb));
            Assert.IsFalse(rgb.Equals(diff));
            Assert.AreEqual(rgb.GetHashCode(), same.GetHashCode());
            Assert.AreNotEqual(rgb.GetHashCode(), diff.GetHashCode());
        }
예제 #10
0
        public void ParseMaterialColor()
        {
            string       name = "name";
            RgbAttribute rgb  = new RgbAttribute(1, 1, 1);
            string       xml  = String.Format("<material name='{0}'><color rgb='{1} {2} {3}'/></material>",
                                              name, rgb.R, rgb.B, rgb.G);

            this.xmlDoc.Load(XmlReader.Create(new StringReader(xml)));
            Material material = this.parser.Parse(this.xmlDoc.DocumentElement);

            Assert.AreEqual(name, material.Name);
            Assert.AreEqual(rgb, material.Color.Rgb);
            Assert.IsNull(material.Texture);
        }
예제 #11
0
        public void ConstructColorInvalidAlpha()
        {
            int          testCount      = 0;
            int          exceptionCount = 0;
            RgbAttribute rgb            = new RgbAttribute(0, 0, 0);

            double[] alphaTestValues = new double[] { -1, -0.0001, 1.00000001, 2 };

            for (int i = 0; i < alphaTestValues.Length; i++)
            {
                testCount++;
                try
                {
                    Color colour = new Color(rgb, alphaTestValues[i]);
                }
                catch (ArgumentException)
                {
                    exceptionCount++;
                }
            }

            Assert.AreEqual(testCount, exceptionCount);
        }
예제 #12
0
        private RgbAttribute ParseRgb(XmlAttribute rgbAttribute)
        {
            RgbAttribute rgb = new RgbAttribute(DEFAULT_RGB_VALUE, DEFAULT_RGB_VALUE, DEFAULT_RGB_VALUE);

            if (rgbAttribute == null)
            {
                LogMissingOptionalAttribute(UrdfSchema.RGB_ATTRIBUTE_NAME);
            }
            else
            {
                if (!RegexUtils.IsMatchNDoubles(rgbAttribute.Value, 3))
                {
                    LogMalformedAttribute(UrdfSchema.RGB_ATTRIBUTE_NAME);
                }
                else
                {
                    int[] values = RegexUtils.MatchInts(rgbAttribute.Value);
                    rgb = new RgbAttribute(values[0], values[1], values[2]);
                }
            }

            return(rgb);
        }
예제 #13
0
 /// <summary>
 /// Creates a new instance of RgbAtribute with the specified RGB value.
 /// </summary>
 /// <param name="rgb">The colour's RGB value. MUST NOT BE NULL</param>
 public Color(RgbAttribute rgb) : this(rgb, DEFAULT_ALPHA)
 {
     // Invoke overloaded constructor.
 }