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; }
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; }
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; }
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; }
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; }