Path и его особенности

Разбираю документацию TIKZ и некоторые свои добавления по PATH

Вступление с моими открытиями

\begin{tikzpicture}
\begin{scope}%делаю специальнуюзону видимости для CLIP
\fill[black!20](-6,0) circle (1.6);%немного фона вокруг кружка
\clip (-6,0) circle (1.5cm);%клипаю будущий рисунок
\node (p) at (-6,0) {\includegraphics[width=3.5cm]{lamp}%вставляю рисунок
\rule{15pt}{0pt}};%так я придумал делать отступ от рисунка невидимой rule
\end{scope}

\gridnum %это просто разметка координат в моем нехитром исполнении, покажу позже

\node[text width=12cm,anchor=north west] at (p.north east) {Для проведения теста, подайте рабочее напряжение на вход ...};%это собственно текстовый блок, который выровнялся по правому верхнему углу рисунка и левому верхнему углу текста 
%anchor=north west] at (p.north east) - это магия 
\end{tikzpicture} 

clip

Grid

Grid сделал, чтобы удобно было рисовать и не разу не пожалел.

Кидаешь рисунок в координату и дальше расставляешь свои фичи.

%%%%%%%%%%%%%%%%%%%%%%%%% GRID 
\def\gridnum {
\draw[help lines] (-8,-8) grid +(16,16);
\node foreach \x in {-8,-7,...,8} at (\x,8.5) {\x};
\node foreach \y in {-8,-7,...,8} at (8.5,\y) {\y};
\node foreach \x in {-8,-7,...,8} at (\x,-8.5) {\x};
\node foreach \y in {-8,-7,...,8} at (-8.5,\y) {\y};
\draw[red] (0,-8.5) -- (0,8.5);
\draw[red] (-8.5,0) -- (8.5,0);
}

Кружки со стрелками

\tikzset{
num/.style={draw,shape=circle,fill=black,text=white,minimum size=2em,font=\bf,general shadow={fill=gray,shadow scale=1.1}},%определяет стиль кружка для отметки на рисунках
numtext/.style={draw,shape=circle,fill=black!85,text=white,minimum size=1em,font=\bf,general shadow={fill=gray,shadow scale=1.1}},%определяет стиль кружка для отметки в тексте
arrow num/.style={line width=.1em, gray,arrows = {-Stealth[line width=0.3pt, fill=gray, length=10pt,open,fill=gray,white,quick]}},%определяет стиль стрелки для отметки на рисунках
}

А это сами кружки

\def\numar#1#2#3{
\node [num] (l#1) at (#2) {#1};
\coordinate (t#1) at (#3);
\draw[line width=.15em, white] (l#1) -- ($(l#1)!.95!(t#1)$);
\draw[arrow num] (l#1) -- (t#1);
%рисует черный кружок с цифрой #1 кружок в координате #2, а стрелочку в координату #3
}

А это результат все вместе:

\begin{tikzpicture}
\begin{scope}%это клипнутый рисунок
\fill[black!20](-6,0) circle (1.6);
\clip (-6,0) circle (1.5cm);
\node (p) at (-6,0) {\includegraphics[width=3.5cm]{lamp}\rule{15pt}{0pt}};     
\end{scope}

\gridnum % это мой грид
 \numar{2}{0,-4}{-2.2,-1.8};%это кружок с 2 и со стрелкой
 \numar{2}{0,-4}{2.2,-1.8};%из двойки вторая стрелка
\node at (-4,0){\num{1}};%это кружок без стрелки
\node at ( 4,0){\num{1}};


\end{tikzpicture} 

grid

Path

Мощная примудрость, позволит на многое открыть глаза в TIKZ

\begin{tikzpicture}
\gridnum

\begin{scope}[scale=2] %сделал, чтобы видно лучше было
\draw[thick,red] 
(0,0) coordinate (a) %назначаем координате имя (a)
-- coordinate (ab) %а это пока рисуем от (a) к (b) запоминаем середину и называем ее (ab)
(1,.5) coordinate (b) %назначаем координате имя (b)
  .. coordinate (bc) controls +(up:1.5cm) and +(left:0cm) .. %а это пока рисуем от (b) к (c) запоминаем середину и называем ее (bc)
%но считает серидину сложно с учетом контрольных точек
(3,1) coordinate (c) %назначаем координате имя (c)
(0,1) -- (2,1) -- %просто рисуем замкнутый треугольник и 
coordinate (x) (1,2) -- cycle;%x - будет точно серединой между двух вершин

\draw (a) node[below] {start part 1} %ничего интересного, просто подписать точки
(ab) node[below right] {straight segment} 
(b) node[right] {end first segment} 
(c) node[right] {end part 1} 
(x) node[above right] {part 2 (closed)};

\fill[red](a) circle (1pt); %а это просто эти точки разукрасить
\fill[blue](b) circle (1pt);
\fill[green](ab) circle (1pt);
\fill[yellow](bc) circle (1pt);
\fill[magenta](c) circle (1pt);
\fill[orange](x) circle (1pt);
\end{scope}
\end{tikzpicture} 

coordinate

[rounded corners] [sharp corners]

круглые и угловатые соединения линий rounded corners=4pt — по умолчанию, или можно поменять

\tikz \draw (0,0) -- (1,1) [rounded corners] -- (2,0) -- (3,1) [sharp corners] -- (3,0) -- (2,1);

это группировка scope для назначения стиля

\tikz \draw (0,0) -- (1,1) {[rounded corners] -- (2,0) -- (3,1)} -- (3,0) -- (2,1);

name=

задает имя пути, полезно при пересечениях

every path

задает стиль всем значениям path

\begin{tikzpicture}

[fill=yellow!80!black, % only sets the color 
every path/.style={draw}] % all paths are drawn 
\fill (0,0) rectangle +(1,1); %все будут с конуром
\shade (2,0) rectangle +(1,1);%и градиент тоже
\end{tikzpicture} 

path2

insert path

по пути основного пути вставит любой другой путь))))

