2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Ядреный вопрос по PSTricks
Сообщение16.03.2007, 22:04 


16/10/06
23
Господа! Вопрос по пакету 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 сообщение ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group