// // time: Tue Apr 29 12:09:38 1997 // // version: 3.1.1 (format), 3.1.4 (DX) // // // MODULE main // CATEGORY Macros // // comment: This program shows how you can use Compute to warp an image. The Mark module is used to mark the "positions" component as "data" so that Compute can operate on the positions. After the positions are warped, the warped positions are returned to the "positions" component. Normals are added for shading, and the result is displayed. // page assignment: convert_pos order=3, windowed=0, showing=0 // page assignment: image order=5, windowed=0, showing=0 // page assignment: import order=2, windowed=0, showing=1 // page assignment: make_shapes order=4, windowed=0, showing=0 // workspace: width = 638, height = 449 // layout: snap = 0, width = 50, height = 50, align = UL // macro main( ) -> ( ) { // // node ReadImage[4]: x = 20, y = 20, inputs = 9, label = ReadImage // input[1]: defaulting = 0, visible = 1, type = 32, value = "dx_logo.tiff" // input[8]: defaulting = 0, visible = 1, type = 3, value = 0 // input[9]: defaulting = 0, visible = 1, type = 32, value = "float" // page group: import // main_ReadImage_4_out_1 = ReadImage( main_ReadImage_4_in_1, main_ReadImage_4_in_2, main_ReadImage_4_in_3, main_ReadImage_4_in_4, main_ReadImage_4_in_5, main_ReadImage_4_in_6, main_ReadImage_4_in_7, main_ReadImage_4_in_8, main_ReadImage_4_in_9 ) [instance: 4, cache: 1]; // // node Integer[2]: x = 201, y = 21, inputs = 11, label = Integer // input[1]: defaulting = 0, visible = 0, type = 32, value = "Integer_2" // input[3]: defaulting = 0, visible = 0, type = 1, value = 2 // input[4]: defaulting = 1, visible = 0, type = 1, value = 0 // input[5]: defaulting = 1, visible = 0, type = 1, value = 1 // input[6]: defaulting = 1, visible = 0, type = 1, value = 4 // input[7]: defaulting = 1, visible = 0, type = 5, value = 1.0 // input[9]: defaulting = 1, visible = 0, type = 1, value = 0 // output[1]: visible = 1, type = 1, value = 2 // page group: import // // // node Reduce[3]: x = 105, y = 195, inputs = 2, label = Reduce // page group: import // main_Reduce_3_out_1 = Reduce( main_ReadImage_4_out_1, main_Integer_2_out_1 ) [instance: 3, cache: 1]; // // node Mark[2]: x = 142, y = 287, inputs = 2, label = Mark // input[2]: defaulting = 0, visible = 1, type = 32, value = "positions" // page group: import // main_Mark_2_out_1 = Mark( main_Reduce_3_out_1, main_Mark_2_in_2 ) [instance: 2, cache: 1]; // // node Transmitter[1]: x = 155, y = 387, inputs = 1, label = image // page group: import // image = main_Mark_2_out_1; // // node Receiver[1]: x = 110, y = 16, inputs = 1, label = image // page group: convert_pos // main_Receiver_1_out_1[cache: 0] = image; // // node Compute[19]: x = 140, y = 142, inputs = 2, label = Compute // input[1]: defaulting = 0, visible = 0, type = 32, value = "$0.x" // page group: convert_pos // expression: value = a.x // name[2]: value = a // main_Compute_19_out_1 = Compute( main_Compute_19_in_1, main_Receiver_1_out_1 ) [instance: 19, cache: 1]; // // node Statistics[1]: x = 130, y = 224, inputs = 1, label = Statistics // page group: convert_pos // main_Statistics_1_out_1, main_Statistics_1_out_2, main_Statistics_1_out_3, main_Statistics_1_out_4, main_Statistics_1_out_5 = Statistics( main_Compute_19_out_1 ) [instance: 1, cache: 1]; // // node Compute[3]: x = 314, y = 38, inputs = 1, label = Compute--pi // input[1]: defaulting = 0, visible = 0, type = 32, value = "3.14159" // page group: convert_pos // expression: value = 3.14159 // main_Compute_3_out_1 = Compute( main_Compute_3_in_1 ) [instance: 3, cache: 1]; // // node Transmitter[2]: x = 327, y = 127, inputs = 1, label = pi // page group: convert_pos // pi = main_Compute_3_out_1; // // node Receiver[2]: x = 167, y = 348, inputs = 1, label = pi // page group: convert_pos // main_Receiver_2_out_1[cache: 0] = pi; // // node Compute[17]: x = 49, y = 406, inputs = 4, label = Compute: convert x to 0 to 2pi // input[1]: defaulting = 0, visible = 0, type = 32, value = "(($0.x - $1/2.)/$1)*2*$2" // page group: convert_pos // expression: value = ((field.x - xcounts/2.)/xcounts)*2*pi // name[2]: value = field // name[3]: value = xcounts // name[4]: value = pi // main_Compute_17_out_1 = Compute( main_Compute_17_in_1, main_Receiver_1_out_1, main_Statistics_1_out_5, main_Receiver_2_out_1 ) [instance: 17, cache: 1]; // // node Transmitter[5]: x = 65, y = 534, inputs = 1, label = x_converted // page group: convert_pos // x_converted = main_Compute_17_out_1; // // node Receiver[7]: x = 20, y = 20, inputs = 1, label = x_converted // page group: make_shapes // main_Receiver_7_out_1[cache: 0] = x_converted; // // node Receiver[6]: x = 493, y = 20, inputs = 1, label = image // page group: convert_pos // main_Receiver_6_out_1[cache: 0] = image; // // node Compute[20]: x = 545, y = 125, inputs = 2, label = Compute // input[1]: defaulting = 0, visible = 0, type = 32, value = "$0.y" // page group: convert_pos // expression: value = a.y // name[2]: value = a // main_Compute_20_out_1 = Compute( main_Compute_20_in_1, main_Receiver_6_out_1 ) [instance: 20, cache: 1]; // // node Statistics[2]: x = 546, y = 205, inputs = 1, label = Statistics // page group: convert_pos // main_Statistics_2_out_1, main_Statistics_2_out_2, main_Statistics_2_out_3, main_Statistics_2_out_4, main_Statistics_2_out_5 = Statistics( main_Compute_20_out_1 ) [instance: 2, cache: 1]; // // node Receiver[3]: x = 628, y = 325, inputs = 1, label = pi // page group: convert_pos // main_Receiver_3_out_1[cache: 0] = pi; // // node Compute[18]: x = 536, y = 378, inputs = 4, label = Compute--Convert y to -pi/2 to pi/2 // input[1]: defaulting = 0, visible = 0, type = 32, value = "(($0.y - $1/2.0)/$1)*$2" // page group: convert_pos // expression: value = ((field.y - ycounts/2.0)/ycounts)*pi // name[2]: value = field // name[3]: value = ycounts // name[4]: value = pi // main_Compute_18_out_1 = Compute( main_Compute_18_in_1, main_Receiver_6_out_1, main_Statistics_2_out_5, main_Receiver_3_out_1 ) [instance: 18, cache: 1]; // // node Transmitter[6]: x = 541, y = 546, inputs = 1, label = y_converted // page group: convert_pos // y_converted = main_Compute_18_out_1; // // node Receiver[10]: x = 126, y = 32, inputs = 1, label = y_converted // page group: make_shapes // main_Receiver_10_out_1[cache: 0] = y_converted; // // node Compute[1]: x = 86, y = 149, inputs = 3, label = Compute--warping into the shape of a cylinder // input[1]: defaulting = 0, visible = 0, type = 32, value = "[sin($0), $1, cos($0)]" // page group: make_shapes // expression: value = [sin(x_normalized), y_normalized, cos(x_normalized)] // name[2]: value = x_normalized // name[3]: value = y_normalized // main_Compute_1_out_1 = Compute( main_Compute_1_in_1, main_Receiver_7_out_1, main_Receiver_10_out_1 ) [instance: 1, cache: 1]; // // node Receiver[8]: x = 317, y = 34, inputs = 1, label = x_converted // page group: make_shapes // main_Receiver_8_out_1[cache: 0] = x_converted; // // node Receiver[9]: x = 434, y = 33, inputs = 1, label = y_converted // page group: make_shapes // main_Receiver_9_out_1[cache: 0] = y_converted; // // node Compute[4]: x = 393, y = 140, inputs = 3, label = Compute--warping into the shape of a sphere // input[1]: defaulting = 0, visible = 0, type = 32, value = "[cos($0)*cos($1), sin($1), -sin($0)*cos($1)]" // page group: make_shapes // expression: value = [cos(x_normalized)*cos(y_normalized), sin(y_normalized), -sin(x_normalized)*cos(y_normalized)] // name[2]: value = x_normalized // name[3]: value = y_normalized // main_Compute_4_out_1 = Compute( main_Compute_4_in_1, main_Receiver_8_out_1, main_Receiver_9_out_1 ) [instance: 4, cache: 1]; // // node Selector[1]: x = 59, y = 130, inputs = 7, label = Selector // input[1]: defaulting = 0, visible = 0, type = 32, value = "Selector_1" // input[2]: defaulting = 0, visible = 0, type = 32, value = "warp to a cylinder" // input[3]: defaulting = 0, visible = 0, type = 29, value = 1 // input[4]: defaulting = 1, visible = 1, type = 16777248, value = { "warp to a cylinder" "warp to a sphere" } // input[5]: defaulting = 1, visible = 0, type = 16777245, value = { 1 2 } // input[6]: defaulting = 1, visible = 0, type = 3, value = 0 // output[1]: visible = 1, type = 29, value = 1 // output[2]: visible = 1, type = 32, value = "warp to a cylinder" // page group: image // // // node Transmitter[3]: x = 88, y = 258, inputs = 1, label = cylinder // page group: make_shapes // cylinder = main_Compute_1_out_1; // // node Receiver[4]: x = 200, y = 105, inputs = 1, label = cylinder // page group: image // main_Receiver_4_out_1[cache: 0] = cylinder; // // node Transmitter[4]: x = 384, y = 269, inputs = 1, label = sphere // page group: make_shapes // sphere = main_Compute_4_out_1; // // node Receiver[5]: x = 299, y = 104, inputs = 1, label = sphere // page group: image // main_Receiver_5_out_1[cache: 0] = sphere; // // node Switch[1]: x = 234, y = 243, inputs = 3, label = Switch // page group: image // main_Switch_1_out_1 = Switch( main_Selector_1_out_1, main_Receiver_4_out_1, main_Receiver_5_out_1 ) [instance: 1, cache: 1]; // // node Unmark[1]: x = 257, y = 322, inputs = 2, label = Unmark // input[2]: defaulting = 0, visible = 1, type = 32, value = "positions" // page group: image // main_Unmark_1_out_1 = Unmark( main_Switch_1_out_1, main_Unmark_1_in_2 ) [instance: 1, cache: 1]; // // node Normals[1]: x = 254, y = 412, inputs = 2, label = Normals // page group: image // main_Normals_1_out_1 = Normals( main_Unmark_1_out_1, main_Normals_1_in_2 ) [instance: 1, cache: 1]; // // node Image[2]: x = 212, y = 529, inputs = 48, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_2" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [7.7486e-07 -0.000184178 -0.00057584] // input[6]: defaulting = 0, visible = 0, type = 8, value = [5.26497 -5.64568 4.01766] // input[7]: defaulting = 0, visible = 0, type = 5, value = 2.98266 // input[8]: defaulting = 0, visible = 0, type = 1, value = 344 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.967 // input[10]: defaulting = 0, visible = 0, type = 8, value = [-0.0117931 0.572511 0.819812] // input[11]: defaulting = 1, visible = 0, type = 5, value = 19.4479 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 1, visible = 0, type = 32, value = "none" // input[16]: defaulting = 1, visible = 0, type = 32, value = "none" // input[17]: defaulting = 1, visible = 0, type = 1, value = 1 // input[18]: defaulting = 1, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 1, value = 0 // input[29]: defaulting = 1, visible = 0, type = 3, value = 0 // page group: image // depth: value = 24 // window: position = (0.4156,0.3613), size = 0.2797x0.3926 // internal caching: 1 // interaction mode = NONE // main_Image_2_out_1, main_Image_2_out_2, main_Image_2_out_3 = Image( main_Image_2_in_1, main_Normals_1_out_1, main_Image_2_in_3, main_Image_2_in_4, main_Image_2_in_5, main_Image_2_in_6, main_Image_2_in_7, main_Image_2_in_8, main_Image_2_in_9, main_Image_2_in_10, main_Image_2_in_11, main_Image_2_in_12, main_Image_2_in_13, main_Image_2_in_14, main_Image_2_in_15, main_Image_2_in_16, main_Image_2_in_17, main_Image_2_in_18, main_Image_2_in_19, main_Image_2_in_20, main_Image_2_in_21, main_Image_2_in_22, main_Image_2_in_23, main_Image_2_in_24, main_Image_2_in_25, main_Image_2_in_26, main_Image_2_in_27, main_Image_2_in_28, main_Image_2_in_29, main_Image_2_in_30, main_Image_2_in_31, main_Image_2_in_32, main_Image_2_in_33, main_Image_2_in_34, main_Image_2_in_35, main_Image_2_in_36, main_Image_2_in_37, main_Image_2_in_38, main_Image_2_in_39, main_Image_2_in_40, main_Image_2_in_41, main_Image_2_in_42, main_Image_2_in_43, main_Image_2_in_44, main_Image_2_in_45, main_Image_2_in_46, main_Image_2_in_47, main_Image_2_in_48 ) [instance: 2, cache: 1]; // // decorator Annotate pos=(171,168) size=467x60 style(Label), value = // annotation user_begin: 139 // annotation user: an image is imported using ReadImage and reduced in resolution. // annotation user: The "positions" are Marked as data so that they can be operated // annotation user: on (warped) // annotation user_end: // page group: import // // decorator Annotate pos=(201,426) size=315x76 style(Label), value = // annotation user_begin: 149 // annotation user: This page converts both the x and y // annotation user: positions; the x positions to range over 0 to // annotation user: 2pi, and the y positions to range over -pi/2 // annotation user: to pi/2 // annotation user_end: // page group: convert_pos // // decorator Annotate pos=(80,412) size=385x44 style(Label), value = // annotation user_begin: 64 // annotation user: This page warps the positions into either a cylinder or // annotation user: a sphere // annotation user_end: // page group: make_shapes // // decorator Annotate pos=(114,15) size=386x76 style(Label), value = // annotation user_begin: 188 // annotation user: on this page the user chooses whether to view the // annotation user: cylinder or the sphere. The modified positions are // annotation user: returned to the "positions" component using Unmark, // annotation user: and normals are added for shading. // annotation user_end: // page group: image // network: end of macro body CacheScene("Image_2", main_Image_2_out_1, main_Image_2_out_2); } main_ReadImage_4_in_1 = "dx_logo.tiff"; main_ReadImage_4_in_2 = NULL; main_ReadImage_4_in_3 = NULL; main_ReadImage_4_in_4 = NULL; main_ReadImage_4_in_5 = NULL; main_ReadImage_4_in_6 = NULL; main_ReadImage_4_in_7 = NULL; main_ReadImage_4_in_8 = 0; main_ReadImage_4_in_9 = "float"; main_ReadImage_4_out_1 = NULL; main_Integer_2_in_1 = "Integer_2"; main_Integer_2_in_2 = NULL; main_Integer_2_in_3 = 2 ; main_Integer_2_in_4 = NULL; main_Integer_2_in_5 = NULL; main_Integer_2_in_6 = NULL; main_Integer_2_in_7 = NULL; main_Integer_2_in_8 = NULL; main_Integer_2_in_9 = NULL; main_Integer_2_in_10 = NULL; main_Integer_2_in_11 = NULL; main_Integer_2_out_1 = 2 ; main_Reduce_3_out_1 = NULL; main_Mark_2_in_2 = "positions"; main_Mark_2_out_1 = NULL; main_Transmitter_1_out_1 = NULL; main_Receiver_1_out_1 = NULL; main_Compute_19_in_1 = "$0.x"; main_Compute_19_out_1 = NULL; main_Statistics_1_out_5 = NULL; main_Compute_3_in_1 = "3.14159"; main_Compute_3_out_1 = NULL; main_Transmitter_2_out_1 = NULL; main_Receiver_2_out_1 = NULL; main_Compute_17_in_1 = "(($0.x - $1/2.)/$1)*2*$2"; main_Compute_17_out_1 = NULL; main_Transmitter_5_out_1 = NULL; main_Receiver_7_out_1 = NULL; main_Receiver_6_out_1 = NULL; main_Compute_20_in_1 = "$0.y"; main_Compute_20_out_1 = NULL; main_Statistics_2_out_5 = NULL; main_Receiver_3_out_1 = NULL; main_Compute_18_in_1 = "(($0.y - $1/2.0)/$1)*$2"; main_Compute_18_out_1 = NULL; main_Transmitter_6_out_1 = NULL; main_Receiver_10_out_1 = NULL; main_Compute_1_in_1 = "[sin($0), $1, cos($0)]"; main_Compute_1_out_1 = NULL; main_Receiver_8_out_1 = NULL; main_Receiver_9_out_1 = NULL; main_Compute_4_in_1 = "[cos($0)*cos($1), sin($1), -sin($0)*cos($1)]"; main_Compute_4_out_1 = NULL; main_Selector_1_in_1 = "Selector_1"; main_Selector_1_in_2 = "warp to a cylinder" ; main_Selector_1_in_3 = 1 ; main_Selector_1_in_4 = NULL; main_Selector_1_in_5 = NULL; main_Selector_1_in_6 = NULL; main_Selector_1_in_7 = NULL; main_Selector_1_out_1 = 1 ; main_Transmitter_3_out_1 = NULL; main_Receiver_4_out_1 = NULL; main_Transmitter_4_out_1 = NULL; main_Receiver_5_out_1 = NULL; main_Switch_1_out_1 = NULL; main_Unmark_1_in_2 = "positions"; main_Unmark_1_out_1 = NULL; main_Normals_1_in_2 = NULL; main_Normals_1_out_1 = NULL; macro Image( id, object, where, useVector, to, from, width, resolution, aspect, up, viewAngle, perspective, options, buttonState = 1, buttonUpApprox = "none", buttonDownApprox = "none", buttonUpDensity = 1, buttonDownDensity = 1, renderMode = 0, defaultCamera, reset, backgroundColor, throttle, RECenable = 0, RECfile, RECformat, RECresolution, RECaspect, AAenable = 0, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) -> ( object, camera, where) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, interactionMode, title, renderMode, buttonUpApprox, buttonDownApprox, buttonUpDensity, buttonDownDensity) [instance: 1, cache: 1]; autoCamera = AutoCamera( object, "front", object, resolution, aspect, [0,1,0], perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; realCamera = Camera( to, from, width, resolution, aspect, up, perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; coloredDefaultCamera = UpdateCamera(defaultCamera, background=backgroundColor) [instance: 1, cache: 1]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, coloredDefaultCamera, autoCamera) [instance: 1, cache: 1]; resetNull = Inquire( reset, "is null + 1") [instance: 2, cache: 1]; reset = Switch( resetNull, reset, 0) [instance: 2, cache: 1]; whichCamera = Compute( "($0 != 0 || $1 == 0) ? 1 : 2", reset, useVector) [instance: 1, cache: 1]; camera = Switch( whichCamera, resetCamera, realCamera) [instance: 3, cache: 1]; AAobject = AutoAxes( object, camera, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) [instance: 1, cache: 1]; switchAAenable = Compute("$0+1", AAenable) [instance: 2, cache: 1]; object = Switch( switchAAenable, object, AAobject) [instance:4, cache: 1]; SWapproximation_options = Switch( buttonState, buttonUpApprox, buttonDownApprox) [instance: 5, cache: 1]; SWdensity_options = Switch( buttonState, buttonUpDensity, buttonDownDensity) [instance: 6, cache: 1]; HWapproximation_options = Format( "%s,%s", buttonDownApprox, buttonUpApprox) [instance: 1, cache: 1]; HWdensity_options = Format( "%d,%d", buttonDownDensity, buttonUpDensity) [instance: 2, cache: 1]; switchRenderMode = Compute( "$0+1", renderMode) [instance: 3, cache: 1]; approximation_options = Switch( switchRenderMode, SWapproximation_options, HWapproximation_options) [instance: 7, cache: 1]; density_options = Switch( switchRenderMode, SWdensity_options, HWdensity_options) [instance: 8, cache: 1]; renderModeString = Switch( switchRenderMode, "software", "hardware")[instance: 9, cache: 1]; object_tag = Inquire( object, "object tag")[instance: 3, cache: 1]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "object tag", object_tag, "ddcamera", whichCamera, "rendering approximation", approximation_options, "render every", density_options, "button state", buttonState, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 4, cache: 1]; ImageResolution = Inquire( camera, "camera resolution") [instance: 5, cache: 1]; RECresolution = Switch( RECresNull, RECresolution, ImageResolution) [instance: 10, cache: 1]; RECaspectNull = Inquire( RECaspect, "is null + 1") [instance: 6, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 7, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4", RECenable, switchRenderMode, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object); Display( NoRECobject, camera, where, throttle) [instance: 1, cache: 1]; image = Render( RECNoRerenderObject, camera) [instance: 1, cache: 1]; Display( image, NULL, where, throttle) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 1, cache: 1]; rec_where = Display( RECNoRerHW, camera, where, throttle) [instance: 1, cache: 0]; rec_image = ReadImageWindow( rec_where) [instance: 1, cache: 1]; WriteImage( rec_image, RECfile, RECformat) [instance: 1, cache: 1]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 2, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 1, cache: 1]; RECRerenderObject = ScaleScreen( RECRerenderObject, NULL, RECresolution, camera) [instance: 1, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_2_in_1 = "Image_2"; main_Image_2_in_3 = "X24,,"; main_Image_2_in_4 = 1; main_Image_2_in_5 = [7.7486e-07 -0.000184178 -0.00057584]; main_Image_2_in_6 = [5.26497 -5.64568 4.01766]; main_Image_2_in_7 = 2.98266; main_Image_2_in_8 = 344; main_Image_2_in_9 = 0.967; main_Image_2_in_10 = [-0.0117931 0.572511 0.819812]; main_Image_2_in_11 = NULL; main_Image_2_in_12 = 0; main_Image_2_in_13 = NULL; main_Image_2_in_14 = 1; main_Image_2_in_15 = NULL; main_Image_2_in_16 = NULL; main_Image_2_in_17 = NULL; main_Image_2_in_18 = NULL; main_Image_2_in_19 = 0; main_Image_2_in_20 = NULL; main_Image_2_in_21 = NULL; main_Image_2_in_22 = NULL; main_Image_2_in_23 = NULL; main_Image_2_in_25 = NULL; main_Image_2_in_26 = NULL; main_Image_2_in_27 = NULL; main_Image_2_in_28 = NULL; main_Image_2_in_29 = NULL; main_Image_2_in_30 = NULL; main_Image_2_in_31 = NULL; main_Image_2_in_32 = NULL; main_Image_2_in_33 = NULL; main_Image_2_in_34 = NULL; main_Image_2_in_35 = NULL; main_Image_2_in_36 = NULL; main_Image_2_in_37 = NULL; main_Image_2_in_38 = NULL; main_Image_2_in_39 = NULL; main_Image_2_in_40 = NULL; main_Image_2_in_41 = NULL; main_Image_2_in_42 = NULL; main_Image_2_in_43 = NULL; main_Image_2_in_44 = NULL; main_Image_2_in_45 = NULL; main_Image_2_in_46 = NULL; main_Image_2_in_47 = NULL; main_Image_2_in_48 = NULL; Executive("product version 3 1 4"); $sync main();