#region License
#endregion
#region Using Statements
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Globalization;
#endregion
namespace
Microsoft.Xna.Framework.Design
{
public
class
QuaternionConverter : MathTypeConverter
{
#region Public Constructor
public
QuaternionConverter() :
base
()
{
}
#endregion
#region Public Methods
public
override
object
ConvertFrom(
ITypeDescriptorContext context,
CultureInfo culture,
object
value
) {
string
s = value
as
string
;
if
(s !=
null
)
{
string
[] v = s.Split(
culture.NumberFormat.NumberGroupSeparator.ToCharArray()
);
return
new
Quaternion(
float
.Parse(v[0], culture),
float
.Parse(v[1], culture),
float
.Parse(v[2], culture),
float
.Parse(v[3], culture)
);
}
return
base
.ConvertFrom(context, culture, value);
}
public
override
object
ConvertTo(
ITypeDescriptorContext context,
CultureInfo culture,
object
value,
Type destinationType
) {
if
(destinationType ==
typeof
(
string
))
{
Quaternion quat = (Quaternion) value;
return
string
.Join(
culture.NumberFormat.NumberGroupSeparator,
new
string
[]
{
quat.X.ToString(culture),
quat.Y.ToString(culture),
quat.Z.ToString(culture),
quat.W.ToString(culture)
}
);
}
return
base
.ConvertTo(context, culture, value, destinationType);
}
public
override
object
CreateInstance(
ITypeDescriptorContext context,
IDictionary propertyValues
) {
return
(
object
)
new
Quaternion(
(
float
) propertyValues[
"X"
],
(
float
) propertyValues[
"Y"
],
(
float
) propertyValues[
"Z"
],
(
float
) propertyValues[
"W"
]
);
}
#endregion
}
}