Flussdiagramm - PSTricks - Knoten

Tabellen und Grafiken erstellen und anordnen


Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

Flussdiagramm - PSTricks - Knoten

Beitrag von Omega »

Hallo,

die Erstellung eines Flussdiagramms mit PSTricks bereitet mir eine Schwierigkeit.
Ich möchte an einem Ovalknoten oder Kreisknoten parallele und nebeneinanderliegende Verbindungen haben.

Mit der Verwendung von 'offsetA' bzw. 'offsetB' liegt das Linienende der Verbindung nicht mehr auf der Umrandung (Oval bzw. Kreis) des Knotens.

Gibt es eine Möglichkeit diesen Sachverhalt 'elegant' und exakt zu lösen, so dass tatsächlich eine Verbindung zwischen den Linien entsteht?

Ich danke allen schon mal im voraus, die sich die Mühe machen diesen Beitrag zu lesen.


Minimalbeispiel:
\documentclass{article}
\usepackage{pstricks, pst-node}
\begin{document}
	\begin{pspicture}[showgrid=false](-1,-1)(6,4)
		\psset{nodesep=0pt}
		\rput(0,0){\rnode{A}{\psframebox{Box 1}}}
		\rput(5,0){\rnode{B}{\psframebox{Box 2}}}
		\rput(2.5,3){\rnode{C}{\psovalbox{Knoten}}}
		\ncangle[angleA=-90, angleB=0, offsetA=-0.75]{C}{A}
		\ncangle[angleA=-90,angleB=180, offsetA=0.75]{C}{B}
	\end{pspicture}
\end{document}

dada

Beitrag von dada »

Ich würde es mit einer Objektüberlagerung realisieren:
\documentclass{article} 
\usepackage{pstricks, pst-node} 
\begin{document} 
   \begin{pspicture}[showgrid=false](-1,-1)(6,4) 
      \psset{nodesep=0pt} 
      \rput(0,0){\rnode{A}{\psframebox{Box 1}}} 
      \rput(5,0){\rnode{B}{\psframebox{Box 2}}} 
      \put(2.5,3){\rnode{D}}
			 \ncangle[angleA=-90, angleB=0, offsetA=-0.75]{D}{A} 
      \ncangle[angleA=-90,angleB=180, offsetA=0.75]{D}{B} 
			 \rput(2.5,3){\rnode{C}{\psovalbox[fillstyle=solid,fillcolor=white]{Knoten}}}
   \end{pspicture} 
\end{document} 
So müsste es eigentlich gehen

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Re: Flussdiagramm - PSTricks - Knoten

Beitrag von CrazyHorse »

Omega hat geschrieben: Mit der Verwendung von 'offsetA' bzw. 'offsetB' liegt das Linienende der Verbindung nicht mehr auf der Umrandung (Oval bzw. Kreis) des Knotens.

Gibt es eine Möglichkeit diesen Sachverhalt 'elegant' und exakt zu lösen, so dass tatsächlich eine Verbindung zwischen den Linien entsteht?
      \ncangle[angleA=-90, angleB=0, offsetA=-0.75,nodesepA=-4pt]{C}{A}
      \ncangle[angleA=-90,angleB=180, offsetA=0.75,nodesepA=-4pt]{C}{B}
Herbert

Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

Beitrag von Omega »

dada hat geschrieben:Ich würde es mit einer Objektüberlagerung realisieren:
\documentclass{article} 
\usepackage{pstricks, pst-node} 
\begin{document} 
   \begin{pspicture}[showgrid=false](-1,-1)(6,4) 
      \psset{nodesep=0pt} 
      \rput(0,0){\rnode{A}{\psframebox{Box 1}}} 
      \rput(5,0){\rnode{B}{\psframebox{Box 2}}} 
      \put(2.5,3){\rnode{D}}
			 \ncangle[angleA=-90, angleB=0, offsetA=-0.75]{D}{A} 
      \ncangle[angleA=-90,angleB=180, offsetA=0.75]{D}{B} 
			 \rput(2.5,3){\rnode{C}{\psovalbox[fillstyle=solid,fillcolor=white]{Knoten}}}
   \end{pspicture} 
\end{document} 
So müsste es eigentlich gehen
Danke für die schnelle Antwort!
Das visuelle Ergebnis erfüllt meine Forderung. Ich erhalte jedoch nachfolgende Meldung, die mir die Lösung doch unzufriedenstellend erscheinen lässt.

Meldung:
"Overfull \hbox (71.13185pt too wide) detected at line 8"
CrazyHorse hat geschrieben:
\ncangle[angleA=-90, angleB=0, offsetA=-0.75,nodesepA=-4pt]{C}{A}
\ncangle[angleA=-90,angleB=180, offsetA=0.75,nodesepA=-4pt]{C}{B}
Danke dir Herbert! Du hast eine gute, pragmatische Antwort auf meine Frage geliefert.

