2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Ядреный вопрос по PSTricks
Сообщение16.03.2007, 22:04 
Господа! Вопрос по пакету 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) Если я буду последовательно в одной картинке объявлять несколько временных узлов с одним и тем же названием, это не приведет к глюкам ПостСкрипта?

 
 
 [ 1 сообщение ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group