Guest User

Untitled

a guest
Jan 16th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.11 KB | None | 0 0
  1. documentclass[border=3mm,tikz]{standalone}
  2. usepackage{tikz}
  3. newififcuboidshade
  4. newififcuboidemphedge
  5.  
  6. tikzset{
  7. cuboid/.is family,
  8. cuboid,
  9. shiftx/.initial=0,
  10. shifty/.initial=0,
  11. dimx/.initial=3,
  12. dimy/.initial=3,
  13. dimz/.initial=3,
  14. scale/.initial=1,
  15. densityx/.initial=1,
  16. densityy/.initial=1,
  17. densityz/.initial=1,
  18. rotation/.initial=0,
  19. anglex/.initial=0,
  20. angley/.initial=90,
  21. anglez/.initial=225,
  22. scalex/.initial=1,
  23. scaley/.initial=1,
  24. scalez/.initial=0.5,
  25. xedgelabel/.store in=xedgelabel,
  26. yedgelabel/.store in=yedgelabel,
  27. zedgelabel/.store in=zedgelabel,
  28. xedgelabel={},
  29. yedgelabel={},
  30. zedgelabel={},
  31. edgelabel/.style={},
  32. front/.style={draw=black,fill=white},
  33. top/.style={draw=black,fill=white},
  34. right/.style={draw=black,fill=white},
  35. shade/.is if=cuboidshade,
  36. shadecolordark/.initial=black,
  37. shadecolorlight/.initial=white,
  38. shadeopacity/.initial=0.15,
  39. shadesamples/.initial=16,
  40. emphedge/.is if=cuboidemphedge,
  41. emphstyle/.style={thick},
  42. }
  43.  
  44. newcommand{tikzcuboidkey}[1]{pgfkeysvalueof{/tikz/cuboid/#1}}
  45.  
  46. % Commands
  47. newcommand{tikzcuboid}[1]{
  48. tikzset{cuboid,#1} % Process Keys passed to command
  49. pgfmathsetlengthmacro{vectorxx}{tikzcuboidkey{scalex}*cos(tikzcuboidkey{anglex})*28.452756}
  50. pgfmathsetlengthmacro{vectorxy}{tikzcuboidkey{scalex}*sin(tikzcuboidkey{anglex})*28.452756}
  51. pgfmathsetlengthmacro{vectoryx}{tikzcuboidkey{scaley}*cos(tikzcuboidkey{angley})*28.452756}
  52. pgfmathsetlengthmacro{vectoryy}{tikzcuboidkey{scaley}*sin(tikzcuboidkey{angley})*28.452756}
  53. pgfmathsetlengthmacro{vectorzx}{tikzcuboidkey{scalez}*cos(tikzcuboidkey{anglez})*28.452756}
  54. pgfmathsetlengthmacro{vectorzy}{tikzcuboidkey{scalez}*sin(tikzcuboidkey{anglez})*28.452756}
  55. begin{scope}[xshift=tikzcuboidkey{shiftx}, yshift=tikzcuboidkey{shifty}, scale=tikzcuboidkey{scale}, rotate=tikzcuboidkey{rotation}, x={(vectorxx,vectorxy)}, y={(vectoryx,vectoryy)}, z={(vectorzx,vectorzy)}]
  56. pgfmathsetmacro{steppingx}{1/tikzcuboidkey{densityx}}
  57. pgfmathsetmacro{steppingy}{1/tikzcuboidkey{densityy}}
  58. pgfmathsetmacro{steppingz}{1/tikzcuboidkey{densityz}}
  59. newcommand{dimx}{tikzcuboidkey{dimx}}
  60. newcommand{dimy}{tikzcuboidkey{dimy}}
  61. newcommand{dimz}{tikzcuboidkey{dimz}}
  62. pgfmathsetmacro{secondx}{2*steppingx}
  63. pgfmathsetmacro{secondy}{2*steppingy}
  64. pgfmathsetmacro{secondz}{2*steppingz}
  65. ifnumdimx=1
  66. deflstx{dimx}
  67. else
  68. deflstx{steppingx,secondx,...,dimx}
  69. fi
  70. foreach x in lstx
  71. {ifnumdimy=1
  72. deflsty{dimy}
  73. else
  74. deflsty{steppingy,secondy,...,dimy}
  75. fi
  76. foreach y in lsty
  77. { pgfmathsetmacro{lowx}{(x-steppingx)}
  78. pgfmathsetmacro{lowy}{(y-steppingy)}
  79. filldraw[cuboid/front] (lowx,lowy,dimz) -- (lowx,y,dimz) -- (x,y,dimz) -- (x,lowy,dimz) -- cycle;
  80. }
  81. }
  82. ifnumdimx=1
  83. deflstx{dimx}
  84. else
  85. deflstx{steppingx,secondx,...,dimx}
  86. fi
  87. foreach x in lstx
  88. { ifnumdimz=1
  89. deflstz{dimz}
  90. else
  91. deflstz{steppingz,secondz,...,dimz}
  92. fi
  93. foreach z in lstz
  94. { pgfmathsetmacro{lowx}{(x-steppingx)}
  95. pgfmathsetmacro{lowz}{(z-steppingz)}
  96. filldraw[cuboid/top] (lowx,dimy,lowz) -- (lowx,dimy,z) -- (x,dimy,z) -- (x,dimy,lowz) -- cycle;
  97. }
  98. }
  99. ifnumdimy=1
  100. deflsty{dimy}
  101. else
  102. deflsty{steppingy,secondy,...,dimy}
  103. fi
  104. foreach y in lsty
  105. { ifnumdimz=1
  106. deflstz{dimz}
  107. else
  108. deflstz{steppingz,secondz,...,dimz}
  109. fi
  110. foreach z in lstz
  111. { pgfmathsetmacro{lowy}{(y-steppingy)}
  112. pgfmathsetmacro{lowz}{(z-steppingz)}
  113. filldraw[cuboid/right] (dimx,lowy,lowz) -- (dimx,lowy,z) -- (dimx,y,z) -- (dimx,y,lowz) -- cycle;
  114. }
  115. }
  116. path (0,0,dimz) -- (0,dimy,dimz) node[midway,above,edgelabel]{yedgelabel};
  117. path (0,0,dimz) -- (dimx,0,dimz) node[midway,below,edgelabel]{xedgelabel};
  118. path (dimx,0,dimz) -- (dimx,0,0) node[midway,below,edgelabel]{zedgelabel};
  119. ifcuboidemphedge
  120. draw[cuboid/emphstyle] (0,dimy,0) -- (dimx,dimy,0) -- (dimx,dimy,dimz) -- (0,dimy,dimz) -- cycle;%
  121. draw[cuboid/emphstyle] (0,dimy,dimz) -- (0,0,dimz) -- (dimx,0,dimz) -- (dimx,dimy,dimz);%
  122. draw[cuboid/emphstyle] (dimx,dimy,0) -- (dimx,0,0) -- (dimx,0,dimz);%
  123. fi
  124. ifcuboidshade
  125. pgfmathsetmacro{cstepx}{dimx/tikzcuboidkey{shadesamples}}
  126. pgfmathsetmacro{cstepy}{dimy/tikzcuboidkey{shadesamples}}
  127. pgfmathsetmacro{cstepz}{dimz/tikzcuboidkey{shadesamples}}
  128. foreach s in {1,...,tikzcuboidkey{shadesamples}}
  129. { pgfmathsetmacro{lows}{s-1}
  130. pgfmathsetmacro{cpercent}{(lows)/(tikzcuboidkey{shadesamples}-1)*100}
  131. 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;
  132. 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;
  133. 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;
  134. }
  135. fi
  136.  
  137. end{scope}
  138. }
  139.  
  140. makeatother
  141.  
  142. begin{document}
  143.  
  144.  
  145. begin{tikzpicture}[scale=1]
  146. tikzcuboid{%
  147. shiftx=0cm,%
  148. shifty=0cm,%
  149. scale=1.00,%
  150. rotation=0,%
  151. densityx=1,%
  152. densityy=1,%
  153. densityz=1,%
  154. dimx=1,%
  155. dimy=1,%
  156. dimz=1,%
  157. front/.style={draw=yellow!75!black,fill=yellow!25!white},%
  158. right/.style={draw=yellow!25!black,fill=yellow!60!white},%
  159. top/.style={draw=yellow!50!black,fill=yellow!30!white},%
  160. anglex=0,%
  161. angley=90,%
  162. anglez=215,%
  163. scalex=4.8,%
  164. scaley=3.5,%
  165. scalez=6,%
  166. emphedge=false,%
  167. shade,%
  168. shadeopacity=0.15,%
  169. % xedgelabel={0.58 m},%
  170. % yedgelabel={0.45 m},%
  171. % zedgelabel={0.85 m},%
  172. /tikz/edgelabel/.style={sloped,scale=1.5,transform shape},%
  173. }
  174.  
  175. end{tikzpicture}
  176.  
  177. end{document}
Add Comment
Please, Sign In to add comment