//----------------------------------------------------------------------------------------------------
// Scene to show thread safet issue with splines - or maybe functions using splines.
//
// On a multi-core machine, without AA, run this command to see the problem (8 cores < 60 seconds) :
//
//    povray +ISplineThreadSafety.pov -A -D +THfs +WT8 +AM2 +MB5 +H800 +W800
//
// Image is clean except for AA issue if we run with one thread using this command:
//
//    povray +ISplineThreadSafety.pov -A -D +THfs +WT1 +AM2 +MB5 +H800 +W800
//
//----------------------------------------------------------------------------------------------------

global_settings {
    assumed_gamma 1.0000
    ambient_light srgb <1.0,1.0,1.0>
}
#declare Grey15 = rgb <0.15,0.15,0.15>;
background {
    color Grey15
}
#declare Picton_Blue = srgb <0.2706,0.6941,0.9098>;
#declare CameraPrism = camera {
    perspective
    location <4.0,4.0,-4.0>
    sky <0.0,1.0,0.0>
    angle 30.0
    right x*(image_width/image_height)
    look_at <0.0,0.05,0.0>
}
#declare White = srgb <1.0,1.0,1.0>;
#declare LightCamera = light_source {
    <50.0,50.0,-50.0>, White
}
#include "functions.inc"
#declare Spline_F_Helix1_00 = spline {
    linear_spline
    -1.6, <1.0,1.0,1.0>
    1.6, <0.05,0.05,0.05>
}
#declare F_Helix1_00_Spline = function {
    spline { Spline_F_Helix1_00 }
}
#declare F_Helix1_00 = function {
    max(f_helix1(x,y,z,2,4.0,0.1*F_Helix1_00_Spline(y).y,0.4*F_Helix1_00_Spline(y).y,1.0,1.0,0.0),f_rounded_box(x,y,z,0.05,0.55,1.6,0.55))
}
#declare IsoThing = isosurface {
    function { F_Helix1_00(x,y,z) }
    contained_by { box { <-2.0,-2.0,-2.0>,<2.0,2.0,2.0> } }
    threshold 0.0
    accuracy 0.0001
    max_gradient 80.0
    max_trace 2
    pigment { color Picton_Blue }
}
#declare Thing = object {
    object { IsoThing }
}

//-------------------------------------- Top level scene items ---------------------------------------
light_source { LightCamera }
camera { CameraPrism }
object { Thing }
