POV-Ray : Newsgroups : povray.general : Help: How to create a bolt? : Re: Help: How to create a bolt? Server Time
11 Mar 2026 03:20:11 EDT (-0400)
  Re: Help: How to create a bolt?  
From: Bald Eagle
Date: 10 Mar 2026 17:30:00
Message: <web.69b08d239c1bf2d91f9dae3025979125@news.povray.org>
#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)


Post a reply to this message


Attachments:
Download 'lanuhumboltmesh.png' (83 KB)

Preview of image 'lanuhumboltmesh.png'
lanuhumboltmesh.png


 

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