Андрей, пробовал с Вашим вариантом удаления, но потерпел неудачу. Вот код
public static void AppendAllMultilineType(Document doc, string scale, string appDir)
{
using (doc.LockDocument())
using (var trans = doc.Database.TransactionManager.StartTransaction())
using (var styles = (DBDictionary)trans.GetObject(doc.Database.MLStyleDictionaryId, OpenMode.ForWrite))
{
var objects = new List<ObjectId>();
foreach (var style in styles)
{
if (style.Key.Equals("STANDARD", StringComparison.CurrentCultureIgnoreCase) || style.Value == doc.Database.CmlstyleID)
continue;
objects.Add(style.Value);
}
if (objects.Any())
doc.Database.Purge(new ObjectIdCollection(objects.ToArray()));
foreach (var style in objects)
{
var mlstyle = (MlineStyle)trans.GetObject(style, OpenMode.ForWrite);
mlstyle.Erase(true);
}
trans.Commit();
}
using (doc.Database.MLStyleDictionaryId.GetObject(OpenMode.ForWrite))
{
var files = Directory.GetFiles(appDir, String.Format("*{0}.mln", scale));
foreach (var file in files)
{
var styleName = file.Substring(file.LastIndexOf('\\') + 1);
styleName = styleName.Remove(styleName.IndexOf('_'));
try
{
doc.Database.LoadMlineStyleFile(styleName, file);
}
catch
{
}
}
}
}
Опять при назначении стиля мультилинии возникает исключение ошибка eWasErased. Подгрузку пробовал переносить и над trans.Commit() - результат тот же.
При попытке переименовать, а потом следом подгрузить стили из файлов тоже безуспешны. Переименовываются норм, а вот подгрузка происходит "мимо", стили не появляются. Более того, если следом попытаться назначить стиль для мультилинии со старым названием, то никаких исключения не генерируется. А в словаре далее в плагине мы находим без проблем все стили по старым именам(как до изменения). Это при том, что в окне MLSTYLE имена меняются, а в словаре нет.
public static void AppendAllMultilineType(Document doc, string scale, string appDir)
{
using (doc.LockDocument())
using (var trans = doc.Database.TransactionManager.StartTransaction())
using (var styles = (DBDictionary)trans.GetObject(doc.Database.MLStyleDictionaryId, OpenMode.ForWrite))
{
foreach (var style in styles)
{
if (style.Key.Equals("STANDARD", StringComparison.CurrentCultureIgnoreCase) || style.Value == doc.Database.CmlstyleID)
continue;
var mlstyle = (MlineStyle)trans.GetObject(style.Value, OpenMode.ForWrite);
mlstyle.Name += "_";
}
trans.Commit();
}
using (doc.Database.MLStyleDictionaryId.GetObject(OpenMode.ForWrite))
{
var files = Directory.GetFiles(appDir, String.Format("*{0}.mln", scale));
foreach (var file in files)
{
var styleName = file.Substring(file.LastIndexOf('\\') + 1);
styleName = styleName.Remove(styleName.IndexOf('_'));
try
{
doc.Database.LoadMlineStyleFile(styleName, file);
}
catch
{
}
}
}
}