\tikz [c/.style={insert path={circle[radius=2pt]}}] \draw (0,0) -- (1,1) [c] -- (3,2) [c];

append after command=

и его брат prefix after command=〈path〉

\tikz \draw node [append after command={(foo)--(1,1) (foo)--(2,1) (foo)--(3,1)},draw] (foo){foo};

Т.е. пока рисую draw, включаю node и обвожу ее [draw], а в параметрах command задаю лучики, сколько угодно.

luch

cycle & current subpath start

cycle — замыкает контур

current subpath start — возвращается в исходную координату, но контур не замыкает

\useasboundingbox (0,2.5); % увеличивает отступ в картинке

– |- -| .. controls ..

тип линии которую нужно провести

-- — прямая

|- — вертикально, потом горизонтально или cycle

.. controls .. — контрольная точка 1 или 2

circle

begin{tikzpicture} 
\draw (1,0) circle [radius=1.5]; 
\fill (1,0) circle [x radius=1cm, y radius=5mm, rotate=30]; 
\end{tikzpicture}

ellipse

\begin{tikzpicture} 
\draw [help lines] (0,0) grid (3,2); 
\draw (1,1) ellipse [x radius=1cm,y radius=.5cm]; 
\end{tikzpicture}

arc

/tikz/start angle=〈degrees〉 
/tikz/end angle=〈degrees〉 
/tikz/delta angle=〈degrees〉

grid

\tikz[rotate=30] \draw[step=1mm] (0,0) grid (2,2);

/tikz/step=〈number or dimension or coordinate〉

/tikz/xstep=〈dimension or number〉

/tikz/ystep=〈dimension or number〉

/tikz/help lines

parabola

\path ... parabola[〈options〉]bend〈bend coordinate〉〈coordinate or cycle〉 ...;

/tikz/bend=〈coordinate〉
/tikz/bend pos=〈fraction〉
/tikz/parabola height=〈dimension〉
/tikz/bend at start
/tikz/bend at end

sin & cos

\path ... sin〈coordinate or cycle〉 ...;

svg

\path ... svg[〈options〉]{〈path data〉} ...;

\usetikzlibrary {svg.path}  
\begin{tikzpicture} 
\filldraw [fill=red!20] (0,1) svg[scale=2] {h 10 v 10 h -10} node [above left] {upper left} -- cycle;  
\draw svg {M 0 0 L 20 20 h 10 a 10 10 0 0 0 -20 0}; 
\end{tikzpicture}

И кульминация!!!

