A far from perfect first example. (UPDATE: Used the parameters from your description. Plan to improve it when I have time.)
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\makeatletter % from section 13.2.5 of the pgfmanual
\define@key{cylindricalkeys}{angle}{\def\myangle{#1}}
\define@key{cylindricalkeys}{radius}{\def\myradius{#1}}
\define@key{cylindricalkeys}{z}{\def\myz{#1}}
\tikzdeclarecoordinatesystem{cylindrical}{%
\setkeys{cylindricalkeys}{#1}%
\pgfpointadd{\pgfpointxyz{0}{0}{\myz}}{\pgfpointpolarxy{\myangle}{\myradius}}
}
\makeatother
\begin{document}
\pgfmathsetmacro{\MajorDiameter}{0.5}
\pgfmathsetmacro{\MinorDiameter}{0.45}
\pgfmathsetmacro{\Pitch}{0.4}
\pgfmathsetmacro{\Nmax}{8}
\pgfmathsetmacro{\HeadHeight}{0.4}
\pgfmathsetmacro{\Crest}{0.03}
\foreach \X in {110} % {100,110,...,150}
{\begin{tikzpicture}
\tdplotsetmaincoords{\X}{0}
\begin{scope}[tdplot_main_coords,samples=60]
\fill[left color=black!30, right color=black!20, middle color=black!28]
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={-0.9*\Pitch+(\Pitch-2*\Crest)*\x/360+\Pitch/2})
-- (0,0,-1) -- cycle;
\foreach \Z in {0,1,...,\Nmax}
{
% brighter upper sloped patch
\fill[left color=black!35, right color=black!25, middle color=black!15]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs:
radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Crest})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+0.5*\Pitch})
-- cycle;
% wider crest
\fill[left color=black!50, right color=black!40, middle color=black!35]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs:
radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Crest})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360})
-- cycle;
% darker lower sloped patch
\fill[left color=black!30, right color=black!20, middle color=black!25]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs: radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360-0.5*\Pitch
+\Crest}) -- cycle;
% narrower crest
\fill[left color=black!50, right color=black!40, middle color=black!35]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Crest
+\Pitch/2})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Pitch/2})
-- cycle;
}
\fill[left color=black!30, right color=black!20, middle color=black!10]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=1.3*\MajorDiameter,angle=\x,z=\Nmax*\Pitch)
-- plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs: radius=1.3*\MajorDiameter,angle=\x,z=\Nmax*\Pitch+\HeadHeight)
-- cycle;
\fill[left color=black!20, right color=black!10, middle color=black!0]
plot[smooth,variable=\x,domain=\tdplotmainphi-180:\tdplotmainphi+180]
(cylindrical cs: radius=1.3*\MajorDiameter,angle=\x,z=\Nmax*\Pitch+\HeadHeight);
\end{scope}
\end{tikzpicture}
}
\end{document}
And one can change the viewing angle in some range.
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\makeatletter % from section 13.2.5 of the pgfmanual
\define@key{cylindricalkeys}{angle}{\def\myangle{#1}}
\define@key{cylindricalkeys}{radius}{\def\myradius{#1}}
\define@key{cylindricalkeys}{z}{\def\myz{#1}}
\tikzdeclarecoordinatesystem{cylindrical}{%
\setkeys{cylindricalkeys}{#1}%
\pgfpointadd{\pgfpointxyz{0}{0}{\myz}}{\pgfpointpolarxy{\myangle}{\myradius}}
}
\makeatother
% decoration
\begin{document}
\pgfmathsetmacro{\RadiusScrew}{0.5}
\foreach \X in {0,10,...,350} % {100,110,...,150}
{\begin{tikzpicture}
\path[use as bounding box] (-1,-1) (1,6);
\tdplotsetmaincoords{140-30*cos(\X)}{0}
\begin{scope}[tdplot_main_coords,samples=60]
\fill[left color=black!40, right color=black!30, middle color=black!20]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=\RadiusScrew,angle=\x,z=-0.125+\x/720)
-- (0,0,-1) -- cycle;
\foreach \Z in {0,0.5,...,5}
{
\fill[left color=black!30, right color=black!20, middle color=black!10]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=\RadiusScrew,angle=\x,z=\Z+\x/720)
-- ++ (cylindrical cs: radius=-0.1*\RadiusScrew,angle=\tdplotmainphi+180,
z=0.25) --
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs: radius=0.9*\RadiusScrew,angle=\x,z=\Z+\x/720+0.25)
-- cycle;
\fill[left color=black!40, right color=black!30, middle color=black!20]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=\RadiusScrew,angle=\x,z=\Z+\x/720)
-- ++ (cylindrical cs: radius=-0.1*\RadiusScrew,angle=\tdplotmainphi+180,
z=-0.25) --
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs: radius=0.9*\RadiusScrew,angle=\x,z=\Z+\x/720-0.25)
-- cycle;
}
\fill[left color=black!30, right color=black!20, middle color=black!10]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=1.3*\RadiusScrew,angle=\x,z=5)
-- ++ (cylindrical cs: radius=0,angle=\tdplotmainphi+180,
z=1)
-- plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs: radius=1.3*\RadiusScrew,angle=\x,z=6)
-- cycle;
\fill[left color=black!20, right color=black!10, middle color=black!0]
plot[smooth,variable=\x,domain=\tdplotmainphi-180:\tdplotmainphi+180]
(cylindrical cs: radius=1.3*\RadiusScrew,angle=\x,z=6);
\end{scope}
\end{tikzpicture}
}
\end{document}
In principle, one can thus achieve many viewing angles.
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\makeatletter % from section 13.2.5 of the pgfmanual
\define@key{cylindricalkeys}{angle}{\def\myangle{#1}}
\define@key{cylindricalkeys}{radius}{\def\myradius{#1}}
\define@key{cylindricalkeys}{z}{\def\myz{#1}}
\tikzdeclarecoordinatesystem{cylindrical}{%
\setkeys{cylindricalkeys}{#1}%
\pgfpointadd{\pgfpointxyz{0}{0}{\myz}}{\pgfpointpolarxy{\myangle}{\myradius}}
}
\makeatother
\begin{document}
\pgfmathsetmacro{\MajorDiameter}{0.5}
\pgfmathsetmacro{\MinorDiameter}{0.45}
\pgfmathsetmacro{\Pitch}{0.4}
\pgfmathsetmacro{\Nmax}{8}
\pgfmathsetmacro{\HeadHeight}{0.4}
\pgfmathsetmacro{\Crest}{0.03}
\foreach \X in {0,5,...,355} % {100,110,...,150}
{\begin{tikzpicture}
\path[use as bounding box] (-6,-6) rectangle (6,6);
\begin{scope}[rotate=\X]
\tdplotsetmaincoords{140-30*cos(\X)}{0}
\begin{scope}[tdplot_main_coords,samples=60]
\fill[left color=black!30, right color=black!20, middle color=black!28]
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={-0.9*\Pitch+(\Pitch-2*\Crest)*\x/360+\Pitch/2})
-- (0,0,-1) -- cycle;
\foreach \Z in {0,1,...,\Nmax}
{
% brighter upper sloped patch
\fill[left color=black!35, right color=black!25, middle color=black!15]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs:
radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Crest})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+0.5*\Pitch})
-- cycle;
% wider crest
\fill[left color=black!50, right color=black!40, middle color=black!35]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs:
radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Crest})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360})
-- cycle;
% darker lower sloped patch
\fill[left color=black!30, right color=black!20, middle color=black!25]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=\MajorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs: radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360-0.5*\Pitch
+\Crest}) -- cycle;
% narrower crest
\fill[left color=black!50, right color=black!40, middle color=black!35]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Crest
+\Pitch/2})
--
plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs:
radius=\MinorDiameter,angle=\x,z={\Z*\Pitch+(\Pitch-2*\Crest)*\x/360+\Pitch/2})
-- cycle;
}
\fill[left color=black!30, right color=black!20, middle color=black!10]
plot[smooth,variable=\x,domain=\tdplotmainphi:\tdplotmainphi+180]
(cylindrical cs: radius=1.3*\MajorDiameter,angle=\x,z=\Nmax*\Pitch)
-- plot[smooth,variable=\x,domain=\tdplotmainphi+180:\tdplotmainphi]
(cylindrical cs: radius=1.3*\MajorDiameter,angle=\x,z=\Nmax*\Pitch+\HeadHeight)
-- cycle;
\fill[left color=black!20, right color=black!10, middle color=black!0]
plot[smooth,variable=\x,domain=\tdplotmainphi-180:\tdplotmainphi+180]
(cylindrical cs: radius=1.3*\MajorDiameter,angle=\x,z=\Nmax*\Pitch+\HeadHeight);
\end{scope}
\end{scope}
\end{tikzpicture}
}
\end{document}
\fill[left color=gray!20!white,right color=gray!60!black] ([xshift=-7.5pt]A) -- ([xshift=7.5pt]A) -- ++ (-2.5pt,-2.5pt) -- ([xshift=5pt]B) -- ([yshift=-2pt]B) -- ([xshift=-5pt]B) -- ([xshift=-5pt,yshift=-2.5pt]A) -- cycle;
, but I think it might be advantageous to draw the outline using zigzags and then adding the lines on top.