суббота, 25 января 2014 г.

Шаблон для универсальной выноски.

В СПДС GraphiCS есть набор удобных инструментов: выноски. Ими удобно маркировать объекты на чертеже, но у них есть и один существенный недостаток, каждый раз текст приходится вводить вручную.
В этой статье, я хотел бы написать о том, как упростить и автоматизировать процесс ввода текста в поля выноски.
Все достаточно просто, нужно выноску сохранить в базу, как шаблон.
В справке по СПДС GraphiCS об этом сказано, но лишь  мельком. Поэтому, я хочу осветить этот вопрос поподробнее, в дальнейшем использование шаблона выноски поможет сохранить много времени.
Итак, по порядку.
Сразу оговорюсь, что как шаблон можно сохранять любую выноску СПДС GraphiCS (на самом деле не только выноску, а любой объект AutoCAD, но об этом в другой раз), в зависимости от стоящих перед вами задач.
Для примера  сделаем шаблон на основе универсальной выноски. Кстати в справке про нее написано, а в меню и панелях вызов недоступен, тем не менее, универсальную выноску можно вызвать из командной строки командой: СПУНИВЫН (SPNOTE).
Выглядит меню универсальной выноски так:
На мой взгляд, для нашей задачи универсальная выноска подходит лучше всего:
  • в ней можно произвольно добавлять любое количество строк;
  • можно изменять вид:
  • как у позиционной выноски (простая);
  • как у выноски для многослойных конструкций (многострочная).
 
Шаблон выноски может получать данные с любых объектов чертежа:
  • блоков;
  • параметрических объектов;
  • других выносок;
  • таблиц;
  • форматок;
  • других шаблонов.
В общем, со всех объектов чертежа которые имеют свойства распознаваемые СПДС GraphiCS.
Для примера сохраняем блок с двумя атрибутами String1 и String2, (важное замечание, кроме атрибутов блок должен иметь геометрию из примитивов AutoCAD), (шаблон выноски не может привязаться просто к тексту). Нарисуем прямоугольную рамку вокруг атрибутов, например вот так:
 
Обращаю Ваше внимание, что при вставке атрибутов, редактор блоков стремится присвоить им имена ЗАГЛАВНЫМИ буквами, необходимо через свойства атрибутов, изменить регистр имен.  Все дело в том, что СПДС GraphiCS чувствителен к регистру переменных.
Получаем такой простенький блок.
Далее в командной строке набираем СПУНИВЫН (SPNOTE) (либо через меню СПДС GraphiCS, или из панели инструментов выбираем необходимую Вам выноску), кликаем правой кнопкой мышки в первой строке универсальной выноски и в контекстном меню выбираем «Взять с чертежа»:
 
в появившейся панели выбираем: «взять из  свойства»:
Выбираем объект на чертеже, нажимаем Enter (пробел) и видим такое меню:
В нашем случае нас интересует параметр (атрибут) String1, выбираем его.
Затем добавляем строку в универсальную выноску:
и аналогично выбираем параметр (атрибут) String2  этого же объекта:
В результате должно получиться примерно так:
Кликаем “Ok” и вставляем выноску на чертеж.
Выноска готова, теперь для возможности повторного применения ее необходимо сохранить в базе как шаблон/ Вызвать мастер шаблонов можно двумя способами, либо через контекстное меню выноски (работает только для выносок):
или же через меню СПДС GraphiCS.
В результате видим такую форму:
Нажимаем кнопку «Создать шаблон», вводим имя шаблона и задаем путь в базе.
Для применения шаблона выноски вызываем его из базы, кликаем по объекту который необходимо маркировать (объектная привязка должна быть включена F3).
Хочу добавить еще ряд необходимых замечаний:
  • параметры, к которым мы привязываем выноску, могут быть любыми, на ваше усмотрение;
  • выноска, созданная таким образом, будет с одинаковым успехом получать данные, как с параметрических объектов, так и с блоков;
  • необходимое условие для блока, в нем должны быть атрибуты, на которые настроен шаблон  выноски (при изменении значений атрибутов, выноска обновит свои поля после сохранения чертежа);
  • необходимое условие для параметрического объекта, параметры, которые получает шаблон выноски, должны быть Public, но могут быть скрыты как в примере ниже
    function ActHeader {
    //...................
        Public(
    //..................
    // параметры для маркировки
            String1, "hidden", //"Первая строка маркера",
            String2, "hidden", //"Вторая строка маркера",
    //..................
        );
    //..................
    }
    
    (выноска обновлит свои поля сразу, по изменению в параметрическом объекте);
  • если хоть один параметр объекта чертежа из привязанных к шаблону выноски, не существует,  то выноска не сможет получить с объекта ни одного параметра. .
