Symboldatenbank für TIKZ

Tabellen und Grafiken erstellen und anordnen


BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Beitrag von BlackDevil »

Hmm, weiß nicht ob so viel Aufwand für die Doku nötig ist. So viel kanns ja nicht ;)

Wärmetauscher, Pumpen und Ventilatoren und Kompressoren hab ich fertig. Die Rohre wehren sich noch:
	%------------------------------------------------
	%		Pipe
	%------------------------------------------------
	%			\pipe{start}{end}[insulation][heated]
	%		

		\newcommandx{\pipe}[4][3=0,4=0]
		{
			\draw [ultra thick] (#1) -- (#2);
			\ifthenelse{\equal{#4}{1}}{		% Heated
					\draw [thick,  dashdotted] ($(#1)-0.15*(0,1)$) -- ($(#2)-0.15*(0,1)$);
				}{}
			\ifthenelse{\equal{#3}{1}}{			% Insulation
				\draw [pattern = north east lines] ($(#1)+0.1*(1,0)-0.2*(0,1)$) rectangle ($(#2)-0.1*(1,0)+0.2*(0,1)$);
			}{}
		}
Horizontal funktioniert alles: Um das "Rohr" herum ist eine schraffierte Linie, unten dran eine gestrichpunktete (wenn die Optionen "Isolated" und "Heated" eingeschaltet sind). Nur wenn das Rohr in eine andere Richtung geht passt das nicht mehr ... ich weiß nur nicht wie ich das beheben kann.

Bei den Pumpen (und Ventilatoren ...) hätte ich es gerne noch das bei der Option "Motor" das M immer in die gleiche Richtung schaut, nämlich wie ohne Rotation (da ist es Horizontal).
		\newcommandx{\pump}[5][4=0,5=0]
		{
			\ifthenelse{\equal{#1}{1}}{		% Pump general
				\begin{scope}[rotate around={#4:(#2)}]
					\draw [ultra thick] (#2) circle [radius=0.5];
					\draw [thick] ($(#2)-0.5*(1,0)$) -- ($(#2)+0.5*(0,1)$) -- ($(#2)+0.5*(1,0)$);
					\draw [thick] ($(#2)+0.5*(0,1)$) -- ($(#2)+0.7*(0,1)$);
					\draw [thick] ($(#2)-0.5*(0,1)$) -- ($(#2)-0.7*(0,1)$);
					
					\coordinate (PumpIn#3) at ($(#2)-0.7*(0,1)$);
					\coordinate (PumpOut#3) at ($(#2)+0.7*(0,1)$);
					
					\ifthenelse{\equal{#5}{1}}{ % Motor
						\ifthenelse{#4<0}{
							\draw [ultra thick] ($(#2)-1.25*(1,0)$) circle [radius=0.35];
							\draw [thick] ($(#2)-0.9*(1,0)$) -- ($(#2)-0.5*(1,0)$);
							\node at ($(#2)-1.25*(1,0)$) {M};
						}
						{
							\draw [ultra thick] ($(#2)+1.25*(1,0)$) circle [radius=0.35];
							\draw [thick] ($(#2)+0.9*(1,0)$) -- ($(#2)+0.5*(1,0)$);
							\node [rotate=#4] at ($(#2)+1.25*(1,0)$) {M};
						}
					}{}
				\end{scope}
					\node [below] at ($(#2)+0.5*(1,-1)$) {P-$#3$};
			}{}
		}

Ich schau das ich morgen noch was mach. Ventile schaff ich wohl noch. Ob ich dann noch mehr schaffe, weiß ich nicht. Dazu gehören auch die Antriebe der Ventile. Auf der anderen Seite steht die Frage, wie detailliert das ganze sein muss.

Ich habe auch das Problem, das ich nicht weiß wie ich die Koordinate einer sich rotierenden Node (wie bei "Motor") so definiere, das wenn ich dort etwas anbastel es immer in die gleiche Richtung schaut. Deshalb ist "Motor" nicht extra sondern bei jedem einzelnen Teil dabei ...


Hat jemand Lust mit dran zu entwickeln? Dann würd ich das irgendwo online stellen und jeder kann basteln ;)

Grüße

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2766
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

BlackDevil hat geschrieben:Hat jemand Lust mit dran zu entwickeln?
An TikZ bin ich sehr interessiert. Ich komme allerdings eher aus der mathematischen Ecke, und habe nicht direkt Anwendung für Symbole für Pumpen, Ventilatoren, Kompressoren und sowas, daher keinen Ansatz, selbst sowas zu zeichnen. Wenn es um das Lösen TikZ-spezifischer Probleme geht, dann schon eher. In der Art "wie platziere ich einen Node genau in der Mitte" oder "wie beschrifte ich relativ zu" usw.
BlackDevil hat geschrieben:Dann würd ich das irgendwo online stellen und jeder kann basteln
Bei online-stellen und publik-machen für Interessierte kann ich helfen.
  • Interessante Beispiele stelle ich gern in die TikZ Beispiel-Galerie, auf texample.net auch gern einen Artikel oder Blog-Post.
  • Wenn Du darüber einen Artikel schreiben willst, stelle ich ihn gern auf [url=lttp://latex-community.org]LaTeX-Community.org[/url] oder mache Dir einen Autor-Account.
  • Deutschsprachig sind auch Artikel bzw. Blogposts im TeXwelt.de Community-Blog willkommen, ich kann Dir gern einen Account da einrichten.
Falls Du es außer hier auch noch woanders diskutieren willst, TeXwelt.de ist ein sehr guter Platz, um konkrete Teilaufgaben zu lösen. Da antworten Leute, die sich auch mit TikZ sehr gut auskennen, wie Johannes schon erwähnte. Ich sah z.B. Felix komplexe TikZ-Zeichnungen wie zum Zitronensäurezyklus entwickeln, wobei er bei Teilproblemen jeweils dort eine spezifische Frage postete und beantwortet bekam. Siehe die TikZ-Rubrik, die wir gern erweitern. Wenn ein Projekt, oder auch nur eine Zeichnung, über mehrere konkrete Fragen hinaus entsteht, die so im Wissens-Archiv Lösungen generieren, ist das sehr gern gesehen.

Es ist auch ein Erfolgsprinzip, um gemeinsam auf ein Ziel hinzuarbeiten: Teilschritte, ganz konkrete spezifische Aufgaben, in den Raum zu stellen. TikZ-Kenner tragen da gern was bei, eine einzelne Lösung ist ja schnell gemacht. Das ist viel einfacher, als einem Aufruf zur Mitarbeit an einem Projekt zu folgen.

Viele Grüße,

Stefan

BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Beitrag von BlackDevil »

Ich denke mal darüber nach. Die Frage ist auch wie viel Zeit ich tatsächlich neben meiner eigentlichen Thesis habe, die darf ich nicht vernachlässigen. Und das Problem was ich gerade habe frisst Zeit :/


Ich poste es noch mal, vielleicht hast du eine Idee ;)

Problem 1:
Bei den Pumpen, Kompressoren und Ventilatoren habe ich eine Koordinate "MotorBead" (MotorFlansch) festgelegt. Hieran soll ein Motor mit der Funktion "\motor{MotorBead}" "angeschlossen" werden.

Jetzt möchte ich die Pumpe (den Kompressor ...) drehen. Dabei dreht sich die Koordinate mit. Folglich soll der Motor sich mitdrehen.

Grafisch:
         o
         |
         |
         |
o---O    O    O---o
Dabei ist O die Pumpe und o der Motor.

Edit: Gelöst. Ich weiß nur nicht ob es nicht schlampig ist. Ich habe der Pumpe einfach eine Hilfskoordinate mitgegeben, die dreht sich logischerweise fröhlich mit ...
	%------------------------------------------------
	%		Pumps
	%------------------------------------------------
	%			\pump{type}{insertion point}{number}[rotation][motor]
	%	
		\newcommandx{\pump}[5][4=0,5=0]
		{
			\ifthenelse{\equal{#1}{1}}{		% Pump general
				\begin{scope}[rotate around={#4:(#2)}]
					\draw [ultra thick] (#2) circle [radius=0.5];
					\draw [thick] ($(#2)-0.5*(1,0)$) -- ($(#2)+0.5*(0,1)$) -- ($(#2)+0.5*(1,0)$);
					\draw [thick] ($(#2)+0.5*(0,1)$) -- ($(#2)+0.7*(0,1)$);
					\draw [thick] ($(#2)-0.5*(0,1)$) -- ($(#2)-0.7*(0,1)$);
					
					\coordinate (PumpIn#3) at ($(#2)-0.7*(0,1)$);
					\coordinate (PumpOut#3) at ($(#2)+0.7*(0,1)$);
					\coordinate (PumpMotorBead#3) at ($(#2)-0.5*(1,0)$);

%NEW:
					\coordinate (Temp) at($(#2)-1.35*(1,0)$);
					
				\end{scope}
					\node [below] at ($(#2)+0.5*(1,-1)$) {P-$#3$};
			}
		}
Den Motor zeichne ich dann wie folgt
	\newcommandx{\motor}[1]
	{ % Motor
				\draw [ultra thick] (Temp) circle [radius=0.35];
				\draw [thick] (#1) -- ($(#1)!0.6!(Temp)$);
				\node at (Temp)  {M};
	}
Ergebnis:
Bild

Was noch nicht passt ist die Positionierung des Textes. P-4 passt. Der Rest muss so gedreht werden, das die Spitze des M jeweils zur Verbindungslinie Motor-Pumpe zeigt...



Problem 2:
Rohrleitungen sind einfache Linien. Hierfür gibt es aber auch eine Funktion "\pipe" da Rohre beheizt und/oder isoliert sein können. Eine Heizung ist dabei durch eine gestrichpunktete Linie, eine Isolierung durch eine Schraffur gekennzeichnet.
Das funktioniert soweit. Aber nur wenn das Rohr Horizontal verläuft. Verläuft es anders, passen die Koordinaten nicht mehr (wie oben).
Aber wie mach ich, das die Koordinaten immer die gleichen sind?
Code des Rohrs:
	%			\pipe{start}{end}[insulation][heated]
		\newcommandx{\pipe}[4][3=0,4=0]
		{
%			\draw [ultra thick] (#1) -- (#2);
			\draw [ultra thick] (#1) |- (#2);
			\ifthenelse{\equal{#4}{1}}{		% Heated
					\draw [thick,  dashdotted] ($(#1)-0.15*(0,1)$) -- ($(#2)-0.15*(0,1)$);
				}{}
			\ifthenelse{\equal{#3}{1}}{			% Insulation
				\draw [pattern = north east lines] ($(#1)+0.1*(1,0)-0.2*(0,1)$) rectangle ($(#2)-0.1*(1,0)+0.2*(0,1)$);
			}{}
		}
Edit: Ich hab den Rohrleitungen nun mit |- beigebracht um die Ecke zu gehen. Bleibt aber das Problem mit der gestrichpunkteten und dem Rechteck :D



Für Sachdienliche Hinweise bin ich wie immer dankbar :)

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2766
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

Hm, Dein Code sieht hier so aus, mit Symbol(en) drin - screenshot:

Bild

Da die flackernde Werbung, die mir früher nur auf den Keks ging, den Firefox-Browser zum Absturz bringt (flash-plugin m.E.), bin ich eher mit dem iPad kürzere Zeiten hier. Für schwierigere Probleme findest Du mich halt auf der TeXwelt. ;-)

Stefan

BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Beitrag von BlackDevil »

Dann werde ich mich wohl da mal anmelden ;) Aber nicht jetzt, heute Abend oder morgen..
	%------------------------------------------------
	%		Pipe
	%------------------------------------------------
	%			\pipe{start}{end}[insulation][heated]
	%		
\def\pgfdecoratedcontourdistance{0pt}

\pgfkeys{/pgf/decoration/contour distance/.code={%
    \pgfmathparse{#1}%
    \let\pgfdecoratedcontourdistance=\pgfmathresult}%
}

\pgfdeclaredecoration{contour lineto}{start}
{
    \state{start}[next state=draw, width=0pt]{
        \pgfpathmoveto{\pgfpoint{0pt}{\pgfdecoratedcontourdistance}}%
    }
    \state{draw}[next state=draw, width=\pgfdecoratedinputsegmentlength]{       
        \pgfmathparse{-\pgfdecoratedcontourdistance*cot(-\pgfdecoratedangletonextinputsegment/2+90)}%
        \let\shorten=\pgfmathresult%
        \pgfpathlineto{\pgfpoint{\pgfdecoratedinputsegmentlength+\shorten}{\pgfdecoratedcontourdistance}}%  
    }
    \state{final}{
        \pgfpathlineto{\pgfpoint{\pgfdecoratedinputsegmentlength}{\pgfdecoratedcontourdistance}}%
    }   
}
		\newdimen\HelpVarA
		\newdimen\HelpVarB
		\newdimen\HelpVarC
		\newdimen\HelpVarD
		\newcommand*{\ExtractCoordinate}[3]{\path (#1); \pgfgetlastxy{#2}{#3};}%
		\newcommandx{\pipe}[4][3=0,4=0]
		{
%			\draw [ultra thick] (#1) -- (#2);
			\draw [ultra thick] (#1) |- (#2);
			\ifthenelse{\equal{#4}{1}}{		% Heated
%					\draw [thick,  dashdotted] ($(#1)-0.15*(0,1)$) |- ($(#2)-0.15*(0,1)$);
					\draw [thick, postaction={decoration={contour lineto, contour distance=-0.1cm},draw=black, dashdotted, decorate}] (#1) |- (#2);
			}{}
			\ifthenelse{\equal{#3}{1}}{			% Isolation
%				\draw [pattern = north east lines] ($(#1)+0.1*(1,0)-0.2*(0,1)$) rectangle ($(#2)-0.1*(1,0)+0.2*(0,1)$);
%				\draw [pattern = north east lines] let 	\p1=(#1),
%														\p2=(#2) in
%													($(\x1,\y1)+0.1*(1,0)-0.2*(0,1)$) rectangle ($(\x1,\y2)-0.1*(1,0)+0.2*(0,1)$);
%				\draw [pattern = north east lines] let 	\p1=(#1),
%														\p2=(#2) in
%													($(\x1,\y2)+0.1*(1,0)-0.2*(0,1)$) rectangle ($(\x2,\y2)-0.1*(1,0)+0.2*(0,1)$);

				\ExtractCoordinate{#1}{\HelpVarA}{\HelpVarB};
				\ExtractCoordinate{#2}{\HelpVarC}{\HelpVarD};
				
				\ifthenelse{\equal{\HelpVarB}{\HelpVarD}}
				{
						\draw [pattern = north east lines] let 	\p1=(#1),
																\p2=(#2) in
																($(\x1,\y2)+0.2*(1,0)-0.2*(0,1)$) rectangle ($(\x2,\y2)-0.2*(1,0)+0.2*(0,1)$);	
				}
				{
					\ifthenelse{\equal{\HelpVarA}{\HelpVarC}}
					{
					\draw [pattern = north east lines] let 	\p1=(#1),
																\p2=(#2) in
																($(\x1,\y1)-0.2*(1,0)+0.2*(0,1)$) rectangle ($(\x2,\y2)+0.2*(1,0)-0.2*(0,1)$);		
					}
					{
						\draw [pattern = north east lines] let 	\p1=(#1),
																\p2=(#2) in
															($(\x1,\y2)+0.1*(1,0)-0.2*(0,1)$) rectangle ($(\x2,\y2)-0.1*(1,0)-0.2*(0,1)$);
					
						\draw [pattern = north east lines] let 	\p1=(#1),
																\p2=(#2) in
															($(\x1,\y1)!0.2cm!(\x1,\y2)!-0.2cm!(\x2,\y1)$) rectangle ($(\x1,\y2)!0.2cm!(\x2,\y2)!0.2cm!(\x1,\y1)$);
						\draw [pattern = north east lines] let 	\p1=(#1),
																\p2=(#2) in
															($(\x1,\y2)+0.2*(1,0)-0.2*(0,1)$) rectangle ($(\x2,\y2)-0.2*(1,0)+0.2*(0,1)$);
					}
				}
			}{}
		}
		
Rohre gehen nun auch. Hab mir mit Google ein recht ... ansehnliches Konstrukt zusammen geschustert ^^[/code]

Antworten