/** * @file * @brief Offaxis fisheye calibration * Calibrates fisheye projection for domes with an offaxis fisheye lens. * * @author [pbourke](https://vuo.org/user/2025) * @createdInVuoVersion 2.0.0 * @lastSavedInVuoVersion 2.4.2 * @keywords fisheye, planetarium, dome, hemisphere, fulldome * @copyright Copyright © 2020 [pbourke](https://vuo.org/user/2025) * @license For more information, see http://paulbourke.net/ . * @image icon logo.png * @url homepage http://paulbourke.net/ * @url documentation http://paulbourke.net/dome/offaxisfisheyeprojection/ * @see This is a Vuo Composition source code file. See https://vuo.org for further information. */ digraph G { [type="togglehamdler" version="" label="Togglehamdler|refresh\l|Position\l|Initialvalue\l|Title\l|<Increment>Increment\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,-570" _Position="\{\"x\":0.0,\"y\":0.30000001192092896\}" _Title="\"\\\"1\\\" - Toggle reversed projector : \"" _Increment="2.0"]; AppendTexts [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="630,-15" _includeEmptyParts="true"]; AppendTexts10 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-300,225" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts12 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-330,-195" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts13 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="480,1620" fillcolor="cyan" _includeEmptyParts="true"]; AppendTexts14 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-315,555" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts15 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-300,1065" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts16 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-330,-585" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts17 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-1440,-1335" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts2 [type="vuo.text.append" version="1.2.0" label="Main shader code|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="375,-195" _includeEmptyParts="true"]; AppendTexts22 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-315,825" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts3 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="30,-15" _includeEmptyParts="true"]; AppendTexts4 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-330,-750" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts5 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-330,-375" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts6 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-315,330" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts7 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-315,60" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts8 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-330,-1050" fillcolor="blue" _includeEmptyParts="true"]; AppendTexts9 [type="vuo.text.append" version="1.2.0" label="Append Texts|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="-270,1350" fillcolor="cyan" _separator="\" \"" _includeEmptyParts="true"]; Calculate [type="vuo.math.calculate" version="1.0.0" label="Calculate|<refresh>refresh\l|<expression>expression\l|<values>values\l|<result>result\r" pos="1230,-780" fillcolor="violet" _expression="\{\"expressions\":[\"1\\/(10^A)\"],\"inputVariables\":[\"A\"],\"outputVariables\":[\"result\"]\}"]; Calculate2 [type="vuo.math.calculate" version="1.0.0" label="Calculate|<refresh>refresh\l|<expression>expression\l|<values>values\l|<result>result\r" pos="600,270" fillcolor="green" _expression="\{\"expressions\":[\"A * B\"],\"inputVariables\":[\"A\",\"B\"],\"outputVariables\":[\"result\"]\}"]; Calculate3 [type="vuo.math.calculate" version="1.0.0" label="Calculate|<refresh>refresh\l|<expression>expression\l|<values>values\l|<result>result\r" pos="900,405" fillcolor="green" _expression="\{\"expressions\":[\"A%B+1\"],\"inputVariables\":[\"A\",\"B\"],\"outputVariables\":[\"result\"]\}"]; Calculate4 [type="vuo.math.calculate" version="1.0.0" label="Calculate|<refresh>refresh\l|<expression>expression\l|<values>values\l|<result>result\r" pos="-1200,570" _expression="\{\"expressions\":[\"3-2*a\"],\"inputVariables\":[\"a\"],\"outputVariables\":[\"result\"]\}"]; Calculate5 [type="vuo.math.calculate" version="1.0.0" label="Calculate|<refresh>refresh\l|<expression>expression\l|<values>values\l|<result>result\r" pos="-1710,465" _expression="\{\"expressions\":[\"(3-a)\\/2\"],\"inputVariables\":[\"a\"],\"outputVariables\":[\"result\"]\}"]; ChangeScreen [type="vuo.window.fullscreen2" version="2.0.0" label="Change Screen|<refresh>refresh\l|<windowDescription>windowDescription\l|<fullscreen>fullscreen\l|<screen>screen\l|<changedWindowDescription>changedWindowDescription\r" pos="1590,75" fillcolor="yellow" _fullscreen="true" _screen="\{\"type\":\"secondary\"\}"]; ChangeScreen3 [type="vuo.window.fullscreen2" version="2.0.0" label="Change Screen|<refresh>refresh\l|<windowDescription>windowDescription\l|<fullscreen>fullscreen\l|<screen>screen\l|<changedWindowDescription>changedWindowDescription\r" pos="-315,-1815" fillcolor="magenta" _fullscreen="false" _screen="\{\"type\":\"primary\"\}"]; ChangeWindowSize [type="vuo.window.size2" version="2.0.1" label="Change Window Size|<refresh>refresh\l|<windowDescription>windowDescription\l|<width>width\l|<height>height\l|<unit>unit\l|<changedWindowDescription>changedWindowDescription\r" pos="-330,-1710" fillcolor="magenta" _width="800" _height="800" _unit="\"points\""]; ChangeWindowTitle [type="vuo.window.title2" version="2.0.0" label="Change Window Title|<refresh>refresh\l|<windowDescription>windowDescription\l|<title>title\l|<changedWindowDescription>changedWindowDescription\r" pos="-330,-1485" fillcolor="magenta" _title="\"Parameter control\""]; ConvertDataToText [type="vuo.type.data.text" version="1.0.0" label="Convert Data to Text|<refresh>refresh\l|<data>data\l|<text>text\r" pos="-1215,825"]; ConvertIntegerToRealNumber [type="vuo.type.integer.real" version="1.0.0" label="Convert Integer to Real Number|<refresh>refresh\l|<integer>integer\l|<real>real\r" pos="-1335,-795"]; ConvertIntegerToRealNumber2 [type="vuo.type.integer.real" version="1.0.0" label="Convert Integer to Real Number|<refresh>refresh\l|<integer>integer\l|<real>real\r" pos="585,1050"]; ConvertIntegerToRealNumber3 [type="vuo.type.integer.real" version="1.0.0" label="Convert Integer to Real Number|<refresh>refresh\l|<integer>integer\l|<real>real\r" pos="585,1065"]; ConvertIntegerToRealNumber4 [type="vuo.type.integer.real" version="1.0.0" label="Convert Integer to Real Number|<refresh>refresh\l|<integer>integer\l|<real>real\r" pos="660,405"]; ConvertIntegerToRealNumber5 [type="vuo.type.integer.real" version="1.0.0" label="Convert Integer to Real Number|<refresh>refresh\l|<integer>integer\l|<real>real\r" pos="-405,600"]; ConvertTextToData2 [type="vuo.type.text.data" version="1.0.0" label="Convert Text to Data|<refresh>refresh\l|<text>text\l|<data>data\r" pos="-150,705"]; ConvertTextToReal [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1125,480"]; ConvertTextToReal17 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1125,195"]; ConvertTextToReal18 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1125,360"]; ConvertTextToReal19 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1125,600"]; ConvertTextToReal2 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1560,-405"]; ConvertTextToReal20 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1125,930"]; ConvertTextToReal21 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1125,765"]; ConvertTextToReal3 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1515,-195"]; ConvertTextToReal4 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1515,-270"]; ConvertTextToReal5 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1515,-345"]; ConvertTextToReal6 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1515,-420"]; ConvertTextToReal8 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-1695,645"]; ConvertTextToReal9 [type="vuo.type.text.real" version="1.0.1" label="Convert Text to Real|<refresh>refresh\l|<text>text\l|<real>real\r" pos="-825,-75"]; Count [type="vuo.math.count.VuoInteger" version="1.0.1" label="Count|<refresh>refresh\l|<increment>increment\l|<decrement>decrement\l|<setCount>setCount\l|<count>count\r" pos="645,420" fillcolor="green" _increment="1" _decrement="1"]; Count2 [type="vuo.math.count.VuoReal" version="1.0.1" label="Count|<refresh>refresh\l|<increment>increment\l|<decrement>decrement\l|<setCount>setCount\l|<count>count\r" pos="645,645" fillcolor="green" _increment="0.25" _decrement="0.25" _setCount="0.0"]; Count3 [type="vuo.math.count.VuoReal" version="1.0.1" label="Count|<refresh>refresh\l|<increment>increment\l|<decrement>decrement\l|<setCount>setCount\l|<count>count\r" pos="30,1635" fillcolor="cyan" _increment="1.0" _decrement="1.0" _setCount="0.0"]; CountItemsInList [type="vuo.list.count.VuoText" version="1.0.0" label="Count Items in List|<refresh>refresh\l|<list>list\l|<itemCount>itemCount\r" pos="345,285" fillcolor="green"]; CountWithinRange [type="vuo.math.countWithinRange.VuoInteger" version="1.0.2" label="Count within Range|<refresh>refresh\l|<increment>increment\l|<decrement>decrement\l|<setCount>setCount\l|<minimum>minimum\l|<maximum>maximum\l|<wrapMode>wrapMode\l|<count>count\r" pos="30,1455" fillcolor="cyan" _increment="1" _decrement="1" _setCount="1" _minimum="1" _maximum="2" _wrapMode="\"wrap\""]; CountWithinRange2 [type="vuo.math.countWithinRange.VuoInteger" version="1.0.2" label="Count within Range|<refresh>refresh\l|<increment>increment\l|<decrement>decrement\l|<setCount>setCount\l|<minimum>minimum\l|<maximum>maximum\l|<wrapMode>wrapMode\l|<count>count\r" pos="975,-765" fillcolor="violet" _increment="1" _decrement="1" _setCount="0" _minimum="0" _maximum="1" _wrapMode="\"wrap\""]; CountWithinRange3 [type="vuo.math.countWithinRange.VuoInteger" version="1.0.2" label="Count within Range|<refresh>refresh\l|<increment>increment\l|<decrement>decrement\l|<setCount>setCount\l|<minimum>minimum\l|<maximum>maximum\l|<wrapMode>wrapMode\l|<count>count\r" pos="-1470,585" _increment="1" _decrement="1" _minimum="1" _maximum="2" _wrapMode="\"wrap\""]; FetchData [type="vuo.data.fetch" version="1.0.0" label="Fetch Data|<refresh>refresh\l|<url>url\l|<data>data\r" pos="-2235,-435" fillcolor="green" _url="\"parameters.data\""]; FetchImage [type="vuo.image.fetch" version="2.0.0" label="Fetch Image|<refresh>refresh\l|<url>url\l|<image>image\r" pos="1020,210" fillcolor="green"]; FireOnStart [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-45,255" fillcolor="green" _started_eventThrottling="enqueue"]; FireOnStart10 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,60" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart11 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,-885" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart12 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,-1050" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart13 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1635,-2085" fillcolor="yellow" _started_eventThrottling="enqueue"]; FireOnStart14 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,225" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart15 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1515,750" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart16 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="810,45" fillcolor="yellow" _started_eventThrottling="enqueue"]; FireOnStart17 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="795,-870" fillcolor="violet" _started_eventThrottling="enqueue"]; FireOnStart18 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,-150" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart19 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1515,1080" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart2 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="1590,180" fillcolor="yellow" _started_eventThrottling="enqueue"]; FireOnStart20 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,915" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart21 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-2025,-1350" fillcolor="yellow" _started_eventThrottling="enqueue"]; FireOnStart23 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,405" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart24 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-2880,420" _started_eventThrottling="enqueue"]; FireOnStart3 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-15,-270" _started_eventThrottling="enqueue"]; FireOnStart4 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-300,-1395" fillcolor="magenta" _started_eventThrottling="enqueue"]; FireOnStart5 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-180,1575" fillcolor="cyan" _started_eventThrottling="enqueue"]; FireOnStart6 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-2265,-510" fillcolor="green" _started_eventThrottling="enqueue"]; FireOnStart7 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,-720" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart8 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,-315" fillcolor="blue" _started_eventThrottling="enqueue"]; FireOnStart9 [type="vuo.event.fireOnStart" version="1.0.0" label="Fire on Start|<refresh>refresh\l|<started>started\r" pos="-1500,-570" fillcolor="blue" _started_eventThrottling="enqueue"]; FormatNumber [type="vuo.text.format.number" version="1.1.0" label="Format Number|<refresh>refresh\l|<value>value\l|<format>format\l|<minimumIntegerDigits>minimumIntegerDigits\l|<minimumDecimalPlaces>minimumDecimalPlaces\l|<decimalPlaces>decimalPlaces\l|<showThousandSeparator>showThousandSeparator\l|<text>text\r" pos="195,1635" fillcolor="cyan" _format="\"decimal\"" _minimumIntegerDigits="2" _minimumDecimalPlaces="0" _decimalPlaces="0" _showThousandSeparator="false"]; GetItemFromList [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-1995,-1050" fillcolor="green" _which="1"]; GetItemFromList10 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-1995,-150" fillcolor="green" _which="6"]; GetItemFromList11 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-2025,1095" fillcolor="green" _which="13"]; GetItemFromList12 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-2010,420" fillcolor="green" _which="9"]; GetItemFromList13 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-1995,-555" fillcolor="green" _which="4"]; GetItemFromList14 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-2010,570" fillcolor="green" _which="10"]; GetItemFromList2 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-2025,750" fillcolor="green" _which="11"]; GetItemFromList3 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-2025,915" fillcolor="green" _which="12"]; GetItemFromList4 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-1980,-885" fillcolor="green" _which="2"]; GetItemFromList5 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-1995,-720" fillcolor="green" _which="3"]; GetItemFromList6 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-1995,-315" fillcolor="green" _which="5"]; GetItemFromList7 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-2010,75" fillcolor="green" _which="7"]; GetItemFromList8 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="-2010,240" fillcolor="green" _which="8"]; GetItemFromList9 [type="vuo.list.get.VuoText" version="1.0.1" label="Get Item from List|<refresh>refresh\l|<list>list\l|<which>which\l|<item>item\r" pos="840,210" fillcolor="green"]; GetScreenValues [type="vuo.screen.get" version="1.2.0" label="Get Screen Values|<refresh>refresh\l|<screen>screen\l|<name>name\r|<topLeft>topLeft\r|<width>width\r|<height>height\r|<dpiHorizontal>dpiHorizontal\r|<dpiVertical>dpiVertical\r" pos="1020,45" fillcolor="yellow" _screen="\{\"type\":\"secondary\"\}"]; GetScreenValues2 [type="vuo.screen.get" version="1.2.0" label="Get Screen Values|<refresh>refresh\l|<screen>screen\l|<name>name\r|<topLeft>topLeft\r|<width>width\r|<height>height\r|<dpiHorizontal>dpiHorizontal\r|<dpiVertical>dpiVertical\r" pos="-1815,-1350" fillcolor="yellow" _screen="\{\"type\":\"secondary\"\}"]; KeyShiftNoshift [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,-255" fillcolor="blue" _Key="\"V\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift10 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,975" fillcolor="blue" _Key="\"E\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift11 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1515,1140" fillcolor="blue" _Key="\"M\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift2 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,-660" fillcolor="blue" _Key="\"A\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift3 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,-825" fillcolor="blue" _Key="\"Z\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift4 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,-990" fillcolor="blue" _Key="\"X\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift5 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,465" fillcolor="blue" _Key="\"B\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift6 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,120" fillcolor="blue" _Key="\"R\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift7 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,285" fillcolor="blue" _Key="\"T\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift8 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1515,810" fillcolor="blue" _Key="\"W\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; KeyShiftNoshift9 [type="key_shift_noshift" version="" label="Key_shift_noshift|<refresh>refresh\l|<Key>Key\l|<Increment>Increment\r|<Decrement>Decrement\r" pos="-1500,-90" fillcolor="blue" _Key="\"F\"" _Increment_eventThrottling="enqueue" _Decrement_eventThrottling="enqueue"]; Keyhamdler10 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,-165" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":0.10000000149011612\}" _Title="\"\\\"f\\\", \\\"F\\\" - Projector throw (fov) : \"" _Minimum="0.5" _Maximum="5.0" _Increment="0.050000000000000003" _Decrement="0.050000000000000003"]; Keyhamdler11 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,900" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":-0.5\}" _Title="\"\\\"e\\\", \\\"E\\\" - Mirror z position : \"" _Minimum="-10.0" _Maximum="10.0" _Increment="0.02" _Decrement="0.02"]; Keyhamdler12 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,1065" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":-0.60000002384185791\}" _Title="\"\\\"m\\\", \\\"M\\\" - Mirror radius : \"" _Minimum="0.10000000000000001" _Maximum="0.40000000000000002" _Increment="0.01" _Decrement="0.01"]; Keyhamdler2 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,-735" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":0.40000000596046448\}" _Title="\"\\\"a\\\", \\\"A\\\" - Projector tilt angle : \"" _Minimum="-45.0" _Maximum="45.0" _Increment="0.20000000000000001" _Decrement="0.20000000000000001"]; Keyhamdler3 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,210" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":-0.10000000149011612\}" _Title="\"\\\"t\\\", \\\"T\\\" - Dome tilt angle : \"" _Minimum="0.0" _Maximum="90" _Increment="1" _Decrement="1.0"]; Keyhamdler4 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,-330" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":0.20000000298023224\}" _Title="\"\\\"v\\\", \\\"V\\\" - Vertical lens shift : \"" _Minimum="-1" _Maximum="1" _Increment="0.01" _Decrement="0.01"]; Keyhamdler6 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,735" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":-0.40000000596046448\}" _Title="\"\\\"w\\\", \\\"W\\\" -Mirror x position : \"" _Minimum="-10.0" _Maximum="10.0" _Increment="0.02" _Decrement="0.02"]; Keyhamdler7 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,45" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":0.0\}" _Title="\"\\\"r\\\", \\\"R\\\" - Dome radius : \"" _Minimum="1" _Maximum="20" _Increment="0.10000000000000001" _Decrement="0.10000000000000001"]; Keyhamdler8 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,-900" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":0.5\}" _Title="\"\\\"z\\\", \\\"Z\\\" - Projector z position : \"" _Minimum="-10" _Maximum="10" _Increment="0.02" _Decrement="0.02"]; Keyhamdler9 [type="keyhamdler" version="" label="Keyhamdler|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,-1065" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":0.60000002384185791\}" _Title="\"\\\"x\\\", \\\"X\\\" - Projector x position : \"" _Minimum="-10.0" _Maximum="10.0" _Increment="0.02" _Decrement="0.02"]; KeyhamdlerInt2 [type="keyhamdler_int" version="" label="Keyhamdler_int|<refresh>refresh\l|<Position>Position\l|<Initialvalue>Initialvalue\l|<Title>Title\l|<Minimum>Minimum\l|<Maximum>Maximum\l|<Increment>Increment\l|<Decrement>Decrement\l|<Scale>Scale\l|<Text>Text\r|<Layer>Layer\r" pos="-1215,390" fillcolor="blue" _Position="\{\"x\":0.40000000596046448,\"y\":-0.20000000298023224\}" _Title="\"\\\"b\\\", \\\"B\\\" - Backfade type : \"" _Minimum="0.0" _Maximum="3.0" _Increment="1.0" _Decrement="1.0" _Scale="1.0"]; ListFiles [type="vuo.file.list" version="1.0.2" label="List Files|<refresh>refresh\l|<folder>folder\l|<includeSubfolders>includeSubfolders\l|<fileType>fileType\l|<files>files\r" pos="165,210" fillcolor="green" _folder="\"calibrationimages\"" _includeSubfolders="false" _fileType="\"image\""]; LockWindowAspectRatio2 [type="vuo.window.aspectRatio2" version="2.0.0" label="Lock Window Aspect Ratio|<refresh>refresh\l|<windowDescription>windowDescription\l|<width>width\l|<height>height\l|<changedWindowDescription>changedWindowDescription\r" pos="-360,-1590" fillcolor="magenta" _width="1" _height="1"]; MainShaderCode2 [type="vuo.text.append" version="1.2.0" label="Shader functions|<refresh>refresh\l|<texts>texts\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<compositeText>compositeText\r" pos="375,-315" _includeEmptyParts="true"]; MakeDictionary [type="vuo.dictionary.make.VuoText.VuoReal" version="1.0.0" label="Make Dictionary|<refresh>refresh\l|<keys>keys\l|<values>values\l|<dictionary>dictionary\r" pos="-1620,-870"]; MakeDictionary2 [type="vuo.dictionary.make.VuoText.VuoReal" version="1.0.0" label="Make Dictionary|<refresh>refresh\l|<keys>keys\l|<values>values\l|<dictionary>dictionary\r" pos="765,225"]; MakeDictionary3 [type="vuo.dictionary.make.VuoText.VuoReal" version="1.0.0" label="Make Dictionary|<refresh>refresh\l|<keys>keys\l|<values>values\l|<dictionary>dictionary\r" pos="945,405"]; MakeDictionary4 [type="vuo.dictionary.make.VuoText.VuoReal" version="1.0.0" label="Make Dictionary|<refresh>refresh\l|<keys>keys\l|<values>values\l|<dictionary>dictionary\r" pos="-705,525"]; MakeDictionary5 [type="vuo.dictionary.make.VuoText.VuoReal" version="1.0.0" label="Make Dictionary|<refresh>refresh\l|<keys>keys\l|<values>values\l|<dictionary>dictionary\r" pos="-1380,450"]; MakeImageWithShadertoy [type="vuo.image.make.shadertoy2" version="3.0.0" label="Make Image with Shadertoy|<refresh>refresh\l|<fragmentShader>fragmentShader\l|<time>time\l|<channel0>channel0\l|<channel1>channel1\l|<channel2>channel2\l|<channel3>channel3\l|<width>width\l|<height>height\l|<colorDepth>colorDepth\l|<mousePosition>mousePosition\l|<mouseIsPressed>mouseIsPressed\l|<shaderImage>shaderImage\r" pos="1335,-15" fillcolor="yellow" _colorDepth="\"8bpc\""]; MakeList [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="571,-4"]; MakeList10 [type="vuo.list.make.13.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<4>4\l|<5>5\l|<6>6\l|<7>7\l|<8>8\l|<9>9\l|<10>10\l|<11>11\l|<12>12\l|<13>13\l|<list>list\r" pos="-334,1361" fillcolor="cyan"]; MakeList11 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-389,-739" fillcolor="blue" _1="\"float projectortilty = \"" _3="\";\\n\""]; MakeList12 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-389,-364" fillcolor="blue" _1="\"float projectorvoffset = \"" _3="\";\\n\""]; MakeList13 [type="vuo.list.make.1.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="-705,525" _1="\"a\""]; MakeList14 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-374,71" fillcolor="blue" _1="\"float domeradius = \"" _3="\";\\n\""]; MakeList15 [type="vuo.list.make.7.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<4>4\l|<5>5\l|<6>6\l|<7>7\l|<list>list\r" pos="-389,-1039" fillcolor="blue" _1="\"vec3 projectorpos = vec3(\"" _3="\",\"" _4="\"0.0\"" _5="\",\"" _7="\");\\n\""]; MakeList16 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-359,236" fillcolor="blue" _1="\"float dometilty = \"" _3="\";\\n\""]; MakeList17 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-374,341" fillcolor="blue" _1="\"int backfade = \"" _3="\";\\n\""]; MakeList18 [type="vuo.list.make.2.VuoReal" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<list>list\r" pos="567,296" fillcolor="green" _2="100.0"]; MakeList19 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-389,-574" fillcolor="blue" _1="\"float projectordir = \"" _3="\";\\n\""]; MakeList2 [type="vuo.list.make.1.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="316,-184" _1="\"void mainImage(out vec4 fragColor, vec2 fragCoord)\\n\{\\n \ vec2 pfish,uv;\\n \ float br=1.0;\\n \ float dh,dv,mu,phi,r,theta;\\n \ vec3 p0,p1,p2,pn,ray,origin=vec3(0.0,0.0,0.0),pdome;\\n \ vec4 black = vec4(0.0,0.0,0.0,1.0);\\n \ float pi = 3.141592653589793;\\n \ vec4 red = vec4(1.0,0.0,0.0,1.0);\\n \ vec4 blue = vec4(0.0,0.0,1.0,1.0);\\n\\n \ \\/\\/ Angles to radians\\n \ projectortilty = radians(projectortilty);\\n \ dometilty = radians(dometilty);\\n\\n \ \\/\\/ Perspective projection plane width and height\\n \ dh = 0.5 \\/ projectorthrow; \ \ \ \ \ \ \ \ \ \ \\/\\/ Horizontal half width\\n \ dv = iResolution.y * dh \\/ iResolution.x; \ \ \ \\/\\/ Vertical half width\\n\\n \ \\/\\/ Vector p in perspective frustum in normalised coordinates\\n \ uv.x = 2.0 * gl_FragCoord.x \\/ iResolution.x - 1.0; \ \ \ \ \ \ \\/\\/ -1 ... 1\\n \ uv.y = 2.0 * gl_FragCoord.y \\/ iResolution.y - 1.0; \ \ \ \ \ \ \\/\\/ -1 ... 1\\n \ p0.x = float(projectordir);\\n \ p0.y = uv.x * dh;\\n \ p0.z = (uv.y + projectorvoffset) * dv;\\n \ \\n \ \\/\\/ Deal with projector tilt, y axis only\\n \ p0 = RotateY(p0,projectortilty);\\n \ p0 = normalize(p0);\\n \ \\n \ \\/\\/ Find the intersection point of ray with the spherical mirror\\n \ ray = projectorpos + p0;\\n \ mu = RaySphereIntersect(projectorpos,ray,mirrorpos,mirrorradius,1);\\n \ if (mu \< 0.0) \{\\n \ \ \ fragColor = black;\\n \ \ \ return;\\n \ \}\\n \ p1 = projectorpos + mu * p0;\\n\\n \ \\/\\/ Calculate the reflected ray\\n \ pn = normalize(p1 - mirrorpos);\\n \ p2 = p0 - 2.0 * dot(p0,pn) * pn;\\n\\n \ \\/\\/ Determine intersection with dome\\n \ ray = p1 + p2;\\n \ mu = RaySphereIntersect(p1,ray,origin,domeradius,2);\\n \ if (mu \< 0.0) \{\\n \ \ \ fragColor = black;\\n \ \ \ return;\\n \ \}\\n \ pdome = p1 + mu * p2;\\n\\n \ \\/\\/ Deal with dome orientation, y axis only\\n \ pdome = RotateY(pdome,-dometilty);\\n \ pdome.x *= float(domeflip);\\n\\n \ \\/\\/ Find u,v coordinates in fisheye image\\n \ phi = atan(sqrt(pdome.x*pdome.x+pdome.y*pdome.y),pdome.z); \\/\\/ 0 ... pi\\/2\\n \ r = 2.0 * phi \\/ pi; \ \\n \ if (r \> 1.0) \{ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\/\\/ Assumes 180 degree dome\\n \ \ \ fragColor = black;\\n \ \ \ return;\\n \ \}\\n \ theta = atan(pdome.x,pdome.y); \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\/\\/ -pi ... pi\\n \ pfish.x = 0.5 * (1.0 + r * cos(theta));\\n \ pfish.y = 0.5 * (1.0 + r * sin(theta));\\n\\n \ if (pfish.x \< 0.0 \|\| pfish.y \< 0.0 \|\| pfish.x \> 1.0 \|\| pfish.y \> 1.0) \{\\n \ \ \ fragColor = black;\\n \ \ \ return;\\n \ \}\\n\\n \ \\/\\/ Get the pixel colour\\n \ fragColor = texture(iChannel0,pfish);\\n \ \\n \ \\/\\/ Back fading\\n \ if (backfade == 1) \{\\n \ \ \ br = (pdome.x - domeradius) \\/ (-domeradius\\/16.0);\\n \ \} else if (backfade == 2) \{\\n \ \ \ br = (pdome.x - domeradius) \\/ (-domeradius\\/8.0);\\n \ \} else if (backfade == 3) \{\\n \ \ \ br = (pdome.x - domeradius) \\/ (-domeradius\\/4.0);\\n \ \}\\n \ if (br \< 0.0) br = 0.0;\\n \ if (br \> 1.0) br = 1.0;\\n \ fragColor.r *= br;\\n \ fragColor.g *= br;\\n \ fragColor.b *= br;\\n \ \ \ \\n \ return;\\n\}\\n\""]; MakeList20 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="421,1631" fillcolor="cyan" _1="\"warped_\"" _3="\".png\""]; MakeList21 [type="vuo.list.make.2.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<list>list\r" pos="945,405" _1="\"A\"" _2="\"B\""]; MakeList22 [type="vuo.list.make.2.VuoReal" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<list>list\r" pos="867,431" fillcolor="green"]; MakeList23 [type="vuo.list.make.7.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<4>4\l|<5>5\l|<6>6\l|<7>7\l|<list>list\r" pos="-1499,-1324" fillcolor="blue" _1="\"Secondary screen: \"" _3="\" x \"" _5="\", \"" _7="\"dpi\""]; MakeList24 [type="vuo.list.make.1.VuoReal" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="-1232,596"]; MakeList25 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-359,1076" fillcolor="blue" _1="\"float mirrorradius = \"" _3="\";\\n\""]; MakeList26 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-374,566" fillcolor="blue" _1="\"int domeflip = \"" _3="\";\\n\""]; MakeList27 [type="vuo.list.make.1.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="-1380,450" _1="\"a\""]; MakeList28 [type="vuo.list.make.7.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<4>4\l|<5>5\l|<6>6\l|<7>7\l|<list>list\r" pos="-374,836" fillcolor="blue" _1="\"vec3 mirrorpos = vec3(\"" _3="\",\"" _4="\"0.0\"" _5="\",\"" _7="\");\\n\""]; MakeList29 [type="vuo.list.make.1.VuoReal" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="-1742,491"]; MakeList3 [type="vuo.list.make.11.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<4>4\l|<5>5\l|<6>6\l|<7>7\l|<8>8\l|<9>9\l|<10>10\l|<11>11\l|<list>list\r" pos="-34,-4"]; MakeList4 [type="vuo.list.make.25.VuoLayer" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<4>4\l|<5>5\l|<6>6\l|<7>7\l|<8>8\l|<9>9\l|<10>10\l|<11>11\l|<12>12\l|<13>13\l|<14>14\l|<15>15\l|<16>16\l|<17>17\l|<18>18\l|<19>19\l|<20>20\l|<21>21\l|<22>22\l|<23>23\l|<24>24\l|<25>25\l|<list>list\r" pos="-432,-1909" fillcolor="magenta"]; MakeList5 [type="vuo.list.make.1.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="-1620,-870" _1="\"A\""]; MakeList6 [type="vuo.list.make.1.VuoReal" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="1197,-754" fillcolor="violet"]; MakeList7 [type="vuo.list.make.3.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<3>3\l|<list>list\r" pos="-389,-184" fillcolor="blue" _1="\"float projectorthrow = \"" _3="\";\\n\""]; MakeList8 [type="vuo.list.make.2.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<2>2\l|<list>list\r" pos="765,225" _1="\"A\"" _2="\"B\""]; MakeList9 [type="vuo.list.make.1.VuoText" version="2.0.0" label="Make List|<refresh>refresh\l|<1>1\l|<list>list\r" pos="316,-304" _1="\"\\/*\\n \ Spherical mirror glsl shader\\n*\\/\\n\\nvec3 RotateX(vec3 p,float angle)\\n\{\\n \ vec3 q;\\n \ q.x = \ p.x;\\n \ q.y = \ p.y * cos(angle) + p.z * sin(angle);\\n \ q.z = -p.y * sin(angle) + p.z * cos(angle);\\n \ return q;\\n\}\\n\\nvec3 RotateY(vec3 p,float angle)\\n\{\\n \ vec3 q;\\n \ q.x = \ p.x * cos(angle) + p.z * sin(angle);\\n \ q.y = \ p.y;\\n \ q.z = -p.x * sin(angle) + p.z * cos(angle); \ \ \ \ \ \ \ \ \ \ \ \\n \ return q;\\n\}\\n\\nvec3 RotateZ(vec3 p,float angle)\\n\{\\n \ vec3 q;\\n \ q.x = \ p.x * cos(angle) + p.y * sin(angle);\\n \ q.y = -p.x * sin(angle) + p.y * cos(angle);\\n \ q.z = \ p.z;\\n \ return q;\\n\}\\n\\n\\/*\\n \ Calculate the intersection of a ray and a sphere\\n \ The line segment is defined from p1 to p2\\n \ The sphere is of radius r and centered at sc\\n \ There are potentially two points of intersection given by\\n \ p = p1 + mu1 (p2 - p1)\\n \ p = p1 + mu2 (p2 - p1)\\n \ Return (-1000) if the ray doesn't intersect the sphere.\\n*\\/\\nfloat RaySphereIntersect(vec3 p1,vec3 p2,vec3 sc,float r,int m)\\n\{\\n \ float a,b,c,bb4ac;\\n \ vec3 dp;\\n \ float eps = 0.0001;\\n \ float mu1,mu2;\\n\\n \ dp = p2 - p1;\\n \ \\/\\/a = dp.x * dp.x + dp.y * dp.y + dp.z * dp.z;\\n \ a = dot(dp,dp);\\n \ \\/\\/b = 2.0 * (dp.x * (p1.x - sc.x) + dp.y * (p1.y - sc.y) + dp.z * (p1.z - sc.z));\\n \ b = 2.0 * dot(dp,p1 - sc);\\n \ \\/\\/c = sc.x * sc.x + sc.y * sc.y + sc.z * sc.z;\\n \ \\/\\/c += p1.x * p1.x + p1.y * p1.y + p1.z * p1.z;\\n \ \\/\\/c -= 2.0 * (sc.x * p1.x + sc.y * p1.y + sc.z * p1.z);\\n \ \\/\\/c -= r * r;\\n \ c = dot(sc,sc) + dot (p1,p1) - 2.0 * dot(sc,p1) - r*r;\\n \ bb4ac = b * b - 4.0 * a * c;\\n \ if ((a \> -eps && a \< eps) \|\| bb4ac \< 0.0)\\n \ \ \ return(-1000.0);\\n\\n \ mu1 = (-b + sqrt(bb4ac)) \\/ (2.0 * a);\\n \ mu2 = (-b - sqrt(bb4ac)) \\/ (2.0 * a); \ \\n \ if (m == 2)\\n \ \ \ return(max(mu1,mu2)); \ \\/\\/ Dome case\\n \ else\\n \ \ \ return(min(mu1,mu2)); \ \\/\\/ Mirror case\\n\}\\n\""]; MakeTextLayer [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-2685" fillcolor="blue" _text="\"Spherical mirror calibration\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":36.0,\"underline\":false,\"color\":\{\"r\":0.99998635053634644,\"g\":1.0,\"b\":1.0,\"a\":1.0\},\"alignment\":\"left\",\"characterSpacing\":1.1575659490694665,\"lineSpacing\":1.0\}" _anchor="\{\"horizontalAlignment\":\"center\",\"verticalAlignment\":\"center\"\}" _center="\{\"x\":0.0,\"y\":0.92500001192092896\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer10 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-1485" fillcolor="blue" _text="\"Up and down arrow keys - change test pattern\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24,\"underline\":false,\"color\":\{\"r\":1,\"g\":1,\"b\":1,\"a\":1\},\"alignment\":\"left\",\"characterSpacing\":1,\"lineSpacing\":1\}" _anchor="\{\"horizontalAlignment\":\"center\",\"verticalAlignment\":\"center\"\}" _center="\{\"x\":0.10000000149011612,\"y\":-0.80000001192092896\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer11 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-1335" fillcolor="blue" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":18.0,\"underline\":false,\"color\":\{\"r\":1.0,\"g\":0.99999994039535522,\"b\":0.99999994039535522,\"a\":1.0\},\"alignment\":\"left\",\"characterSpacing\":1.0,\"lineSpacing\":1.0\}" _anchor="\"center-center\"" _center="\{\"x\":0.0,\"y\":-0.94999998807907104\}" _wrapWidth="Infinity" _opacity="0.5"]; MakeTextLayer2 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-2535" fillcolor="blue" _text="\"Lower case key to reduce value, uppercase to increase value.\\nTab key to toggle between coarse and fine adjustments.\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24.0,\"underline\":false,\"color\":\{\"r\":0.99999600648880005,\"g\":1.0,\"b\":1.0,\"a\":1.0\},\"alignment\":\"left\",\"characterSpacing\":1.0,\"lineSpacing\":1.0\}" _anchor="\{\"horizontalAlignment\":\"center\",\"verticalAlignment\":\"center\"\}" _center="\{\"x\":0.0,\"y\":0.77499997615814209\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer3 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-1635" fillcolor="blue" _text="\"\\\"s\\\" - save parameters, \\\"q\\\" \ - quit, \\\"n\\\" - reset to saved\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24,\"underline\":false,\"color\":\{\"r\":1,\"g\":1,\"b\":1,\"a\":1\},\"alignment\":\"left\",\"characterSpacing\":1,\"lineSpacing\":1\}" _anchor="\{\"horizontalAlignment\":\"center\",\"verticalAlignment\":\"center\"\}" _center="\{\"x\":0.10000000149011612,\"y\":-0.69999998807907104\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer4 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-2385" fillcolor="blue" _text="\"Projector\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24,\"underline\":false,\"color\":\{\"r\":1,\"g\":1,\"b\":1,\"a\":1\},\"alignment\":\"left\",\"characterSpacing\":1,\"lineSpacing\":1\}" _anchor="\"left-center\"" _center="\{\"x\":-0.80000001192092896,\"y\":0.60000002384185791\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer5 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-2235" fillcolor="blue" _text="\"Lens\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24,\"underline\":false,\"color\":\{\"r\":1,\"g\":1,\"b\":1,\"a\":1\},\"alignment\":\"left\",\"characterSpacing\":1,\"lineSpacing\":1\}" _anchor="\"left-center\"" _center="\{\"x\":-0.80000001192092896,\"y\":0.20000000298023224\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer6 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-2085" fillcolor="blue" _text="\"Dome\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24,\"underline\":false,\"color\":\{\"r\":1,\"g\":1,\"b\":1,\"a\":1\},\"alignment\":\"left\",\"characterSpacing\":1,\"lineSpacing\":1\}" _anchor="\"left-center\"" _center="\{\"x\":-0.80000001192092896,\"y\":0.0\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer8 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-1785" fillcolor="blue" _text="\"Other\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24,\"underline\":false,\"color\":\{\"r\":1,\"g\":1,\"b\":1,\"a\":1\},\"alignment\":\"left\",\"characterSpacing\":1,\"lineSpacing\":1\}" _anchor="\"left-center\"" _center="\{\"x\":-0.80000001192092896,\"y\":-0.69999998807907104\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeTextLayer9 [type="vuo.layer.make.text2" version="2.0.0" label="Make Text Layer|<refresh>refresh\l|<text>text\l|<font>font\l|<anchor>anchor\l|<center>center\l|<rotation>rotation\l|<wrapWidth>wrapWidth\l|<opacity>opacity\l|<layer>layer\r" pos="-1215,-1935" fillcolor="blue" _text="\"Mirror\"" _font="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24,\"underline\":false,\"color\":\{\"r\":1,\"g\":1,\"b\":1,\"a\":1\},\"alignment\":\"left\",\"characterSpacing\":1,\"lineSpacing\":1\}" _anchor="\"left-center\"" _center="\{\"x\":-0.80000001192092896,\"y\":-0.40000000596046448\}" _wrapWidth="Infinity" _opacity="1.0"]; MakeToggleButton [type="vuo.ui.make.toggle" version="1.0.0" label="Make Toggle Button|<refresh>refresh\l|<window>window\l|<label>label\l|<setValue>setValue\l|<anchor>anchor\l|<position>position\l|<theme>theme\l|<updatedLayer>updatedLayer\r|<changed>changed\r|<turnedOn>turnedOn\r|<turnedOff>turnedOff\r" pos="-1740,660" _label="\"Dome flip\"" _anchor="\"left-center\"" _position="\{\"x\":-0.20000000298023224,\"y\":-0.30000001192092896\}" _updatedLayer_eventThrottling="enqueue" _changed_eventThrottling="enqueue" _turnedOn_eventThrottling="enqueue" _turnedOff_eventThrottling="enqueue"]; MakeToggleButtonTheme [type="vuo.ui.make.theme.toggle.rounded" version="1.0.0" label="Make Toggle Button Theme|<refresh>refresh\l|<labelFont>labelFont\l|<labelColor>labelColor\l|<labelColorHovered>labelColorHovered\l|<labelColorPressed>labelColorPressed\l|<labelColorToggled>labelColorToggled\l|<labelColorToggledAndHovered>labelColorToggledAndHovered\l|<checkmarkColor>checkmarkColor\l|<checkmarkColorHovered>checkmarkColorHovered\l|<checkmarkColorPressed>checkmarkColorPressed\l|<checkmarkBorderColor>checkmarkBorderColor\l|<checkmarkBorderColorHovered>checkmarkBorderColorHovered\l|<checkmarkBorderColorPressed>checkmarkBorderColorPressed\l|<checkboxBackgroundColor>checkboxBackgroundColor\l|<checkboxBackgroundColorHovered>checkboxBackgroundColorHovered\l|<checkboxBackgroundColorPressed>checkboxBackgroundColorPressed\l|<checkboxBackgroundColorToggled>checkboxBackgroundColorToggled\l|<checkboxBackgroundColorToggledAndHovered>checkboxBackgroundColorToggledAndHovered\l|<checkboxBorderColor>checkboxBorderColor\l|<checkboxBorderColorHovered>checkboxBorderColorHovered\l|<checkboxBorderColorPressed>checkboxBorderColorPressed\l|<checkboxBorderColorToggled>checkboxBorderColorToggled\l|<checkboxBorderColorToggledAndHovered>checkboxBorderColorToggledAndHovered\l|<checkboxBorderThickness>checkboxBorderThickness\l|<checkboxCornerRoundness>checkboxCornerRoundness\l|<marginBetweenCheckboxAndLabel>marginBetweenCheckboxAndLabel\l|<theme>theme\r" pos="-2940,495" fillcolor="tangerine" _labelFont="\{\"fontName\":\"Avenir-Medium\",\"pointSize\":24.0,\"underline\":false,\"color\":\{\"r\":0.99999600648880005,\"g\":1.0,\"b\":1.0,\"a\":1.0\},\"alignment\":\"left\",\"characterSpacing\":1.0,\"lineSpacing\":1.0\}" _labelColor="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _labelColorHovered="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _labelColorPressed="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _labelColorToggled="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _labelColorToggledAndHovered="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkmarkColor="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkmarkColorHovered="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkmarkColorPressed="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkmarkBorderColor="\{\"r\":0.0,\"g\":0.0,\"b\":0.0,\"a\":0.5\}" _checkmarkBorderColorHovered="\{\"r\":0.0,\"g\":0.0,\"b\":0.0,\"a\":0.5\}" _checkmarkBorderColorPressed="\{\"r\":0.0,\"g\":0.0,\"b\":0.0,\"a\":1.0\}" _checkboxBackgroundColor="\{\"r\":0.29803922772407532,\"g\":0.29805448651313782,\"b\":0.29803922772407532,\"a\":1.0\}" _checkboxBackgroundColorHovered="\{\"r\":0.29803922772407532,\"g\":0.29805448651313782,\"b\":0.29803922772407532,\"a\":1.0\}" _checkboxBackgroundColorPressed="\{\"r\":0.29803922772407532,\"g\":0.29805448651313782,\"b\":0.29803922772407532,\"a\":1.0\}" _checkboxBackgroundColorToggled="\{\"r\":0.29803922772407532,\"g\":0.29805448651313782,\"b\":0.29803922772407532,\"a\":1.0\}" _checkboxBackgroundColorToggledAndHovered="\{\"r\":0.29803922772407532,\"g\":0.29805448651313782,\"b\":0.29803922772407532,\"a\":1.0\}" _checkboxBorderColor="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkboxBorderColorHovered="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkboxBorderColorPressed="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkboxBorderColorToggled="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkboxBorderColorToggledAndHovered="\{\"r\":1.0,\"g\":1.0,\"b\":1.0,\"a\":1.0\}" _checkboxBorderThickness="0.005" _checkboxCornerRoundness="0.0" _marginBetweenCheckboxAndLabel="0.050000000000000003"]; ReceiveKeyboardButtons [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="-225,1455" fillcolor="cyan" _key="\"S\"" _modifierKey="\"any\"" _repeatWhenHeld="false" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons10 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="-2565,-435" fillcolor="green" _key="\"N\"" _modifierKey="\"any\"" _repeatWhenHeld="false" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons2 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="1110,-450" fillcolor="magenta" _key="\"Q\"" _modifierKey="\"any\"" _repeatWhenHeld="false" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons3 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="345,600" fillcolor="green" _key="\"RightArrow\"" _modifierKey="\"any\"" _repeatWhenHeld="true" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons4 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="345,705" fillcolor="green" _key="\"LeftArrow\"" _modifierKey="\"any\"" _repeatWhenHeld="true" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons5 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="-1530,-495" _key="\"I\"" _modifierKey="\"any\"" _repeatWhenHeld="false" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons7 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="345,375" fillcolor="green" _key="\"UpArrow\"" _modifierKey="\"any\"" _repeatWhenHeld="false" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons8 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="345,480" fillcolor="green" _key="\"DownArrow\"" _modifierKey="\"any\"" _repeatWhenHeld="false" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; ReceiveKeyboardButtons9 [type="vuo.keyboard.button2" version="2.0.0" label="Receive Keyboard Buttons|<refresh>refresh\l|<window>window\l|<key>key\l|<modifierKey>modifierKey\l|<repeatWhenHeld>repeatWhenHeld\l|<pressed>pressed\r|<released>released\r" pos="735,-765" fillcolor="violet" _key="\"Tab\"" _modifierKey="\"none\"" _repeatWhenHeld="true" _pressed_eventThrottling="enqueue" _released_eventThrottling="enqueue"]; RenderImageToWindow [type="vuo.image.render.window2" version="4.0.0" label="Render Image to Window|<refresh>refresh\l|<image>image\l|<setWindowDescription>setWindowDescription\l|<updatedWindow>updatedWindow\r" pos="1575,-15" fillcolor="yellow" _updatedWindow_eventThrottling="enqueue"]; RenderLayersToWindow [type="vuo.layer.render.window2" version="3.0.0" label="Render Layers to Window|<refresh>refresh\l|<layers>layers\l|<multisampling>multisampling\l|<setWindowDescription>setWindowDescription\l|<updatedWindow>updatedWindow\r" pos="-375,-1920" fillcolor="magenta" _multisampling="\"2\"" _updatedWindow_eventThrottling="enqueue"]; RotateImage [type="vuo.image.rotate" version="1.0.2" label="Rotate Image|<refresh>refresh\l|<image>image\l|<rotation>rotation\l|<expandBounds>expandBounds\l|<rotatedImage>rotatedImage\r" pos="1155,570" fillcolor="green" _expandBounds="false"]; Round [type="vuo.math.round" version="2.0.0" label="Round|<refresh>refresh\l|<real>real\l|<rounded>rounded\r" pos="750,345" fillcolor="green"]; Round2 [type="vuo.math.round" version="2.0.0" label="Round|<refresh>refresh\l|<real>real\l|<rounded>rounded\r" pos="-1680,735"]; Round3 [type="vuo.math.round" version="2.0.0" label="Round|<refresh>refresh\l|<real>real\l|<rounded>rounded\r" pos="600,855"]; Round4 [type="vuo.math.round" version="2.0.0" label="Round|<refresh>refresh\l|<real>real\l|<rounded>rounded\r" pos="-1275,735"]; SaveData [type="vuo.data.save" version="1.1.0" label="Save Data|<refresh>refresh\l|<url>url\l|<saveData>saveData\l|<overwriteUrl>overwriteUrl\l|<done>done\r" pos="675,1425" fillcolor="cyan" _url="\"parameters.data\"" _overwriteUrl="1"]; SaveImage [type="vuo.image.save" version="1.0.2" label="Save Image|<refresh>refresh\l|<url>url\l|<saveImage>saveImage\l|<overwriteUrl>overwriteUrl\l|<format>format\l|<done>done\r" pos="660,1515" fillcolor="cyan" _overwriteUrl="true" _format="\"PNG\""]; SelectInput [type="vuo.select.in.2.VuoBoolean" version="2.0.0" label="Select Input|<refresh>refresh\l|<which>which\l|<option1>option1\l|<option2>option2\l|<out>out\r" pos="-1710,555" _option2="true"]; SelectOutput [type="vuo.select.out.2.VuoText" version="2.0.0" label="Select Output|<refresh>refresh\l|<which>which\l|<in>in\l|<option1>option1\r|<option2>option2\r" pos="315,1425" fillcolor="cyan"]; SelectOutput2 [type="vuo.select.out.2.VuoImage" version="2.0.0" label="Select Output|<refresh>refresh\l|<which>which\l|<in>in\l|<option1>option1\r|<option2>option2\r" pos="315,1515" fillcolor="cyan"]; ShareValue [type="vuo.data.share.VuoReal" version="1.0.0" label="Share Value|<refresh>refresh\l|<value>value\l|<sameValue>sameValue\r" pos="1380,-780" fillcolor="violet"]; SplitText [type="vuo.text.split.VuoText" version="1.0.0" label="Split Text|<refresh>refresh\l|<text>text\l|<separator>separator\l|<includeEmptyParts>includeEmptyParts\l|<splitTexts>splitTexts\r" pos="-2250,-360" fillcolor="green" _separator="\" \"" _includeEmptyParts="false"]; StopComposition [type="vuo.app.stopComposition" version="1.0.0" label="Stop Composition|<refresh>refresh\l|<stop>stop\l" pos="1350,-450" fillcolor="magenta"]; SummarizeValue [type="vuo.data.summarize.VuoInteger" version="1.0.1" label="Summarize Value|<refresh>refresh\l|<value>value\l|<summary>summary\r" pos="-1395,-1215"]; SummarizeValue2 [type="vuo.data.summarize.VuoInteger" version="1.0.1" label="Summarize Value|<refresh>refresh\l|<value>value\l|<summary>summary\r" pos="-1395,-1185"]; SummarizeValue3 [type="vuo.data.summarize.VuoInteger" version="1.0.1" label="Summarize Value|<refresh>refresh\l|<value>value\l|<summary>summary\r" pos="-1395,-1155"]; SummarizeValue5 [type="vuo.data.summarize.VuoReal" version="1.0.1" label="Summarize Value|<refresh>refresh\l|<value>value\l|<summary>summary\r" pos="-270,645"]; SummarizeValue6 [type="vuo.data.summarize.VuoReal" version="1.0.1" label="Summarize Value|<refresh>refresh\l|<value>value\l|<summary>summary\r" pos="-255,1260"]; Comment [type="vuo.comment" label="\"Scale factor for key stroke effect\"" pos="660,-945" width="847" height="296" fillcolor="violet"]; Comment2 [type="vuo.comment" label="\"Read data file\"" pos="-2610,-1110" width="777" height="2292" fillcolor="green"]; :Layer -> MakeList4:10; :Text -> MakeList10:4; :Text -> MakeList19:2; AppendTexts10:compositeText -> MakeList3:7; AppendTexts12:compositeText -> MakeList3:5; AppendTexts13:compositeText -> SaveImage:url; AppendTexts14:compositeText -> MakeList3:9; AppendTexts15:compositeText -> MakeList3:11; AppendTexts16:compositeText -> MakeList3:3; AppendTexts17:compositeText -> MakeTextLayer11:text; AppendTexts22:compositeText -> MakeList3:10; AppendTexts2:compositeText -> MakeList:3; AppendTexts3:compositeText -> MakeList:1; AppendTexts4:compositeText -> MakeList3:2; AppendTexts5:compositeText -> MakeList3:4; AppendTexts6:compositeText -> MakeList3:8; AppendTexts7:compositeText -> MakeList3:6; AppendTexts8:compositeText -> MakeList3:1; AppendTexts9:compositeText -> SelectOutput:in; AppendTexts:compositeText -> MakeImageWithShadertoy:fragmentShader; Calculate2:result -> Round:real; Calculate3:result -> Round3:real; Calculate4:result -> SummarizeValue5:value; Calculate4:result -> SummarizeValue6:value; Calculate5:result -> Round2:real; Calculate5:result -> Round4:real; Calculate:result -> ShareValue:value; ChangeScreen3:changedWindowDescription -> RenderLayersToWindow:setWindowDescription; ChangeScreen:changedWindowDescription -> RenderImageToWindow:setWindowDescription; ChangeWindowSize:changedWindowDescription -> ChangeScreen3:windowDescription; ChangeWindowTitle:changedWindowDescription -> LockWindowAspectRatio2:windowDescription; ConvertDataToText:text -> SplitText:text; ConvertIntegerToRealNumber2:real -> MakeList22:1; ConvertIntegerToRealNumber3:real -> MakeList22:2; ConvertIntegerToRealNumber4:real -> MakeList18:1; ConvertIntegerToRealNumber5:real -> MakeList24:1; ConvertIntegerToRealNumber:real -> MakeList6:1; ConvertTextToData2:data -> SaveData:saveData; ConvertTextToReal17:real -> Keyhamdler7:Initialvalue; ConvertTextToReal18:real -> Keyhamdler3:Initialvalue; ConvertTextToReal19:real -> Keyhamdler6:Initialvalue; ConvertTextToReal20:real -> Keyhamdler12:Initialvalue; ConvertTextToReal21:real -> Keyhamdler11:Initialvalue; ConvertTextToReal2:real -> :Initialvalue; ConvertTextToReal3:real -> Keyhamdler4:Initialvalue; ConvertTextToReal4:real -> Keyhamdler2:Initialvalue; ConvertTextToReal5:real -> Keyhamdler8:Initialvalue; ConvertTextToReal6:real -> Keyhamdler9:Initialvalue; ConvertTextToReal8:real -> MakeList29:1; ConvertTextToReal9:real -> Keyhamdler10:Initialvalue; ConvertTextToReal:real -> KeyhamdlerInt2:Initialvalue; Count2:count -> RotateImage:rotation; Count3:count -> FormatNumber:value; Count:count -> ConvertIntegerToRealNumber2:integer; CountItemsInList:itemCount -> ConvertIntegerToRealNumber3:integer; CountItemsInList:itemCount -> ConvertIntegerToRealNumber4:integer; CountWithinRange2:count -> ConvertIntegerToRealNumber:integer; CountWithinRange3:count -> ConvertIntegerToRealNumber5:integer; CountWithinRange:count -> SelectOutput2:which; CountWithinRange:count -> SelectOutput:which; FetchData:data -> ConvertDataToText:data; FetchImage:image -> RotateImage:image; FireOnStart10:started -> Keyhamdler7:Position; FireOnStart10:started -> Keyhamdler7:Title; FireOnStart11:started -> Keyhamdler8:Position; FireOnStart11:started -> Keyhamdler8:Title; FireOnStart12:started -> Keyhamdler9:Position; FireOnStart12:started -> Keyhamdler9:Title; FireOnStart13:started -> MakeTextLayer10:text; FireOnStart13:started -> MakeTextLayer2:text; FireOnStart13:started -> MakeTextLayer3:text; FireOnStart13:started -> MakeTextLayer4:text; FireOnStart13:started -> MakeTextLayer5:text; FireOnStart13:started -> MakeTextLayer6:text; FireOnStart13:started -> MakeTextLayer8:text; FireOnStart13:started -> MakeTextLayer9:text; FireOnStart13:started -> MakeTextLayer:text; FireOnStart14:started -> Keyhamdler3:Position; FireOnStart14:started -> Keyhamdler3:Title; FireOnStart15:started -> Keyhamdler6:Position; FireOnStart15:started -> Keyhamdler6:Title; FireOnStart16:started -> GetScreenValues:screen; FireOnStart17:started -> CountWithinRange2:setCount; FireOnStart18:started -> Keyhamdler10:Position; FireOnStart18:started -> Keyhamdler10:Title; FireOnStart19:started -> Keyhamdler12:Position; FireOnStart19:started -> Keyhamdler12:Title; FireOnStart20:started -> Keyhamdler11:Position; FireOnStart20:started -> Keyhamdler11:Title; FireOnStart21:started -> GetScreenValues2:screen; FireOnStart23:started -> KeyhamdlerInt2:Position; FireOnStart23:started -> KeyhamdlerInt2:Scale; FireOnStart24:started -> MakeToggleButtonTheme:labelFont; FireOnStart2:started -> ChangeScreen:screen; FireOnStart3:started -> MakeList2:1; FireOnStart3:started -> MakeList9:1; FireOnStart4:started -> ChangeWindowTitle:windowDescription; FireOnStart5:started -> Count3:setCount; FireOnStart5:started -> CountWithinRange:setCount; FireOnStart6:started -> FetchData:url; FireOnStart7:started -> Keyhamdler2:Position; FireOnStart7:started -> Keyhamdler2:Title; FireOnStart8:started -> Keyhamdler4:Position; FireOnStart8:started -> Keyhamdler4:Title; FireOnStart9:started -> :Position; FireOnStart:started -> Count2:setCount; FireOnStart:started -> Count:setCount; FireOnStart:started -> ListFiles:folder; FormatNumber:text -> MakeList20:2; GetItemFromList10:item -> ConvertTextToReal9:text; GetItemFromList11:item -> ConvertTextToReal20:text; GetItemFromList12:item -> ConvertTextToReal:text; GetItemFromList13:item -> ConvertTextToReal2:text; GetItemFromList14:item -> ConvertTextToReal8:text; GetItemFromList2:item -> ConvertTextToReal19:text; GetItemFromList3:item -> ConvertTextToReal21:text; GetItemFromList4:item -> ConvertTextToReal5:text; GetItemFromList5:item -> ConvertTextToReal4:text; GetItemFromList6:item -> ConvertTextToReal3:text; GetItemFromList7:item -> ConvertTextToReal17:text; GetItemFromList8:item -> ConvertTextToReal18:text; GetItemFromList9:item -> FetchImage:url; GetItemFromList:item -> ConvertTextToReal6:text; GetScreenValues2:dpiHorizontal -> SummarizeValue3:value; GetScreenValues2:height -> SummarizeValue2:value; GetScreenValues2:width -> SummarizeValue:value; GetScreenValues:height -> MakeImageWithShadertoy:height; GetScreenValues:width -> MakeImageWithShadertoy:width; KeyShiftNoshift10:Decrement -> Keyhamdler11:Decrement; KeyShiftNoshift10:Increment -> Keyhamdler11:Increment; KeyShiftNoshift11:Decrement -> Keyhamdler12:Decrement; KeyShiftNoshift11:Increment -> Keyhamdler12:Increment; KeyShiftNoshift2:Decrement -> Keyhamdler2:Decrement; KeyShiftNoshift2:Increment -> Keyhamdler2:Increment; KeyShiftNoshift3:Decrement -> Keyhamdler8:Decrement; KeyShiftNoshift3:Increment -> Keyhamdler8:Increment; KeyShiftNoshift4:Decrement -> Keyhamdler9:Decrement; KeyShiftNoshift4:Increment -> Keyhamdler9:Increment; KeyShiftNoshift5:Decrement -> KeyhamdlerInt2:Increment; KeyShiftNoshift5:Increment -> KeyhamdlerInt2:Decrement; KeyShiftNoshift6:Decrement -> Keyhamdler7:Decrement; KeyShiftNoshift6:Increment -> Keyhamdler7:Increment; KeyShiftNoshift7:Decrement -> Keyhamdler3:Decrement; KeyShiftNoshift7:Increment -> Keyhamdler3:Increment; KeyShiftNoshift8:Decrement -> Keyhamdler6:Decrement; KeyShiftNoshift8:Increment -> Keyhamdler6:Increment; KeyShiftNoshift9:Decrement -> Keyhamdler10:Decrement; KeyShiftNoshift9:Increment -> Keyhamdler10:Increment; KeyShiftNoshift:Decrement -> Keyhamdler4:Decrement; KeyShiftNoshift:Increment -> Keyhamdler4:Increment; Keyhamdler10:Layer -> MakeList4:19; Keyhamdler10:Text -> MakeList10:6; Keyhamdler10:Text -> MakeList7:2; Keyhamdler11:Layer -> MakeList4:24; Keyhamdler11:Text -> MakeList10:12; Keyhamdler11:Text -> MakeList28:6; Keyhamdler12:Layer -> MakeList4:25; Keyhamdler12:Text -> MakeList10:13; Keyhamdler12:Text -> MakeList25:2; Keyhamdler2:Layer -> MakeList4:15; Keyhamdler2:Text -> MakeList10:3; Keyhamdler2:Text -> MakeList11:2; Keyhamdler3:Layer -> MakeList4:22; Keyhamdler3:Text -> MakeList10:8; Keyhamdler3:Text -> MakeList16:2; Keyhamdler4:Layer -> MakeList4:18; Keyhamdler4:Text -> MakeList10:5; Keyhamdler4:Text -> MakeList12:2; Keyhamdler6:Layer -> MakeList4:23; Keyhamdler6:Text -> MakeList10:11; Keyhamdler6:Text -> MakeList28:2; Keyhamdler7:Layer -> MakeList4:21; Keyhamdler7:Text -> MakeList10:7; Keyhamdler7:Text -> MakeList14:2; Keyhamdler8:Layer -> MakeList4:14; Keyhamdler8:Text -> MakeList10:2; Keyhamdler8:Text -> MakeList15:6; Keyhamdler9:Layer -> MakeList4:13; Keyhamdler9:Text -> MakeList10:1; Keyhamdler9:Text -> MakeList15:2; KeyhamdlerInt2:Layer -> MakeList4:17; KeyhamdlerInt2:Text -> MakeList10:9; KeyhamdlerInt2:Text -> MakeList17:2; ListFiles:files -> CountItemsInList:list; ListFiles:files -> GetItemFromList9:list; LockWindowAspectRatio2:changedWindowDescription -> ChangeWindowSize:windowDescription; MainShaderCode2:compositeText -> MakeList:2; MakeDictionary2:dictionary -> Calculate2:values; MakeDictionary3:dictionary -> Calculate3:values; MakeDictionary4:dictionary -> Calculate4:values; MakeDictionary5:dictionary -> Calculate5:values; MakeDictionary:dictionary -> Calculate:values; MakeImageWithShadertoy:shaderImage -> RenderImageToWindow:image; MakeImageWithShadertoy:shaderImage -> SelectOutput2:in [style=invis]; MakeList10:list -> AppendTexts9:texts; MakeList11:list -> AppendTexts4:texts; MakeList12:list -> AppendTexts5:texts; MakeList13:list -> MakeDictionary4:keys; MakeList14:list -> AppendTexts7:texts; MakeList15:list -> AppendTexts8:texts; MakeList16:list -> AppendTexts10:texts; MakeList17:list -> AppendTexts6:texts; MakeList18:list -> MakeDictionary2:values; MakeList19:list -> AppendTexts16:texts; MakeList20:list -> AppendTexts13:texts; MakeList21:list -> MakeDictionary3:keys; MakeList22:list -> MakeDictionary3:values; MakeList23:list -> AppendTexts17:texts; MakeList24:list -> MakeDictionary4:values; MakeList25:list -> AppendTexts15:texts; MakeList26:list -> AppendTexts14:texts; MakeList27:list -> MakeDictionary5:keys; MakeList28:list -> AppendTexts22:texts; MakeList29:list -> MakeDictionary5:values; MakeList2:list -> AppendTexts2:texts; MakeList3:list -> AppendTexts3:texts; MakeList4:list -> RenderLayersToWindow:layers; MakeList5:list -> MakeDictionary:keys; MakeList6:list -> MakeDictionary:values; MakeList7:list -> AppendTexts12:texts; MakeList8:list -> MakeDictionary2:keys; MakeList9:list -> MainShaderCode2:texts; MakeList:list -> AppendTexts:texts; MakeTextLayer10:layer -> MakeList4:11; MakeTextLayer11:layer -> MakeList4:12; MakeTextLayer2:layer -> MakeList4:2; MakeTextLayer3:layer -> MakeList4:9; MakeTextLayer4:layer -> MakeList4:4; MakeTextLayer5:layer -> MakeList4:5; MakeTextLayer6:layer -> MakeList4:6; MakeTextLayer8:layer -> MakeList4:8; MakeTextLayer9:layer -> MakeList4:7; MakeTextLayer:layer -> MakeList4:1; MakeToggleButton:turnedOff -> CountWithinRange3:decrement; MakeToggleButton:turnedOn -> CountWithinRange3:increment; MakeToggleButton:updatedLayer -> MakeList4:20; MakeToggleButtonTheme:theme -> MakeToggleButton:theme [style=invis]; ReceiveKeyboardButtons10:pressed -> FetchData:url; ReceiveKeyboardButtons2:pressed -> StopComposition:stop; ReceiveKeyboardButtons3:pressed -> Count2:increment; ReceiveKeyboardButtons4:pressed -> Count2:decrement; ReceiveKeyboardButtons5:pressed -> :Increment; ReceiveKeyboardButtons7:pressed -> Count:increment; ReceiveKeyboardButtons8:pressed -> Count:decrement; ReceiveKeyboardButtons9:pressed -> CountWithinRange2:increment; ReceiveKeyboardButtons:pressed -> Count3:increment; ReceiveKeyboardButtons:pressed -> CountWithinRange:increment; ReceiveKeyboardButtons:released -> CountWithinRange:decrement; RenderLayersToWindow:updatedWindow -> MakeToggleButton:window [style=invis]; RotateImage:rotatedImage -> MakeImageWithShadertoy:channel0; Round2:rounded -> SelectInput:which; Round3:rounded -> GetItemFromList9:which; Round4:rounded -> CountWithinRange3:setCount; Round:rounded -> Count:setCount; SelectInput:out -> MakeToggleButton:setValue; SelectOutput2:option2 -> SaveImage:saveImage; SelectOutput:option2 -> ConvertTextToData2:text; ShareValue:sameValue -> Keyhamdler10:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler11:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler12:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler2:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler3:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler4:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler6:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler7:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler8:Scale [style=invis]; ShareValue:sameValue -> Keyhamdler9:Scale [style=invis]; SplitText:splitTexts -> GetItemFromList10:list; SplitText:splitTexts -> GetItemFromList11:list; SplitText:splitTexts -> GetItemFromList12:list; SplitText:splitTexts -> GetItemFromList13:list; SplitText:splitTexts -> GetItemFromList14:list; SplitText:splitTexts -> GetItemFromList2:list; SplitText:splitTexts -> GetItemFromList3:list; SplitText:splitTexts -> GetItemFromList4:list; SplitText:splitTexts -> GetItemFromList5:list; SplitText:splitTexts -> GetItemFromList6:list; SplitText:splitTexts -> GetItemFromList7:list; SplitText:splitTexts -> GetItemFromList8:list; SplitText:splitTexts -> GetItemFromList:list; SummarizeValue2:summary -> MakeList23:4; SummarizeValue3:summary -> MakeList23:6; SummarizeValue5:summary -> MakeList26:2; SummarizeValue6:summary -> MakeList10:10; SummarizeValue:summary -> MakeList23:2; }