\usetikzlibrary {svg.path}  
\begin{tikzpicture} 
\draw[fill=red] svg[rotate=180,scale=1pt] {m 0,0 c -7.1455,-3.0005 -14.1485,-6.184 -6.261,-17.3275 l 0.7006,-8.7994 -2.2838,-2.151 c 6.7935,-23.5259 19.2799,-46.8506 29.895,-65.918 11.1032,-15.0145 24.2647,-28.7189 28.7623,-47.9367 l 11.9841,-34.99407 c -0.1546,-13.35578 -2.0371,-27.40362 3.835,-38.34918 l 6.2318,-9.82699 c 1.5939,-28.91141 13.1608,-53.72504 12.7031,-82.211751 11.2272,-29.04903 17.5024,-22.60743 25.1668,-26.1256 4.524,-1.40654 8.693,-3.38055 10.0668,-9.827 l 4.554,2.1571 c -3.5888,-15.13669 -2.1459,-27.75767 1.9176,-39.06851 1.3477,-6.40097 7.8536,-8.21675 14.8602,-9.58722 8.592,-2.16346 14.2134,1.61359 20.3733,4.31421 3.564,5.54462 6.8227,11.17624 5.9921,17.97645 -0.088,2.44508 -1.4805,0.80239 -1.7797,2.90917 -0.6305,4.43879 2.7321,11.60579 -0.8615,12.55824 -4.4315,1.17434 -0.8057,12.46002 -5.2394,13.07901 -11.4427,1.59752 -8.2461,7.35191 -11.8607,9.9434 -2.2929,3.4139 -3.7804,7.09455 0.088,11.12472 7.8121,8.29041 7.5135,18.05557 8.6284,27.563671 5.5774,16.1437 10.1453,32.62388 26.8446,45.06055 8.8021,6.70563 14.713,14.56771 20.3734,22.53013 l 11.0253,11.26537 c 9.1625,0.81664 11.8325,3.66246 10.7858,7.6699 5.2654,7.69444 0.9194,8.78118 -3.835,9.58721 l -19.4145,0.23948 c -6.3528,-2.57118 -8.2777,-6.80263 -9.5872,-11.26507 -4.7804,-8.04729 -11.2793,-15.52136 -19.8938,-22.29065 -18.0192,-7.5638 -23.762,-19.73159 -32.1176,-30.91936 l -1.6779,37.15119 c 1.1413,7.46498 1.8943,15.70567 2.3969,24.44775 6.3573,7.86785 13.5455,15.45832 14.381,25.16679 l 14.6207,50.57336 c 5.1154,14.4625 1.2032,22.1542 -0.9588,31.1588 l -16.0588,44.3416 c -4.5409,19.7879 5.1463,25.3556 -1.6827,26.5005 1.2122,4.1548 5.7941,11.5294 10.791,15.6839 l 16.538,5.5128 c 5.8814,5.4882 4.5425,8.71988 0.2395,11.02528 -10.2823,0.03 -20.4991,0.7699 -31.3983,-5.99208 -24.5966,2.299 -20.5907,-1.8606 -27.3242,-3.5952 -6.3237,-9.1034 0.046,-19.8628 2.075,-24.194 l -6.8033,2.9522 c 2.2535,-29.9275 11.2296,-63.866 17.911,-84.9381 l 4.0747,-4.3145 c -2.5708,-2.0158 -5.4922,-2.5127 -6.2318,-12.4634 -4.9405,-15.5883 -14.1539,-28.3278 -22.7699,-41.4653 -16.0976,16.02 -27.5888,36.6464 -36.6716,59.6813 -3.0305,7.3616 -8.3362,10.1725 -13.1827,13.9017 -11.4324,16.4468 -20.5631,46.1767 -29.4813,66.3954 l -3.5952,-1.2016 c -2.918,8.9664 1.9352,10.8095 6.4716,12.9432 l 8.6284,4.7935 c 5.8839,5.6301 4.5728,8.9879 -1.6778,10.7858 -9.743,4.25658 -18.0911,2.2347 -26.6049,0.9588 -3.7097,-3.4521 -7.4534,-6.8618 -13.6619,-7.1907 z}; 
\end{tikzpicture}

man

plot

  1. –plot[〈local options〉]coordinates{〈coordinate 1〉〈coordinate 2〉…〈coordinate n〉}
  2. –plot[〈local options〉]file{〈filename〉} 342
  3. –plot[〈local options〉]〈coordinate expression〉
  4. –plot[〈local options〉]function{〈gnuplot formula〉}

строит график по координатам

\tikz \draw plot coordinates {(0,0) (1,1) (2,0) (3,1) (2,1) (10:2cm)};

