JD2022-TU1/main/tools/framework/JD.Winforms/XmlGrid/Vector3Var.cs

106 lines
3 KiB
C#

using System;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
namespace JD.Winforms.XmlGrid
{
[TypeConverter(typeof(Vector3VarConverter))]
class Vector3Var
{
private float x;
private float y;
private float z;
public float X
{
get { return x; }
set { x = value; }
}
public float Y
{
get { return y; }
set { y = value; }
}
public float Z
{
get { return z; }
set { z = value; }
}
public override string ToString()
{
return x.ToString() + " " + y.ToString() + " " + z.ToString();
}
}
public class Vector3VarConverter : ExpandableObjectConverter
{
public override bool CanConvertTo(ITypeDescriptorContext context,
System.Type destinationType)
{
if (destinationType == typeof(string))
return true;
return base.CanConvertTo(context, destinationType);
}
public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture,
object value,
System.Type destinationType)
{
if (destinationType == typeof(System.String) && value is Vector3Var)
{
Vector3Var so = (Vector3Var)value;
return so.ToString();
}
return base.ConvertTo(context, culture, value, destinationType);
}
public override bool CanConvertFrom(ITypeDescriptorContext context,
System.Type sourceType)
{
if (sourceType == typeof(string))
return true;
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
if (value is string)
{
string val = (string)value;
string[] split = val.Split(' ');
Vector3Var ret = new Vector3Var();
if (split.Count() == 3)
{
CultureInfo ci = new CultureInfo(CultureInfo.CurrentCulture.Name, false);
NumberFormatInfo formatInfo = ci.NumberFormat;
formatInfo.NumberDecimalSeparator = ".";
formatInfo.NumberGroupSeparator = ",";
ret.X = float.Parse(split[0],formatInfo);
ret.Y = float.Parse(split[1],formatInfo);
ret.Z = float.Parse(split[2],formatInfo);
}
else
{
ret.X = 0.0f;
ret.Y = 0.0f;
ret.Z = 0.0f;
}
return ret;
}
return base.ConvertFrom(context, culture, value);
}
}
}