private void ReadOptions() { foreach (string ConfigLine in ConfigFile) { string OptionFound = null; string OptionEntry = null; foreach (string OptionName in OptionsDirNames) { if (ConfigLine.ToLower().Contains(OptionName.ToLower()) && !ConfigLine.Contains("#")) { OptionFound = OptionName; break; } } if (OptionFound == null) { foreach (string OptionName in OptionsDefaultNames) { if (ConfigLine.ToLower().Contains(OptionName.ToLower()) && !ConfigLine.Contains("#")) { OptionFound = OptionName; break; } } } if (OptionFound == null) { continue; } OptionEntry = @ConfigLine.Substring(OptionFound.Length + 1); OptionEntry = OptionEntry.Trim(); if (OptionFound.ToLower().Contains("packageroot")) { OptionsPackageRoots.Add(OptionEntry); continue; } if (Options.ContainsKey(OptionFound)) { Options[OptionFound].Replace(Options[OptionFound], OptionEntry); } else { Options.Add(OptionFound, OptionEntry); } } }
// End of IPhotoRenderContext interface method implementation. //======================================================================================================================== // Retrieve the list of extra search paths for Revit texture files. // This is done by reading user's Revit.ini file and searching for field AdditionalRenderAppearancePaths // which contains search paths that Revit will use to locate texture files. // Note that the behavior in Revit is to search in the directory itself and not in child sub-directories. private void RetrieveExtraTexturePaths() { string UserSpecificDirectoryPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); if (!string.IsNullOrEmpty(UserSpecificDirectoryPath) && Path.IsPathRooted(UserSpecificDirectoryPath) && Directory.Exists(UserSpecificDirectoryPath)) { string FullRevitIniPath = $"{UserSpecificDirectoryPath}\\AppData\\Roaming\\Autodesk\\Revit\\Autodesk Revit {ProductVersion}\\Revit.ini"; if (File.Exists(FullRevitIniPath)) { FileStream RevitIniStream = new FileStream(FullRevitIniPath, FileMode.Open, FileAccess.Read, FileShare.Read); using (StreamReader RevitIniReader = new StreamReader(RevitIniStream)) { string ConfigLine; while ((ConfigLine = RevitIniReader.ReadLine()) != null) { if (ConfigLine.Contains("AdditionalRenderAppearancePaths")) { string[] SplitLineArray = ConfigLine.Split('='); if (SplitLineArray.Length > 1) { string[] TexturePaths = SplitLineArray[1].Split('|'); foreach (string TexturePath in TexturePaths) { ExtraTexturePaths.Add(TexturePath); } break; } } } } } } }
/// <summary> /// Saves the Ecompile.Cfg back to file with any changes. File Output /// is tabbed so that settings are in a straight column and all original /// lines that were NOT settings are retained as original. /// </summary> /// <returns>Bool for success</returns> public bool SaveConfig() { // Let's Ditch ALL PackageRoot Entries, and mark it's first location int PRBegin = ConfigFile.FindIndex(FindPackageRoots); ConfigFile.RemoveAll(FindPackageRoots); foreach (string PackageRootElem in OptionsPackageRoots) { int i = (28 - "PackageRoot".Length); string TabString = ""; while (i > 0) { TabString += "\t"; i -= 4; } ConfigFile.Insert(PRBegin, "PackageRoot" + TabString + PackageRootElem); } string[] SaveContents = new string[ConfigFile.Count]; ConfigFile.CopyTo(SaveContents); int LineIndex = 0; foreach (string ConfigLine in ConfigFile) { foreach (string OptionName in OptionsDirNames) { if (ConfigLine.ToLower().Contains(OptionName.ToLower()) && !ConfigLine.Contains("#") && OptionName != "PackageRoot") { // We found a Directory Option! REPLACE IT! int i = (28 - OptionName.Length); string TabString = ""; while (i > 0) { TabString += "\t"; i -= 4; } SaveContents[LineIndex] = OptionName + TabString + Options[OptionName]; break; } } // Now we add all the Default Option Stuff foreach (string OptionName in OptionsDefaultNames) { if (ConfigLine.ToLower().Contains(OptionName.ToLower()) && !ConfigLine.Contains("#")) { // We found a Default Option! REPLACE IT! int i = (28 - OptionName.Length); string TabString = ""; while (i > 0) { TabString += "\t"; i -= 4; } SaveContents[LineIndex] = OptionName + TabString + Options[OptionName]; break; } } LineIndex++; } // Now we write it all back to the ecompile.cfg. OHHH! AHHH! Go away. if (ConfigFileName != null) { try { File.WriteAllLines(ConfigFileName, SaveContents); return(true); } catch (Exception ex) { throw new Exception(ex.ToString()); } } return(false); }