to path

(a) to (b) примерно тоже, что (a) – (b), но есть нюансы.

После to я могу передать дополнительные настройки для этого участка пути:

(a) to [out=135,in=45] (b) выйдет из точки (a) под углом 135, а войдет под 45.

или еще 3 замечательных макроса: \tikztostart, \tikztotarget, и \tikztonodes — запоминают координаты без зацикливания пути: т.е. в режиме current subpath start

\begin{tikzpicture}[to path={
    .. controls +(1,0) and +(1,0) .. (\tikztotarget) \tikztonodes}]

  \node (a) at (0,0) {a};
  \node (b) at (2,1) {b};
  \node (c) at (1,2) {c};

  \draw (a) to node {x} (b)
        (a) to          (c);
\end{tikzpicture}

Этот вариант я припас для вертикального написания шрифта


\begin{tikzpicture}
  \draw (0,0) to node [sloped,above] {x} (3,2);

  \draw (0,0) to[out=90,in=180] node [sloped,above] {x} (3,2);
\draw (0,0) to node[sloped,above] {0001000:000200} (0,5);
\end{tikzpicture}

vert

edge

EDGE умеет делать:

  • edge node={node [sloped,above] {x}} ноды
  • edge label=x ставит метки
  • edge label=x, edge label'=y ставит зеркальные метки

every to

Назначаем стили для всех to

\tikz[every to/.style={bend left}] \draw (0,0) to (3,2); назначает стиль для to

execute at begin to=⟨code⟩ (no default)

и ее брат execute at end to=⟨code⟩ выполняют код до и после начала рисования

FOREACH

Для него посвящу отдельную статью но в кратце:

\tikz \draw (0,0) foreach \x in {1,...,3} { -- (\x,1) -- (\x,0) }; Это цикл по списку.

LET IN

Сначала не хотел разбираться, но потом стало так интересно, а выяснилось, что еще и полезно.

\path … let⟨assignment⟩ ,⟨assignment⟩,⟨assignment⟩… in …;

В let … in можем использовать переменные

  • \n1 или \n5 — суть номер регистра, где можно вычислить что нибудь и потом в разделе IN подставить
  • \p1,\x1,\y1 — работает с координатами и тоже запоминает в своих регистрах
  • \p{name} — тоже, что и \p1,\p3 … только под любым именем.
\usetikzlibrary {calc}
\begin{tikzpicture}
 \draw [help lines] (0,0) grid (3,2);

 \draw let \p{foo} = (1,1), \p2 = (2,0) in
         (0,0) -- (\p2) -- (\p{foo});
\end{tikzpicture}

xshift yshift

оказалась полезная штука для смещения SCOPE и рисовать все в координатах с (0,0)

\pgfextra{⟨code⟩}

сначала хотел выбросить, но появилось время, почитал и тоже понравилось

\newdimen\mydim %назначаем переменную для измерения
\begin{tikzpicture}
  \mydim=1cm% присваиваем первое значение
  \draw (0pt,\mydim) \pgfextra{\mydim=2cm} -- (0pt,\mydim); изменяем значение и получаем новый результат
\end{tikzpicture}

я думаю использовать при настройке типовых рисунков для передачи им параметров

SOFT USE PATH

это такие ячейки памяти с сохранеными PATH, которые потом можно применять безограничений

\usetikzlibrary {intersections}
\begin{tikzpicture}
  \path[save path=\pathA,name path=A] (0,1) to [bend left] (1,0);%запоминаю путь pathA
  \path[save path=\pathB,name path=B]%запоминаю путь pathB
    (0,0) .. controls (.33,.1) and (.66,.9) .. (1,1);

  \fill[name intersections={of=A and B}] (intersection-1) circle (1pt);%нахожу пересечения пути (причем пути даже не наприсовал)

  \draw[blue][use path=\pathA];%а теперь достаю путь и рисую
  \draw[red] [use path=\pathB];
\end{tikzpicture}

действия с path

Это наверно аксиомы с которыми работает path

\draw — аналогично \path[draw]. рисует

\fill — аналогично \path[fill]. заполняет цветом

\filldraw — \path[fill,draw]. рисует и заполняет

\pattern — \path[pattern]. заполняет маленькими path из библиотеки pattern

\shade — \path[shade]. градиент

\shadedraw — \path[shade,draw]. рисует и заполняет градиентом