В заключение хочу написать, что если необходимо:
  • изменить вид линий выносок;
  • вид самой выноски;
  • количество строк выноски;
  • добавить или изменить какие либо параметры.
В этом случае нет необходимости создавать шаблон заново, достаточно отредактировать нужным образом выноску, вставленную из шаблона и вызвав, как было описано выше мастер шаблонов, обновить в базе либо пересохранить отредактированную выноску с другим именем или в другое место базы данных.
Ссылки для скачивания:

12 комментариев :

  1. Спасибо за интересную статью!

    Не всегда выноска с шаблоном решает недостаток "каждый раз вводить текст". Шаблон удобен, если работать и маркировать объекты, детали - а как быть с обычными примитивами AutoCAD (линии, штриховка и т.п.)?
    Я решаю это так: если имеется определенная база текста для маркировки - добавляю ее в "Записную книжку" и беру тогда нужный текст из базы.

    ОтветитьУдалить
    Ответы
    1. Спасибо за то, что обратил мое внимание на опечатку, конечно с примитивами AutoCAD выноска не работает.
      Текст статьи поправил.

      Удалить
  2. Теперь все отлично!
    Жаль только то, что мало кто из пользователей СПДС используют маркеры. шаблоны и параметрические детали :(

    ОтветитьУдалить
  3. Спасибо, мне раньше приходилось копировать блок вместе с выноской, потом изменять аттрибуты. Теперь можно спокойно расставлять блоки, ну а выноски, - а выноски потом. Только неудобно рыться в стандартных, выискивая эту супер выноску. Нельзя ли придумать макрос для кнопки. К сожалению, вызвать без окна диалога -spstd, чтоб в комстроке ввести название автокад не понимает.

    ОтветитьУдалить
    Ответы
    1. создаем текстовый файл с расширением *.lsp,
      в нем прописываем такие строки:
      (defun C:мрс ()
      (command "spStdSelected" "4BCE1ABDFB27FEE2")
      (princ)
      )
      этот файл закидываем в автозагрузку AutoCAD,
      вместо 4BCE1ABDFB27FEE2 подставляем ID объекта СПДС, (можно посмотреть в ком строке)
      по мрс будет вставляться объект

      Удалить
    2. Спасибо, ID в комстроке не отображается, но удалось спросить у Мастера Объектов.

      Удалить
  4. И еще вдогонку - выноска берет "вторую строку" из поля динблока, которое в свою очередь получает значение с параметра линейного растяжения, т.е. длину. Поле настроено на показ длины с точностью до целого, а вот на выноске получается три знака после запятой. Как победить?

    ОтветитьУдалить
    Ответы
    1. в дин блок нужно добавить пользовательский параметр с выражением зависимоти от линейного растяжения...
      например линейное растяжение -"L", тогда в выражении для пользовательского параметра дин блока прописывам - "round(L*100)/100" (для округления до сотых. И вторую строку выноски привязываем к этому пользовательскому параметру.

      Удалить
  5. vot interesuet odin vopros, nemnogo ne v temu no pohojee.
    god nazat sluchaiana kakto ea dobavil spds formu dlea Din. Block-ov(autocad) i v rezultatea ea smog meneati znachenia atributov iz spds formi, eto bilo udobno tak kat dialogovaia okno autocad dlea din block-ov eto prostaia tablitsa(ne komfortno).
    No vot beda ne pomniu kak ea eto zdelal i ne mogu eto povtoriti, pomniu shto dobavil din. block v spd bazu a dalishe ne pomniu. Ktoto znaet?

    ОтветитьУдалить
    Ответы
    1. выделяешь свой блок,
      идешь в меню СПДС->Объекты из базы->Маркеры, группы->Мастер шаблонов
      Сохраняешь шаблон, создаешь форму, там все параметры видны...
      Если надо подробнее то: http://doctorraz.blogspot.ru/p/blog-page_18.html

      Удалить
  6. А можно ли сделать так, что бы маркер выводил только часть строки из считанного атрибута?
    Например у блока есть атрибут СОДЕРЖАНИЕ_ЧЕРТЕЖА = "Принципиальная схема ЩО1". А сделать так что бы маркер выводил только "ЩО1".

    ОтветитьУдалить
    Ответы
    1. Что бы выводил часть строки сделать не получится (как он будет узнавать, какую часть выводить?)
      Но можно сделать атрибуты отдельными полями.. поля подтягивать в маркер и из них же собирать строку в блоке

      Удалить