// Datarray.pov // // File to test usage of array data with i_dat3d // // By Michael Andrews - 20010214 #version unofficial Megapov 0.7; // Change 'Correct' to 'no' to show the problem. #declare Correct = yes; global_settings { max_trace_level 5 assumed_gamma 1 ambient_light 1 } #declare LL = <-10, 30, -30>*1000; #declare LC = 0.8; #declare CL = <0, 1.5, -4.0>*26; #declare BC = *0.8; camera { location CL direction 2.5*z right x*image_width/image_height look_at <0.0, 1.0, 0.0> } light_source { 0*x color rgb LC translate LL } light_source { 0*x color rgb LC*BC*0.3 translate CL shadowless } background { color rgb BC } #declare Size = <37,23,17>; #declare Data = array [Size.x][Size.y][Size.z] #declare X = 0; #while (X < Size.x) #declare Y = 0; #while (Y < Size.y) #declare Z = 0; #while (Z < Size.z) #declare Data[X][Y][Z] = 0; #declare Z = Z + 1; #end #declare Y = Y + 1; #end #declare X = X + 1; #end #declare X = 1; #while (X < Size.x) #declare Data[X][1] [1] = 1; #declare Data[X][1] [Size.z-1] = 1; #declare Data[X][Size.y-1][Size.z-1] = 1; #declare Data[X][Size.y-1][1] = 1; #declare X = X + 1; #end #declare Y = 1; #while (Y < Size.y) #declare Data[1] [Y][1] = 1; #declare Data[1] [Y][Size.z-1] = 1; #declare Data[Size.x-1][Y][Size.z-1] = 1; #declare Data[Size.x-1][Y][1] = 1; #declare Y = Y + 1; #end #declare Z = 1; #while (Z < Size.z) #declare Data[1] [1] [Z] = 1; #declare Data[1] [Size.y-1][Z] = 1; #declare Data[Size.x-1][Size.y-1][Z] = 1; #declare Data[Size.x-1][1] [Z] = 1; #declare Z = Z + 1; #end #if (Correct) // works #declare fn_Data = function { "data_3d_1", <1> library "i_dat3d", Data, } #else // doesn't work as documented #declare fn_Data = function { "data_3d_1", <1> library "i_dat3d", Data, } #end #declare O_Data = isosurface { #if (Correct) // works function { fn_Data(z,y,x) } #else // doesn't work as documented function { fn_Data } #end threshold 0.1 sign -1 contained_by { box { 0, Size } } eval pigment { colour rgb 1 } } union { object { O_Data } box { -0.01, Size+0.01 pigment { rgbf <1,.9,.8,.8> } } translate -Size/2 scale 45/max(Size.x,max(Size.y,Size.z)) }