public MaterialLibrary(FileExisting file) { using (var s = file.OpenReadWrite()) using (StreamReader textReader = new StreamReader(s)) { MaterialPBR lastMat = new MaterialPBR(); string line; while ((line = textReader.ReadLine()) != null) { line = line.Trim(); line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); /* * Ka 1.000 1.000 1.000 * Kd 1.000 1.000 1.000 * Ks 0.000 0.000 0.000 * d 1.0 * illum 2 * map_Ka lenna.tga # the ambient texture map * map_Kd lenna.tga # the diffuse texture map (most of the time, it will # be the same as the ambient texture map) # map_Ks lenna.tga # specular color texture map # map_Ns lenna_spec.tga # specular highlight component # map_d lenna_alpha.tga # the alpha texture map # map_bump lenna_bump.tga # some implementations use 'map_bump' instead of 'bump' below * */ switch (parameters[0]) { case "newmtl": lastMat = new MaterialPBR(); materials[parameters[1]] = lastMat; break; case "Kd": // diffuse if (parameters.Length > 2) { Parse(ref parameters[1], ref lastMat.albedo.X); Parse(ref parameters[2], ref lastMat.albedo.Y); Parse(ref parameters[3], ref lastMat.albedo.Z); } else { float r = 1; Parse(ref parameters[1], ref r); lastMat.albedo.X = lastMat.albedo.Y = lastMat.albedo.Z = r; } break; case "map_Kd": lastMat.albedoTexture = new Texture2D(FileSystem.FindFile(parameters[1], file.Folder)); break; } } textReader.Close(); } }
void LoadLocalCopy() { using (var s = file.OpenReadWrite()) bmp = new Bitmap(s); }
void TryReadConfig() { doSaveNewCvars = false; var configFile = file.OpenReadWrite(); if (!configFile.CanRead) { Log.Fatal("can not read config file"); return; } configFile.Position = 0; var reader = new StreamReader(configFile, Encoding.UTF8); var allText = reader.ReadToEnd(); reader.Close(); var textLines = allText.Split(new char[] { '\r' }); saveData.Clear(); int lineNumber = 0; foreach (var _line in textLines) { lineNumber++; CVar cvar = null; string dataPart = _line.Trim(); string commentPart = ""; var commentIndex = dataPart.IndexOfAny(new char[] { '#' }); // ab#c // # is comment if (commentIndex != -1) // 2 { commentPart = dataPart.Trim().Substring(commentIndex); // #c dataPart = dataPart.Trim().Substring(0, commentIndex); // ab } if (dataPart.IsNullOrEmptyOrWhiteSpace() == false) { var dataParts = dataPart.Split(new char[] { '=' }); if (dataParts.Length < 2) { Log.Error("found badly formatted data on line " + lineNumber + " '" + dataPart + "'"); continue; } var name = dataParts[0].Trim(); cvar = GetCVar(name); bool typedBoolValue; float typedFloatValue; OpenTK.Input.Key keyTyped; var value = dataParts[1].Trim(); if (value == "not set") { cvar.ValueType = CvarValueType.NotSet; } else if (float.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out typedFloatValue)) { cvar.Number = typedFloatValue; } else if (bool.TryParse(value, out typedBoolValue)) { cvar.Bool = typedBoolValue; } if (dataParts.Length > 2) { var toggleKey = dataParts[2].Trim(); if (Enum.TryParse <OpenTK.Input.Key>(toggleKey, true, out keyTyped)) { cvar.ToogledByKey(keyTyped); } else { Log.Warn("invalid toggle key for cvar: " + toggleKey); } } Log.Info("loaded cvar: '" + ToSaveString(cvar) + "' from line: '" + dataPart + "'"); } saveData.Add(new LineHolder() { associatedCvar = cvar, commentPart = commentPart, dataPart = dataPart }); } doSaveNewCvars = true; }
void Prepend(FileExisting name) { using (var fs = new System.IO.StreamReader(name.OpenReadWrite())) prependSource += fs.ReadToEnd(); }
public Mesh Parse() { using (StreamReader textReader = new StreamReader(file.OpenReadWrite())) { int i1, i2, i3, i4; string line; while ((line = textReader.ReadLine()) != null) { line = line.Trim(); if (line.StartsWith("#")) { continue; } line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); switch (parameters[0]) { case "p": // Point break; case "v": // Vertex var v = Vector3.Zero; Parse(ref parameters[1], ref v.X); Parse(ref parameters[2], ref v.Y); Parse(ref parameters[3], ref v.Z); verticesObj.Add(v); break; case "vt": // TexCoord gotUvs = true; var vt = Vector2.Zero; Parse(ref parameters[1], ref vt.X); Parse(ref parameters[2], ref vt.Y); uvsObj.Add(vt); break; case "vn": // Normal gotNormal = true; var vn = Vector3.Zero; Parse(ref parameters[1], ref vn.X); Parse(ref parameters[2], ref vn.Y); Parse(ref parameters[3], ref vn.Z); normalsObj.Add(vn); break; case "f": switch (parameters.Length) { case 4: i1 = ParseFaceParameter(parameters[1]); i2 = ParseFaceParameter(parameters[2]); i3 = ParseFaceParameter(parameters[3]); triangleIndiciesMesh.Add(i1); triangleIndiciesMesh.Add(i2); triangleIndiciesMesh.Add(i3); break; case 5: i1 = ParseFaceParameter(parameters[1]); i2 = ParseFaceParameter(parameters[2]); i3 = ParseFaceParameter(parameters[3]); i4 = ParseFaceParameter(parameters[4]); triangleIndiciesMesh.Add(i1); triangleIndiciesMesh.Add(i2); triangleIndiciesMesh.Add(i3); triangleIndiciesMesh.Add(i1); triangleIndiciesMesh.Add(i3); triangleIndiciesMesh.Add(i4); break; } break; case "mtllib": if (FileSystem.FileExists(parameters[1], file.Folder)) { materialLibrary = new MaterialLibrary(FileSystem.FindFile(parameters[1], file.Folder)); } break; case "usemtl": if (parameters[1] == "(null)") { continue; } if (materialLibrary != null) { lastMaterial = materialLibrary.GetMat(parameters[1]); } break; } } textReader.Close(); } if (appendToEntity != null) { return(EndObjPart(appendToEntity)); } Log.Info("loaded, vertices:" + verticesMesh.Count + " faces:" + triangleIndiciesMesh.Count / 3); return(EndMesh()); }