Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: simson43 от 13-10-2018, 19:55:32

Название: Изменение стиля текста
Отправлено: simson43 от 13-10-2018, 19:55:32
Добрый вечер.
Замена стиля текста производится в наихудшем случае по всем листам и модели. список в WinForm заполняю таким методом
Код - C# [Выбрать]
  1. textStyle.Items.Add("");
  2.             Document doc = App.DocumentManager.MdiActiveDocument;
  3.             Database db = doc.Database;
  4.             try
  5.             {
  6.                 using (DocumentLock dl = doc.LockDocument())
  7.                 {
  8.                     using (Transaction tr = doc.TransactionManager.StartTransaction())
  9.                     {
  10.                         TextStyleTable tst = tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
  11.                         foreach (ObjectId stid in tst)
  12.                         {
  13.                             TextStyleTableRecord st = tr.GetObject(stid, OpenMode.ForRead) as TextStyleTableRecord;
  14.                             textStyle.Items.Add(st.Name);
  15.                         }
  16.                     }
  17.                 }
  18.             }
затем применяю вот таким
Код - C# [Выбрать]
  1. if (form.textStyle.SelectedIndex > -1 && !form.textStyle.SelectedItem.Equals(""))
  2.                     mt.TextStyleId = tst[form.textStyle.SelectedItem.ToString()];//mt это MText
Проблема в том что если формат текста производится без замены шрифта (в зависимости от выбора пользователя) то довольно быстро даже на достаточно объемных чертежах. Если ж меняю и шрифт (на больших чертежах) то это все затягивается на несколько секунд.
может я что то не так делаю?
Спасибо
Название: Re: Изменение стиля текста
Отправлено: Александр Ривилис от 13-10-2018, 21:31:32
Проблема в том что если формат текста производится без замены шрифта (в зависимости от выбора пользователя) то довольно быстро даже на достаточно объемных чертежах. Если ж меняю и шрифт (на больших чертежах) то это все затягивается на несколько секунд.
может я что то не так делаю?
Всё так. Изменение текстового стиля без замены шрифта обычно вообще ничего не делает, а замена шрифта приводит к регенерации текстов. И если их много, то это может быть длительным процессом.
Название: Re: Изменение стиля текста
Отправлено: simson43 от 13-10-2018, 21:33:14
а можно сделать так чтоб эта регенерация происходила не сама после каждой итерации а вручную в конце метода?
Название: Re: Изменение стиля текста
Отправлено: Александр Ривилис от 13-10-2018, 21:34:59
а можно сделать так чтоб эта регенерация происходила не сама после каждой итерации а вручную в конце метода?
На скорости это никак не скажется.
Название: Re: Изменение стиля текста
Отправлено: simson43 от 13-10-2018, 21:36:54
ну хорошо
спасибо!
Название: Re: Изменение стиля текста
Отправлено: Александр Ривилис от 13-10-2018, 21:39:10
А ты случайно не открываешь/закрываешь транзакцию для каждого MText, у которого меняешь текстовый стиль?
Название: Re: Изменение стиля текста
Отправлено: simson43 от 13-10-2018, 21:40:22
ох. нет.
открываю транзакцию, перебираю все объекты изменяя, закрываю
Название: Re: Изменение стиля текста
Отправлено: Дмитрий Загорулькин от 14-10-2018, 16:48:27
может я что то не так делаю?
Конечно, кое-что не так. Первый код, я так понимаю, в конструкторе формы находится? Это не есть хорошо, лучше разделять функционал. Внутри кода формы желательно не выполнять никаких действий с объектами AutoCAD API. Где-то извне получили текстовые стили, передали в форму только коллекцию их названий, на выходе получили строку - выбранное название стиля.
Название: Re: Изменение стиля текста
Отправлено: simson43 от 14-10-2018, 16:50:50
все верно. это не в форме. получаю стили, кидаю их в форму, после этого открываю форму.
из нее получаю строчки и работа ведется в командном методе.
Название: Re: Изменение стиля текста
Отправлено: Дмитрий Загорулькин от 14-10-2018, 17:29:15
Это разве не в коде формы?:
Код - C# [Выбрать]
  1. textStyle.Items.Add("");
Я так понимаю, textStyle - это ComboBox или ListBox.
Название: Re: Изменение стиля текста
Отправлено: simson43 от 14-10-2018, 17:41:15
здесь да.
просто показал алгоритм.
нет под рукой актуального кода.
он уже вынесен из формы