Ist es aber möglich, objektorientiert auf die Umrandung des Knoten zuzugreifen bzw. auf den Knoten zu referenzieren, so dass man die Umrandung EXAKT trifft ohne den Endpunkt durch 'nodesep' einzupassen?

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

Omega hat geschrieben:Das visuelle Ergebnis erfüllt meine Forderung. Ich erhalte jedoch nachfolgende Meldung, die mir die Lösung doch unzufriedenstellend erscheinen lässt.

Meldung:
"Overfull \hbox (71.13185pt too wide) detected at line 8"
die Meldung ist in diesem Fall falsch und kann ignoriert werden
Ist es aber möglich, objektorientiert auf die Umrandung des Knoten zuzugreifen bzw. auf den Knoten zu referenzieren, so dass man die Umrandung EXAKT trifft ohne den Endpunkt durch 'nodesep' einzupassen?
ja, ist aber nicht so einfach, da zuerst die Lininenendpunkt berechnet werden und dann verschoben wird. Hier eine einfachere Lösung der ersten Variante:
\documentclass{article}
\usepackage{pst-node}
\begin{document}

\begin{center}
   \begin{pspicture}[showgrid](-1,-1)(6,4)
      \psset{nodesep=0pt}
      \rput(0,0){\rnode{A}{\psframebox{Box 1}}}
      \rput(5,0){\rnode{B}{\psframebox{Box 2}}}
      \pnode(2.5,3){D}
      \ncangle[angleA=-90, angleB=0, offsetA=-0.75]{D}{A}
      \ncangle[angleA=-90,angleB=180, offsetA=0.75]{D}{B}
      \rput(D){\psovalbox[fillstyle=solid,fillcolor=white]{Knoten}}
   \end{pspicture}
\end{center}

\end{document} 
Herbert

Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

Flussdiagramm - PSTricks - Knoten

Beitrag von Omega »

CrazyHorse hat geschrieben:
ja, ist aber nicht so einfach, da zuerst die Lininenendpunkt berechnet werden und dann verschoben wird. Hier eine einfachere Lösung der ersten Variante:
\documentclass{article}
\usepackage{pst-node}
\begin{document}

\begin{center}
   \begin{pspicture}[showgrid](-1,-1)(6,4)
      \psset{nodesep=0pt}
      \rput(0,0){\rnode{A}{\psframebox{Box 1}}}
      \rput(5,0){\rnode{B}{\psframebox{Box 2}}}
      \pnode(2.5,3){D}
      \ncangle[angleA=-90, angleB=0, offsetA=-0.75]{D}{A}
      \ncangle[angleA=-90,angleB=180, offsetA=0.75]{D}{B}
      \rput(D){\psovalbox[fillstyle=solid,fillcolor=white]{Knoten}}
   \end{pspicture}
\end{center}

\end{document} 
Danke dir Herbert!
Dies ist meiner Meinung nach eine gute und elegante Lösung, welche in der Praxis öfters ihre Anwedung finden kann und mir eigentlich auch schon genügt.

Nichtsdestotrotz würde ich gerne wissen wie es ausschauen müsste, wenn
man die Box nicht mit Weiß füllen möchte, sondern einen bestehenden Hintergrund in der Box sichtbar lassen möchte.

Die verzweigende Box (hier: Oval) soll hierbei eine beliebige geschlossene Kurve sein. Die Verwendung von 'angleX' und 'offsetX' für eine Lösung, sollte weiterhin beibehalten werden (so stelle ich mir vor).

Danke für dein Engagement!


Schöne Grüße

Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

PSTricks - Knoten - Definition Box

Beitrag von Omega »

Um auf die Umrandung von Boxen zurückzukommen,
würde ich gerne eigene Boxen definieren mit "beliebigen", geschlossenen Kurvenzügen und nicht etwa nur rechtwinklige Boxen verwenden.

Entscheidend ist dabei, dass sie einen ähnlichen Umfang an Eigenschaften haben wie die Standardboxen, die bereits in pstricks implementiert sind.
Dies soll heißen, dass man sie z.B. platzieren kann und durch entsprechende
Verbindung (z.B. \ncline) mit anderen Knoten unter beliebigen Winkeln verbinden kann. Die Verbindungslinie(unter beliebigen Winkel) soll dabei aber an der Außenkontur der Box beginnen.

Kann mir bitte dazu jemand ein Beispiel oder einen Ansatz liefern oder auf eine Dokumentation verweisen.

Danke

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Re: PSTricks - Knoten - Definition Box

Beitrag von CrazyHorse »

Omega hat geschrieben:Kann mir bitte dazu jemand ein Beispiel oder einen Ansatz liefern oder auf eine Dokumentation verweisen.
http://tug.org/PSTricks/main.cgi?file=pst-node/nodes

Herbert

Antworten