Получение габаритов текстов и примитивов

Просматривая старые записи, увидел упоминание о textbox, acet-geom-textbox и vla-GetBoundingBox. О различиях в работе этих функций и хотелось бы поговорить.

История этих исследований достаточно проста: мне понадобилось в "невидимом" режиме вычислять и подгонять под определенные условия габариты однострочных и многострочных текстов. По условиям задачи надо было, чтобы пользователи не видели никаких вычислений.

Следовательно, примитивы нельзя было создавать в рабочем пространстве (модели или листа). Выход - либо временный анонимный блок, либо вообще другой документ. Я выбрал первый вариант.

Создать анонимный блок не проблема, также никаких вопросов не вызывает и создание внутри такого блока любого примитива - в том числе и тексты. Отлично, создали, получили указатель на созданный примитив, остались сущие мелочи: получить габариты.

textbox прекрасно понимает ename-представление однострочного текста, но отказался обрабатывать многострочные. Я попробовал использовать acet-geom-textbox, она отлично срабатывает - но только для примитивов, существующих в нормальном и полноценном пространстве (например, модели). Осталось только одно - vla-GetBoundingBox. Для обеспечения корректной работы этой функции с текстами я не менял выравнивание и точки вставки текста, да и вообще помещал проверяемые примитивы в "пляжные" условия: точка вставки 0,0,0; выравнивание по умолчанию; система координат - мировая. Дальнейшая обработка данных особого интереса уже не представляет.

Основное, что я хотел сказать: textbox и acet-geom-textbox - прекрасные функции, и их вполне можно использовать, если надо получать габариты для примитивов, отвечающих соответствующим требованиям (правда, не всегда документированным). Но для большей универсальности или в случае, если надо обрабатывать примитивы, которые элементарно не видно, нередко лучше использовать именно vla-GetBoundingBox.

Размещено в AutoCAD, Код LISP · Метки: ,



Комментарии

Есть 6 коммент. к “Получение габаритов текстов и примитивов”
  1. > вычислять и под< ...>нять
    это как? :)

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

    Писал с планшета, а он, собака этакая, еще и не такое выкидывает...
    Исправил, спасибо. :)
    P.S. Позволил себе немного отредактировать твой комментарий. Если ты сильно против - сообщи, верну что было (по крайней мере пока помню исходный текст ;))

  3. Ну подправил, так подправил - пусть телезрители в поле чудес играют, подставляя недостающие буквы (каждый в меру и сторону развитости своей фантазии) :)

  4. Alan пишет:

    Алексей, надо будет попробовать эту функцию -  vla-GetBoundingBox в смежных диалектах: ZWCAD и GstarCAD, а то там нет полноценного ЕТ - acet-geom-textbox отсутствует
    Я вот тут пытался это описать http://forum.gstarcad.ru/viewtopic.php?f=14&t=136&sid=4b753cbe8cec6fc5ecfb63cdfa2dcbae

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

    Александр, это сработает только в том случае, если в клонах есть реализация COM-взаимодействия (он же в девичестве ActiveX).

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

    Во, пока вспомнил - по-моему, в старых версиях BricsCAD'a vla-GetBoundingBox возвращал непонятную мешанину. Поэтому я (пока не выбрал работающий вариант) часто строил замкнутую полилинию по полученным координатам, благо это несложно. Ну и, естественно, в рабочем коде подобные построения убирал ;)

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


Я не робот.