проблема в том, что стили в файлах mln. А как из них получить объект стиля мультилинии?это обычные текстовые файлы, так что читать\редактировать их не должно представлять каких-либо трудностей. :)
Думаю, что нужно:
1) Переименовать те стили в чертеже, которые ты хочешь обновить
2) Загрузить Database.LoadMlineStyleFile
3) Задать новые стили.
4) Старые стили удалить.
На нём вы посоветовали использовать функцию из либы.Переведи. Желательно с ссылкой на то, что я писал.
Должен присутствовать как минимум стиль standard, а ты пытаешься и его удалить.Нельзя удалять также и текущий стиль и все используемые в чертеже стили. Ты же их сначала удаляешь, а затем уже проверяешь можно ли их удалить. В чем смысл?
я у себя на чертеже перед этим удалял все(!) мультилинии. Но тем не менее, не могу понять, почему повторная загрузка стилей(через инвок, без удаления) работала, а потмо перестала о_О.Ну-ну... Пробовал после этого войти в редактор стилей мультилиний? :)
Андрей, Вы наверное не так поняли меня. Во-первых, ни шаблон, ни чертёж не сохранялся, поэтому ничего "коцанного" нет.Цитироватья у себя на чертеже перед этим удалял все(!) мультилинии. Но тем не менее, не могу понять, почему повторная загрузка стилей(через инвок, без удаления) работала, а потмо перестала о_О.Ну-ну... Пробовал после этого войти в редактор стилей мультилиний? :)
Не занимайся ерундой. Тебе сказали, что нельзя удалять стандартные и текущие стили. То, что у тебя там "что-то работало, а потом перестало" - весьма сомнительно. В любом случае это "что-то" покоцало базу данных твоего чертежа и рано или поздно это всё равно вылезло бы. Кстати, возможно, что в свой шаблон ты как раз коцанный чертёж и вогнал. Соответственно всё, созданное на его основе так же криво.
Вот подправленный твой код (собственно, от "твоего" там почти ничего и не осталось):Код - C# [Выбрать]
using System; using System.Collections.Generic; using System.Linq; #if AUTOCAD using cad = Autodesk.AutoCAD.ApplicationServices.Application; using Ap = Autodesk.AutoCAD.ApplicationServices; using Db = Autodesk.AutoCAD.DatabaseServices; using Ed = Autodesk.AutoCAD.EditorInput; using Rt = Autodesk.AutoCAD.Runtime; using Gm = Autodesk.AutoCAD.Geometry; using Hs = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices; using Us = Autodesk.AutoCAD.DatabaseServices.SymbolUtilityServices; #endif namespace cad_sandbox { public class Class1 { [Rt.CommandMethod("test")] public void Test() { Ap.Document doc = cad.DocumentManager.MdiActiveDocument; Ed.Editor ed = doc.Editor; Db.Database db = doc.Database; using (doc.LockDocument()) { using (var trans = doc.Database.TransactionManager.StartTransaction()) { Db.DBDictionary styles = trans.GetObject(db.MLStyleDictionaryId, Db.OpenMode.ForRead) as Db.DBDictionary; List<Db.ObjectId> objects = new List<Db.ObjectId>(); foreach (var style in styles) { if (db.CmlstyleID != style.Value && style.Key.ToLower() != "standard") { objects.Add(style.Value); } } doc.Database.Purge(new Db.ObjectIdCollection(objects.ToArray())); foreach (var item in objects) { var mlstyle = (Db.MlineStyle)trans.GetObject(item, Db.OpenMode.ForWrite); mlstyle.Erase(true); } trans.Commit(); } } } } }
юзингов-то в своём коде ты понатыкал... я поубирал лишние.Разве получая объект по транзакции неправильно диспоузить его?
Разве получая объект по транзакции неправильно диспоузить его?Транзакция сделает это за тебя. Подробнее можешь почитать здесь (http://bushman-andrey.blogspot.ru/2013/01/database-autocad.html), либо здесь (http://www.private.peterlink.ru/poleshchuk/cad/2014/Pr2013-2015.htm). К сожалению, в книге (по моей вине) по этой теме присутствует досадная опечатка\ошибка (о поведениях по умолчанию). В обозначенной по первой ссылке записи блога она исправлена.
пробовал с Вашим вариантом удаления, но потерпел неудачу. Вот кодТо, что ты показываешь - это однозначно не мой код.
пробовал с Вашим вариантом удаления, но потерпел неудачуСогласен, нужно добавить проверку на наличие элементов в списке objects, прежде чем вызывать Purge, иначе получаем ошибку, если удалять нечего. Добавил выше эту проверку в коде (http://adn-cis.org/forum/index.php?topic=1900.msg7550#msg7550) (см. строку 36).