Makrodefinicja: shapes(unroundedshapes) | frontshapes(unroundedfrontshapes)
Makrodefinicje pomocnicze: face(unroundedface)
Kształtem jest polecenie LateX'a tworzące rysunek. Wypróbowałem następujące polecenia:
\pik (= \ensuremath {\spadesuit} \kier (= \ensuremath {\heartsuit} … \pgfimage {«nazwa_pliku»}
Dopuszczalne są na pewno pliki w formacie PNG i JPG, niedopuszczalne są formaty GIF i PS.
Plik graficzny musi się znajdować w katalogu z plikiem TEX. Nie trzeba wpisywać rozszerzenia. Jeśli w katalogu bieżącym są pliki Man.png i Man.jpg (lub Man.lpeg), to polecenie
\pgfimage {Man}Do rysowania ścian kostki (równoległoboków z kształtami) wykorzystywane są przekształcenia afiniczne. W pakiecie TikZ przekształcenie afiniczne definiuje się tak:
\pgftransformcm {a} {c} {b} {d} {\pgfpoint {e} {f}}
Powyższe przekształcenie zapisane zapisane tradycyjnie wygląda tak: $A(x;\,y)=(ax+by+e;\,cx+dy+f)$, w szczególności $A(1;\,0)=(a;\,c)+(e;\,f),\,\,A(0;\,1)=(b;\,d)+(e'\,f)$.
\pgfpoint wymaga podania jednostek.Przykład:
\pgfpoint {2cm} {1cm}Po zdefiniowaniu przekształcenia afinicznego $A$, polecenia
\draw figura; \fill figura;
Po definicjach
\pgftransformcm {a} {c} {b} {d} {\pgfpoint {e} {f}} %przekszatłcenie A … \pgftransformcm {g} {h} {i} {j} {\pgfpoint {k} {l}} %przekszatłcenie B
TikZ korzysta ze złożenia $A\cdot B$. Na ogół jest to niepożądane, warto każde polecenie
pgfrtansformcm poprzedzić poleceniem pgftransformreset.
Definicje przekształceń afinicznych są „lokalne” – przekształcenie zdefiniowane w otoczeniu tikzpicture nie jest stosowane w kolejnych otoczeniach
tikzpicture.
Prostopadłościan opisany na kostce wygląda tak:

Wartości domyślne są następujące:
c = 3 leftScale = 1.0 rightScale = 1.0 a = leftScale*c b = rightScale*c α = 20° β = 20°
Do zmiany wartości domyślnych służą polecenia:
\edef\size {nowa_wartość_c}
\computeLeft {nowa_wartość_α} {nowa_wartość_leftScale}
\computeRight {nowa_wartość_β} {nowa_wartość_rightScale}Makrodefinicja shapes korzysta z makrodefinicji face, a makrodefinicja unroundedshapes z makrodefinicji unroundedfave.
Makrodefinicje shapes i unroundeddshapes rysują kostkę skierowaną krawędzią do przodu. Mają pięć argumentów:
{kształt1/kolor1, kształt2/kolor2, kształt3/kolor3}
\shapes {0} {0} { {\pik/red!20!white, \karo/blue!20!white, \kier/green!20!white}} {2} {3}
\unroundedshapes {0} {0} { {\kier/yellow, \kier/green!20!white, \pik/yellow}} {1} {1}
Prostopadłościan opisany na kostce wygląda tak:

Wartości domyślne są następujące:
a = 3 frontScale = 0.75 b = frontScale*a β = 36°
Do zmiany wartości domyślnych służą polecenia:
\edef\size {nowa_wartość_a}
\computeFront {nowa_wartość_β} {nowa_wartość_frontScale}Makrodefinicja frontshapes korzysta z makrodefinicji face, a makrodefinicja unroundedfrontshapes z makrodefinicji unroundedface.
Makrodefinicje frontshapes i unroundedfrontshapes rysują kostkę skierowaną ścianą do przodu. Mają pięć argumentów:
{kształt1/kolor1, kształt2/kolor2, kształt3/kolor3}
\frontshapes {3} {0} { {\pik/green!20!white, \trefl/blue!20!white, \karo/green!20!white}} {2} {2}}
\unroundedfrontshapes {0} {0} { {\pik/green!20!white, \trefl/blue!20!white, \pik/green!20!white}} {1.5} {1}
\unroundedfrontshapes {4} {0} { {\pik/white, \trefl/blue!20!white, \pik/white}} {1.5} {1.5}
Makrodefinicja face rysuje zaokrąglony kwadrat jednostkowy z kształtem. Ma pięć argumentów:
Makrodefinicja unroundedface różni się od face tylko tym, że rysuje „niezaokrąglony” kwadrat.
Przykład:
\face {\trefl} {yellow} {1} {1} {1}
\pgftransformreset
\pgftransformcm {1} {0} {0} {1} {\pgfpoint {4cm} {0cm}}
\unroundedface {\pik} {blue!40!white} {1} {2} {1}
\pgftransformreset
\pgftransformcm {1} {0} {0} {1} {\pgfpoint {0cm} {-6cm}}
\face {\pgfimage {Colors_128}} {blue!20!white} {-1} {5} {1}