public object Clone() { var points = new SvgPointCollection(); foreach (var point in this) { points.Add(point); } return(points); }
/// <summary> /// Converts the given object to the type of this converter, using the specified context and culture information. /// </summary> /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context.</param> /// <param name="culture">The <see cref="T:System.Globalization.CultureInfo"/> to use as the current culture.</param> /// <param name="value">The <see cref="T:System.Object"/> to convert.</param> /// <returns> /// An <see cref="T:System.Object"/> that represents the converted value. /// </returns> /// <exception cref="T:System.NotSupportedException">The conversion cannot be performed. </exception> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string s) { var coords = s.AsSpan().Trim(); var state = new CoordinateParserState(ref coords); var result = new SvgPointCollection(); while (CoordinateParser.TryGetFloat(out var pointValue, ref coords, ref state)) { result.Add(new SvgUnit(SvgUnitType.User, pointValue)); } return(result); } return(base.ConvertFrom(context, culture, value)); }
/// <summary> /// Converts the given object to the type of this converter, using the specified context and culture information. /// </summary> /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context.</param> /// <param name="culture">The <see cref="T:System.Globalization.CultureInfo"/> to use as the current culture.</param> /// <param name="value">The <see cref="T:System.Object"/> to convert.</param> /// <returns> /// An <see cref="T:System.Object"/> that represents the converted value. /// </returns> /// <exception cref="T:System.NotSupportedException">The conversion cannot be performed. </exception> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { var parser = new CoordinateParser(((string)value).Trim()); var pointValue = 0.0f; var result = new SvgPointCollection(); while (parser.TryGetFloat(out pointValue)) { result.Add(new SvgUnit(SvgUnitType.User, pointValue)); } return(result); } return(base.ConvertFrom(context, culture, value)); }
//private static readonly SvgUnitConverter _unitConverter = new SvgUnitConverter(); /// <summary> /// Converts the given object to the type of this converter, using the specified context and culture information. /// </summary> /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context.</param> /// <param name="culture">The <see cref="T:System.Globalization.CultureInfo"/> to use as the current culture.</param> /// <param name="value">The <see cref="T:System.Object"/> to convert.</param> /// <returns> /// An <see cref="T:System.Object"/> that represents the converted value. /// </returns> /// <exception cref="T:System.NotSupportedException">The conversion cannot be performed. </exception> public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { var strValue = ((string)value).Trim(); if (string.Compare(strValue, "none", StringComparison.InvariantCultureIgnoreCase) == 0) { return(null); } var parser = new CoordinateParser(strValue); var pointValue = 0.0f; var result = new SvgPointCollection(); while (parser.TryGetFloat(out pointValue)) { result.Add(new SvgUnit(SvgUnitType.User, pointValue)); } return(result); } return(base.ConvertFrom(context, culture, value)); }