// // time: Tue Sep 5 08:14:10 1995 // // version: 3.0.0 (format), 3.1.0 (DX) // // // MODULE main // CATEGORY Macros // // comment: This visual program is used as part of the tutorial for Data Explorer. To access the tutorial you can type // comment: dx -tutor // comment: or you can choose "Tutorial..." from the Help menu of any window. // comment: // comment: This visual program is discussed in the section "Tutorial I: Using Data Explorer". To find this section, simply start the tutorial, then follow the instructions given. // comment: // comment: This visual program example includes a Sequencer, a Colormap Editor, and a control panel. You can use these tools to control the visualization. // comment: // comment: If you have the visual program editor open, you can look at how the modules are used to create the visualization. // comment: // comment: First a data field is imported. This data is the electron density field of a water molecule. The Sequencer outputs a series of integers from 0 to 15. The Compute module is used to convert this sequence of integers to a series of isovalues. Double click on the Compute tool to see the formula used. // comment: // comment: The Gradient module takes the gradient of the electron density field, and these values are mapped onto the output of Isosurface. The Colormap Editor is used to color the isosurface based on the magnitude of the gradient at each point on the isosurface. Double-click on the Colormap tool to open the Colormap Editor. Experiment with changing the colormap (you can use Execute on Change to have Data Explorer update the image as rapidly as it can). Double-click on the Sequencer tool to bring up the Sequencer. Experiment with the play forward, reverse, and step buttons. (Note that if you have started Execute on Change, you must choose End Execution before you can use the Sequencer.) // comment: // comment: We have also included a MapToPlane module and an Isosurface tool which will create contour lines on that plane. A selector interactor connected to a Switch tool controls whether or not the plane and contours will be displayed with the isosurface or not. Choose "Open All Control Panels" from the Windows menu to open the control panel. You can control whether or not to show the plane, and you can control how many contour lines are drawn on the plane. // comment: // comment: You can experiment with the direct interactors available in the Image window by first choosing "View Control" in the Options menu of the Image window, and then trying the choices under "Mode". // workspace: width = 664, height = 642 // layout: snap = 0, width = 50, height = 50, align = CC // macro main( ) -> ( ) { // // node Import[1]: x = 31, y = 18, inputs = 6, label = Import // input[1]: defaulting = 0, visible = 1, type = 32, value = "watermolecule" // main_Import_1_out_1 = Import( main_Import_1_in_1, main_Import_1_in_2, main_Import_1_in_3, main_Import_1_in_4, main_Import_1_in_5, main_Import_1_in_6 ) [instance: 1, cache: 1]; // // node Partition[1]: x = 192, y = 25, inputs = 3, label = Partition // main_Partition_1_out_1 = Partition( main_Import_1_out_1, main_Partition_1_in_2, main_Partition_1_in_3 ) [instance: 1, cache: 1]; // // node Sequencer[1]: x = 254, y = 144, inputs = 7, label = Sequencer // input[1]: defaulting = 0, visible = 0, type = 32, value = "Sequencer_1" // input[4]: defaulting = 1, visible = 1, type = 1, value = 0 // input[5]: defaulting = 1, visible = 1, type = 1, value = 15 // input[6]: defaulting = 1, visible = 0, type = 1, value = 1 // input[7]: defaulting = 0, visible = 0, type = 16777217, value = { 0 15 1 0 15 1 } // vcr[1]: min = 0, max = 15, beg = 0, end = 15, cur = 3, inc = 1, loop = off, step = off, pal = off // window: position = (0.0742,0.1133), size = 0.2188x0.0781 // main_Sequencer_1_out_1 = @frame; // // node Compute[1]: x = 168, y = 164, inputs = 2, label = The Compute tool converts the integers output by the Sequencer to a series of isovalues // input[1]: defaulting = 0, visible = 0, type = 32, value = "$0*0.02 + 0.2" // expression: value = frame*0.02 + 0.2 // name[2]: value = frame // main_Compute_1_out_1 = Compute( main_Compute_1_in_1, main_Sequencer_1_out_1 ) [instance: 1, cache: 1]; // // node Isosurface[1]: x = 0, y = 185, inputs = 6, label = Isosurface // main_Isosurface_1_out_1 = Isosurface( main_Partition_1_out_1, main_Compute_1_out_1, main_Isosurface_1_in_3, main_Isosurface_1_in_4, main_Isosurface_1_in_5, main_Isosurface_1_in_6 ) [instance: 1, cache: 1]; // // node Gradient[1]: x = 324, y = 239, inputs = 2, label = Gradient // main_Gradient_1_out_1 = Gradient( main_Partition_1_out_1, main_Gradient_1_in_2 ) [instance: 1, cache: 1]; // // node Map[1]: x = 52, y = 308, inputs = 4, label = Map // main_Map_1_out_1 = Map( main_Isosurface_1_out_1, main_Gradient_1_out_1, main_Map_1_in_3, main_Map_1_in_4 ) [instance: 1, cache: 1]; // // node Colormap[1]: x = 156, y = 355, inputs = 19, label = Colormap // input[1]: defaulting = 0, visible = 0, type = 16777224, value = { [0.0 0.666667] [0.995556 0.00299] [1.0 0.0] } // input[2]: defaulting = 0, visible = 0, type = 16777224, value = { [0.0 1.0] [0.995556 1.0] [1.0 1.0] } // input[3]: defaulting = 0, visible = 0, type = 16777224, value = { [0.0 1.0] [0.995556 1.0] [1.0 1.0] } // input[4]: defaulting = 0, visible = 0, type = 16777224, value = { [0.0 1.0] [0.950228 1.0] [1.0 1.0] } // input[5]: defaulting = 0, visible = 0, type = 32, value = "Colormap_1" // input[7]: defaulting = 1, visible = 0, type = 5, value = 0.0 // input[8]: defaulting = 1, visible = 0, type = 5, value = 2.5 // input[9]: defaulting = 1, visible = 0, type = 1, value = 20 // input[12]: defaulting = 0, visible = 0, type = 16777221, value = { 0.0 2.5 } // window: position = (25.5992,31.9990), size = 25.5992x31.9990 // main_Colormap_1_out_1[cache: 2], main_Colormap_1_out_2[cache: 2] = Colormap( main_Colormap_1_in_1, main_Colormap_1_in_2, main_Colormap_1_in_3, main_Colormap_1_in_4, main_Colormap_1_in_5, main_Colormap_1_in_6, main_Colormap_1_in_7, main_Colormap_1_in_8, main_Colormap_1_in_9, main_Colormap_1_in_10, main_Colormap_1_in_11, main_Colormap_1_in_12, main_Colormap_1_in_13, main_Colormap_1_in_14, main_Colormap_1_in_15, main_Colormap_1_in_16, main_Colormap_1_in_17, main_Colormap_1_in_18, main_Colormap_1_in_19 ) [instance: 1, cache: 1]; // // node Color[1]: x = 91, y = 444, inputs = 5, label = Color // main_Color_1_out_1 = Color( main_Map_1_out_1, main_Colormap_1_out_1, main_Colormap_1_out_2, main_Color_1_in_4, main_Color_1_in_5 ) [instance: 1, cache: 1]; // // node Selector[1]: x = 350, y = 420, inputs = 7, label = Selector // input[1]: defaulting = 0, visible = 0, type = 32, value = "Selector_1" // input[2]: defaulting = 0, visible = 0, type = 32, value = "off" // input[3]: defaulting = 0, visible = 0, type = 29, value = 0 // input[4]: defaulting = 1, visible = 1, type = 16777248, value = { "on" "off" } // input[5]: defaulting = 1, visible = 0, type = 16777245, value = { 1 0 } // output[1]: visible = 1, type = 29, value = 0 // output[2]: visible = 1, type = 32, value = "off" // // // node MapToPlane[1]: x = 446, y = 193, inputs = 3, label = MapToPlane // input[2]: defaulting = 0, visible = 1, type = 8, value = [1, 0.3, -0.5] // input[3]: defaulting = 0, visible = 1, type = 8, value = [0, 1, 1] // main_MapToPlane_1_out_1 = MapToPlane( main_Partition_1_out_1, main_MapToPlane_1_in_2, main_MapToPlane_1_in_3 ) [instance: 1, cache: 1]; // // node AutoColor[1]: x = 413, y = 290, inputs = 10, label = AutoColor // main_AutoColor_1_out_1, main_AutoColor_1_out_2 = AutoColor( main_MapToPlane_1_out_1, main_AutoColor_1_in_2, main_AutoColor_1_in_3, main_AutoColor_1_in_4, main_AutoColor_1_in_5, main_AutoColor_1_in_6, main_AutoColor_1_in_7, main_AutoColor_1_in_8, main_AutoColor_1_in_9, main_AutoColor_1_in_10 ) [instance: 1, cache: 1]; // // node Integer[1]: x = 608, y = 314, inputs = 11, label = Integer // input[1]: defaulting = 0, visible = 0, type = 32, value = "Integer_1" // input[3]: defaulting = 0, visible = 0, type = 1, value = 3 // input[4]: defaulting = 0, 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 = 10 // input[7]: defaulting = 1, visible = 0, type = 5, value = 1.00000 // input[9]: defaulting = 1, visible = 0, type = 1, value = 5 // output[1]: visible = 1, type = 1, value = 3 // // // node Isosurface[2]: x = 504, y = 404, inputs = 6, label = Isosurface // main_Isosurface_2_out_1 = Isosurface( main_AutoColor_1_out_1, main_Isosurface_2_in_2, main_Integer_1_out_1, main_Isosurface_2_in_4, main_Isosurface_2_in_5, main_Isosurface_2_in_6 ) [instance: 2, cache: 1]; // // node Color[2]: x = 564, y = 480, inputs = 5, label = Color // input[2]: defaulting = 0, visible = 1, type = 32, value = "black" // main_Color_2_out_1 = Color( main_Isosurface_2_out_1, main_Color_2_in_2, main_Color_2_in_3, main_Color_2_in_4, main_Color_2_in_5 ) [instance: 2, cache: 1]; // // node Collect[2]: x = 485, y = 514, inputs = 2, label = Collect // main_Collect_2_out_1 = Collect( main_AutoColor_1_out_1, main_Color_2_out_1 ) [instance: 2, cache: 1]; // // node Switch[1]: x = 392, y = 505, inputs = 2, label = Switch // main_Switch_1_out_1 = Switch( main_Selector_1_out_1, main_Collect_2_out_1 ) [instance: 1, cache: 1]; // // node Collect[1]: x = 249, y = 527, inputs = 2, label = Collect // main_Collect_1_out_1 = Collect( main_Color_1_out_1, main_Switch_1_out_1 ) [instance: 1, cache: 1]; // // node Image[1]: x = 318, y = 579, inputs = 42, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [1.08133 0 -1] // input[6]: defaulting = 0, visible = 0, type = 8, value = [1.08133 0 5.34553] // input[7]: defaulting = 0, visible = 0, type = 5, value = 3.40057 // input[8]: defaulting = 0, visible = 0, type = 1, value = 640 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.735 // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0] // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0001 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 0, visible = 0, type = 32, value = "none" // input[16]: defaulting = 0, visible = 0, type = 32, value = "dots" // input[17]: defaulting = 0, visible = 0, type = 1, value = 1 // input[18]: defaulting = 0, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 3, value = 0 // input[29]: defaulting = 1, visible = 0, type = 3, value = 0 // depth: value = 8 // window: position = (0.4039,0.1826), size = 0.5109x0.5020 // interaction mode = NONE // internal caching: 1 // main_Image_1_out_1, main_Image_1_out_2 = Image( main_Image_1_in_1, main_Collect_1_out_1, main_Image_1_in_3, main_Image_1_in_4, main_Image_1_in_5, main_Image_1_in_6, main_Image_1_in_7, main_Image_1_in_8, main_Image_1_in_9, main_Image_1_in_10, main_Image_1_in_11, main_Image_1_in_12, main_Image_1_in_13, main_Image_1_in_14, main_Image_1_in_15, main_Image_1_in_16, main_Image_1_in_17, main_Image_1_in_18, main_Image_1_in_19, main_Image_1_in_20, main_Image_1_in_21, main_Image_1_in_22, main_Image_1_in_23, main_Image_1_in_24, main_Image_1_in_25, main_Image_1_in_26, main_Image_1_in_27, main_Image_1_in_28, main_Image_1_in_29, main_Image_1_in_30, main_Image_1_in_31, main_Image_1_in_32, main_Image_1_in_33, main_Image_1_in_34, main_Image_1_in_35, main_Image_1_in_36, main_Image_1_in_37, main_Image_1_in_38, main_Image_1_in_39, main_Image_1_in_40, main_Image_1_in_41, main_Image_1_in_42 ) [instance: 1, cache: 1]; // network: end of macro body CacheScene("Image_1", main_Image_1_out_1, main_Image_1_out_2); } main_Import_1_in_1 = "watermolecule"; main_Import_1_in_2 = NULL; main_Import_1_in_3 = NULL; main_Import_1_in_4 = NULL; main_Import_1_in_5 = NULL; main_Import_1_in_6 = NULL; main_Import_1_out_1 = NULL; main_Partition_1_in_2 = NULL; main_Partition_1_in_3 = NULL; main_Partition_1_out_1 = NULL; main_Sequencer_1_in_1 = "Sequencer_1"; main_Sequencer_1_in_2 = NULL; main_Sequencer_1_in_3 = NULL; main_Sequencer_1_in_4 = NULL; main_Sequencer_1_in_5 = NULL; main_Sequencer_1_in_6 = NULL; main_Sequencer_1_in_7 = { 0 15 1 0 15 1 }; main_Sequencer_1_out_1 = NULL; @startframe = 0; @nextframe = @startframe; @endframe = 15; @deltaframe = 1; main_Compute_1_in_1 = "$0*0.02 + 0.2"; main_Compute_1_out_1 = NULL; main_Isosurface_1_in_3 = NULL; main_Isosurface_1_in_4 = NULL; main_Isosurface_1_in_5 = NULL; main_Isosurface_1_in_6 = NULL; main_Isosurface_1_out_1 = NULL; main_Gradient_1_in_2 = NULL; main_Gradient_1_out_1 = NULL; main_Map_1_in_3 = NULL; main_Map_1_in_4 = NULL; main_Map_1_out_1 = NULL; main_Colormap_1_in_1 = { [0.0 0.666667] [0.995556 0.00299] [1.0 0.0] }; main_Colormap_1_in_2 = { [0.0 1.0] [0.995556 1.0] [1.0 1.0] }; main_Colormap_1_in_3 = { [0.0 1.0] [0.995556 1.0] [1.0 1.0] }; main_Colormap_1_in_4 = { [0.0 1.0] [0.950228 1.0] [1.0 1.0] }; main_Colormap_1_in_5 = "Colormap_1"; main_Colormap_1_in_6 = NULL; main_Colormap_1_in_7 = NULL; main_Colormap_1_in_8 = NULL; main_Colormap_1_in_9 = NULL; main_Colormap_1_in_10 = NULL; main_Colormap_1_in_11 = NULL; main_Colormap_1_in_12 = { 0.0 2.5 }; main_Colormap_1_in_13 = NULL; main_Colormap_1_in_14 = NULL; main_Colormap_1_in_15 = NULL; main_Colormap_1_in_16 = NULL; main_Colormap_1_in_17 = NULL; main_Colormap_1_in_18 = NULL; main_Colormap_1_in_19 = NULL; main_Colormap_1_out_1 = NULL; main_Colormap_1_out_2 = NULL; main_Color_1_in_4 = NULL; main_Color_1_in_5 = NULL; main_Color_1_out_1 = NULL; main_Selector_1_in_1 = "Selector_1"; main_Selector_1_in_2 = "off" ; main_Selector_1_in_3 = 0 ; 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 = 0 ; main_MapToPlane_1_in_2 = [1, 0.3, -0.5]; main_MapToPlane_1_in_3 = [0, 1, 1]; main_MapToPlane_1_out_1 = NULL; main_AutoColor_1_in_2 = NULL; main_AutoColor_1_in_3 = NULL; main_AutoColor_1_in_4 = NULL; main_AutoColor_1_in_5 = NULL; main_AutoColor_1_in_6 = NULL; main_AutoColor_1_in_7 = NULL; main_AutoColor_1_in_8 = NULL; main_AutoColor_1_in_9 = NULL; main_AutoColor_1_in_10 = NULL; main_AutoColor_1_out_1 = NULL; main_Integer_1_in_1 = "Integer_1"; main_Integer_1_in_2 = NULL; main_Integer_1_in_3 = 3 ; main_Integer_1_in_4 = 0; main_Integer_1_in_5 = NULL; main_Integer_1_in_6 = NULL; main_Integer_1_in_7 = NULL; main_Integer_1_in_8 = NULL; main_Integer_1_in_9 = NULL; main_Integer_1_in_10 = NULL; main_Integer_1_in_11 = NULL; main_Integer_1_out_1 = 3 ; main_Isosurface_2_in_2 = NULL; main_Isosurface_2_in_4 = NULL; main_Isosurface_2_in_5 = NULL; main_Isosurface_2_in_6 = NULL; main_Isosurface_2_out_1 = NULL; main_Color_2_in_2 = "black"; main_Color_2_in_3 = NULL; main_Color_2_in_4 = NULL; main_Color_2_in_5 = NULL; main_Color_2_out_1 = NULL; main_Collect_2_out_1 = NULL; main_Switch_1_out_1 = NULL; main_Collect_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) -> ( object, camera) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title) [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]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, defaultCamera, 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) [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]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "rendering approximation", approximation_options, "render every", density_options, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 3, 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: 4, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 5, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($1 == $2) && ($3 == $4)) ? 2 : 3", RECenable, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, 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]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 1, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 3, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_1_in_1 = "Image_1"; main_Image_1_in_3 = "X8,,"; main_Image_1_in_4 = 1; main_Image_1_in_5 = [1.08133 0 -1]; main_Image_1_in_6 = [1.08133 0 5.34553]; main_Image_1_in_7 = 3.40057; main_Image_1_in_8 = 640; main_Image_1_in_9 = 0.735; main_Image_1_in_10 = [0 1 0]; main_Image_1_in_11 = NULL; main_Image_1_in_12 = 0; main_Image_1_in_13 = NULL; main_Image_1_in_14 = 1; main_Image_1_in_15 = "none"; main_Image_1_in_16 = "dots"; main_Image_1_in_17 = 1; main_Image_1_in_18 = 1; main_Image_1_in_19 = 0; main_Image_1_in_20 = NULL; main_Image_1_in_21 = NULL; main_Image_1_in_22 = NULL; main_Image_1_in_23 = NULL; main_Image_1_in_25 = NULL; main_Image_1_in_26 = NULL; main_Image_1_in_27 = NULL; main_Image_1_in_28 = NULL; main_Image_1_in_29 = NULL; main_Image_1_in_30 = NULL; main_Image_1_in_31 = NULL; main_Image_1_in_32 = NULL; main_Image_1_in_33 = NULL; main_Image_1_in_34 = NULL; main_Image_1_in_35 = NULL; main_Image_1_in_36 = NULL; main_Image_1_in_37 = NULL; main_Image_1_in_38 = NULL; main_Image_1_in_39 = NULL; main_Image_1_in_40 = NULL; main_Image_1_in_41 = NULL; main_Image_1_in_42 = NULL; Executive("product version 3 1 0"); $sync sequence main(); play;