Перейти к содержимому


Сброс форматирования MText


Сообщений в теме: 5

#1 westwind

    Посетитель

  • Пользователи
  • PipPip
  • 22 сообщений
  • Пол:Мужчина
  • Город:Ростов-на-Дону
  • Интересы:Инженер-проектировщик КИПиА

Отправлено 11 Август 2015 - 17:47

Под Autocad есть много популярных LISP скриптов, сбрасывающих форматирование многострочного текста (а это реально проблема, когда смежники используют CAD как PaintBrush). Предлагаю простое решение на базе Multicad:
static public void ClearTextFormat()
	    {
		    InputJig Jig = new InputJig();
		    List<McObjectId> lId = Jig.SelectObjects("Выбери Mtext : ");
		    foreach (McObjectId id in lId)
		    {
			    if (id.IsNull) continue;
			    DbText text = id.GetObject() as DbText;
			    if (text == null) continue;
			    string str = text.Text.Text;
			    //удаляем все символы форматирования
			    str = Regex.Replace(str, @"\\[^\\]*?;", "");
			    str = Regex.Replace(str, @"[{}]", "");
			    TextGeom tg = new TextGeom(str, text.Text.Origin, text.Text.Direction, text.Text.TextStyle);
			    text.Text = tg;
			   
		    }
	    }


#2 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 333 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 12 Август 2015 - 13:20

А точно у Вас создается в итоге MText? Там в символах форматирования, кроме палочек и прочего, есть также буквы.

#3 westwind

    Посетитель

  • Пользователи
  • PipPip
  • 22 сообщений
  • Пол:Мужчина
  • Город:Ростов-на-Дону
  • Интересы:Инженер-проектировщик КИПиА

Отправлено 12 Август 2015 - 14:17

Просмотр сообщенияRobink (12 Август 2015 - 13:20) писал:

А точно у Вас создается в итоге MText? Там в символах форматирования, кроме палочек и прочего, есть также буквы.
Не совсем понял, что имеется в виду :)
Смысл происходящего в следующем: берём MText, который выглядит внутри вот так:
Техническое {\fCourier New CYR|b0|i0|c204|p49;перевооружение} сетей г{\H1.4286x;азопотребления.}\P Узел учета газа{\W0.5; котельной по\Q19; адресу: у\Q15;л. ул. Р.Люксембург, 52-а }г.Таганрог, \PРостовская область
1) Находим и удаляем внутри все лексемы вида:
\<внутри что-угодно кроме повторяющегося символа "\">;
тут нюанс, нельзя в регулярном выражении написать просто

\\.*?;
потому, что в таком случае будут удалены "полезные" символы конца абзаца многострочного текста "\Р"
нотация "\Р" отличается от остальных команд форматирования тем, что она не заканчивается ";"
кроме того, возможны ещё какие-то нюансы. Так что пишем:

\\[^\\]*?;
заставляя .NET проверять, что внутри найденной лексемы, которую он собрался удалять нет слэшей.

2) потом удаляем фигурные скобки... тут, кстати косяк, если в тексте есть фигурные скобки, напечатанные пользователем - они удалятся...
нужно строку
Regex.Replace(str, @"[{}]", "");
заменить на совсем непонятную
Regex.Replace(str, @"[^\\][{|}]", "");
и после выполнения функции получим MText без форматирования.
Техническое перевооружение сетей газопотребления.\P Узел учета газа котельной по адресу: ул. ул. Р.Люксембург, 52-а г.Таганрог, \PРостовская область

Ну или как-то так... я в программировании на C# упражняюсь реже чем в отпуск хожу... придёт МАКРОДЕМОН и всё разъяснит....

Сообщение отредактировал westwind: 12 Август 2015 - 14:23


#4 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 333 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 12 Август 2015 - 15:50

Макродемон, это Слободин? Если так, то тоже ждем). В MC за DText и MText отвечает один тип DbText. Я как то пробовал создавать текст, у меня получился только однострочный. А версия у Вас какая NC?

#5 westwind

    Посетитель

  • Пользователи
  • PipPip
  • 22 сообщений
  • Пол:Мужчина
  • Город:Ростов-на-Дону
  • Интересы:Инженер-проектировщик КИПиА

Отправлено 12 Август 2015 - 17:09

Версия 7.0.
Ну, в данном случае, мы объект не создаём, а редактируем - у меня работает.
Вообще же... ко мне вчера прилетела куча чертежей газовых по узлам учёта, которые править нужно было. Стал срочно искать скрипт, вычищающий форматирование - не нашёл :( Написал небольшой кусочек кода - решил поделиться... по свободе нужно будет сделать с диалогом - какие команды форматирования убирать, а какие оставить.
Плюс - автоматический перенос текста на свой слой, выставление всех свойств "по слою" и т.д.
Сейчас времени нет....

#6 Ruyke

    Активист

  • Пользователи
  • PipPipPipPip
  • 190 сообщений
  • Пол:Мужчина

Отправлено 03 Май 2016 - 12:57

У меня этот скрипт почему-то просто разбивает мтекст в текст. Может кто пояснить как им пользоваться?





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей