Hallo,

ich würde gerne für eine Abbildung eine Grafik eines Computers nutzen. Die Grafik würde ich gerne in TikZ erstellen, da ich so sehr einfach noch Pfeile bzw. Verbindungen zwischen Computern erstellen kann. Nun gibt es ja kein Shape, welches einen Computer darstellt, daher dachte ich mir ein eigenes Shape zu erstellen. Aussehen soll es in etwa so (Quelle: Torproject.org).

computer

Im Grunde kann ich ja das meiste von einem Rechteck "erben" (zumindest die Anchor). Allerdings habe ich noch nie ein eigenes Shape erstellt und mit dem pgf-Layer auch nicht viel gemacht.

Ich habe jetzt schon etwas rumgespielt und mich in der pgfmanual etwas eingelesen. Ein Rechteck mit den geerbten Anchors (north, south, east, west, north east, ...) habe ich hinbekommen. Der center anchor sitzt sogar fast perfekt für den Text (das grüne +). Aber ein paar fragen sind noch offen:

  1. Wie schaffe ich es, dass der Bildschirm immer schwarz ist, egal welche Farbe angegeben wird?
  2. Wie kann ich den Schatten hinzufügen?
  3. Wie gehe ich an sowas am besten ran?

Ich möchte bitte vorerst keine Lösung für das Problem, da ich gerne selbst etwas rumprobieren möchte. Aber für ein paar gute Tipps wäre ich sehr dankbar. Selbstverständlich würde ich meine Lösung dann auch hier posten.

gefragt 24 Feb '14, 21:37

funkytex's gravatar image

funkytex
177337
Akzeptiert-Rate: 0%

bearbeitet 26 Feb '14, 15:58

Sehr interessant! Wenn Du uns was zum Bearbeiten gibst, hätten wir was zum Basteln... Du könntest ja Deinen Entwurf hier posten, direkt in die Frage hinein editiert (nicht als Antwort - über "Bearbeiten" die Frage aktualisieren).

