/// <summary> /// Tries to parse a key value line. /// </summary> /// <param name="line">The line (e.g. '"editorversion" "400"').</param> /// <param name="key">The key that was found.</param> /// <param name="value">The value that was found.</param> /// <returns>True if successful else false.</returns> private bool TryParsekeyValue(string line, out string key, out object value) { key = ""; value = null; if (!line.Contains('"')) { return(false); } int idx = line.IndexOf('"', 1); key = line.Substring(1, idx - 1); string rawvalue = line.Substring(idx + 3, line.Length - idx - 4); if (rawvalue.Length == 0) { return(false); } int vi; float vf; // detect plane definition. if (rawvalue[0] == '(') { string[] values = rawvalue.Replace("(", "").Replace(")", "").Split(' '); VmfVector3 p1 = new VmfVector3(float.Parse(values[0], CultureInfo.InvariantCulture), float.Parse(values[1], CultureInfo.InvariantCulture), float.Parse(values[2], CultureInfo.InvariantCulture)); VmfVector3 p2 = new VmfVector3(float.Parse(values[3], CultureInfo.InvariantCulture), float.Parse(values[4], CultureInfo.InvariantCulture), float.Parse(values[5], CultureInfo.InvariantCulture)); VmfVector3 p3 = new VmfVector3(float.Parse(values[6], CultureInfo.InvariantCulture), float.Parse(values[7], CultureInfo.InvariantCulture), float.Parse(values[8], CultureInfo.InvariantCulture)); value = new VmfPlane(p1, p2, p3); return(true); } // detect uv definition. else if (rawvalue[0] == '[') { string[] values = rawvalue.Replace("[", "").Replace("]", "").Split(' '); value = new VmfAxis(new VmfVector3(float.Parse(values[0], CultureInfo.InvariantCulture), float.Parse(values[1], CultureInfo.InvariantCulture), float.Parse(values[2], CultureInfo.InvariantCulture)), float.Parse(values[3], CultureInfo.InvariantCulture), float.Parse(values[4], CultureInfo.InvariantCulture)); return(true); } // detect floating point value. else if (rawvalue.Contains('.') && float.TryParse(rawvalue, out vf)) { value = vf; return(true); } // detect integer value. else if (Int32.TryParse(rawvalue, out vi)) { value = vi; return(true); } // probably a string value. else { value = rawvalue; return(true); } }
/// <summary> /// Initializes a new instance of the <see cref="VmfPlane"/> class. /// </summary> /// <param name="p1">The first point of the plane definition.</param> /// <param name="p2">The second point of the plane definition.</param> /// <param name="p3">The third point of the plane definition.</param> public VmfPlane(VmfVector3 p1, VmfVector3 p2, VmfVector3 p3) { P1 = p1; P2 = p2; P3 = p3; }
/// <summary> /// Initializes a new instance of the <see cref="VmfAxis"/> class. /// </summary> /// <param name="vector">The vector.</param> /// <param name="translation">The translation.</param> /// <param name="scale">The scale.</param> public VmfAxis(VmfVector3 vector, float translation, float scale) { Vector = vector; Translation = translation; Scale = scale; }