Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- documentclass[border=3mm,tikz]{standalone}
- usepackage{tikz}
- newififcuboidshade
- newififcuboidemphedge
- tikzset{
- cuboid/.is family,
- cuboid,
- shiftx/.initial=0,
- shifty/.initial=0,
- dimx/.initial=3,
- dimy/.initial=3,
- dimz/.initial=3,
- scale/.initial=1,
- densityx/.initial=1,
- densityy/.initial=1,
- densityz/.initial=1,
- rotation/.initial=0,
- anglex/.initial=0,
- angley/.initial=90,
- anglez/.initial=225,
- scalex/.initial=1,
- scaley/.initial=1,
- scalez/.initial=0.5,
- xedgelabel/.store in=xedgelabel,
- yedgelabel/.store in=yedgelabel,
- zedgelabel/.store in=zedgelabel,
- xedgelabel={},
- yedgelabel={},
- zedgelabel={},
- edgelabel/.style={},
- front/.style={draw=black,fill=white},
- top/.style={draw=black,fill=white},
- right/.style={draw=black,fill=white},
- shade/.is if=cuboidshade,
- shadecolordark/.initial=black,
- shadecolorlight/.initial=white,
- shadeopacity/.initial=0.15,
- shadesamples/.initial=16,
- emphedge/.is if=cuboidemphedge,
- emphstyle/.style={thick},
- }
- newcommand{tikzcuboidkey}[1]{pgfkeysvalueof{/tikz/cuboid/#1}}
- % Commands
- newcommand{tikzcuboid}[1]{
- tikzset{cuboid,#1} % Process Keys passed to command
- pgfmathsetlengthmacro{vectorxx}{tikzcuboidkey{scalex}*cos(tikzcuboidkey{anglex})*28.452756}
- pgfmathsetlengthmacro{vectorxy}{tikzcuboidkey{scalex}*sin(tikzcuboidkey{anglex})*28.452756}
- pgfmathsetlengthmacro{vectoryx}{tikzcuboidkey{scaley}*cos(tikzcuboidkey{angley})*28.452756}
- pgfmathsetlengthmacro{vectoryy}{tikzcuboidkey{scaley}*sin(tikzcuboidkey{angley})*28.452756}
- pgfmathsetlengthmacro{vectorzx}{tikzcuboidkey{scalez}*cos(tikzcuboidkey{anglez})*28.452756}
- pgfmathsetlengthmacro{vectorzy}{tikzcuboidkey{scalez}*sin(tikzcuboidkey{anglez})*28.452756}
- begin{scope}[xshift=tikzcuboidkey{shiftx}, yshift=tikzcuboidkey{shifty}, scale=tikzcuboidkey{scale}, rotate=tikzcuboidkey{rotation}, x={(vectorxx,vectorxy)}, y={(vectoryx,vectoryy)}, z={(vectorzx,vectorzy)}]
- pgfmathsetmacro{steppingx}{1/tikzcuboidkey{densityx}}
- pgfmathsetmacro{steppingy}{1/tikzcuboidkey{densityy}}
- pgfmathsetmacro{steppingz}{1/tikzcuboidkey{densityz}}
- newcommand{dimx}{tikzcuboidkey{dimx}}
- newcommand{dimy}{tikzcuboidkey{dimy}}
- newcommand{dimz}{tikzcuboidkey{dimz}}
- pgfmathsetmacro{secondx}{2*steppingx}
- pgfmathsetmacro{secondy}{2*steppingy}
- pgfmathsetmacro{secondz}{2*steppingz}
- ifnumdimx=1
- deflstx{dimx}
- else
- deflstx{steppingx,secondx,...,dimx}
- fi
- foreach x in lstx
- {ifnumdimy=1
- deflsty{dimy}
- else
- deflsty{steppingy,secondy,...,dimy}
- fi
- foreach y in lsty
- { pgfmathsetmacro{lowx}{(x-steppingx)}
- pgfmathsetmacro{lowy}{(y-steppingy)}
- filldraw[cuboid/front] (lowx,lowy,dimz) -- (lowx,y,dimz) -- (x,y,dimz) -- (x,lowy,dimz) -- cycle;
- }
- }
- ifnumdimx=1
- deflstx{dimx}
- else
- deflstx{steppingx,secondx,...,dimx}
- fi
- foreach x in lstx
- { ifnumdimz=1
- deflstz{dimz}
- else
- deflstz{steppingz,secondz,...,dimz}
- fi
- foreach z in lstz
- { pgfmathsetmacro{lowx}{(x-steppingx)}
- pgfmathsetmacro{lowz}{(z-steppingz)}
- filldraw[cuboid/top] (lowx,dimy,lowz) -- (lowx,dimy,z) -- (x,dimy,z) -- (x,dimy,lowz) -- cycle;
- }
- }
- ifnumdimy=1
- deflsty{dimy}
- else
- deflsty{steppingy,secondy,...,dimy}
- fi
- foreach y in lsty
- { ifnumdimz=1
- deflstz{dimz}
- else
- deflstz{steppingz,secondz,...,dimz}
- fi
- foreach z in lstz
- { pgfmathsetmacro{lowy}{(y-steppingy)}
- pgfmathsetmacro{lowz}{(z-steppingz)}
- filldraw[cuboid/right] (dimx,lowy,lowz) -- (dimx,lowy,z) -- (dimx,y,z) -- (dimx,y,lowz) -- cycle;
- }
- }
- path (0,0,dimz) -- (0,dimy,dimz) node[midway,above,edgelabel]{yedgelabel};
- path (0,0,dimz) -- (dimx,0,dimz) node[midway,below,edgelabel]{xedgelabel};
- path (dimx,0,dimz) -- (dimx,0,0) node[midway,below,edgelabel]{zedgelabel};
- ifcuboidemphedge
- draw[cuboid/emphstyle] (0,dimy,0) -- (dimx,dimy,0) -- (dimx,dimy,dimz) -- (0,dimy,dimz) -- cycle;%
- draw[cuboid/emphstyle] (0,dimy,dimz) -- (0,0,dimz) -- (dimx,0,dimz) -- (dimx,dimy,dimz);%
- draw[cuboid/emphstyle] (dimx,dimy,0) -- (dimx,0,0) -- (dimx,0,dimz);%
- fi
- ifcuboidshade
- pgfmathsetmacro{cstepx}{dimx/tikzcuboidkey{shadesamples}}
- pgfmathsetmacro{cstepy}{dimy/tikzcuboidkey{shadesamples}}
- pgfmathsetmacro{cstepz}{dimz/tikzcuboidkey{shadesamples}}
- foreach s in {1,...,tikzcuboidkey{shadesamples}}
- { pgfmathsetmacro{lows}{s-1}
- pgfmathsetmacro{cpercent}{(lows)/(tikzcuboidkey{shadesamples}-1)*100}
- fill[opacity=tikzcuboidkey{shadeopacity},color=tikzcuboidkey{shadecolorlight}!cpercent!tikzcuboidkey{shadecolordark}] (0,s*cstepy,dimz) -- (s*cstepx,s*cstepy,dimz) -- (s*cstepx,0,dimz) -- (lows*cstepx,0,dimz) -- (lows*cstepx,lows*cstepy,dimz) -- (0,lows*cstepy,dimz) -- cycle;
- fill[opacity=tikzcuboidkey{shadeopacity},color=tikzcuboidkey{shadecolorlight}!cpercent!tikzcuboidkey{shadecolordark}] (0,dimy,s*cstepz) -- (s*cstepx,dimy,s*cstepz) -- (s*cstepx,dimy,0) -- (lows*cstepx,dimy,0) -- (lows*cstepx,dimy,lows*cstepz) -- (0,dimy,lows*cstepz) -- cycle;
- fill[opacity=tikzcuboidkey{shadeopacity},color=tikzcuboidkey{shadecolorlight}!cpercent!tikzcuboidkey{shadecolordark}] (dimx,0,s*cstepz) -- (dimx,s*cstepy,s*cstepz) -- (dimx,s*cstepy,0) -- (dimx,lows*cstepy,0) -- (dimx,lows*cstepy,lows*cstepz) -- (dimx,0,lows*cstepz) -- cycle;
- }
- fi
- end{scope}
- }
- makeatother
- begin{document}
- begin{tikzpicture}[scale=1]
- tikzcuboid{%
- shiftx=0cm,%
- shifty=0cm,%
- scale=1.00,%
- rotation=0,%
- densityx=1,%
- densityy=1,%
- densityz=1,%
- dimx=1,%
- dimy=1,%
- dimz=1,%
- front/.style={draw=yellow!75!black,fill=yellow!25!white},%
- right/.style={draw=yellow!25!black,fill=yellow!60!white},%
- top/.style={draw=yellow!50!black,fill=yellow!30!white},%
- anglex=0,%
- angley=90,%
- anglez=215,%
- scalex=4.8,%
- scaley=3.5,%
- scalez=6,%
- emphedge=false,%
- shade,%
- shadeopacity=0.15,%
- % xedgelabel={0.58 m},%
- % yedgelabel={0.45 m},%
- % zedgelabel={0.85 m},%
- /tikz/edgelabel/.style={sloped,scale=1.5,transform shape},%
- }
- end{tikzpicture}
- end{document}
Add Comment
Please, Sign In to add comment