(24 Feb '14, 21:52) stefan ♦♦

@funkytex Tipps, wie TeXwelt funktioniert: Fragen nach allgemeinen Tipps sind ok, die spezifischen unterschiedlichen (Teil-)Probleme wären jedoch optimal in eigenen Fragen aufgehoben. Wir sortieren thematisch fürs Lösungsarchiv, und so werden Ergebnisse klarer und öfter nutzbar, auf unterschiedliche Anwendungsfälle. Also etwa als neue Frage(n): "Wie kann ich einem Shape einen Schatten hinzufügen?", "Wie kann ich eine Füllfarbe unveränderlich fest einstellen?", ... je mehr konkrete Fragen, desto besser. Sammelfragen sind kaum sortierbar und der Blick auf die Einzellösungen ist schwerer.

(24 Feb '14, 21:56) stefan ♦♦

Was möglich wäre: Eine der zahlreichen Vektorgraphiken (vgl. https://duckduckgo.com/?q=vector+graphics+computer) in Inkscape laden und dort in TikZ-Code umwandeln. Allerdings ist der dann üblicherweise alles andere als optimierter Code.

(24 Feb '14, 23:46) Speravir

Bitte entschuldigt, ich habe die Kommentare erst jetzt gesehen. Inzwischen habe ich eine Idee, wie ich es lösen könnte. Ich versuche morgen nachmittag weiter daran zu arbeiten, aber ich werde euch selbstverständlich auf dem laufenden halten.

(25 Feb '14, 02:19) funkytex

Hier ist ein Vorschlag für eine solche node, bei der Text auf dem Bildschirm eingefügt werden kann. Alternativ kann man aber auch mit pgf / TikZ 3.0 ein pic definieren.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\makeatletter
\pgfdeclareshape{computer}
{
\savedanchor\outernortheast{%
%
% Calculate width and height of screen (inner rectangle)
%
\pgf@xa=.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@xa by\pgf@xc%
\pgf@ya=.5\ht\pgfnodeparttextbox%
\advance\pgf@ya by.5\dp\pgfnodeparttextbox%
\pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@ya by\pgf@yc%
%
% Calculate width and height of screen (outer rectangle)
%
\pgf@x=1.17\pgf@xa%
\pgf@y=1.17\pgf@ya%
%
% Check against minimum height/width
%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
\pgf@xb=.5\pgf@xb%
\ifdim\pgf@x<\pgf@xb%
% yes, too small. Enlarge...
\pgf@x=\pgf@xb%
\fi%
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
\pgf@yb=.3125\pgf@yb%
\ifdim\pgf@y<\pgf@yb%
% yes, too small. Enlarge...
\pgf@y=\pgf@yb%
\fi%
%
% Add outer border
%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

Permanenter link

beantwortet 27 Feb '14, 16:45

esdd's gravatar image

esdd
17.8k304257
Akzeptiert-Rate: 62%

bearbeitet 01 Mär '14, 19:09

Vielen Dank. Ich hatte es auch schon bemerkt, allerdings keine Zeit das Problem zu lösen. Bei der Lösung ist aber auch noch einiges dabei, was ich mir nochmal genauer ansehen muss. Aber jetzt komme ich meinem Ziel schon mal einen großen Schritt näher :)

(27 Feb '14, 19:14) funkytex

Ich habe jetzt etwas rumgespielt und habe folgendes erstellt:

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{tikz}
\makeatletter
\pgfdeclareshape{computer}{%
% inherit anchors
\inheritsavedanchors[from=rectangle]
\inheritanchorborder[from=rectangle]
\inheritanchor[from=rectangle]{center}
\inheritanchor[from=rectangle]{north}
\inheritanchor[from=rectangle]{south}
\inheritanchor[from=rectangle]{west}
\inheritanchor[from=rectangle]{east}
\backgroundpath{
%%% DRAW OUTLINE OF SHAPE %%%
% store lower left in xa/ya and upper right in xb/yb
\southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
\northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
% move to point xb/yb (north east)
\pgfpathmoveto{\pgfpoint{\pgf@xb}{\pgf@yb}}
% draw a line between upper right (xb,yb) and upper left (xa,yb)
\pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
\pgfpathlineto{\pgfpoint{\pgf@xa}{.2\pgf@ya}}
\pgfpathlineto{\pgfpoint{.3\pgf@xa}{.2\pgf@ya}}
\pgfpathlineto{\pgfpoint{.3\pgf@xa}{.5\pgf@ya}}
\pgfpathlineto{\pgfpoint{\pgf@xa}{.5\pgf@ya}}
\pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@ya}}
\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
\pgfpathlineto{\pgfpoint{\pgf@xb}{.5\pgf@ya}}
\pgfpathlineto{\pgfpoint{.3\pgf@xb}{.5\pgf@ya}}
\pgfpathlineto{\pgfpoint{.3\pgf@xb}{.2\pgf@ya}}
\pgfpathlineto{\pgfpoint{\pgf@xb}{.2\pgf@ya}}
\pgfpathclose
%%% DRAW SCREEN %%%
\color{black}
\pgfpathmoveto{\pgfpoint{.85\pgf@xb}{.85\pgf@yb}}
\pgfpathlineto{\pgfpoint{.85\pgf@xa}{.85\pgf@yb}}
\pgfpathlineto{\pgfpoint{.85\pgf@xa}{.05\pgf@ya}}
\pgfpathlineto{\pgfpoint{.85\pgf@xb}{.05\pgf@ya}}
\pgfpathclose
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Das Ergebnis sieht wie folgt aus:

Shape in Tikz

Permanenter link

beantwortet 26 Feb '14, 16:12

funkytex's gravatar image

funkytex
177337
Akzeptiert-Rate: 0%

bearbeitet 26 Feb '14, 17:32

Speravir's gravatar image

Speravir
497139

@speravir Danke, da hab ich nicht richtig hingesehen.

(26 Feb '14, 18:23) funkytex

Die computer Node verzerrt es leider, sobald man ihr einen Nodetext verpasst:

Open in writeLaTeX

\node[shape example, computer, name=s] at (0,0) {ein Text zum Testen};
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ergebnis

(27 Feb '14, 15:57) esdd

Da pgf / TikZ 3.0 jetzt auf CTAN und auch bei TeXlive 2013 ist, kann man statt einer node auch ein pic dafür definieren:

alt text

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[tikz,margin=5mm]{standalone}
\usetikzlibrary{fit}
\usepackage[ngerman]{babel}
\tikzset{
comp/.style={
thick,
minimum width=8cm,minimum height=4.5cm,text width=8cm,inner sep=0pt,
text=green,align=center,font=\Huge,
transform shape
},
monitor/.style={draw=none,xscale=18/16,yscale=11/9},
display/.style={shading=axis,left color=black!60, right color=black},
ut/.style={fill=gray}
}
\tikzset{
computer/.pic={
% Monitor (mit Rand)
\node(-m)[comp,pic actions,monitor]{\phantom{\parbox{\linewidth}{\tikzpictext}}};
% Display (ohne Rand)
\node[comp,pic actions,display]{\tikzpictext};
\begin{scope}[x=(-m.east),y=(-m.north)]
% Füllen des Unterteils
\path[pic actions,draw=none]
([yshift=2\pgflinewidth]-0.1,-1)--(-0.1,-1.3)--(-1,-1.3)--
(-1,-2.4)--(1,-2.4)--(1,-1.3)--(0.1,-1.3)--([yshift=2\pgflinewidth]0.1,-1);
% Färben des Randes des Unterteils
\path[ut]
(-1,-2.4)rectangle(1,-1.3)
(-0.9,-1.4)--(-0.7,-2.3)--(0.7,-2.3)--(0.9,-1.4)--cycle;
% Zeichnen der Umrandung des gesamten Computers
\path[pic actions,fill=none]
(-1,1)--(-1,-1)--(-0.1,-1)--(-0.1,-1.3)--(-1,-1.3)--
(-1,-2.4)coordinate(sw)coordinate[pos=0.5](-b west)--
(1,-2.4)--(1,-1.3)coordinate[pos=0.5](-b east)--
(0.1,-1.3)--(0.1,-1)--(1,-1)--(1,1)--cycle;
% Node um gesamten Computer
\node(-c)[fit=(sw)(-m.north east),inner sep=0pt]{};
\end{scope}
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 01 Mär '14, 18:21

esdd's gravatar image

esdd
17.8k304257
Akzeptiert-Rate: 62%

bearbeitet 01 Mär '14, 20:05

Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×731
×27

gestellte Frage: 24 Feb '14, 21:37

Frage wurde gesehen: 18,108 Mal

zuletzt geändert: 01 Mär '14, 20:05