POV-Ray : Newsgroups : povray.general : Help: How to create a bolt? : Re: Help: How to create a bolt? Server Time
18 Mar 2026 17:59:32 EDT (-0400)
  Re: Help: How to create a bolt?  
From: Mr
Date: 16 Mar 2026 12:40:00
Message: <web.69b831509c1bf2d916086ed06830a892@news.povray.org>
"LanuHum" <Lan### [at] yandexru> wrote:
> "Bald Eagle" <cre### [at] netscapenet> wrote:
> > #version 3.8;
> > global_settings {assumed_gamma 1.0 }
> >
> > camera {
> >  location <0, 1, -3>
> >  right x*image_width/image_height
> >  up y
> >  look_at <0, 1, 0>
> > }
> >
> > light_source {<10, 20, -50> rgb 1}
> > sky_sphere {pigment {rgb 1}}
> >
> >
> > #declare TPI = 11; // (Threads per inch / TPI)
> > #declare DM = 0.625/2;
> > #declare Dm = 0.5167/2;
> > #declare Angle = 60;
> >
> > #declare Pitch = 1/TPI;
> > #declare CompAngle = 90-Angle;
> > #declare Asin = atan(radians(CompAngle));
> > #declare dx = DM - Dm;
> > #declare dy = dx * Asin;
> > #declare AL = 2*dy; // total Angled length
> > #declare FL = (Pitch - AL)/2; // Flat length
> >
> > // Profile
> > #declare P = array {
> >       <Dm, 0, 0>,
> >       <DM, dy, 0>,
> >       <DM, dy+FL, 0>,
> >       <Dm, dy+FL+dy, 0>,
> >       <Dm, dy+FL+dy+FL, 0>
> > }
> >
> > #declare OldPoint = array[5][3];
> > #declare NewPoint = array[5][3];
> >
> > #macro MakeBoltProfile (Pitch,Steps, Tex, Copies)
> >       #local Increment = tau/Steps;
> >       #local Unit =
> >       union {
> >       #for (Theta, 0, tau, Increment)
> >
> >             #for (Pt, 0, 4)
> >             #declare NewPoint[Pt][0] = P[Pt].x * cos (Theta);
> >             #declare NewPoint[Pt][1] = P[Pt].y + Pitch * Theta/tau;
> >             #declare NewPoint[Pt][2] = P[Pt].x * sin (Theta);
> >             #end
> >
> >             #if (Theta > 0)
> >             #for (T, 0, 3)
> >                   triangle {<OldPoint[T][0], OldPoint[T][1], OldPoint[T][2]>,
> >                         <NewPoint[T][0], NewPoint[T][1], NewPoint[T][2]>,
> >                         <OldPoint[T+1][0], OldPoint[T+1][1], OldPoint[T+1][2]>
> >                   }
> >                   triangle {<OldPoint[T+1][0], OldPoint[T+1][1],
> > OldPoint[T+1][2]>,
> >                         <NewPoint[T][0], NewPoint[T][1], NewPoint[T][2]>,
> >                         <NewPoint[T+1][0], NewPoint[T+1][1], NewPoint[T+1][2]>
> >                   }
> >             #end
> >           #end
> >
> >             #declare OldPoint = NewPoint;
> >       #end
> >       texture {Tex}
> >       }
> >       #for (C, 1, Copies)
> >             object {Unit translate y*Pitch*C*1}
> >       #end
> > #end
> >
> > #declare MyTex = texture {pigment {rgb 0.9} finish {specular 0.4 reflection
> > 0.01}}
> >
> > MakeBoltProfile (Pitch, 72, MyTex, 25)
>
> Thank you so much. I have no more questions about the topic.

Very glad you're back ! and it looks nice!


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.