示例#1
0
AABB AABB::FromString(const char *str, const char **outEndStr)
{
	assume(str);
	if (!str)
		return AABB(vec::nan, vec::nan);
	AABB a;
	MATH_SKIP_WORD(str, "AABB(");
	MATH_SKIP_WORD(str, "Min:(");
	a.minPoint = PointVecFromString(str, &str);
	MATH_SKIP_WORD(str, " Max:(");
	a.maxPoint = PointVecFromString(str, &str);
	if (outEndStr)
		*outEndStr = str;
	return a;
}
示例#2
0
文件: Sphere.cpp 项目: juj/MathGeoLib
Sphere Sphere::FromString(const char *str, const char **outEndStr)
{
	assume(str);
	if (!str)
		return Sphere(vec::nan, FLOAT_NAN);
	Sphere s;
	MATH_SKIP_WORD(str, "Sphere(");
	MATH_SKIP_WORD(str, "pos:(");
	s.pos = PointVecFromString(str, &str);
	MATH_SKIP_WORD(str, " r:");
	s.r = DeserializeFloat(str, &str);
	if (outEndStr)
		*outEndStr = str;
	return s;
}
示例#3
0
Ray Ray::FromString(const char *str, const char **outEndStr)
{
	assume(str);
	if (!str)
		return Ray(vec::nan, vec::nan);
	Ray r;
	MATH_SKIP_WORD(str, "Ray(");
	MATH_SKIP_WORD(str, "Pos:(");
	r.pos = PointVecFromString(str, &str);
	MATH_SKIP_WORD(str, " Dir:(");
	r.dir = DirVecFromString(str, &str);
	if (outEndStr)
		*outEndStr = str;
	return r;
}
示例#4
0
Line Line::FromString(const char *str, const char **outEndStr)
{
    assume(str);
    if (!str)
        return Line(vec::nan, vec::nan);
    Line l;
    MATH_SKIP_WORD(str, "Line(");
    MATH_SKIP_WORD(str, "Pos:(");
    l.pos = PointVecFromString(str, &str);
    MATH_SKIP_WORD(str, " Dir:(");
    l.dir = DirVecFromString(str, &str);
    if (outEndStr)
        *outEndStr = str;
    return l;
}
示例#5
0
Plane Plane::FromString(const char *str, const char **outEndStr)
{
	assume(str);
	if (!str)
		return Plane(vec::nan, FLOAT_NAN);
	Plane p;
	MATH_SKIP_WORD(str, "Plane(");
	MATH_SKIP_WORD(str, "Normal:(");
	p.normal = DirVecFromString(str, &str);
	MATH_SKIP_WORD(str, " d:");
	p.d = DeserializeFloat(str, &str);
	if (outEndStr)
		*outEndStr = str;
	return p;
}
示例#6
0
Polygon Polygon::FromString(const char *str, const char **outEndStr)
{
	MATH_SKIP_WORD(str, "Polygon");
	MATH_SKIP_WORD(str, "(");
	Polygon p;
	while(*str == '(' || *str == ',')
	{
		MATH_SKIP_WORD(str, ",");
		float3 pt = float3::FromString(str, &str);
		p.p.push_back(POINT_VEC(pt));
	}
	MATH_SKIP_WORD(str, ")");

	if (outEndStr)
		*outEndStr = str;

	return p;
}
示例#7
0
Color Color::FromString(const char *str)
{
    assume(str);
    if (!str)
        return Color();
    MATH_SKIP_WORD(str, "Color");
    MATH_SKIP_WORD(str, "(");
    Color c;
    // Use DeserializeFloat() instead of duplicating its code but comply 
    // with the old strtod behavior where 0 is used on conversion failure.
    c.r = DeserializeFloat(str, &str); if (IsNan(c.r)) c.r = 0.f;
    c.g = DeserializeFloat(str, &str); if (IsNan(c.g)) c.g = 0.f;
    c.b = DeserializeFloat(str, &str); if (IsNan(c.b)) c.b = 0.f;
    if (str && *str != '\0') // alpha optional
    {
        c.a = DeserializeFloat(str, &str);
        if (IsNan(c.a)) c.a = 01.f;
    }
    return c;
}
示例#8
0
Quat MUST_USE_RESULT Quat::FromString(const char *str, const char **outEndStr)
{
	assert(IsNeutralCLocale());
	assume(str);
	if (!str)
		return Quat::nan;
	MATH_SKIP_WORD(str, "Quat");
	MATH_SKIP_WORD(str, "(");
	Quat f;
	f.x = DeserializeFloat(str, &str);
	f.y = DeserializeFloat(str, &str);
	f.z = DeserializeFloat(str, &str);
	f.w = DeserializeFloat(str, &str);
	if (*str == ')')
		++str;
	if (*str == ',')
		++str;
	if (outEndStr)
		*outEndStr = str;
	return f;
}
示例#9
0
OBB OBB::FromString(const char *str, const char **outEndStr)
{
	assume(str);
	if (!str)
		return OBB(vec::nan, vec::nan, vec::nan, vec::nan, vec::nan);
	OBB o;
	MATH_SKIP_WORD(str, "OBB(");
	MATH_SKIP_WORD(str, "Pos:(");
	o.pos = PointVecFromString(str, &str);
	MATH_SKIP_WORD(str, " Halfsize:(");
	o.r = DirVecFromString(str, &str);
	MATH_SKIP_WORD(str, " X:(");
	o.axis[0] = DirVecFromString(str, &str);
	MATH_SKIP_WORD(str, " Y:(");
	o.axis[1] = DirVecFromString(str, &str);
	MATH_SKIP_WORD(str, " Z:(");
	o.axis[2] = DirVecFromString(str, &str);
	if (outEndStr)
		*outEndStr = str;
	return o;
}