\clip — \path[clip]. клипит

\useasboundingbox — \path[use as bounding box] связывает до и после

опции

  • color= — покрасит в цветом
  • line width= — толщина линии
  • line cap= — round, rect, butt — завершение линии
  • line join= — тип соединения линии round, bevel, miter
  • miter limit= — определяет остроту угла соединения
  • dash pattern — чередуются on 2pt off 3pt on 4pt off 4pt и получаем свой пунктир
  • dash phase= — первоначальный сдвиг паттерна
  • dash= — совмещает pattern и phase \draw [dash=on 20pt off 10pt phase 10pt]
  • dash expand off растягивает на сколько может dash, т.е. линия будет нужной длины и без разрывов
\usetikzlibrary {decorations}
\begin{tikzpicture}[|-|, dash pattern=on 4pt off 2pt]
  \draw [dash expand off] (0pt,30pt) -- (26pt,30pt);
  \draw [dash expand off] (0pt,20pt) -- (24pt,20pt);
  \draw [dash expand off] (0pt,10pt) -- (22pt,10pt);
  \draw [dash expand off] (0pt, 0pt) -- (20pt, 0pt);
\begin{scope}[xshift=2cm]
  \draw  (0pt,30pt) -- (26pt,30pt);
  \draw  (0pt,20pt) -- (24pt,20pt);
  \draw  (0pt,10pt) -- (22pt,10pt);
  \draw  (0pt, 0pt) -- (20pt, 0pt);
\end{scope}
\end{tikzpicture}

dash

  • solid — сплошная прямая
  • dotted
  • densely dotted
  • loosely dotted
  • dashed
  • densely dashed
  • loosely dashed
  • dash dot
  • densely dash dot
  • loosely dash dot
  • dash dot dot
  • densely dash dot dot
  • loosely dash dot dot

draw opacity

работает для всего и draw и fill и svg

double

  • double=<color> — нарисует двойную линию и закрасит цветом
  • double distance=⟨dimension⟩ — расстояние между линиями
  • double distance between line centers=⟨dimension⟩ — расстояние между центрами линий
  • double equal sign distance — удвоит расстояние знака
\Huge $==>\implies$\tikz[baseline,double equal sign distance]
                   \draw[double,thick,-{Implies[]}](0,0.55ex) --++(3ex,0);

double

рисуем стрелу

\usetikzlibrary {arrows.meta,bending} — это нам пригодится

\usetikzlibrary {arrows.meta,bending}
\tikz \draw[tips, -{Latex[open,length=10pt,bend]}] (0,0) to[bend left] (1,0);

arrow

pattern

\usetikzlibrary {patterns}
\begin{tikzpicture}
  \draw[pattern=dots] (0,0) circle (1cm);
  \draw[pattern=fivepointed stars] (0,0) rectangle (3,1);
\end{tikzpicture}

star

в библиотеке их много и лучше смотреть библиотеку https://tikz.dev/library-patterns#section-library-patterns

  • pattern color — покрасит в нужный цвет

nonzero rule

исключит из пересечения фигур

\begin{tikzpicture}
  \filldraw[fill=yellow!80!black]
  % Clockwise rectangle
  (0,0) -- (0,1) -- (1,1) -- (1,0) -- cycle
  % Counter-clockwise rectangle
  (0.25,0.25) -- (0.75,0.25) -- (0.75,0.75) -- (0.25,0.75) -- cycle;

  \draw[->] (0,1) -- (.4,1);
  \draw[->] (0.75,0.75) -- (0.3,.75);

  \draw[->] (0.5,0.5) -- +(0,1) node[above] {crossings: $-1+1 = 0$};

  \begin{scope}[yshift=-3cm]
    \filldraw[fill=yellow!80!black]
    % Clockwise rectangle
    (0,0) -- (0,1) -- (1,1) -- (1,0) -- cycle
    % Clockwise rectangle
    (0.25,0.25) -- (0.25,0.75) -- (0.75,0.75) -- (0.75,0.25) -- cycle;

    \draw[->] (0,1) -- (.4,1);
    \draw[->] (0.25,0.75) -- (0.4,.75);

    \draw[->] (0.5,0.5) -- +(0,1) node[above] {crossings: $1+1 = 2$};
  \end{scope}
\end{tikzpicture}

cross

