{
  "information": {
    "Title": "Light and Shadow One Light Source, One Object and One Screen version",
    "Author": [
      "Andrew Duffy",
      "lookang (weelookang@gmail.com)",
      "Tina Tan"
    ],
    "AuthorLogo": [
      "./01authorandrewduffy.png",
      "./01authorlookang50x50.png"
    ],
    "Password": "",
    "Keywords": "light, shadow, color",
    "Abstract": "",
    "Copyright": "Creative Commons Attribution",
    "Level": "introductory, high school, middle school",
    "Language": "",
    "Logo": [
      "./Light/Screenshot 2021-04-14 at 9.49.27 AM (2).png"
    ],
    "RunAlways": "true",
    "ModelTab": "",
    "ModelTabTitle": "",
    "ModelName": "",
    "FixedNavigationBar": "false",
    "CSSFile": "",
    "DetectedFiles": [
      "./01authorandrewduffy.png",
      "./01authorlookang50x50.png",
      "./Light/Screenshot 2021-04-14 at 9.49.27 AM (2).png"
    ],
    "AuxiliaryFiles": [
      "./Light/"
    ],
    "HTMLHead": "<script async=\"true\" src=\"https://www.googletagmanager.com/gtag/js?id=UA-3326007-19\"></script>\n<script>\n  window.dataLayer = window.dataLayer || [];\n  function gtag(){dataLayer.push(arguments);}\n  gtag('js', new Date());\n  gtag('config', 'UA-3326007-19');\n</script>\n<script data-ad-client=\"ca-pub-0121577198857509\" async=\"true\" src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>",
    "SaveInXMLFormat": "false",
    "IncludeSource": "true",
    "IncludeLibrary": "true",
    "UglifyJS": "false",
    "PreviewFullModel": "false",
    "UseInterpreter": "true",
    "UseDeltaForODE": "false"
  },
  "description": {
    "pages": [
      {
        "Name": "Light and Shadows",
        "Active": "true",
        "Internal": "false",
        "Type": "DESCRIPTION_EDITOR",
        "Locale": "_default_",
        "Title": "Light and Shadows",
        "External": "false",
        "Code": "<html>\n<head></head>\n<body>\n<p> </p><h1>      Light and Shadows    </h1><p> </p><p>      The main point of this simulation is to show that light rays leaving an       object travel in straight lines. The simulation has two light bulbs that       can be turned on or off independently. The bulbs can be dragged around       the screen to change their positions. The light from the bulbs either       passes through a mask with a hole in it, or it is blocked by an object,       as it travels to a screen on the right of the simulation. Investigate       how the patterns of light and shadows change as you move the bulbs, the       mask or object, and/or the screen, and as you change the size of the       mask or object.    </p><p> </p><p>      For more info: <a href=\"http://weelookang.blogspot.sg/2013/08/refraction-model.html\">http://weelookang.blogspot.sg/2013/08/refraction-model.html</a> </p><p> </p>\n</body>\n</html>"
      },
      {
        "Name": "For Teachers",
        "Active": "true",
        "Internal": "false",
        "Type": "DESCRIPTION_EDITOR",
        "Locale": "_default_",
        "Title": "For Teachers",
        "External": "false",
        "Code": "<html>\n<head></head>\n<body>\n<p> </p><h1>      Activities    </h1><p> </p><ol><li>        Start with the mask and just one of the light sources. This         illuminates part of the screen. Let's say you wanted to illuminate a         larger part of the screen. Could you do this by moving the light         source? If so, do you move the light source toward the screen or away         from the screen? Could you, instead, illuminate more of the screen by         moving the mask? If so, do you move the mask toward the source or away         from the source? Could you, instead, illuminate more of the screen by         moving the screen? If so, do you move the screen toward the mask and         the source or away from the mask and source?      </li><li>        Before you turn on the second source, predict the color that will be         produced in a region that is illuminated by both sources         simultaneously. Turn on the second source (so both the red source and         the blue source emit light), and check your prediction.      </li><li>        Using two sources and the mask, determine the conditions under which         the sources light up distinct (non-overlapping) regions on the screen,         and when they light up overlapping regions of the screen.      </li><li>        Now use just one source and an object, which casts a shadow on the         screen. Let's say you wanted the shadow to cover a larger part of the         screen. Could you do this by moving the light source? If so, do you         move the light source toward the screen or away from the screen? Could         you, instead, produce a larger shadow on the screen by moving the         mask? If so, do you move the mask toward the source or away from the         source? Could you, instead, produce a larger shadow on the screen by         moving the screen? If so, do you move the screen toward the mask and         the source or away from the mask and source?      </li><li>        How do your answers to activity 1 compare to your answers to activity         4? Explain what the connection is between the two activitoes.      </li></ol><p> </p>\n</body>\n</html>"
      }
    ]
  },
  "model": {
    "variables": {
      "pages": [
        {
          "Name": "source1",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "playPauseButtonDisabled",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "",
              "Domain": "public"
            },
            {
              "Name": "pi",
              "Value": "Math.PI",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "print",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "fontb",
              "Value": "\"normal bold 1.5vw \"",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "font",
              "Value": "\"normal normal 1.5vw \"",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "minxsource",
              "Value": "-20.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Left-most source position",
              "Domain": "public"
            },
            {
              "Name": "maxxsource",
              "Value": "-8.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Right-most source position",
              "Domain": "public"
            },
            {
              "Name": "minysource",
              "Value": "-4",
              "Type": "double",
              "Dimension": "",
              "Comment": "Left-most source position",
              "Domain": "public"
            },
            {
              "Name": "maxysource",
              "Value": "4",
              "Type": "double",
              "Dimension": "",
              "Comment": "Right-most source position",
              "Domain": "public"
            },
            {
              "Name": "xsource",
              "Value": "-15.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "ysource",
              "Value": "3.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "y-position of the source",
              "Domain": "public"
            },
            {
              "Name": "angle",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vxsource",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "vysource",
              "Value": "1",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "raylength",
              "Value": "50.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "zero",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "x1",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "y1",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "ray1",
              "Value": "",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "helpLabel",
              "Value": "\" ? \"",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "helpFlag",
              "Value": "",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "ymax",
              "Value": "7.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "t",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "dt",
              "Value": "0.025",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "dt2",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "dt3",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "text",
              "Value": "\"\"",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "source2",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "xsource2",
              "Value": "-15.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "ysource2",
              "Value": "-3.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "y-position of the source",
              "Domain": "public"
            },
            {
              "Name": "lowscreenpoint2",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "highscreenpoint2",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "ray2",
              "Value": "",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vxsource2",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "vysource2",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "source3",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "xsource3",
              "Value": "-15",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "ysource3",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "lowscreenpoint3",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "highscreenpoint3",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "ray3",
              "Value": "",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vxsource3",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "vysource3",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "Current source position",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "mask",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "minxmask",
              "Value": "-3.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "maxxmask",
              "Value": "+4.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "xmask",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "maxymask",
              "Value": "4.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "minymask",
              "Value": "0.2",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "ymask",
              "Value": "1.5",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vymask",
              "Value": "0.2",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "uppermasktopangle",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "uppermaskbottomangle",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "lowermasktopangle",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "lowermaskbottomangle",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "maskknobx",
              "Value": "xmask",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "maskflag",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "objectflag",
              "Value": "true",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "screen",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "minxscreen",
              "Value": "5.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "maxxscreen",
              "Value": "20.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "xscreen",
              "Value": "15.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vxscreen",
              "Value": "0.2",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "yscreen",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "screenheight",
              "Value": "6.5",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "screentopangle",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "screenbottomangle",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "lowscreenpoint",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "highscreenpoint",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "polygons",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "redpolyx",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "cannot be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "redpolyy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "cannot be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "redpolyxy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "bluepolyx",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepolyy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepolyxy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "greenpolyx",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpolyy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpolyxy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "redpoly1Flag",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepoly1Flag",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpoly1Flag",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redpoly2Flag",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepoly2Flag",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpoly2Flag",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redpoly2Ax",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redpoly2Ay",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redpoly2Axy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "bluepoly2Ax",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepoly2Ay",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepoly2Axy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "greenpoly2Ax",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpoly2Ay",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpoly2Axy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "redpoly2Bx",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redpoly2By",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redpoly2Bxy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "bluepoly2Bx",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepoly2By",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluepoly2Bxy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "greenpoly2Bx",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpoly2By",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greenpoly2Bxy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[4][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "redsourcex",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redsourcey",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redsourcexy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "bluesourcex",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluesourcey",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "bluesourcexy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "greensourcex",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greensourcey",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "greensourcexy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[5][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "fakex",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[3]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "fakey",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[3]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "fakexy",
              "Value": "0.0",
              "Type": "double",
              "Dimension": "[3][2]",
              "Comment": "The correct format to be used for polygon",
              "Domain": "public"
            },
            {
              "Name": "fakevisiblex",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "redsource",
              "Value": "",
              "Type": "String",
              "Dimension": "[5]",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "gradient1",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "intercept1",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "gradient2",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "intercept2",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "whatwrong",
              "Value": "",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "mode",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "mode",
              "Value": "\"user defined\"",
              "Type": "String",
              "Dimension": "[1]",
              "Comment": "mode",
              "Domain": "public"
            },
            {
              "Name": "modesource",
              "Value": "\"S1 off\"",
              "Type": "String",
              "Dimension": "[1]",
              "Comment": "mode",
              "Domain": "public"
            },
            {
              "Name": "modesource2",
              "Value": "\"S2 off\"",
              "Type": "String",
              "Dimension": "[1]",
              "Comment": "mode",
              "Domain": "public"
            },
            {
              "Name": "modesource3",
              "Value": "\"S3 off\"",
              "Type": "String",
              "Dimension": "[1]",
              "Comment": "mode",
              "Domain": "public"
            },
            {
              "Name": "modesource4",
              "Value": "\"mask with slit\"",
              "Type": "String",
              "Dimension": "[1]",
              "Comment": "mode",
              "Domain": "public"
            },
            {
              "Name": "isAndroid",
              "Value": "checkAndroid()",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "color",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "T",
              "Value": "10000",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "t",
              "Value": "(T-300.0)/(5000.0-300.0)",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vr",
              "Value": "",
              "Type": "int",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vb",
              "Value": "",
              "Type": "int",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vg",
              "Value": "",
              "Type": "int",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vresultado",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vcolor",
              "Value": "",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vcolorr",
              "Value": "\"\"",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vcolorg",
              "Value": "\"\"",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "vcolorb",
              "Value": "\"\"",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "transparency1",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "transparency2",
              "Value": "0.5",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "transparency3",
              "Value": "0.5",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "background",
              "Value": "",
              "Type": "String",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "back",
              "Value": "",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "showcolor",
              "Value": "false",
              "Type": "boolean",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "int",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        },
        {
          "Name": "intensity",
          "Active": "true",
          "Internal": "false",
          "Type": "VARIABLE_EDITOR",
          "PageComment": "",
          "Variables": [
            {
              "Name": "totalintensity",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "intensity1",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "intensity2",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "intensity3",
              "Value": "0",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "ysensor",
              "Value": "1",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            },
            {
              "Name": "",
              "Value": "",
              "Type": "double",
              "Dimension": "",
              "Comment": "null",
              "Domain": "public"
            }
          ]
        }
      ]
    },
    "initialization": {
      "pages": [
        {
          "Name": "undefined",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "if (transparency1==undefined){\n  transparency1=0;\n  }"
        },
        {
          "Name": "message",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "if (_isMobile){\n  //do nothing\n  }\n  \n  else{\n    // copy this into the initialization\n// make the font bigger\n\n_view.plottingPanel.getMessageDecoration(\"TL\").getFont().setFontSize(\"1vw\");\n_view.plottingPanel.getMessageDecoration(\"TR\").getFont().setFontSize(\"1vw\");\n_view.plottingPanel.getMessageDecoration(\"BL\").getFont().setFontSize(\"1vw\");\n_view.plottingPanel.getMessageDecoration(\"BR\").getFont().setFontSize(\"1vw\");\n    }"
        },
        {
          "Name": "Init Page",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "//_view.DrawingPanel.setAntialiasTextOn(true);\n//_view.DrawingPanel.setAntialiasShapeOn(true);\n\nx1 = xscreen - xsource;\ny1 = screenheight - ysource;\nscreentopangle = Math.atan2(y1,x1);\nif (screentopangle < 0.0) \n  screentopangle = screentopangle + 2.0*Math.PI;\n\ny1 = -screenheight - ysource;\nscreenbottomangle = Math.atan2(y1,x1);\nif (screenbottomangle < 0.0) \n  screenbottomangle = screenbottomangle + 2.0*Math.PI;\n\nx1 = xmask-xsource;\ny1 = maxymask - ysource;\nuppermasktopangle = Math.atan2(y1,x1);\nif (uppermasktopangle < 0.0)\n  uppermasktopangle = uppermasktopangle + 2.0*Math.PI;\n\ny1 = ymask - ysource;\nuppermaskbottomangle = Math.atan2(y1,x1);\nif (uppermaskbottomangle < 0.0) \n  uppermaskbottomangle = uppermaskbottomangle + 2.0*Math.PI;\n\ny1 = -maxymask - ysource;\nlowermaskbottomangle = Math.atan2(y1,x1);\nif (lowermaskbottomangle < 0.0) \n  lowermaskbottomangle = lowermaskbottomangle + 2.0*Math.PI;\n\ny1 = -ymask - ysource;\nlowermasktopangle = Math.atan2(y1,x1);\nif (lowermasktopangle < 0.0) \n  lowermasktopangle = lowermasktopangle + 2.0*Math.PI;\n\nx1 = xscreen - xsource;\nlowscreenpoint = ysource + x1*Math.tan(lowermasktopangle);\nhighscreenpoint = ysource + x1*Math.tan(uppermaskbottomangle);"
        },
        {
          "Name": "Init Page 2",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "x1 = xscreen - xsource2;\ny1 = screenheight - ysource2;\nscreentopangle = Math.atan2(y1,x1);\nif (screentopangle < 0.0) \n  screentopangle = screentopangle + 2.0*Math.PI;\n\ny1 = -screenheight - ysource2;\n\nscreenbottomangle = Math.atan2(y1,x1);\nif (screenbottomangle < 0.0) \n  screenbottomangle = screenbottomangle + 2.0*Math.PI;\n\nx1 = xmask-xsource2;\ny1 = maxymask - ysource2;\nuppermasktopangle = Math.atan2(y1,x1);\nif (uppermasktopangle < 0.0) \n  uppermasktopangle = uppermasktopangle + 2.0*Math.PI;\n\ny1 = ymask - ysource2;\nuppermaskbottomangle = Math.atan2(y1,x1);\nif (uppermaskbottomangle < 0.0) \n  uppermaskbottomangle = uppermaskbottomangle + 2.0*Math.PI;\n\ny1 = -maxymask - ysource2;\nlowermaskbottomangle = Math.atan2(y1,x1);\nif (lowermaskbottomangle < 0.0) \n  lowermaskbottomangle = lowermaskbottomangle + 2.0*Math.PI;\n\ny1 = -ymask - ysource2;\nlowermasktopangle = Math.atan2(y1,x1);\nif (lowermasktopangle < 0.0) \n  lowermasktopangle = lowermasktopangle + 2.0*Math.PI;\n\nx1 = xscreen - xsource2;\nlowscreenpoint2 = ysource2 + x1*Math.tan(lowermasktopangle);\nhighscreenpoint2 = ysource2 + x1*Math.tan(uppermaskbottomangle);"
        },
        {
          "Name": "lookang",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "x1 = xscreen - xsource3;//\ny1 = screenheight - ysource3;//\nscreentopangle = Math.atan2(y1,x1);\nif (screentopangle < 0.0) \n  screentopangle = screentopangle + 2.0*Math.PI;\n\ny1 = -screenheight - ysource3;//\nscreenbottomangle = Math.atan2(y1,x1);\nif (screenbottomangle < 0.0) \n  screenbottomangle = screenbottomangle + 2.0*Math.PI;\n\nx1 = xmask-xsource3;//\ny1 = maxymask - ysource3;//\nuppermasktopangle = Math.atan2(y1,x1);\nif (uppermasktopangle < 0.0) \n  uppermasktopangle = uppermasktopangle + 2.0*Math.PI;\n\ny1 = ymask - ysource3;//\nuppermaskbottomangle = Math.atan2(y1,x1);\nif (uppermaskbottomangle < 0.0) \n  uppermaskbottomangle = uppermaskbottomangle + 2.0*Math.PI;\n\ny1 = -maxymask - ysource3;//\nlowermaskbottomangle = Math.atan2(y1,x1);\nif (lowermaskbottomangle < 0.0) \n  lowermaskbottomangle = lowermaskbottomangle + 2.0*Math.PI;\n\ny1 = -ymask - ysource3;//\nlowermasktopangle = Math.atan2(y1,x1);\nif (lowermasktopangle < 0.0) \n  lowermasktopangle = lowermasktopangle + 2.0*Math.PI;\n\nx1 = xscreen - xsource3;//\nlowscreenpoint3 = ysource3 + x1*Math.tan(lowermasktopangle);\nhighscreenpoint3 = ysource3 + x1*Math.tan(uppermaskbottomangle);"
        }
      ]
    },
    "evolution": {
      "information": {
        "FPS": "20",
        "SPD": "1",
        "RealTimeVariable": "",
        "Autoplay": "false"
      },
      "pages": [
        {
          "Name": "Evol Page",
          "Active": "true",
          "Internal": "false",
          "Type": "ODE_EDITOR",
          "Comment": "",
          "IndependentVariable": "t",
          "Increment": "dt",
          "Equations": [
            {
              "state": "xsource",
              "rate": "vxsource"
            },
            {
              "state": "ysource",
              "rate": "vysource"
            },
            {
              "state": "xsource2",
              "rate": "vxsource2"
            },
            {
              "state": "ysource2",
              "rate": "vysource2"
            }
          ],
          "Method": "RungeKutta",
          "AbsoluteTolerance": "0.00001",
          "PreliminaryCode": {
            "Code": "",
            "Comment": "Code to be executed before rate equations are evaluated"
          },
          "EventMaximumStep": "",
          "Events": {
            "pages": [
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xsource - minxsource;",
                "Action": "vxsource =-vxsource;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 4",
                "Active": "false",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xsource2 - minxsource;",
                "Action": "vxsource2 =-vxsource2;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 4 2",
                "Active": "false",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xsource3 - minxsource;",
                "Action": "vxsource3 =-vxsource3;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 2",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xsource - maxxsource;",
                "Action": "//[\"user_defined\",\"light travel in straight line\",\"a shadow is formed when an object blocks the path of light\",\"decrease distance of source, increase shadow size casted\",\"increase object size/shape, increase shadow size/shape casted\",\"increase screen distance, increase shadow size casted\"]\nif (_view.comboBox.getProperty(\"SelectedOptions\")==\"decrease distance of source, increase shadow size casted\"){\n _pause();\n playPauseButtonDisabled=true\n //vxsource =-vxsource;\n }\n  else{\nvxsource =-vxsource;\n}",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 2 2",
                "Active": "false",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xsource2 - maxxsource;",
                "Action": "vxsource2 =-vxsource2;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 2 2 2",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xsource3 - maxxsource;",
                "Action": "vxsource3 =-vxsource3;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 3",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ysource - minysource;",
                "Action": "vysource =-vysource;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 3 3",
                "Active": "false",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ysource2 - minysource;",
                "Action": "vysource2 =-vysource;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 3 3 2",
                "Active": "false",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ysource3 - minysource;",
                "Action": "vysource3 =-vysource;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 3 2",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ysource - maxysource;",
                "Action": "vysource =-vysource;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 3 2 2",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ysource2 - maxysource;",
                "Action": "vysource2 =-vysource2;\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 3 2 2 2",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ysource3 - maxysource;",
                "Action": "vysource3 =-vysource3;\n",
                "Comment": ""
              }
            ]
          },
          "ZenoEffect": {
            "Code": "",
            "Comment": "",
            "StopAfterEffect": "true"
          },
          "AccelerationIndependentOfVelocity": "false",
          "ForceSynchronization": "false",
          "UseBestInterpolation": "false",
          "EstimateFirstStep": "false",
          "MemoryLength": "",
          "InternalStep": "",
          "MaximumStep": "",
          "MaximumNumberOfSteps": "10000",
          "RelativeTolerance": "",
          "DelayList": "",
          "DelayMaximum": "",
          "DelayAddDiscont": "",
          "DelayInitialCondition": {
            "Code": "",
            "Comment": ""
          },
          "DirectIncidenceMatrix": "",
          "Discontinuities": {
            "pages": []
          },
          "ErrorHandling": {
            "pages": []
          }
        },
        {
          "Name": "Evol Page 2",
          "Active": "true",
          "Internal": "false",
          "Type": "ODE_EDITOR",
          "Comment": "",
          "IndependentVariable": "t",
          "Increment": "dt2",
          "Equations": [
            {
              "state": "ymask",
              "rate": "vymask"
            }
          ],
          "Method": "RungeKutta",
          "AbsoluteTolerance": "0.00001",
          "PreliminaryCode": {
            "Code": "",
            "Comment": "Code to be executed before rate equations are evaluated"
          },
          "EventMaximumStep": "",
          "Events": {
            "pages": [
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ymask - maxymask;",
                "Action": "//[\"user_defined\",\"light travel in straight line\",\"a shadow is formed when an object blocks the path of light\",\"decrease distance of source, increase shadow size casted\",\"increase object size/shape, increase shadow size/shape casted\",\"increase screen distance, increase shadow size casted\"]\nif (_view.comboBox.getProperty(\"SelectedOptions\")==\"increase object size/shape, increase shadow size/shape casted\"){\n _pause();\n }\n  else{\nvymask = -vymask;\n}\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 2",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return ymask - minymask;",
                "Action": "vymask = -vymask;",
                "Comment": ""
              }
            ]
          },
          "ZenoEffect": {
            "Code": "",
            "Comment": "",
            "StopAfterEffect": "true"
          },
          "AccelerationIndependentOfVelocity": "false",
          "ForceSynchronization": "false",
          "UseBestInterpolation": "false",
          "EstimateFirstStep": "false",
          "MemoryLength": "",
          "InternalStep": "",
          "MaximumStep": "",
          "MaximumNumberOfSteps": "10000",
          "RelativeTolerance": "",
          "DelayList": "",
          "DelayMaximum": "",
          "DelayAddDiscont": "",
          "DelayInitialCondition": {
            "Code": "",
            "Comment": ""
          },
          "DirectIncidenceMatrix": "",
          "Discontinuities": {
            "pages": []
          },
          "ErrorHandling": {
            "pages": []
          }
        },
        {
          "Name": "Evol Page 3",
          "Active": "true",
          "Internal": "false",
          "Type": "ODE_EDITOR",
          "Comment": "",
          "IndependentVariable": "t",
          "Increment": "dt3",
          "Equations": [
            {
              "state": "xscreen",
              "rate": "vxscreen"
            }
          ],
          "Method": "RungeKutta",
          "AbsoluteTolerance": "0.00001",
          "PreliminaryCode": {
            "Code": "",
            "Comment": "Code to be executed before rate equations are evaluated"
          },
          "EventMaximumStep": "",
          "Events": {
            "pages": [
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xscreen - maxxscreen;",
                "Action": "//[\"user_defined\",\"light travel in straight line\",\"a shadow is formed when an object blocks the path of light\",\"decrease distance of source, increase shadow size casted\",\"increase object size/shape, increase shadow size/shape casted\",\"increase screen distance, increase shadow size casted\"]\nif (_view.comboBox.getProperty(\"SelectedOptions\")==\"increase screen distance, increase shadow size casted\"){\n _pause();\n }\n  else{\nvxscreen = -vxscreen;\n}\n\n",
                "Comment": ""
              },
              {
                "Type": "EVENT_EDITOR",
                "Name": "Event 2",
                "Active": "true",
                "Internal": "false",
                "EventType": "CROSSING_EVENT",
                "Method": "BISECTION",
                "Iterations": "100",
                "Tolerance": "1.0e-5",
                "StopAtEvent": "true",
                "ZeroCondition": "return xscreen - minxscreen;",
                "Action": "vxscreen = -vxscreen;",
                "Comment": ""
              }
            ]
          },
          "ZenoEffect": {
            "Code": "",
            "Comment": "",
            "StopAfterEffect": "true"
          },
          "AccelerationIndependentOfVelocity": "false",
          "ForceSynchronization": "false",
          "UseBestInterpolation": "false",
          "EstimateFirstStep": "false",
          "MemoryLength": "",
          "InternalStep": "",
          "MaximumStep": "",
          "MaximumNumberOfSteps": "10000",
          "RelativeTolerance": "",
          "DelayList": "",
          "DelayMaximum": "",
          "DelayAddDiscont": "",
          "DelayInitialCondition": {
            "Code": "",
            "Comment": ""
          },
          "DirectIncidenceMatrix": "",
          "Discontinuities": {
            "pages": []
          },
          "ErrorHandling": {
            "pages": []
          }
        }
      ]
    },
    "fixed_relations": {
      "pages": [
        {
          "Name": "Cons Page",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "//TT: Added the [[x,y], [x1,y1] ...] format for all sources to be used in polygon objects\n\nredsourcexy[0][0] = redsourcex[0] = xsource;\nredsourcexy[0][1] = redsourcey[0] = ysource;\nredsourcexy[1][0] = redsourcex[1] = xsource + (minxmask - maxxsource);\nredsourcexy[1][1] = redsourcey[1] = -ymax;\nredsourcexy[2][0] = redsourcex[2] = xmask;\nredsourcexy[2][1] = redsourcey[2] = -ymax;\nredsourcexy[3][0] = redsourcex[3] = xmask;\nredsourcexy[3][1] = redsourcey[3] = ymax;\nredsourcexy[4][0] = redsourcex[4] = xsource + (minxmask - maxxsource);\nredsourcexy[4][1] = redsourcey[4] = ymax;\n\nfor (var counter=0; counter<4 /* Iterations */ ; counter++)\n{\n redsource[counter]= \"\" + counter;\n}\n\nbluesourcexy[0][0] = bluesourcex[0] = xsource2;\nbluesourcexy[0][1] = bluesourcey[0] = ysource2;\nbluesourcexy[1][0] = bluesourcex[1] = xsource2 + (minxmask - maxxsource);\nbluesourcexy[1][1] = bluesourcey[1] = -ymax;\nbluesourcexy[2][0] = bluesourcex[2] = xmask;\nbluesourcexy[2][1] = bluesourcey[2] = -ymax;\nbluesourcexy[3][0] = bluesourcex[3] = xmask;\nbluesourcexy[3][1] = bluesourcey[3] = ymax;\nbluesourcexy[4][0] = bluesourcex[4] = xsource2 + (minxmask - maxxsource);\nbluesourcexy[4][1] = bluesourcey[4] = ymax;\n\ngreensourcexy[0][0] = greensourcex[0] = xsource3;\ngreensourcexy[0][1] = greensourcey[0] = ysource3;\ngreensourcexy[1][0] = greensourcex[1] = xsource3 + (minxmask - maxxsource);\ngreensourcexy[1][1] = greensourcey[1] = -ymax;\ngreensourcexy[2][0] = greensourcex[2] = xmask;\ngreensourcexy[2][1] = greensourcey[2] = -ymax;\ngreensourcexy[3][0] = greensourcex[3] = xmask;\ngreensourcexy[3][1] = greensourcey[3] = ymax;\ngreensourcexy[4][0] = greensourcex[4] = xsource3 + (minxmask - maxxsource);\ngreensourcexy[4][1] = greensourcey[4] = ymax;\n\n\nredpolyxy[0][0] = redpolyx[0] = xmask;\nredpolyxy[0][1] = redpolyy[0] = ymask;\nredpolyxy[1][0] = redpolyx[1] = xmask;\nredpolyxy[1][1] = redpolyy[1] = -ymask;\nredpolyxy[2][0] = redpolyx[2] = xscreen;\nredpolyxy[2][1] = redpolyy[2] = lowscreenpoint;\nredpolyxy[3][0] = redpolyx[3] = xscreen;\nredpolyxy[3][1] = redpolyy[3] = highscreenpoint;\n\nbluepolyxy[0][0] = bluepolyx[0] = xmask;\nbluepolyxy[0][1] = bluepolyy[0] = ymask;\nbluepolyxy[1][0] = bluepolyx[1] = xmask;\nbluepolyxy[1][1] = bluepolyy[1] = -ymask;\nbluepolyxy[2][0] = bluepolyx[2] = xscreen;\nbluepolyxy[2][1] = bluepolyy[2] = lowscreenpoint2;\nbluepolyxy[3][0] = bluepolyx[3] = xscreen;\nbluepolyxy[3][1] = bluepolyy[3] = highscreenpoint2;\n\ngreenpolyxy[0][0] = greenpolyx[0] = xmask;\ngreenpolyxy[0][1] = greenpolyy[0] = ymask;\ngreenpolyxy[1][0] = greenpolyx[1] = xmask;\ngreenpolyxy[1][1] = greenpolyy[1] = -ymask;\ngreenpolyxy[2][0] = greenpolyx[2] = xscreen;\ngreenpolyxy[2][1] = greenpolyy[2] = lowscreenpoint3;\ngreenpolyxy[3][0] = greenpolyx[3] = xscreen;\ngreenpolyxy[3][1] = greenpolyy[3] = highscreenpoint3;\n\n//object\n\nredpoly2Axy[0][0] = redpoly2Ax[0] = xmask;\nredpoly2Axy[0][1] = redpoly2Ay[0] = ymax;\nredpoly2Axy[1][0] = redpoly2Ax[1] = xmask;\nredpoly2Axy[1][1] = redpoly2Ay[1] = ymask;\nredpoly2Axy[2][0] = redpoly2Ax[2] = xscreen;\nredpoly2Axy[2][1] = redpoly2Ay[2] = highscreenpoint;\nredpoly2Axy[3][0] = redpoly2Ax[3] = xscreen;\nredpoly2Axy[3][1] = redpoly2Ay[3] = ymax;\n\nbluepoly2Axy[0][0] = bluepoly2Ax[0] = xmask;\nbluepoly2Axy[0][1] = bluepoly2Ay[0] = ymax;\nbluepoly2Axy[1][0] = bluepoly2Ax[1] = xmask;\nbluepoly2Axy[1][1] = bluepoly2Ay[1] = ymask;\nbluepoly2Axy[2][0] = bluepoly2Ax[2] = xscreen;\nbluepoly2Axy[2][1] = bluepoly2Ay[2] = highscreenpoint2;\nbluepoly2Axy[3][0] = bluepoly2Ax[3] = xscreen;\nbluepoly2Axy[3][1] = bluepoly2Ay[3] = ymax;\n\ngreenpoly2Axy[0][0] = greenpoly2Ax[0] = xmask;\ngreenpoly2Axy[0][1] = greenpoly2Ay[0] = ymax;\ngreenpoly2Axy[1][0] = greenpoly2Ax[1] = xmask;\ngreenpoly2Axy[1][1] = greenpoly2Ay[1] = ymask;\ngreenpoly2Axy[2][0] = greenpoly2Ax[2] = xscreen;\ngreenpoly2Axy[2][1] = greenpoly2Ay[2] = highscreenpoint3;\ngreenpoly2Axy[3][0] = greenpoly2Ax[3] = xscreen;\ngreenpoly2Axy[3][1] = greenpoly2Ay[3] = ymax;\n\n\nredpoly2Bxy[0][0] = redpoly2Bx[0] = xmask;\nredpoly2Bxy[0][1] = redpoly2By[0] = -ymax;\nredpoly2Bxy[1][0] = redpoly2Bx[1] = xmask;\nredpoly2Bxy[1][1] = redpoly2By[1] = -ymask;\nredpoly2Bxy[2][0] = redpoly2Bx[2] = xscreen;\nredpoly2Bxy[2][1] = redpoly2By[2] = lowscreenpoint;\nredpoly2Bxy[3][0] = redpoly2Bx[3] = xscreen;\nredpoly2Bxy[3][1] = redpoly2By[3] = -ymax;\n\nbluepoly2Bxy[0][0] = bluepoly2Bx[0] = xmask;\nbluepoly2Bxy[0][1] = bluepoly2By[0] = -ymax;\nbluepoly2Bxy[1][0] = bluepoly2Bx[1] = xmask;\nbluepoly2Bxy[1][1] = bluepoly2By[1] = -ymask;\nbluepoly2Bxy[2][0] = bluepoly2Bx[2] = xscreen;\nbluepoly2Bxy[2][1] = bluepoly2By[2] = lowscreenpoint2;\nbluepoly2Bxy[3][0] = bluepoly2Bx[3] = xscreen;\nbluepoly2Bxy[3][1] = bluepoly2By[3] = -ymax;\n\ngreenpoly2Bxy[0][0] = greenpoly2Bx[0] = xmask;\ngreenpoly2Bxy[0][1] = greenpoly2By[0] = -ymax;\ngreenpoly2Bxy[1][0] = greenpoly2Bx[1] = xmask;\ngreenpoly2Bxy[1][1] = greenpoly2By[1] = -ymask;\ngreenpoly2Bxy[2][0] = greenpoly2Bx[2] = xscreen;\ngreenpoly2Bxy[2][1] = greenpoly2By[2] = lowscreenpoint3;\ngreenpoly2Bxy[3][0] = greenpoly2Bx[3] = xscreen;\ngreenpoly2Bxy[3][1] = greenpoly2By[3] = -ymax;\n\n// add fake polygon\ngradient1 = (ymask-ysource)/(xmask-xsource);\nintercept1 = ymask-gradient1*xmask;\nfakexy[0][0] = fakex[0] = xscreen;\nfakexy[0][1] = fakey[0] = gradient1*xscreen + intercept1;\n\ngradient2 = (-ymask-ysource2)/(xmask-xsource2);\nintercept2 = -ymask-gradient2*xmask;\nfakexy[1][0] = fakex[1] = xscreen;\nfakexy[1][1] = fakey[1] = gradient2*xscreen+intercept2;\n\nfakexy[2][0] = fakevisiblex = fakex[2] = (intercept2-intercept1)/(gradient1-gradient2);\nfakexy[2][1] = fakey[2] = gradient1*fakex[2]+intercept1;\n\n\nif (maskflag) // if mask is on\n{\n  if (ray1) \n  {\n    redpoly1Flag = true;\n  }\n  else\n  {\n    redpoly1Flag = false;\n  }\n  \n  if (ray2)\n  {\n    bluepoly1Flag = true;\n  }\n  else\n  {\n    bluepoly1Flag = false;\n  }\n\n  //added lookang\n  if (ray3) \n  {\n    greenpoly1Flag = true;\n  }\n  else\n  {\n    greenpoly1Flag = false;\n  }\n  \n  redpoly2Flag = false;\n  bluepoly2Flag = false;\n  greenpoly2Flag = false;\n}\nelse // if object is on true\n{\n  redpoly1Flag = false;\n  bluepoly1Flag = false;\n  greenpoly1Flag = false;\n  \n  if (ray1) \n  {\n    redpoly2Flag = true;\n  }\n  else\n  {\n    redpoly2Flag = false;\n  }\n  \n  if (ray2)\n  {\n    bluepoly2Flag = true;\n  }\n  else\n  {\n    bluepoly2Flag = false;\n  }\n  \n  if (ray3)\n  {\n    greenpoly2Flag = true;\n  }\n  else\n  {\n    greenpoly2Flag = false;\n  }\n}\n"
        },
        {
          "Name": "calculation",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "\nx1 = xscreen - xsource;\ny1 = screenheight - ysource;\nscreentopangle = Math.atan2(y1,x1);\nif (screentopangle < 0.0) \n  screentopangle = screentopangle + 2.0*Math.PI;\n\ny1 = -screenheight - ysource;\nscreenbottomangle = Math.atan2(y1,x1);\nif (screenbottomangle < 0.0) \n  screenbottomangle = screenbottomangle + 2.0*Math.PI;\n\nx1 = xmask-xsource;\ny1 = maxymask - ysource;\nuppermasktopangle = Math.atan2(y1,x1);\nif (uppermasktopangle < 0.0)\n  uppermasktopangle = uppermasktopangle + 2.0*Math.PI;\n\ny1 = ymask - ysource;\nuppermaskbottomangle = Math.atan2(y1,x1);\nif (uppermaskbottomangle < 0.0) \n  uppermaskbottomangle = uppermaskbottomangle + 2.0*Math.PI;\n\ny1 = -maxymask - ysource;\nlowermaskbottomangle = Math.atan2(y1,x1);\nif (lowermaskbottomangle < 0.0) \n  lowermaskbottomangle = lowermaskbottomangle + 2.0*Math.PI;\n\ny1 = -ymask - ysource;\nlowermasktopangle = Math.atan2(y1,x1);\nif (lowermasktopangle < 0.0) \n  lowermasktopangle = lowermasktopangle + 2.0*Math.PI;\n\nx1 = xscreen - xsource;\nlowscreenpoint = ysource + x1*Math.tan(lowermasktopangle);\nhighscreenpoint = ysource + x1*Math.tan(uppermaskbottomangle);"
        },
        {
          "Name": "calculation2",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "x1 = xscreen - xsource2;\ny1 = screenheight - ysource2;\nscreentopangle = Math.atan2(y1,x1);\nif (screentopangle < 0.0) \n  screentopangle = screentopangle + 2.0*Math.PI;\n\ny1 = -screenheight - ysource2;\n\nscreenbottomangle = Math.atan2(y1,x1);\nif (screenbottomangle < 0.0) \n  screenbottomangle = screenbottomangle + 2.0*Math.PI;\n\nx1 = xmask-xsource2;\ny1 = maxymask - ysource2;\nuppermasktopangle = Math.atan2(y1,x1);\nif (uppermasktopangle < 0.0) \n  uppermasktopangle = uppermasktopangle + 2.0*Math.PI;\n\ny1 = ymask - ysource2;\nuppermaskbottomangle = Math.atan2(y1,x1);\nif (uppermaskbottomangle < 0.0) \n  uppermaskbottomangle = uppermaskbottomangle + 2.0*Math.PI;\n\ny1 = -maxymask - ysource2;\nlowermaskbottomangle = Math.atan2(y1,x1);\nif (lowermaskbottomangle < 0.0) \n  lowermaskbottomangle = lowermaskbottomangle + 2.0*Math.PI;\n\ny1 = -ymask - ysource2;\nlowermasktopangle = Math.atan2(y1,x1);\nif (lowermasktopangle < 0.0) \n  lowermasktopangle = lowermasktopangle + 2.0*Math.PI;\n\nx1 = xscreen - xsource2;\nlowscreenpoint2 = ysource2 + x1*Math.tan(lowermasktopangle);\nhighscreenpoint2 = ysource2 + x1*Math.tan(uppermaskbottomangle);"
        },
        {
          "Name": "color",
          "Active": "false",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "// adapted from http://www.compadre.org/osp/items/detail.cfm?ID=10528&S=2\nvr = funcion(t,0.2,10.0);\nvg = funcion(t,0.7,2.0);\nvb = funcion(t,0.9,2.0);\n\nvresultado = vr;\nvcolor = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",1.0)\"; //new java.awt.Color(vr,vg,vb,255);\n\n//colormixing https://1001.io/mixing-real-life-colors-in-javascript-with-ryb/\nvar red = [255, 0, 0];\nvar green = [0, 255, 0];\nvar blue = [0, 0, 255];\nvar rSum = red[0] + green[0] + blue[0]; // 0\nvar gSum = red[1] + green[1] + blue[1]; // 255\nvar bSum = red[2] + green[2] + blue[2]; // 255\nvar max = Math.max(rSum, gSum, bSum); // 255\nif (showcolor ===true){\n\nvcolorr = \"rgba(\" + Math.floor(rSum / max) * 255 + \",\" + 0 + \",\" + 0 + \",\"+ transparency1 + \")\"; //new java.awt.Color(vr,vg,vb,transparency1);\nvcolorg = \"rgba(\" + 0 + \",\" + Math.floor(gSum / max) * 255 + \",\" + 0+ \",\"+transparency3 + \")\"; //new java.awt.Color(vr,vg,vb,transparency3);\nvcolorb = \"rgba(\" + 0 + \",\" + 0 + \",\" + Math.floor(bSum / max) * 255 + \",\"+transparency2 + \")\"; //new java.awt.Color(vr,vg,vb,transparency2);\n//vcolorr = mixingcolor (vr,0,0);\n//vcolorg =mixingcolor (0,vg,0);\n//vcolorb =mixingcolor (0,0,vb);\n}\nelse if (showcolor===false){\n\nvcolorr = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",\" + transparency1 + \")\"; //new java.awt.Color(vr,vg,vb,transparency1);\nvcolorg = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",\" + transparency3 + \")\"; //new java.awt.Color(vr,vg,vb,transparency3);\nvcolorb = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",\" + transparency2 + \")\"; //new java.awt.Color(vr,vg,vb,transparency2);\n}\n/*\nif (back==true){\nbackground = new java.awt.Color(0,0,0,255);\n}\nelse if (back==false){\nbackground = new java.awt.Color(0,0,0,0);\n}\n*/"
        },
        {
          "Name": "calucaltion3",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "x1 = xscreen - xsource3;//\ny1 = screenheight - ysource3;//\nscreentopangle = Math.atan2(y1,x1);\nif (screentopangle < 0.0) \n  screentopangle = screentopangle + 2.0*Math.PI;\n\ny1 = -screenheight - ysource3;//\nscreenbottomangle = Math.atan2(y1,x1);\nif (screenbottomangle < 0.0) \n  screenbottomangle = screenbottomangle + 2.0*Math.PI;\n\nx1 = xmask-xsource3;//\ny1 = maxymask - ysource3;//\nuppermasktopangle = Math.atan2(y1,x1);\nif (uppermasktopangle < 0.0) \n  uppermasktopangle = uppermasktopangle + 2.0*Math.PI;\n\ny1 = ymask - ysource3;//\nuppermaskbottomangle = Math.atan2(y1,x1);\nif (uppermaskbottomangle < 0.0) \n  uppermaskbottomangle = uppermaskbottomangle + 2.0*Math.PI;\n\ny1 = -maxymask - ysource3;//\nlowermaskbottomangle = Math.atan2(y1,x1);\nif (lowermaskbottomangle < 0.0) \n  lowermaskbottomangle = lowermaskbottomangle + 2.0*Math.PI;\n\ny1 = -ymask - ysource3;//\nlowermasktopangle = Math.atan2(y1,x1);\nif (lowermasktopangle < 0.0) \n  lowermasktopangle = lowermasktopangle + 2.0*Math.PI;\n\nx1 = xscreen - xsource3;//\nlowscreenpoint3 = ysource3 + x1*Math.tan(lowermasktopangle);\nhighscreenpoint3 = ysource3 + x1*Math.tan(uppermaskbottomangle);"
        },
        {
          "Name": "color 2",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "//vr = funcion(t,0.2,10.0);\n//vg = funcion(t,0.7,2.0);\n//vb = funcion(t,0.9,2.0);\nvr = 255;\nvg = 255;\nvb = 0; // yellow is 255,255,0\n\nvresultado = vr;\nvcolorr = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",\" + transparency1 + \")\"; //new java.awt.Color(vr,vg,vb,transparency1);\n//vcolorr = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",\" + transparency1 + \")\"; //new java.awt.Color(vr,vg,vb,transparency1);\nvcolorg = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",\" + transparency3 + \")\"; //new java.awt.Color(vr,vg,vb,transparency3);\nvcolorb = \"rgba(\" + vr + \",\" + vg + \",\" + vb + \",\" + transparency2 + \")\"; //new java.awt.Color(vr,vg,vb,transparency2);\n\n\n//console.log(xsource, xscreen);\n"
        },
        {
          "Name": "intensity",
          "Active": "true",
          "Internal": "false",
          "Type": "CODE_EDITOR",
          "Comment": "",
          "Code": "//totalintensity=intensity1+intensity2+intensity3; \n// for sensor and mask on (hole)\nif (ysensor>redpolyxy[2][1]&&ysensor<redpolyxy[3][1]&&maskflag==true&&ray1==true){ //inbetween in the light\nintensity1=transparency1*8000/(xscreen-xsource);\n}\nelse if (ysensor>redpolyxy[2][1]&&ysensor<redpolyxy[3][1]&&maskflag==true&&ray1==false){ //inbetween in the light but light ray off\nintensity1=transparency1*0/(xscreen-xsource);\n}\nelse if (ysensor<redpolyxy[2][1]||ysensor>redpolyxy[3][1]&&maskflag==true){ // in dark\n intensity1=transparency1*0/(xscreen-xsource); \n  }\n //// else if (ysensor<redpolyxy[2][1]||ysensor>redpolyxy[3][1]&&maskflag==true&&ray1==false){ // in dark\n// intensity1=transparency1*0/(xscreen-xsource); \n // }\n\nif (ysensor>bluepolyxy[2][1]&&ysensor<bluepolyxy[3][1]&&maskflag==true&&ray2==true){ //inbetween in the light\nintensity2=transparency2*8000/(xscreen-xsource2);\n}\nelse if (ysensor>bluepolyxy[2][1]&&ysensor<bluepolyxy[3][1]&&maskflag==true&&ray2==false){ //inbetween in the light\nintensity2=transparency2*0/(xscreen-xsource2);\n}\nelse if (ysensor<bluepolyxy[2][1]||ysensor>bluepolyxy[3][1]&&maskflag==true&&ray2==true) { // in dark\n intensity2=transparency2*0/(xscreen-xsource2);\n  }\nif (ysensor>greenpolyxy[2][1]&&ysensor<greenpolyxy[3][1]&&maskflag==true&&ray3==true){ //inbetween in the light\nintensity3=transparency3*8000/(xscreen-xsource3);\n}\nelse if (ysensor>greenpolyxy[2][1]&&ysensor<greenpolyxy[3][1]&&maskflag==true&&ray3==false){ //inbetween in the light\nintensity3=transparency3*0/(xscreen-xsource3);\n}\nelse if (ysensor<greenpolyxy[2][1]||ysensor>greenpolyxy[3][1]&&maskflag==true&&ray3==true){ // in dark\n intensity3=transparency3*0/(xscreen-xsource3);\n  }\n  \n//for sensor and object , reuse polyxy assume same\nif ((ysensor<redpolyxy[2][1]||ysensor>redpolyxy[3][1])&&objectflag==true&&ray1==true){ //inbetween in the light\nintensity1=transparency1*8000/(xscreen-xsource);\n}\nelse if ((ysensor<redpolyxy[2][1]||ysensor>redpolyxy[3][1])&&objectflag==true&&ray1==false){ //inbetween in the light\nintensity1=transparency1*0/(xscreen-xsource);\n}\nelse if ((ysensor>redpolyxy[2][1]&&ysensor<redpolyxy[3][1])&&objectflag==true&&ray1==true){ // in dark\n intensity1=transparency1*0/(xscreen-xsource); \n  }\n  if ((ysensor<bluepolyxy[2][1]||ysensor>bluepolyxy[3][1])&&objectflag==true&&ray2==true){ //inbetween in the light\nintensity2=transparency2*8000/(xscreen-xsource2);\n}\nelse if ((ysensor<bluepolyxy[2][1]||ysensor>bluepolyxy[3][1])&&objectflag==true&&ray2==false){ //inbetween in the light\nintensity2=transparency2*0/(xscreen-xsource2);\n}\nelse if ((ysensor>bluepolyxy[2][1]&&ysensor<bluepolyxy[3][1])&&objectflag==true&&ray2==true){ // in dark\n intensity2=transparency2*0/(xscreen-xsource2); \n  }\nif ((ysensor<greenpolyxy[2][1]||ysensor>greenpolyxy[3][1])&&objectflag==true&&ray3==true){ //inbetween in the light\nintensity3=transparency3*8000/(xscreen-xsource3);\n}\nelse if ((ysensor<greenpolyxy[2][1]||ysensor>greenpolyxy[3][1])&&objectflag==true&&ray3==false){ //inbetween in the light\nintensity3=transparency3*0/(xscreen-xsource3);\n}\nelse if ((ysensor>greenpolyxy[2][1]&&ysensor<greenpolyxy[3][1])&&objectflag==true&&ray3==true){ // in dark\n intensity3=transparency3*0/(xscreen-xsource3); \n  }\n\ntotalintensity=intensity1+intensity2+intensity3; \n\n\n//console.log(redpolyxy[2][1]);\n"
        }
      ]
    },
    "custom": {
      "pages": [
        {
          "Name": "Lib Page",
          "Active": "true",
          "Internal": "false",
          "Type": "LIBRARY_EDITOR",
          "Comment": "",
          "Code": "function funcion(t, origen, factor) \n{\n  var resultado;\n\n  resultado = 128.0+128.0*(Math.exp( factor*(t-origen) )-Math.exp(-factor*(t-origen)))/(Math.exp(factor*(t-origen))+Math.exp(-factor*(t-origen)));\n\n  return( parseInt(resultado));\n}\n// taken from "
        },
        {
          "Name": "android",
          "Active": "true",
          "Internal": "false",
          "Type": "LIBRARY_EDITOR",
          "Comment": "",
          "Code": "//code reference: http://davidwalsh.name/detect-android\nfunction checkAndroid () {\n  var ua = navigator.userAgent.toLowerCase();\n  return ua.indexOf(\"android\") > -1; //&& ua.indexOf(\"mobile\");\n}"
        },
        {
          "Name": "fullscreen",
          "Active": "true",
          "Internal": "false",
          "Type": "LIBRARY_EDITOR",
          "Comment": "",
          "Code": "//https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode\n// does not work for iOS \n/*jslint browser:true */\nfunction toggleFullScreen() {\n  if (!document.fullscreenElement &&    // alternative standard method\n      !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement ) {  // current working methods\n    if (document.documentElement.requestFullscreen) {\n      document.documentElement.requestFullscreen();\n    } else if (document.documentElement.msRequestFullscreen) {\n      document.documentElement.msRequestFullscreen();\n    } else if (document.documentElement.mozRequestFullScreen) {\n      document.documentElement.mozRequestFullScreen();\n    } else if (document.documentElement.webkitRequestFullscreen) {\n      document.documentElement.webkitRequestFullscreen();\n    }\n  } else {\n    if (document.exitFullscreen) {\n      document.exitFullscreen();\n    } else if (document.msExitFullscreen) {\n      document.msExitFullscreen();\n    } else if (document.mozCancelFullScreen) {\n      document.mozCancelFullScreen();\n    } else if (document.webkitExitFullscreen) {\n      document.webkitExitFullscreen();\n    }\n  }\n}"
        },
        {
          "Name": "mixingcolor",
          "Active": "false",
          "Internal": "false",
          "Type": "LIBRARY_EDITOR",
          "Comment": "",
          "Code": "function mixingcolor (r,g,b) {\nvar red = [255, 0, 0];\nvar green = [0, 255, 0];\nvar blue = [0, 0, 255];\n\nvar rSum = red[0] + green[0] + blue[0]; // 0\nvar gSum = red[1] + green[1] + blue[1]; // 255\nvar bSum = red[2] + green[2] + blue[2]; // 255\n\nvar max = Math.max(rSum, gSum, bSum); // 255\n\n// our new color\nreturn  [\n    Math.floor(rSum / max) * 255, // 0 / 255 * 255 = 0 \n    Math.floor(gSum / max) * 255, // 255 / 255 * 255 = 255 \n    Math.floor(bSum / max) * 255  // 255 / 255 * 255 = 255 \n];\n}\n"
        }
      ]
    },
    "elements": {
      "list": []
    }
  },
  "view": {
    "Tree": [
      {
        "Name": "controlPanel",
        "Type": "Panel",
        "Expanded": "true",
        "Properties": [
          {
            "name": "Width",
            "value": "\"100%\""
          },
          {
            "name": "Display",
            "value": "!print?\"inline-flex\":\"none\""
          }
        ],
        "Children": [
          {
            "Name": "comboBox",
            "Type": "ComboBox",
            "Properties": [
              {
                "name": "Options",
                "value": "[\"user_defined\",\"light travel in straight line\",\"a shadow is formed when an object blocks the path of light\",\"decrease distance of source, increase shadow size casted\",\"increase object size/shape, increase shadow size/shape casted\",\"increase screen distance, increase shadow size casted\"]"
              },
              {
                "name": "OnChange",
                "value": " var opts = _view.comboBox.getProperty(\"SelectedOptions\");  // array of options\n    var option = (opts.length > 0)? opts[0]:\"\"; // selected option \n    \n    if(option==\"user defined\") {\n  whatwrong=false;\n  transparency1=0;\n  transparency2=0;\n  transparency3=0;\n}\n//print\nelse if (option == \"print\"){\n  print = true;\n  }\n//print\nelse if(option==\"light travel in straight line\") {\n  ray1 =true;\n  ray2 =false;\n  ray3 =false;\n  whatwrong=false;\n  _view.modesource.setSelectedOptions([\"S1 mid\"]);\n  transparency1=0.5;\n  transparency2=0;\n  transparency3=0;\n // xsource =minxsource;\n  ysource= 0;\n  vxsource = 0;\n  vysource = 1;\n  objectflag = true;\nmaskflag = false;\ndt = 0.05;\ndt2 = 0;\ndt3= 0;\n}\nelse if(option==\"a shadow is formed when an object blocks the path of light\") {\n  ray1 =true;\n  ray2 =false;\n  ray3 =false;\n  whatwrong=false;\n // xsource =minxsource;\n transparency2=0;\n transparency3=0;\n  ysource= 0;\n  vxsource = 0;\n  vysource = 1;\n  objectflag = true;\nmaskflag = false;\ndt = 0.05;\ndt2 = 0;\ndt3= 0;\n}\nelse if(option==\"decrease distance of source, increase shadow size casted\") {\n  ray1 =true;\n  ray2 =false;\n  ray3 =false;\n  whatwrong=false;\n // xsource =minxsource;\n transparency2=0;\n transparency3=0;\n  ysource= 0;\n  vxsource = 1;\n  vysource = 0;\n  objectflag = true;\nmaskflag = false;\ndt = 0.05;\ndt2 = 0;\ndt3= 0;\n}\nelse if(option==\"increase object size/shape, increase shadow size/shape casted\") {\n  ray1 =true;\n  ray2 =false;\n  ray3 =false;\n  whatwrong=false;\n // xsource =minxsource;\n transparency2=0;\n transparency3=0;\n  ysource= 0;\n  objectflag = true;\nmaskflag = false;\ndt= 0;\ndt2 = 0.05;\ndt3= 0;\n}\nelse if(option==\"increase screen distance, increase shadow size casted\") {\n  ray1 =true;\n  ray2 =false;\n  ray3 =false;\n  whatwrong=false;\n // xsource =minxsource;\n transparency2=0;\n transparency3=0;\n  ysource= 0;\n  objectflag = true;\nmaskflag = false;\ndt= 0;\ndt2 = 0;\ndt3 = 0.05;\n}\nelse if(option==\"distinct edges of shadow occurs when light source is near object\") {\n  ray1 =true;\n  ray2 =true;\n  ray3 =false;\n  whatwrong=false;\n // xsource =minxsource;\n transparency2=0;\n transparency3=0;\n  ysource= 0.05;\n  vxsource = 1;\n  vysource = 0;\n  ysource2= -0.05;\n  vxsource2 = 1;\n  vysource2 = 0;\n  objectflag = true;\nmaskflag = false;\n//ymask = 0.5;\ndt = 0.05;\ndt2 = 0;\ndt3= 0;\n}\nelse if(option==\"whats wrong?\") {\n  ray1 =true;\n  ray2 =true;\n  ray3 =true;\n  whatwrong=true;\n // xsource =minxsource;\n  ysource= 3;\n  vxsource = 1;\n  vysource = 0;\n  objectflag = true;\nmaskflag = false;\ndt= 0.05;\ndt2 = 0;\ndt3 = 0;\n}\n_initialize();\n"
              },
              {
                "name": "Width",
                "value": "\"25%\""
              },
              {
                "name": "Font",
                "value": "font"
              }
            ]
          },
          {
            "Name": "modesource",
            "Type": "ComboBox",
            "Properties": [
              {
                "name": "Options",
                "value": "[\"S1 off\",\"S1 dim\",\"S1 mid\",\"S1 high\"]"
              },
              {
                "name": "OnChange",
                "value": "var opts = _view.modesource.getProperty(\"SelectedOptions\");  // array of options\n    var option = (opts.length > 0)? opts[0]:\"\"; // selected option \n    \nif(option==\"S1 off\") {\n  ray1 =false;\n  transparency1=0;\n}\n//print\nelse if (option == \"print\"){\n  print = true;\n  }\n//print\nelse if(option==\"S2 off\") {\n   ray2 =false;\n   transparency2=0;\n}\nelse if(option==\"S3 off\") {\n   ray3 =false;\n   transparency3=0;\n}\nif(option==\"S1 dim\") {\n  ray1 =true;\n  transparency1=0.25;\n}\nelse if(option==\"S2 dim\") {\n   ray2 =true;\n   transparency2=0.25;\n}\nelse if(option==\"S3 dim\") {\n   ray3 =true;\n   transparency3=0.25;\n}\nif(option==\"S1 mid\") {\n  ray1 =true;\n  transparency1=0.5;\n}\nelse if(option==\"S2 mid\") {\n   ray2 =true;\n   transparency2=0.5;\n}\nelse if(option==\"S3 mid\") {\n   ray3 =true;\n   transparency3=0.5;\n}\nif(option==\"S1 high\") {\n  ray1 =true;\n  transparency1=0.75;\n}\nelse if(option==\"S2 high\") {\n   ray2 =true;\n   transparency2=0.75;\n}\nelse if(option==\"S3 high\") {\n   ray3 =true;\n   transparency3=0.75;\n}\nelse if(option==\"object\") {\n   objectflag = true;\n   maskflag = false;\n}\nelse if(option==\"mask with slit\") {\n   objectflag = false;\n   maskflag = true;\n   \n   \n}\n\n\n\n_initialize();"
              },
              {
                "name": "Width",
                "value": "\"25%\""
              },
              {
                "name": "Font",
                "value": "font"
              },
              {
                "name": "Display",
                "value": "!print?\"inline-flex\":\"none\""
              }
            ]
          },
          {
            "Name": "modesource2",
            "Type": "ComboBox",
            "Properties": [
              {
                "name": "Options",
                "value": "[\"S2 off\",\"S2 dim\",\"S2 mid\",\"S2 high\"]"
              },
              {
                "name": "OnChange",
                "value": "\nif(modesource2[0]===\"S1 off\") {\n  ray1 =false;\n  transparency1=0;\n}\n//print\nelse if (modesource2[0] == \"print\"){\n  print = true;\n  }\n//print\nelse if(modesource2[0]===\"S2 off\") {\n   ray2 =false;\n   transparency2=0;\n}\nelse if(modesource2[0]===\"S3 off\") {\n   ray3 =false;\n   transparency3=0;\n}\nif(modesource2[0]===\"S1 dim\") {\n  ray1 =true;\n  transparency1=0.25;\n}\nelse if(modesource2[0]===\"S2 dim\") {\n   ray2 =true;\n   transparency2=0.25;\n}\nelse if(modesource2[0]===\"S3 dim\") {\n   ray3 =true;\n   transparency3=0.25;\n}\nif(modesource2[0]===\"S1 mid\") {\n  ray1 =true;\n  transparency1=0.5;\n}\nelse if(modesource2[0]===\"S2 mid\") {\n   ray2 =true;\n   transparency2=0.5;\n}\nelse if(modesource2[0]===\"S3 mid\") {\n   ray3 =true;\n   transparency3=0.5;\n}\nif(modesource2[0]===\"S1 high\") {\n  ray1 =true;\n  transparency1=0.75;\n}\nelse if(modesource2[0]===\"S2 high\") {\n   ray2 =true;\n   transparency2=0.75;\n}\nelse if(modesource2[0]===\"S3 high\") {\n   ray3 =true;\n   transparency3=0.75;\n}\nelse if(modesource2[0]===\"object\") {\n   objectflag = true;\n   maskflag = false;\n}\nelse if(modesource2[0]===\"mask with slit\") {\n   objectflag = false;\n   maskflag = true;\n   \n   \n}\n\n\n\n_initialize();"
              },
              {
                "name": "Width",
                "value": "\"10vw\""
              },
              {
                "name": "SelectedOptions",
                "value": "%modesource2%"
              },
              {
                "name": "Font",
                "value": "font"
              },
              {
                "name": "Display",
                "value": "\"none\""
              }
            ]
          },
          {
            "Name": "modesource3",
            "Type": "ComboBox",
            "Properties": [
              {
                "name": "Options",
                "value": "[\"S3 off\",\"S3 dim\",\"S3 mid\",\"S3 high\"]"
              },
              {
                "name": "OnChange",
                "value": "\nif(modesource3[0]===\"S1 off\") {\n  ray1 =false;\n  transparency1=0;\n}\n//print\nelse if (modesource3[0] == \"print\"){\n  print = true;\n  }\n//print\nelse if(modesource3[0]===\"S2 off\") {\n   ray2 =false;\n   transparency2=0;\n}\nelse if(modesource3[0]===\"S3 off\") {\n   ray3 =false;\n   transparency3=0;\n}\nif(modesource3[0]===\"S1 dim\") {\n  ray1 =true;\n  transparency1=0.25;\n}\nelse if(modesource3[0]===\"S2 dim\") {\n   ray2 =true;\n   transparency2=0.25;\n}\nelse if(modesource3[0]===\"S3 dim\") {\n   ray3 =true;\n   transparency3=0.25;\n}\nif(modesource3[0]===\"S1 mid\") {\n  ray1 =true;\n  transparency1=0.5;\n}\nelse if(modesource3[0]===\"S2 mid\") {\n   ray2 =true;\n   transparency2=0.5;\n}\nelse if(modesource3[0]===\"S3 mid\") {\n   ray3 =true;\n   transparency3=0.5;\n}\nif(modesource3[0]===\"S1 high\") {\n  ray1 =true;\n  transparency1=0.75;\n}\nelse if(modesource3[0]===\"S2 high\") {\n   ray2 =true;\n   transparency2=0.75;\n}\nelse if(modesource3[0]===\"S3 high\") {\n   ray3 =true;\n   transparency3=0.75;\n}\nelse if(modesource3[0]===\"object\") {\n   objectflag = true;\n   maskflag = false;\n}\nelse if(modesource3[0]===\"mask with slit\") {\n   objectflag = false;\n   maskflag = true;\n   \n   \n}\n\n\n\n_initialize();\n\n"
              },
              {
                "name": "Width",
                "value": "\"10vw\""
              },
              {
                "name": "SelectedOptions",
                "value": "%modesource3%"
              },
              {
                "name": "Font",
                "value": "font"
              },
              {
                "name": "Display",
                "value": "\"none\""
              }
            ]
          },
          {
            "Name": "modesource4",
            "Type": "ComboBox",
            "Properties": [
              {
                "name": "Options",
                "value": "[\"object\",\"mask with slit\"]"
              },
              {
                "name": "OnChange",
                "value": "\nif(modesource4[0]===\"S1 off\") {\n  ray1 =false;\n  transparency1=0;\n}\n//print\nelse if (modesource4[0] == \"print\"){\n  print = true;\n  }\n//print\nelse if(modesource4[0]===\"S2 off\") {\n   ray2 =false;\n   transparency2=0;\n}\nelse if(modesource4[0]===\"S3 off\") {\n   ray3 =false;\n   transparency3=0;\n}\nif(modesource4[0]===\"S1 dim\") {\n  ray1 =true;\n  transparency1=0.25;\n}\nelse if(modesource4[0]===\"S2 dim\") {\n   ray2 =true;\n   transparency2=0.25;\n}\nelse if(modesource4[0]===\"S3 dim\") {\n   ray3 =true;\n   transparency3=0.25;\n}\nif(modesource4[0]===\"S1 mid\") {\n  ray1 =true;\n  transparency1=0.5;\n}\nelse if(modesource4[0]===\"S2 mid\") {\n   ray2 =true;\n   transparency2=0.5;\n}\nelse if(modesource4[0]===\"S3 mid\") {\n   ray3 =true;\n   transparency3=0.5;\n}\nif(modesource4[0]===\"S1 high\") {\n  ray1 =true;\n  transparency1=0.75;\n}\nelse if(modesource4[0]===\"S2 high\") {\n   ray2 =true;\n   transparency2=0.75;\n}\nelse if(modesource4[0]===\"S3 high\") {\n   ray3 =true;\n   transparency3=0.75;\n}\nelse if(modesource4[0]===\"object\") {\n   objectflag = true;\n   maskflag = false;\n}\nelse if(modesource4[0]===\"mask with slit\") {\n   objectflag = false;\n   maskflag = true;\n   \n   \n}\n\n\n\n_initialize();\n\n"
              },
              {
                "name": "Width",
                "value": "\"10vw\""
              },
              {
                "name": "SelectedOptions",
                "value": "%modesource4%"
              },
              {
                "name": "Font",
                "value": "font"
              },
              {
                "name": "Display",
                "value": "\"none\""
              }
            ]
          },
          {
            "Name": "playPauseButton",
            "Type": "TwoStateButton",
            "Properties": [
              {
                "name": "OffClick",
                "value": "text=\"paused\";\n_pause();"
              },
              {
                "name": "TextOn",
                "value": "\"\u25baPlay\""
              },
              {
                "name": "State",
                "value": "_isPaused"
              },
              {
                "name": "Tooltip",
                "value": "\"Play/Pause\""
              },
              {
                "name": "TextOff",
                "value": "\"\u275a\u275aPause\""
              },
              {
                "name": "Disabled",
                "value": "playPauseButtonDisabled"
              },
              {
                "name": "OnClick",
                "value": "_play();\ntext=\"playing\";"
              },
              {
                "name": "Width",
                "value": "\"25%\""
              },
              {
                "name": "Font",
                "value": "fontb"
              },
              {
                "name": "Display",
                "value": "!print?\"inline-flex\":\"none\""
              }
            ]
          },
          {
            "Name": "Reset",
            "Type": "Button",
            "Properties": [
              {
                "name": "OnRelease",
                "value": "_reset()\n\nif (transparency1==0) {\n  _view.modesource.setSelectedOptions([\"S1 off\"]);\n}\nelse if (transparency1==0.25) {\n  _view.modesource.setSelectedOptions([\"S1 dim\"]);\n}\nelse if (transparency1==0.5) {\n  _view.modesource.setSelectedOptions([\"S1 mid\"]);\n}\nelse if (transparency1==0.75) {\n  _view.modesource.setSelectedOptions([\"S1 high\"]);\n}"
              },
              {
                "name": "Tooltip",
                "value": "\"Reset\""
              },
              {
                "name": "Text",
                "value": "\"\u21bbReset\""
              },
              {
                "name": "Width",
                "value": "\"25%\""
              },
              {
                "name": "Font",
                "value": "fontb"
              },
              {
                "name": "Display",
                "value": "!print?\"inline-flex\":\"none\""
              }
            ]
          }
        ]
      },
      {
        "Name": "displayPanel",
        "Type": "Panel",
        "Expanded": "true",
        "Properties": [
          {
            "name": "Height",
            "value": "\"100%\""
          },
          {
            "name": "Width",
            "value": "\"100%\""
          }
        ],
        "Children": [
          {
            "Name": "plottingPanel",
            "Type": "PlottingPanel",
            "Expanded": "false",
            "Properties": [
              {
                "name": "Gutters",
                "value": "[0,0,0,0]"
              },
              {
                "name": "Background",
                "value": "\"Black\""
              },
              {
                "name": "Enabled",
                "value": "true"
              },
              {
                "name": "OnDoubleClick",
                "value": "toggleFullScreen();"
              },
              {
                "name": "MaximumY",
                "value": "4"
              },
              {
                "name": "MaximumX",
                "value": "20"
              },
              {
                "name": "TRMessage",
                "value": "print?\"\":\"Light and Shadow Model\"+\"\\nIntensity=\"+intensity1.toFixed(0)+\" units \""
              },
              {
                "name": "GridYShow",
                "value": "false"
              },
              {
                "name": "MinimumX",
                "value": "-20"
              },
              {
                "name": "MinimumY",
                "value": "-4"
              },
              {
                "name": "AutoScaleY",
                "value": "false"
              },
              {
                "name": "AutoScaleX",
                "value": "false"
              },
              {
                "name": "Height",
                "value": "\"90vh\""
              },
              {
                "name": "GridXShow",
                "value": "false"
              },
              {
                "name": "Width",
                "value": "\"100%\""
              }
            ],
            "Children": [
              {
                "Name": "red",
                "Type": "Group2D",
                "Expanded": "true",
                "Properties": [],
                "Children": [
                  {
                    "Name": "redsourcebeforeblockeronleftside",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "redsourcexy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "Visibility",
                        "value": "ray1"
                      }
                    ]
                  },
                  {
                    "Name": "redpoly",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "redpolyxy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "Visibility",
                        "value": "redpoly1Flag"
                      }
                    ]
                  },
                  {
                    "Name": "redpoly2A",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "redpoly2Axy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "Visibility",
                        "value": "redpoly2Flag"
                      }
                    ]
                  },
                  {
                    "Name": "redpoly2B",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "redpoly2Bxy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorr%"
                      },
                      {
                        "name": "Visibility",
                        "value": "redpoly2Flag"
                      }
                    ]
                  },
                  {
                    "Name": "image",
                    "Type": "Image2D",
                    "Properties": [
                      {
                        "name": "SizeX",
                        "value": "5"
                      },
                      {
                        "name": "RelativePosition",
                        "value": "\"EAST\""
                      },
                      {
                        "name": "X",
                        "value": "xsource"
                      },
                      {
                        "name": "ImageUrl",
                        "value": "\"./Light/torch-light_1336690.png\""
                      },
                      {
                        "name": "Y",
                        "value": "ysource"
                      },
                      {
                        "name": "SizeY",
                        "value": "1"
                      }
                    ]
                  },
                  {
                    "Name": "S1",
                    "Type": "Text2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"Red\""
                      },
                      {
                        "name": "RelativePosition",
                        "value": "\"EAST\""
                      },
                      {
                        "name": "X",
                        "value": "xsource"
                      },
                      {
                        "name": "LineColor",
                        "value": "\"Red\""
                      },
                      {
                        "name": "Y",
                        "value": "ysource"
                      },
                      {
                        "name": "Text",
                        "value": "\" Light Source___ \""
                      },
                      {
                        "name": "Visibility",
                        "value": "ray1"
                      },
                      {
                        "name": "PixelSize",
                        "value": "true"
                      }
                    ]
                  },
                  {
                    "Name": "source",
                    "Type": "Shape2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"Red\""
                      },
                      {
                        "name": "SizeX",
                        "value": "10"
                      },
                      {
                        "name": "ShapeType",
                        "value": "\"ELLIPSE\""
                      },
                      {
                        "name": "X",
                        "value": "xsource"
                      },
                      {
                        "name": "Y",
                        "value": "ysource"
                      },
                      {
                        "name": "Visibility",
                        "value": "ray1"
                      },
                      {
                        "name": "SizeY",
                        "value": "10"
                      },
                      {
                        "name": "PixelSize",
                        "value": "true"
                      },
                      {
                        "name": "EnabledPosition",
                        "value": "\"ENABLED_ANY\""
                      },
                      {
                        "name": "OnDrag",
                        "value": "if (xsource > maxxsource) xsource = maxxsource-1;\nif (xsource < minxsource) xsource = minxsource+1;\n"
                      }
                    ]
                  },
                  {
                    "Name": "torchlight",
                    "Type": "Text2D",
                    "Properties": [
                      {
                        "name": "Rotate",
                        "value": "3*pi/4"
                      },
                      {
                        "name": "X",
                        "value": "xsource-1.2"
                      },
                      {
                        "name": "Y",
                        "value": "ysource"
                      },
                      {
                        "name": "Text",
                        "value": "\"\ud83d\udd26\""
                      },
                      {
                        "name": "Visibility",
                        "value": "false"
                      },
                      {
                        "name": "Font",
                        "value": "\"normal normal 10vw \""
                      }
                    ]
                  },
                  {
                    "Name": "straightline122",
                    "Type": "Arrow2D",
                    "Properties": [
                      {
                        "name": "SizeX",
                        "value": "xscreen-xsource"
                      },
                      {
                        "name": "X",
                        "value": "xsource"
                      },
                      {
                        "name": "LineColor",
                        "value": "\"White\""
                      },
                      {
                        "name": "Attributes",
                        "value": "{ \"stroke-dasharray\":\"8 8 8 8\" } "
                      },
                      {
                        "name": "Y",
                        "value": "ysource"
                      },
                      {
                        "name": "Visibility",
                        "value": "_view.comboBox.getProperty(\"SelectedOptions\")==\"light travel in straight line\""
                      },
                      {
                        "name": "SizeY",
                        "value": "highscreenpoint-ysource"
                      },
                      {
                        "name": "LineWidth",
                        "value": "2"
                      }
                    ]
                  },
                  {
                    "Name": "straightline1",
                    "Type": "Arrow2D",
                    "Properties": [
                      {
                        "name": "SizeX",
                        "value": "xscreen-xsource"
                      },
                      {
                        "name": "X",
                        "value": "xsource"
                      },
                      {
                        "name": "LineColor",
                        "value": "\"White\""
                      },
                      {
                        "name": "Attributes",
                        "value": "{ \"stroke-dasharray\":\"8 8 8 8\" } "
                      },
                      {
                        "name": "Y",
                        "value": "ysource"
                      },
                      {
                        "name": "Visibility",
                        "value": "_view.comboBox.getProperty(\"SelectedOptions\")==\"light travel in straight line\""
                      },
                      {
                        "name": "SizeY",
                        "value": "lowscreenpoint-ysource"
                      },
                      {
                        "name": "LineWidth",
                        "value": "2"
                      }
                    ]
                  },
                  {
                    "Name": "fake2Dor3Dshadow",
                    "Type": "Shape2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"Black\""
                      },
                      {
                        "name": "SizeX",
                        "value": "(highscreenpoint-lowscreenpoint)/3"
                      },
                      {
                        "name": "RelativePosition",
                        "value": "\"CENTERED\""
                      },
                      {
                        "name": "ShapeType",
                        "value": "\"ELLIPSE\""
                      },
                      {
                        "name": "X",
                        "value": "xscreen"
                      },
                      {
                        "name": "LineColor",
                        "value": "\"White\""
                      },
                      {
                        "name": "Y",
                        "value": "(highscreenpoint+lowscreenpoint)/2"
                      },
                      {
                        "name": "Visibility",
                        "value": "ray1"
                      },
                      {
                        "name": "SizeY",
                        "value": "highscreenpoint-lowscreenpoint"
                      }
                    ]
                  },
                  {
                    "Name": "textshadow",
                    "Type": "Text2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"White\""
                      },
                      {
                        "name": "RelativePosition",
                        "value": "\"EAST\""
                      },
                      {
                        "name": "X",
                        "value": "xscreen"
                      },
                      {
                        "name": "Y",
                        "value": "(highscreenpoint+lowscreenpoint)/2"
                      },
                      {
                        "name": "Text",
                        "value": "\"Shadow\""
                      },
                      {
                        "name": "Visibility",
                        "value": "ray1"
                      }
                    ]
                  }
                ]
              },
              {
                "Name": "blue",
                "Type": "Group2D",
                "Expanded": "false",
                "Properties": [],
                "Children": [
                  {
                    "Name": "bluesource",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "Points",
                        "value": "bluesourcexy"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "Visibility",
                        "value": "ray2"
                      }
                    ]
                  },
                  {
                    "Name": "bluepoly",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "bluepolyxy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "Visibility",
                        "value": "bluepoly1Flag"
                      }
                    ]
                  },
                  {
                    "Name": "bluepoly2A",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "bluepoly2Axy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "Visibility",
                        "value": "bluepoly2Flag"
                      }
                    ]
                  },
                  {
                    "Name": "bluepoly2B",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "bluepoly2Bxy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorb%"
                      },
                      {
                        "name": "Visibility",
                        "value": "bluepoly2Flag"
                      }
                    ]
                  },
                  {
                    "Name": "source2",
                    "Type": "Shape2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"Blue\""
                      },
                      {
                        "name": "SizeX",
                        "value": "30"
                      },
                      {
                        "name": "ShapeType",
                        "value": "\"ELLIPSE\""
                      },
                      {
                        "name": "X",
                        "value": "xsource2"
                      },
                      {
                        "name": "Y",
                        "value": "ysource2"
                      },
                      {
                        "name": "Visibility",
                        "value": "ray2"
                      },
                      {
                        "name": "SizeY",
                        "value": "30"
                      },
                      {
                        "name": "PixelSize",
                        "value": "true"
                      },
                      {
                        "name": "EnabledPosition",
                        "value": "\"ENABLED_ANY\""
                      },
                      {
                        "name": "OnDrag",
                        "value": "if (xsource2 > maxxsource) xsource2 = maxxsource;\nif (xsource2 < minxsource) xsource2 = minxsource;\n"
                      }
                    ]
                  },
                  {
                    "Name": "S2",
                    "Type": "Text2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"Blue\""
                      },
                      {
                        "name": "RelativePosition",
                        "value": "\"EAST\""
                      },
                      {
                        "name": "X",
                        "value": "xsource2"
                      },
                      {
                        "name": "LineColor",
                        "value": "\"Blue\""
                      },
                      {
                        "name": "Y",
                        "value": "ysource2"
                      },
                      {
                        "name": "Text",
                        "value": "\" S2___  \""
                      },
                      {
                        "name": "Visibility",
                        "value": "ray2"
                      },
                      {
                        "name": "PixelSize",
                        "value": "true"
                      }
                    ]
                  }
                ]
              },
              {
                "Name": "green",
                "Type": "Group2D",
                "Expanded": "false",
                "Properties": [],
                "Children": [
                  {
                    "Name": "greensource",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "Points",
                        "value": "greensourcexy"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "Visibility",
                        "value": "ray3"
                      }
                    ]
                  },
                  {
                    "Name": "greenpoly",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "greenpolyxy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "Visibility",
                        "value": "greenpoly1Flag"
                      }
                    ]
                  },
                  {
                    "Name": "greenpoly2A",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "greenpoly2Axy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "Visibility",
                        "value": "greenpoly2Flag"
                      }
                    ]
                  },
                  {
                    "Name": "greenpoly2B",
                    "Type": "Polygon2D",
                    "Properties": [
                      {
                        "name": "Points",
                        "value": "greenpoly2Bxy"
                      },
                      {
                        "name": "FillColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "LineColor",
                        "value": "%vcolorg%"
                      },
                      {
                        "name": "Visibility",
                        "value": "greenpoly2Flag"
                      }
                    ]
                  },
                  {
                    "Name": "source3",
                    "Type": "Shape2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"Green\""
                      },
                      {
                        "name": "SizeX",
                        "value": "30"
                      },
                      {
                        "name": "ShapeType",
                        "value": "\"ELLIPSE\""
                      },
                      {
                        "name": "X",
                        "value": "xsource3"
                      },
                      {
                        "name": "Y",
                        "value": "ysource3"
                      },
                      {
                        "name": "Visibility",
                        "value": "ray3"
                      },
                      {
                        "name": "SizeY",
                        "value": "30"
                      },
                      {
                        "name": "PixelSize",
                        "value": "true"
                      },
                      {
                        "name": "EnabledPosition",
                        "value": "\"ENABLED_ANY\""
                      },
                      {
                        "name": "OnDrag",
                        "value": "if (xsource3 > maxxsource) xsource3 = maxxsource;\nif (xsource3 < minxsource) xsource3 = minxsource;\n"
                      }
                    ]
                  },
                  {
                    "Name": "S3",
                    "Type": "Text2D",
                    "Properties": [
                      {
                        "name": "FillColor",
                        "value": "\"Green\""
                      },
                      {
                        "name": "RelativePosition",
                        "value": "\"EAST\""
                      },
                      {
                        "name": "X",
                        "value": "xsource3"
                      },
                      {
                        "name": "LineColor",
                        "value": "\"Green\""
                      },
                      {
                        "name": "Y",
                        "value": "ysource3"
                      },
                      {
                        "name": "Text",
                        "value": "\" S3___  \""
                      },
                      {
                        "name": "Visibility",
                        "value": "ray3"
                      },
                      {
                        "name": "PixelSize",
                        "value": "true"
                      }
                    ]
                  }
                ]
              },
              {
                "Name": "fake",
                "Type": "Polygon2D",
                "Properties": [
                  {
                    "name": "Points",
                    "value": "fakexy"
                  },
                  {
                    "name": "FillColor",
                    "value": "\"White\""
                  },
                  {
                    "name": "Visibility",
                    "value": "fakevisiblex < xscreen && whatwrong"
                  }
                ]
              },
              {
                "Name": "principalaxis",
                "Type": "Segment2D",
                "Properties": [
                  {
                    "name": "ResizesGroup",
                    "value": "false"
                  },
                  {
                    "name": "MovesGroup",
                    "value": "false"
                  },
                  {
                    "name": "SizeX",
                    "value": "40"
                  },
                  {
                    "name": "X",
                    "value": "-20"
                  },
                  {
                    "name": "Y",
                    "value": "0"
                  },
                  {
                    "name": "SizeY",
                    "value": "0"
                  }
                ]
              },
              {
                "Name": "maskrange",
                "Type": "Segment2D",
                "Properties": [
                  {
                    "name": "SizeX",
                    "value": "maxxmask-minxmask"
                  },
                  {
                    "name": "X",
                    "value": "minxmask"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Orange\""
                  },
                  {
                    "name": "Y",
                    "value": "0.0"
                  },
                  {
                    "name": "SizeY",
                    "value": "0.0"
                  }
                ]
              },
              {
                "Name": "screenrange",
                "Type": "Segment2D",
                "Properties": [
                  {
                    "name": "ResizesGroup",
                    "value": "true"
                  },
                  {
                    "name": "SizeX",
                    "value": "maxxscreen-minxscreen"
                  },
                  {
                    "name": "X",
                    "value": "minxscreen"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Yellow\""
                  },
                  {
                    "name": "Y",
                    "value": "0.0"
                  },
                  {
                    "name": "SizeY",
                    "value": "0.0"
                  }
                ]
              },
              {
                "Name": "maskx",
                "Type": "Shape2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"Orange\""
                  },
                  {
                    "name": "SizeX",
                    "value": "20"
                  },
                  {
                    "name": "ShapeType",
                    "value": "\"RECTANGLE\""
                  },
                  {
                    "name": "X",
                    "value": "xmask"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Orange\""
                  },
                  {
                    "name": "Y",
                    "value": "zero"
                  },
                  {
                    "name": "SizeY",
                    "value": "20"
                  },
                  {
                    "name": "PixelSize",
                    "value": "true"
                  },
                  {
                    "name": "DrawFill",
                    "value": "false"
                  },
                  {
                    "name": "OnDrag",
                    "value": "zero = 0.0;\nif (xmask > maxxmask) xmask = maxxmask;\nif (xmask < minxmask) xmask = minxmask;\nmaskknobx = xmask;\n_initialize();"
                  },
                  {
                    "name": "EnabledPosition",
                    "value": "\"ENABLED_X\""
                  }
                ]
              },
              {
                "Name": "uppermask",
                "Type": "Segment2D",
                "Properties": [
                  {
                    "name": "ResizesGroup",
                    "value": "true"
                  },
                  {
                    "name": "SizeX",
                    "value": "0"
                  },
                  {
                    "name": "X",
                    "value": "xmask"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Pink\""
                  },
                  {
                    "name": "Y",
                    "value": "ymask"
                  },
                  {
                    "name": "Visibility",
                    "value": "maskflag"
                  },
                  {
                    "name": "SizeY",
                    "value": "maxymask-ymask"
                  },
                  {
                    "name": "LineWidth",
                    "value": "5"
                  }
                ]
              },
              {
                "Name": "lowermask",
                "Type": "Segment2D",
                "Properties": [
                  {
                    "name": "ResizesGroup",
                    "value": "true"
                  },
                  {
                    "name": "SizeX",
                    "value": "0"
                  },
                  {
                    "name": "X",
                    "value": "xmask"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Pink\""
                  },
                  {
                    "name": "Y",
                    "value": "-ymask"
                  },
                  {
                    "name": "Visibility",
                    "value": "maskflag"
                  },
                  {
                    "name": "SizeY",
                    "value": "-maxymask+ymask"
                  },
                  {
                    "name": "LineWidth",
                    "value": "5"
                  }
                ]
              },
              {
                "Name": "screen",
                "Type": "Segment2D",
                "Properties": [
                  {
                    "name": "ResizesGroup",
                    "value": "true"
                  },
                  {
                    "name": "SizeX",
                    "value": "0.0"
                  },
                  {
                    "name": "X",
                    "value": "xscreen"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"White\""
                  },
                  {
                    "name": "Y",
                    "value": "screenheight"
                  },
                  {
                    "name": "SizeY",
                    "value": "-2.0*screenheight"
                  },
                  {
                    "name": "LineWidth",
                    "value": "5"
                  }
                ]
              },
              {
                "Name": "screentext",
                "Type": "Text2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"White\""
                  },
                  {
                    "name": "RelativePosition",
                    "value": "\"WEST\""
                  },
                  {
                    "name": "X",
                    "value": "xscreen"
                  },
                  {
                    "name": "Y",
                    "value": "0"
                  },
                  {
                    "name": "Text",
                    "value": "\"Screen\""
                  }
                ]
              },
              {
                "Name": "screenx",
                "Type": "Shape2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"Yellow\""
                  },
                  {
                    "name": "SizeX",
                    "value": "20"
                  },
                  {
                    "name": "ShapeType",
                    "value": "\"RECTANGLE\""
                  },
                  {
                    "name": "X",
                    "value": "xscreen"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Yellow\""
                  },
                  {
                    "name": "Y",
                    "value": "yscreen"
                  },
                  {
                    "name": "SizeY",
                    "value": "20"
                  },
                  {
                    "name": "PixelSize",
                    "value": "true"
                  },
                  {
                    "name": "DrawFill",
                    "value": "false"
                  },
                  {
                    "name": "EnabledPosition",
                    "value": "\"ENABLED_X\""
                  },
                  {
                    "name": "OnDrag",
                    "value": "yscreen = 0.0;\nif (xscreen > maxxscreen) xscreen = maxxscreen;\nif (xscreen < minxscreen) xscreen = minxscreen;\n_initialize();"
                  }
                ]
              },
              {
                "Name": "sensorfor_intensity",
                "Type": "Text2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"LightGray\""
                  },
                  {
                    "name": "RelativePosition",
                    "value": "\"WEST\""
                  },
                  {
                    "name": "X",
                    "value": "xscreen"
                  },
                  {
                    "name": "Y",
                    "value": "ysensor"
                  },
                  {
                    "name": "Text",
                    "value": "\"\ud83d\udcf9 \""
                  },
                  {
                    "name": "EnabledPosition",
                    "value": "\"ENABLED_Y\""
                  },
                  {
                    "name": "Font",
                    "value": "\"normal normal 5vw \""
                  }
                ]
              },
              {
                "Name": "sensortext",
                "Type": "Text2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"LightGray\""
                  },
                  {
                    "name": "RelativePosition",
                    "value": "\"SOUTH_WEST\""
                  },
                  {
                    "name": "X",
                    "value": "xscreen"
                  },
                  {
                    "name": "Y",
                    "value": "ysensor+0.3"
                  },
                  {
                    "name": "Text",
                    "value": "\"Sensor\""
                  }
                ]
              },
              {
                "Name": "object",
                "Type": "Segment2D",
                "Properties": [
                  {
                    "name": "ResizesGroup",
                    "value": "false"
                  },
                  {
                    "name": "MovesGroup",
                    "value": "false"
                  },
                  {
                    "name": "SizeX",
                    "value": "0"
                  },
                  {
                    "name": "X",
                    "value": "xmask"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Pink\""
                  },
                  {
                    "name": "Y",
                    "value": "-ymask"
                  },
                  {
                    "name": "Visibility",
                    "value": "objectflag"
                  },
                  {
                    "name": "SizeY",
                    "value": "2*ymask"
                  },
                  {
                    "name": "LineWidth",
                    "value": "5"
                  }
                ]
              },
              {
                "Name": "objecttext",
                "Type": "Text2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"Pink\""
                  },
                  {
                    "name": "RelativePosition",
                    "value": "\"NORTH\""
                  },
                  {
                    "name": "X",
                    "value": "xmask"
                  },
                  {
                    "name": "Y",
                    "value": "-ymask-0.2"
                  },
                  {
                    "name": "Text",
                    "value": "\"Opaque Object\""
                  },
                  {
                    "name": "Visibility",
                    "value": "objectflag"
                  }
                ]
              },
              {
                "Name": "object2dfake3d",
                "Type": "Shape2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"Pink\""
                  },
                  {
                    "name": "SizeX",
                    "value": "2*ymask/3"
                  },
                  {
                    "name": "ShapeType",
                    "value": "\"ELLIPSE\""
                  },
                  {
                    "name": "X",
                    "value": "xmask"
                  },
                  {
                    "name": "Y",
                    "value": "0"
                  },
                  {
                    "name": "Visibility",
                    "value": "objectflag"
                  },
                  {
                    "name": "SizeY",
                    "value": "2*ymask"
                  }
                ]
              },
              {
                "Name": "masky",
                "Type": "Shape2D",
                "Properties": [
                  {
                    "name": "FillColor",
                    "value": "\"Pink\""
                  },
                  {
                    "name": "SizeX",
                    "value": "20"
                  },
                  {
                    "name": "ShapeType",
                    "value": "\"RECTANGLE\""
                  },
                  {
                    "name": "X",
                    "value": "maskknobx"
                  },
                  {
                    "name": "LineColor",
                    "value": "\"Pink\""
                  },
                  {
                    "name": "Y",
                    "value": "ymask"
                  },
                  {
                    "name": "SizeY",
                    "value": "20"
                  },
                  {
                    "name": "PixelSize",
                    "value": "true"
                  },
                  {
                    "name": "DrawFill",
                    "value": "false"
                  },
                  {
                    "name": "OnDrag",
                    "value": "maskknobx = xmask;\nif (ymask > maxymask) ymask = maxymask;\nif (ymask < minymask) ymask = minymask;\n_initialize();"
                  },
                  {
                    "name": "EnabledPosition",
                    "value": "\"ENABLED_Y\""
                  }
                ]
              },
              {
                "Name": "screencolormix",
                "Type": "Group2D",
                "Properties": []
              }
            ]
          }
        ]
      },
      {
        "Name": "html",
        "Type": "Panel",
        "Properties": [
          {
            "name": "Html",
            "value": "<h2>Light and Shadows</h2>\n<h2>Further Learning Video</h2>\n<p>Here\u2019s another video to deepen your understanding:</p>\n\n<iframe width=\"560\" height=\"315\" \n  src=\"https://www.youtube.com/embed/vBFA5a8TSH4?si=6e3-EMwatuUtRORx\" \n  title=\"YouTube video player\" frameborder=\"0\" \n  allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" \n  referrerpolicy=\"strict-origin-when-cross-origin\" \n  allowfullscreen>\n</iframe>\n\n<p>\n  Or open it directly on YouTube: \n  <a href=\"https://www.youtube.com/watch?v=vBFA5a8TSH4\" target=\"_blank\" rel=\"noopener\">\n    https://www.youtube.com/watch?v=vBFA5a8TSH4\n  </a>\n</p>\n<p>The first point of this simulation is to show that light rays leaving an object travel in straight lines.</p> \n<p>The simulation has one light bulb that can be turned on (high, mid or low) or off independently. </p>\n<p>The bulb can be dragged around the screen to change position. </p>\n<p>The light from the bulbs is blocked by an object, as it travels to a screen on the right of the simulation. </p>\n<p>Investigate how the patterns of light and shadows change as you move the bulb, the object, and/or the screen, and as you change the size of the object.</p>"
          }
        ]
      }
    ],
    "RootProperties": []
  },
  "metadata": {
    "APP": "WebEJS",
    "CreatedWith": "WebEJS : The web version of Easy JavaScript Simulations",
    "MoreInfo": "WebEJS 1.2",
    "version": "https://www.um.es/fem/wikis/webejs/"
  }
}