Задача – взять значение из текста

Когда я слышу / вижу / читаю подобное задание, мне становится плохо. К сожалению, приходится очень долго объяснять некоторые простые вещи. Чтобы не повторяться, распишу здесь. Текст ориентирован прежде всего на заказчиков, а не на программистов ;)

То, что пользователь "видит" как текст, с точки зрения AutoCAD'a может быть не совсем текстом. Или совсем не текстом.

Если пользователь самостоятельно указывает на примитив, то все становится достаточно просто: используем (nentsel) или (nentselp) вместо (entsel) - и все. Указатель получен, дальше можно уже играться как угодно. Правда, такой подход не сработает с таблицей, ну да ладно. Но если программа должна "сама" что-то там фильтровать, или пользователь указывает несколько примитивов, становится значительно более интересно:

  • Это может быть однострочный текст. Самый простой вариант. Ограничение длины строки - 255 символов, если не ошибаюсь. Никакого форматирования, только то, что определено в описании текстового стиля. В особо запущенных случаях вместо однострочного текста может оказаться описание атрибута, располагающееся напрямую в пространстве модели или листа.
  • Это может быть многострочный текст. Вариант уже посложнее. Длина строки ограничена 32-с-чем-то-там тысячами символов, включая служебные. Допускается форматирование (различные цвета символов, курсивы-полужирные-подчеркнутые символы, различные высоты символов, форматирование параграфов и прочие красивости. Теоретически получить значение строки можно - достаточно снять принудительное форматирование. Бесплатные и доступные решения на лиспе есть (а на .NET, по-моему, это вообще делается в полстроки. Но я отвлекся).
  • Это может быть вхождение однострочного атрибута. Почти однострочный текст, только привязан он к блоку, и для того, чтобы до него добраться, частенько приходится выяснять его тэг.
  • Это может быть вхождение многострочного атрибута. Смесь многострочного текста и атрибута. Вдобавок ограничение в 281 (если не вру) символа. Точно так же, чтобы получить его значение, надо знать тэг.
  • Это может быть однострочный или многострочный текст, находящийся в блоке. Совсем печально: чтобы до него добраться, необходимо проходить по описанию блока и уже там фильтровать объекты.
  • Это может быть текст ячейки таблицы. Чтобы получить значение такого текста, надо сначала получить указатель на таблицу, номер строки, номер колонки - и тогда уже можно что-то делать.

Ничего так списочек, да? :)
Чтобы избежать длительных и пустых переговоров, лучше всего сразу предоставить образец файла dwg и подробно расписать - что откуда и как забирается. А уже потом - как полученные значения обрабатывать.

Размещено в Новости, Разное · Метки: , ,



Комментарии

Есть 2 коммент. к “Задача – взять значение из текста”
  1. TararykovDG пишет:

    Алексей, ещё размеры и мультивыноски

  2. Кулик Алексей aka kpblc пишет:

    Согласен :) Да еще и выносках могут быть блоки с атрибутами ;) Короче, весело )))

Поделитесь своим мнением


Я не робот.