сразу не понял, но если внутри рисунок против шерсти,то вырезает пустоту. Смотрим на стрелочки внутреннего квадрата.

even odd rule

просто вырежет внутренний паттерн

pattern picture

Идея данной функции, добавить внутрь объекта другой объект, ограниченный первым.

причем родительский объект будет иметь имя box с метками по сторонам света.

\begin{tikzpicture}
  \draw [help lines] (0,0) grid (3,2);
  \filldraw [fill=blue!10,draw=blue,thick] (1.5,1) circle (1)% нарисую круг
    [path picture={
      \node at (path picture bounding box.center) {%вставлю в круг надпись в центр круга
        This is a long text.
      };}
    ];
\end{tikzpicture}

также path picture может быть \draw, \fill, \node, \pattern

Shade

Градиент

у него есть настройки

\tikz \shadedraw [shading=axis] (0,0) rectangle (1,1);
\tikz \shadedraw [shading=radial] (0,0) rectangle (1,1);
\tikz \shadedraw [shading=ball,ball color=red] (0,0) circle (.5cm);
\tikz \shadedraw [shading=ball,ball color=blue] (0,0) circle (.5cm);
\tikz \shadedraw [shading=ball,ball color=green] (0,0) circle (.5cm);

ball

bilinear interpolation

это красивые градиентные заливки объектов по 4-м углам

\usepgflibrary {shadings}
\tikz
  \shade[upper left=red,upper right=green,
         lower left=blue,lower right=yellow]
    (0,0) rectangle (3,2);
\tikz \shade[shading=color wheel] (0,0) circle (1.5);

\tikz \shade[shading=color wheel] [even odd rule]
  (0,0) circle (1.5)
  (0,0) circle (1);
  • color wheel
  • color wheel black center
  • color wheel white center
  • inner color= % радиальная заливка
  • outer color= %радиальная заливка

color

use as bounding box

графически привязывает блоки слева и справа Наверно будет удобно для создания различных перекрестных указателей или еще чего-нибудь, где важно, чтобы блоки склеились в единое целое

У них есть подпараметры:

  • trim left=⟨dimension or coordinate or default⟩
  • trim right=⟨dimension or coordinate or default⟩
  • trim lowlevel=true|false

right

clip

вырезает все на скорую руку

лучше использовать внутри рисунков с применением группировки scope

\begin{tikzpicture}
  \draw (0,0) -- ( 0:1cm);
  \draw (0,0) -- (10:1cm);
  \draw (0,0) -- (20:1cm);
  \draw (0,0) -- (30:1cm);
  \begin{scope}[fill=red]
    \fill[clip] (0.2,0.2) rectangle (0.5,0.5);

    \draw (0,0) -- (40:1cm);
    \draw (0,0) -- (50:1cm);
    \draw (0,0) -- (60:1cm);
  \end{scope}
  \draw (0,0) -- (70:1cm);
  \draw (0,0) -- (80:1cm);
  \draw (0,0) -- (90:1cm);
\end{tikzpicture}

clip

preaction

Я раньше использовал подобное для рисование стрелок с подложкой белого фона.

Оказалось, что все уже придумано до нас))

\begin{tikzpicture}
  \draw[help lines] (0,0) grid (3,2);

  \draw
    [preaction={draw,line width=4mm,blue}]%нарисует по координатам draw прямоугольник с толщиной линии 4mm
    [line width=2mm,red] (0,0) rectangle (2,2);%нарисует сверху по этим же координатам линию 2mm
\end{tikzpicture}

preaction

удобно для выделения контраста и рисования теней

\begin{tikzpicture}
  \draw[help lines] (0,0) grid (3,2);
  \draw
    [preaction={fill=black,opacity=.5,
                transform canvas={xshift=1mm,yshift=-1mm}}]
    [fill=red] (0,0) rectangle (1,2)
               (1,2) circle (5mm);
\end{tikzpicture}

preaction

preaction — может быть несколько штук в одном объекте

postaction=⟨options⟩

Это друг preaction, только делает после того как нарисовал основной рисунок

decorations

\usetikzlibrary {decorations.pathmorphing,shadows}
\begin{tikzpicture}
  \node [circular drop shadow={shadow scale=1.05},minimum size=3.13cm,
         decorate, decoration=zigzag,
         fill=blue!20,draw,thick,circle] {Hello!};
\end{tikzpicture}

Целая библиотека различных декораций и линий для рисования объектов.

decorate