//
// time: Wed Apr  9 15:48:20 1997
//
// version: 3.1.1 (format), 3.1.4 (DX Beta)
//
//
// MODULE main
//
// comment: This visual program illustrates some of the uses of the Text module, and text glyphs. Two data sets are used, "labels.dx" and "oriented_labels.dx". Each of these consists of 4 positions, and 4 data values. The four data values are of type string, and are the strings "this" "is" "annotation" "text". The file "oriented_labels.dx", in addition, specifies "tangents" and "binormals" components which can be used by the Text module to define an orientation for the output text.
// comment: 
// comment: Use the selector interactor in the control panel (choose "Open All Control Panels" from the Windows menu) to choose whether to show the labels as imported using the Text module, or whether to show the position number next to the position of a given data value, or whether to use AutoGlyph to display the string data contained in the file.
// comment: 
// comment: The first choice, "labels", uses Text to display the label information. If "label data" is used, then the orientation of the labels is the default of the Text module: they are oriented in the x direction, with positive y as up. If, on the other hand, oriented label data is used, the orientation of the text is defined by the tangents and binormals components of the imported data.
// comment: 
// comment: The second choice, "positions", shows you how to mark a position with its index. This is often useful in debugging your own programs, to make sure that the positions are where you think they are. The integer interactor allows you to choose which position to show. Extract is used to extract the positions component, and Inquire is used to find out how many positions there are, so that the interactor can be constrained to not exceed the number of positions present.  Construct is used to create a field with one position (the ith position), and one data value (the index of that position). This is passed to AutoGlyph, which creates a text glyph. Note that for text glyphs (in contrast to the output of Text), as you rotate the object in the image window, the text always remains facing you.
// comment: 
// comment: The third choice, "use glyph on imported data", uses the AutoGlyph module directly on the imported data. Again, the strings "this" "is" "annotation" "data" will appear at the four positions, but in this case the text will always remain facing the viewer.
// page assignment: AutoGlyph	order=4, windowed=0, showing=0
// page assignment: Text	order=3, windowed=0, showing=0
// page assignment: image	order=5, windowed=0, showing=0
// page assignment: import	order=2, windowed=0, showing=1
// workspace: width = 342, height = 393
// layout: snap = 0, width = 50, height = 50, align = UL
//
macro main(
) -> (
) {
    // 
    // node Import[1]: x = 20, y = 20, inputs = 6, label = Import
    // input[1]: defaulting = 0, visible = 1, type = 32, value = "labels.dx"
    // page group: import
    //
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 Transmitter[2]: x = 42, y = 321, inputs = 1, label = labels
    // page group: import
    //
labels = main_Import_1_out_1;
    // 
    // node Receiver[2]: x = 88, y = 24, inputs = 1, label = labels
    // page group: AutoGlyph
    //
main_Receiver_2_out_1[cache: 0] = labels;
    // 
    // node Extract[1]: x = 40, y = 108, inputs = 2, label = Extract
    // input[2]: defaulting = 0, visible = 1, type = 32, value = "positions"
    // page group: AutoGlyph
    //
main_Extract_1_out_1 = 
    Extract(
    main_Receiver_2_out_1,
    main_Extract_1_in_2
    ) [instance: 1, cache: 1];
    // 
    // node Inquire[1]: x = 239, y = 133, inputs = 3, label = Inquire
    // input[2]: defaulting = 0, visible = 1, type = 32, value = "items"
    // page group: AutoGlyph
    //
main_Inquire_1_out_1 = 
    Inquire(
    main_Extract_1_out_1,
    main_Inquire_1_in_2,
    main_Inquire_1_in_3
    ) [instance: 1, cache: 1];
    // 
    // node Compute[1]: x = 227, y = 223, inputs = 2, label = Compute
    // input[1]: defaulting = 0, visible = 0, type = 32, value = "$0-1"
    // page group: AutoGlyph
    // expression: value = a-1
    // name[2]: value = a
    //
main_Compute_1_out_1 = 
    Compute(
    main_Compute_1_in_1,
    main_Inquire_1_out_1
    ) [instance: 1, cache: 1];
    // 
    // node Integer[1]: x = 148, y = 295, inputs = 11, label = Integer
    // input[1]: defaulting = 0, visible = 0, type = 32, value = "Integer_1"
    // input[3]: defaulting = 0, visible = 0, type = 1, value = 1 
    // input[4]: defaulting = 1, visible = 0, type = 1, value = 0
    // input[5]: defaulting = 0, visible = 1, type = 1, value = 0
    // input[6]: defaulting = 1, visible = 1, type = 1, value = 3
    // input[7]: defaulting = 1, visible = 0, type = 5, value = 1.00000
    // input[8]: defaulting = 1, visible = 0, type = 32, value = "0"
    // input[9]: defaulting = 1, visible = 0, type = 1, value = 0
    // output[1]: visible = 1, type = 1, value = 1 
    // page group: AutoGlyph
    //
main_Integer_1_out_1[cache: 2] = 
    Integer(
    main_Integer_1_in_1,
    main_Integer_1_in_2,
    main_Integer_1_in_3,
    main_Integer_1_in_4,
    main_Integer_1_in_5,
    main_Compute_1_out_1,
    main_Integer_1_in_7,
    main_Integer_1_in_8,
    main_Integer_1_in_9,
    main_Integer_1_in_10,
    main_Integer_1_in_11
    ) [instance: 1, cache: 1];
    // 
    // node Select[1]: x = 58, y = 295, inputs = 3, label = Select
    // page group: AutoGlyph
    //
main_Select_1_out_1 = 
    Select(
    main_Extract_1_out_1,
    main_Integer_1_out_1,
    main_Select_1_in_3
    ) [instance: 1, cache: 1];
    // 
    // node Construct[1]: x = 90, y = 387, inputs = 4, label = Construct
    // page group: AutoGlyph
    //
main_Construct_1_out_1 = 
    Construct(
    main_Select_1_out_1,
    main_Construct_1_in_2,
    main_Construct_1_in_3,
    main_Integer_1_out_1
    ) [instance: 1, cache: 1];
    // 
    // node AutoGlyph[1]: x = 89, y = 469, inputs = 7, label = AutoGlyph
    // input[2]: defaulting = 0, visible = 1, type = 32, value = "text font=italic_d"
    // input[4]: defaulting = 0, visible = 1, type = 5, value = 3.00000
    // page group: AutoGlyph
    //
main_AutoGlyph_1_out_1 = 
    AutoGlyph(
    main_Construct_1_out_1,
    main_AutoGlyph_1_in_2,
    main_AutoGlyph_1_in_3,
    main_AutoGlyph_1_in_4,
    main_AutoGlyph_1_in_5,
    main_AutoGlyph_1_in_6,
    main_AutoGlyph_1_in_7
    ) [instance: 1, cache: 1];
    // 
    // node AutoGlyph[2]: x = 451, y = 410, inputs = 7, label = AutoGlyph
    // input[2]: defaulting = 0, visible = 1, type = 32, value = "text font=gothicit_t"
    // input[4]: defaulting = 0, visible = 1, type = 5, value = 2.00000
    // page group: AutoGlyph
    //
main_AutoGlyph_2_out_1 = 
    AutoGlyph(
    main_Receiver_2_out_1,
    main_AutoGlyph_2_in_2,
    main_AutoGlyph_2_in_3,
    main_AutoGlyph_2_in_4,
    main_AutoGlyph_2_in_5,
    main_AutoGlyph_2_in_6,
    main_AutoGlyph_2_in_7
    ) [instance: 2, cache: 1];
    // 
    // node Selector[2]: x = 0, y = 93, inputs = 7, label = Selector
    // input[1]: defaulting = 0, visible = 0, type = 32, value = "Selector_2"
    // input[2]: defaulting = 0, visible = 0, type = 32, value = "Text on labels data file" 
    // input[3]: defaulting = 0, visible = 0, type = 29, value = 1 
    // input[4]: defaulting = 1, visible = 1, type = 16777248, value = { "Text on labels data file" "Text on oriented labels data file" "show the nth position" "use glyph on label data file" }
    // input[5]: defaulting = 1, visible = 0, type = 16777245, value = { 1 2 3 4 }
    // 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 = "Text on labels data file" 
    // page group: image
    //
    // 
    // node Receiver[10]: x = 30, y = 20, inputs = 1, label = labels
    // page group: Text
    //
main_Receiver_10_out_1[cache: 0] = labels;
    // 
    // node Text[1]: x = 33, y = 199, inputs = 6, label = Text
    // input[3]: defaulting = 0, visible = 1, type = 5, value = .7
    // input[4]: defaulting = 0, visible = 1, type = 32, value = "italic_d"
    // page group: Text
    //
main_Text_1_out_1 = 
    Text(
    main_Receiver_10_out_1,
    main_Text_1_in_2,
    main_Text_1_in_3,
    main_Text_1_in_4,
    main_Text_1_in_5,
    main_Text_1_in_6
    ) [instance: 1, cache: 1];
    // 
    // node Transmitter[4]: x = 20, y = 440, inputs = 1, label = text_module_on_labels
    // page group: Text
    //
text_module_on_labels = main_Text_1_out_1;
    // 
    // node Receiver[4]: x = 24, y = 19, inputs = 1, label = text_module_on_labels
    // page group: image
    //
main_Receiver_4_out_1[cache: 0] = text_module_on_labels;
    // 
    // node Import[2]: x = 190, y = 25, inputs = 6, label = Import
    // input[1]: defaulting = 0, visible = 1, type = 32, value = "oriented_labels.dx"
    // page group: import
    //
main_Import_2_out_1 = 
    Import(
    main_Import_2_in_1,
    main_Import_2_in_2,
    main_Import_2_in_3,
    main_Import_2_in_4,
    main_Import_2_in_5,
    main_Import_2_in_6
    ) [instance: 2, cache: 1];
    // 
    // node Transmitter[3]: x = 238, y = 331, inputs = 1, label = oriented_labels
    // page group: import
    //
oriented_labels = main_Import_2_out_1;
    // 
    // node Receiver[3]: x = 124, y = 25, inputs = 1, label = oriented_labels
    // page group: Text
    //
main_Receiver_3_out_1[cache: 0] = oriented_labels;
    // 
    // node Text[2]: x = 193, y = 197, inputs = 6, label = Text
    // input[3]: defaulting = 0, visible = 1, type = 5, value = .7
    // input[4]: defaulting = 0, visible = 1, type = 32, value = "italic_d"
    // page group: Text
    //
main_Text_2_out_1 = 
    Text(
    main_Receiver_3_out_1,
    main_Text_2_in_2,
    main_Text_2_in_3,
    main_Text_2_in_4,
    main_Text_2_in_5,
    main_Text_2_in_6
    ) [instance: 2, cache: 1];
    // 
    // node Transmitter[5]: x = 181, y = 446, inputs = 1, label = text_module_on_oriented_labels
    // page group: Text
    //
text_module_on_oriented_labels = main_Text_2_out_1;
    // 
    // node Receiver[5]: x = 180, y = 24, inputs = 1, label = text_module_on_oriented_labels
    // page group: image
    //
main_Receiver_5_out_1[cache: 0] = text_module_on_oriented_labels;
    // 
    // node Transmitter[6]: x = 82, y = 575, inputs = 1, label = show_nth_position
    // page group: AutoGlyph
    //
show_nth_position = main_AutoGlyph_1_out_1;
    // 
    // node Receiver[6]: x = 415, y = 25, inputs = 1, label = show_nth_position
    // page group: image
    //
main_Receiver_6_out_1[cache: 0] = show_nth_position;
    // 
    // node Transmitter[7]: x = 385, y = 576, inputs = 1, label = autoglyph_on_labels
    // page group: AutoGlyph
    //
autoglyph_on_labels = main_AutoGlyph_2_out_1;
    // 
    // node Receiver[9]: x = 555, y = 29, inputs = 1, label = autoglyph_on_labels
    // page group: image
    //
main_Receiver_9_out_1[cache: 0] = autoglyph_on_labels;
    // 
    // node Switch[2]: x = 123, y = 304, inputs = 5, label = Switch
    // page group: image
    //
main_Switch_2_out_1 = 
    Switch(
    main_Selector_2_out_1,
    main_Receiver_4_out_1,
    main_Receiver_5_out_1,
    main_Receiver_6_out_1,
    main_Receiver_9_out_1
    ) [instance: 2, cache: 1];
    // 
    // node ShowBox[1]: x = 99, y = 213, inputs = 1, label = ShowBox
    // page group: import
    //
main_ShowBox_1_out_1,
main_ShowBox_1_out_2 = 
    ShowBox(
    main_Import_1_out_1
    ) [instance: 1, cache: 1];
    // 
    // node Transmitter[1]: x = 119, y = 325, inputs = 1, label = box
    // page group: import
    //
box = main_ShowBox_1_out_1;
    // 
    // node Receiver[1]: x = 663, y = 119, inputs = 1, label = box
    // page group: image
    //
main_Receiver_1_out_1[cache: 0] = box;
    // 
    // node Collect[2]: x = 263, y = 391, inputs = 2, label = Collect
    // page group: image
    //
main_Collect_2_out_1 = 
    Collect(
    main_Switch_2_out_1,
    main_Receiver_1_out_1
    ) [instance: 2, cache: 1];
    // 
    // node Image[2]: x = 153, y = 475, 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 = [3.19564 2.73646 0]
    // input[6]: defaulting = 0, visible = 0, type = 8, value = [3.19564 2.73646 21.1445]
    // input[7]: defaulting = 0, visible = 0, type = 5, value = 11.3313
    // input[8]: defaulting = 0, visible = 0, type = 1, value = 640
    // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.75
    // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0]
    // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0
    // 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 = 3, value = 0
    // input[29]: defaulting = 1, visible = 0, type = 3, value = 0
    // page group: image
    // depth: value = 24
    // window: position = (0.3852,0.0508), size = 0.5109x0.5117
    // internal caching: 1
    //
main_Image_2_out_1,
main_Image_2_out_2,
main_Image_2_out_3 = 
    Image(
    main_Image_2_in_1,
    main_Collect_2_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=(310,92) size=310x28 style(Label), value = <NULL>
    // annotation user_begin: 43
    // annotation user: using the Text module on the imported files
    // annotation user_end: <NULL>
    // page group: Text
    //
    // decorator Annotate	pos=(250,20) size=407x44 style(Label), value = <NULL>
    // annotation user_begin: 99
    // annotation user: Using AutoGlyph to show either the nth position (using a
    // annotation user: data-driven interactor) or the string data
    // annotation user_end: <NULL>
    // page group: AutoGlyph
    //
    // decorator Annotate	pos=(105,579) size=246x28 style(Label), value = <NULL>
    // annotation user_begin: 32
    // annotation user: The user can choose which to see
    // annotation user_end: <NULL>
    // page group: image
// network: end of macro body
CacheScene("Image_2", main_Image_2_out_1, main_Image_2_out_2);
}
main_Import_1_in_1 = "labels.dx";
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_Transmitter_2_out_1 = NULL;
main_Receiver_2_out_1 = NULL;
main_Extract_1_in_2 = "positions";
main_Extract_1_out_1 = NULL;
main_Inquire_1_in_2 = "items";
main_Inquire_1_in_3 = NULL;
main_Inquire_1_out_1 = NULL;
main_Compute_1_in_1 = "$0-1";
main_Compute_1_out_1 = NULL;
main_Integer_1_in_1 = "Integer_1";
main_Integer_1_in_2 = NULL;
main_Integer_1_in_3 = 1 ;
main_Integer_1_in_4 = NULL;
main_Integer_1_in_5 = 0;
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 = 1 ;
main_Select_1_in_3 = NULL;
main_Select_1_out_1 = NULL;
main_Construct_1_in_2 = NULL;
main_Construct_1_in_3 = NULL;
main_Construct_1_out_1 = NULL;
main_AutoGlyph_1_in_2 = "text font=italic_d";
main_AutoGlyph_1_in_3 = NULL;
main_AutoGlyph_1_in_4 = 3.00000;
main_AutoGlyph_1_in_5 = NULL;
main_AutoGlyph_1_in_6 = NULL;
main_AutoGlyph_1_in_7 = NULL;
main_AutoGlyph_1_out_1 = NULL;
main_AutoGlyph_2_in_2 = "text font=gothicit_t";
main_AutoGlyph_2_in_3 = NULL;
main_AutoGlyph_2_in_4 = 2.00000;
main_AutoGlyph_2_in_5 = NULL;
main_AutoGlyph_2_in_6 = NULL;
main_AutoGlyph_2_in_7 = NULL;
main_AutoGlyph_2_out_1 = NULL;
main_Selector_2_in_1 = "Selector_2";
main_Selector_2_in_2 = "Text on labels data file" ;
main_Selector_2_in_3 = 1 ;
main_Selector_2_in_4 = NULL;
main_Selector_2_in_5 = NULL;
main_Selector_2_in_6 = NULL;
main_Selector_2_in_7 = NULL;
main_Selector_2_out_1 = 1 ;
main_Receiver_10_out_1 = NULL;
main_Text_1_in_2 = NULL;
main_Text_1_in_3 = .7;
main_Text_1_in_4 = "italic_d";
main_Text_1_in_5 = NULL;
main_Text_1_in_6 = NULL;
main_Text_1_out_1 = NULL;
main_Transmitter_4_out_1 = NULL;
main_Receiver_4_out_1 = NULL;
main_Import_2_in_1 = "oriented_labels.dx";
main_Import_2_in_2 = NULL;
main_Import_2_in_3 = NULL;
main_Import_2_in_4 = NULL;
main_Import_2_in_5 = NULL;
main_Import_2_in_6 = NULL;
main_Import_2_out_1 = NULL;
main_Transmitter_3_out_1 = NULL;
main_Receiver_3_out_1 = NULL;
main_Text_2_in_2 = NULL;
main_Text_2_in_3 = .7;
main_Text_2_in_4 = "italic_d";
main_Text_2_in_5 = NULL;
main_Text_2_in_6 = NULL;
main_Text_2_out_1 = NULL;
main_Transmitter_5_out_1 = NULL;
main_Receiver_5_out_1 = NULL;
main_Transmitter_6_out_1 = NULL;
main_Receiver_6_out_1 = NULL;
main_Transmitter_7_out_1 = NULL;
main_Receiver_9_out_1 = NULL;
main_Switch_2_out_1 = NULL;
main_ShowBox_1_out_1 = NULL;
main_Transmitter_1_out_1 = NULL;
main_Receiver_1_out_1 = NULL;
main_Collect_2_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 = [3.19564 2.73646 0];
main_Image_2_in_6 = [3.19564 2.73646 21.1445];
main_Image_2_in_7 = 11.3313;
main_Image_2_in_8 = 640;
main_Image_2_in_9 = 0.75;
main_Image_2_in_10 = [0 1 0];
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();
