Господа! Вопрос по пакету PSTricks...
В общем, я рисую на нем то, что называется flow charts, т.е. диаграммы состояний системы с конечным количеством оных. Проще говоря, набор "ящиков" и стрелочки между ними (ну и туча подписей). Т.к. схемы эти все время правятся, требуется хороший уровень автоматизации процесса рисования, а поэтому я их рисую не просто линиями и при помощи nodes и node connections. Ящики - это, ясен пень, fnode'ы, а соединения - node connection'ы...
Однако есть тут одна проблемка: на схемах должны быть не только стрелки от ящика к ящику, но и стрелки, так сказать, "из ниоткуда" и "в никуда". Они должны быть перпендикулярны ящику, в или из котрого они ведут, и быть фиксированной длины. При этом проблема усугубляется еще тем, что их нужно рисовать не только по центру node'а, но и с некоторым offset'ом. Ну и, самое главное, они должны быть привязаны к определенному узлу и перетаскиваться вместе с ним (иначе все было бы просто: фиктивный pnode и connection от него к нужному узлу).
На данный момент я решил это довольно извратным способом:
а) Стрелки "извне" рисуются просто:
\newcommand{\StandardSchemeNCInA}[4]{\ncangle[angle=#2,offsetA=#3,offsetB=-#3,arm=1]{->}{#1}{#1}\naput[npos=0.5]{#4}}
Тут, соответственно, #1 - узел, в который рисуем стрелку, #2 - угол рисования, #3 - сдвиг (offset), 1 - стандартная длина стрелки, #4 - надпись на стрелке.
б) А вот нарисовать стрелку наружу куда сложнее - нельзя же сделать стрелку посередине линии.. Приходится извращаться вот так:
\newcommand{\StandardSchemeNCOutA}[5]{\ncbar[angle=#2,offsetA=#3,offsetB=-#3,arm=2]{-}{#1}{#1}\ncput[npos=1.5]{\pnode{#5}}\ncangle[angleA=#2,angleB=-#2,offsetA=#3]{->}{#1}{#5}\naput[npos=0.5]{#4}}
Первые 4 параметра те же, что и в случае "а", а 5й - имя временного нода.
Объяснение алгоритма: как в случае "а" рисуем "палку-стоялку" в нужном месте, на ее конец кладем виртуальный pnode, а потом тянем стрелку от узла к этому pnode'у.
---------------------------------------------------
А теперь сами вопросы:
1) Можно ли это все сделать как-то попроще? Нет ли стандартных механизмов для этого безобразия?
2) Если я буду последовательно в одной картинке объявлять несколько временных узлов с одним и тем же названием, это не приведет к глюкам ПостСкрипта?
|