こんにちは、AMDlabの森山です。本日はちょっとした小ネタ的な内容のご紹介です。
皆さんが扱っているGarasshopperのコンポーネントをテキストデータで読んだことはありますか?例えばこちらのコンポーネント
何の変哲もない、デフォルトのAdditionコンポーネントです。
こちらのコンポーネントをコピーして、適当なテキストエディタに貼り付けてみてください。すると、こんな感じで表示されると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 |
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <Archive name="Root"> <!--Grasshopper archive--> <!--Grasshopper and GH_IO.dll are copyrighted by Robert McNeel & Associates--> <!--Archive generated by GH_IO.dll file utility library {0.2.0002}--> <items count="1"> <item name="ArchiveVersion" type_name="gh_version" type_code="80"> <Major>0</Major> <Minor>2</Minor> <Revision>2</Revision> </item> </items> <chunks count="1"> <chunk name="Clipboard"> <items count="1"> <item name="plugin_version" type_name="gh_version" type_code="80"> <Major>1</Major> <Minor>0</Minor> <Revision>7</Revision> </item> </items> <chunks count="5"> <chunk name="DocumentHeader"> <items count="5"> <item name="DocumentID" type_name="gh_guid" type_code="9">c15e1ae0-bd0e-405b-aec2-d5ac3ec44d89</item> <item name="Preview" type_name="gh_string" type_code="10">Shaded</item> <item name="PreviewMeshType" type_name="gh_int32" type_code="3">1</item> <item name="PreviewNormal" type_name="gh_drawing_color" type_code="36"> <ARGB>100;150;0;0</ARGB> </item> <item name="PreviewSelected" type_name="gh_drawing_color" type_code="36"> <ARGB>100;0;150;0</ARGB> </item> </items> </chunk> <chunk name="DefinitionProperties"> <items count="3"> <item name="Date" type_name="gh_date" type_code="8">637203989512949948</item> <item name="Description" type_name="gh_string" type_code="10"></item> <item name="Name" type_name="gh_string" type_code="10"></item> </items> <chunks count="3"> <chunk name="Revisions"> <items count="1"> <item name="RevisionCount" type_name="gh_int32" type_code="3">0</item> </items> </chunk> <chunk name="Projection"> <items count="2"> <item name="Target" type_name="gh_drawing_point" type_code="30"> <X>-499</X> <Y>-588</Y> </item> <item name="Zoom" type_name="gh_single" type_code="5">2.6514678</item> </items> </chunk> <chunk name="Views"> <items count="1"> <item name="ViewCount" type_name="gh_int32" type_code="3">0</item> </items> </chunk> </chunks> </chunk> <chunk name="RcpLayout"> <items count="1"> <item name="GroupCount" type_name="gh_int32" type_code="3">0</item> </items> </chunk> <chunk name="GHALibraries"> <items count="1"> <item name="Count" type_name="gh_int32" type_code="3">0</item> </items> </chunk> <chunk name="DefinitionObjects"> <items count="1"> <item name="ObjectCount" type_name="gh_int32" type_code="3">1</item> </items> <chunks count="1"> <chunk name="Object" index="0"> <items count="2"> <item name="GUID" type_name="gh_guid" type_code="9">a0d62394-a118-422d-abb3-6af115c75b25</item> <item name="Name" type_name="gh_string" type_code="10">Addition</item> </items> <chunks count="1"> <chunk name="Container"> <items count="4"> <item name="Description" type_name="gh_string" type_code="10">Mathematical addition</item> <item name="InstanceGuid" type_name="gh_guid" type_code="9">8fd2bdb8-d3f4-49e4-972d-7d4d6d9f62ea</item> <item name="Name" type_name="gh_string" type_code="10">Addition</item> <item name="NickName" type_name="gh_string" type_code="10">A+B</item> </items> <chunks count="2"> <chunk name="Attributes"> <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>337</X> <Y>356</Y> <W>65</W> <H>44</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>368</X> <Y>378</Y> </item> <item name="Selected" type_name="gh_bool" type_code="1">true</item> </items> </chunk> <chunk name="ParameterData"> <items count="5"> <item name="InputCount" type_name="gh_int32" type_code="3">2</item> <item name="InputId" index="0" type_name="gh_guid" type_code="9">8ec86459-bf01-4409-baee-174d0d2b13d0</item> <item name="InputId" index="1" type_name="gh_guid" type_code="9">8ec86459-bf01-4409-baee-174d0d2b13d0</item> <item name="OutputCount" type_name="gh_int32" type_code="3">1</item> <item name="OutputId" index="0" type_name="gh_guid" type_code="9">8ec86459-bf01-4409-baee-174d0d2b13d0</item> </items> <chunks count="3"> <chunk name="InputParam" index="0"> <items count="6"> <item name="Description" type_name="gh_string" type_code="10">First item for addition</item> <item name="InstanceGuid" type_name="gh_guid" type_code="9">518708c7-0b5c-4a9a-8c8e-ec7f835f986c</item> <item name="Name" type_name="gh_string" type_code="10">A</item> <item name="NickName" type_name="gh_string" type_code="10">A</item> <item name="Optional" type_name="gh_bool" type_code="1">true</item> <item name="SourceCount" type_name="gh_int32" type_code="3">0</item> </items> <chunks count="1"> <chunk name="Attributes"> <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>339</X> <Y>358</Y> <W>14</W> <H>20</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>347.5</X> <Y>368</Y> </item> <item name="Selected" type_name="gh_bool" type_code="1">true</item> </items> </chunk> </chunks> </chunk> <chunk name="InputParam" index="1"> <items count="6"> <item name="Description" type_name="gh_string" type_code="10">Second item for addition</item> <item name="InstanceGuid" type_name="gh_guid" type_code="9">66120989-dedb-41c2-838a-8aca8de35c68</item> <item name="Name" type_name="gh_string" type_code="10">B</item> <item name="NickName" type_name="gh_string" type_code="10">B</item> <item name="Optional" type_name="gh_bool" type_code="1">true</item> <item name="SourceCount" type_name="gh_int32" type_code="3">0</item> </items> <chunks count="1"> <chunk name="Attributes"> <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>339</X> <Y>378</Y> <W>14</W> <H>20</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>347.5</X> <Y>388</Y> </item> <item name="Selected" type_name="gh_bool" type_code="1">true</item> </items> </chunk> </chunks> </chunk> <chunk name="OutputParam" index="0"> <items count="6"> <item name="Description" type_name="gh_string" type_code="10">Result of addition</item> <item name="InstanceGuid" type_name="gh_guid" type_code="9">ec2f463d-f87f-4e6d-aab4-68bbd0809027</item> <item name="Name" type_name="gh_string" type_code="10">Result</item> <item name="NickName" type_name="gh_string" type_code="10">R</item> <item name="Optional" type_name="gh_bool" type_code="1">false</item> <item name="SourceCount" type_name="gh_int32" type_code="3">0</item> </items> <chunks count="1"> <chunk name="Attributes"> <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>383</X> <Y>358</Y> <W>17</W> <H>40</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>391.5</X> <Y>378</Y> </item> <item name="Selected" type_name="gh_bool" type_code="1">true</item> </items> </chunk> </chunks> </chunk> </chunks> </chunk> </chunks> </chunk> </chunks> </chunk> </chunks> </chunk> </chunks> </chunk> </chunks> </Archive> |
とても長いです。どうやらxmlデータであるということが分かります。ここで大事なのは、さっきのAdditionはどこにいるのかというところです。Additonで検索してみると
1 2 3 4 5 6 7 8 9 10 11 12 |
<items count="2"> <item name="GUID" type_name="gh_guid" type_code="9">a0d62394-a118-422d-abb3-6af115c75b25</item> <item name="Name" type_name="gh_string" type_code="10">Addition</item> </items> <chunks count="1"> <chunk name="Container"> <items count="4"> <item name="Description" type_name="gh_string" type_code="10">Mathematical addition</item> <item name="InstanceGuid" type_name="gh_guid" type_code="9">8fd2bdb8-d3f4-49e4-972d-7d4d6d9f62ea</item> <item name="Name" type_name="gh_string" type_code="10">Addition</item> <item name="NickName" type_name="gh_string" type_code="10">A+B</item> </items> |
ここのあたりからAdditionの説明が始まっている感じがします。
上から読んでいくと、なんとなく概要が分かるかと思います。実際に色々いじって、どこが何を示すのか見ていきましょう
例えば<item name=”NickName” type_name=”gh_string” type_code=”10″>A+B</item>の部分をA+B+Cとかにして、全文をコピーして貼り付けてみます。
見た目上は何も変化がありませんが、よく見ると、カーソルを合わせたときの説明文が変わっています。では、実態をいじるにはどうすればいいのでしょうか。
では、GH側で、コンポーネントの入力を一つ増やし、別ファイルでテキストエディタに貼り付けてみます。お手持ちのUbuntuがある場合、またはMacの方はDiffコマンドで差分を見てみましょう。ない場合は次の結果を見てみてください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
--- gh1.txt 2020-03-21 15:15:15.802390500 +0900 +++ gh2.txt 2020-03-21 15:15:28.524161300 +0900 @@ -48,10 +48,10 @@ <chunk name="Projection"> <items count="2"> <item name="Target" type_name="gh_drawing_point" type_code="30"> - <X>-499</X> - <Y>-588</Y> + <X>-1251</X> + <Y>-1459</Y> </item> - <item name="Zoom" type_name="gh_single" type_code="5">2.6514678</item> + <item name="Zoom" type_name="gh_single" type_code="5">4.317473</item> </items> </chunk> <chunk name="Views"> @@ -94,9 +94,9 @@ <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>337</X> - <Y>356</Y> + <Y>346</Y> <W>65</W> - <H>44</H> + <H>64</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>368</X> @@ -106,14 +106,15 @@ </items> </chunk> <chunk name="ParameterData"> - <items count="5"> - <item name="InputCount" type_name="gh_int32" type_code="3">2</item> + <items count="6"> + <item name="InputCount" type_name="gh_int32" type_code="3">3</item> <item name="InputId" index="0" type_name="gh_guid" type_code="9">8ec86459-bf01-4409-baee-174d0d2b13d0</item> <item name="InputId" index="1" type_name="gh_guid" type_code="9">8ec86459-bf01-4409-baee-174d0d2b13d0</item> + <item name="InputId" index="2" type_name="gh_guid" type_code="9">8ec86459-bf01-4409-baee-174d0d2b13d0</item> <item name="OutputCount" type_name="gh_int32" type_code="3">1</item> <item name="OutputId" index="0" type_name="gh_guid" type_code="9">8ec86459-bf01-4409-baee-174d0d2b13d0</item> </items> - <chunks count="3"> + <chunks count="4"> <chunk name="InputParam" index="0"> <items count="6"> <item name="Description" type_name="gh_string" type_code="10">First item for addition</item> @@ -128,13 +129,13 @@ <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>339</X> - <Y>358</Y> + <Y>348</Y> <W>14</W> <H>20</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>347.5</X> - <Y>368</Y> + <Y>358</Y> </item> <item name="Selected" type_name="gh_bool" type_code="1">true</item> </items> @@ -155,13 +156,40 @@ <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>339</X> - <Y>378</Y> + <Y>368</Y> <W>14</W> <H>20</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>347.5</X> + <Y>378</Y> + </item> + <item name="Selected" type_name="gh_bool" type_code="1">true</item> + </items> + </chunk> + </chunks> + </chunk> + <chunk name="InputParam" index="2"> + <items count="6"> + <item name="Description" type_name="gh_string" type_code="10">Third item for addition</item> + <item name="InstanceGuid" type_name="gh_guid" type_code="9">cbc9225c-2a4b-4a09-bfc2-1b5b42b6dd2a</item> + <item name="Name" type_name="gh_string" type_code="10">C</item> + <item name="NickName" type_name="gh_string" type_code="10">C</item> + <item name="Optional" type_name="gh_bool" type_code="1">true</item> + <item name="SourceCount" type_name="gh_int32" type_code="3">0</item> + </items> + <chunks count="1"> + <chunk name="Attributes"> + <items count="3"> + <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> + <X>339</X> <Y>388</Y> + <W>14</W> + <H>20</H> + </item> + <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> + <X>347.5</X> + <Y>398</Y> </item> <item name="Selected" type_name="gh_bool" type_code="1">true</item> </items> @@ -182,9 +210,9 @@ <items count="3"> <item name="Bounds" type_name="gh_drawing_rectanglef" type_code="35"> <X>383</X> - <Y>358</Y> + <Y>348</Y> <W>17</W> - <H>40</H> + <H>60</H> </item> <item name="Pivot" type_name="gh_drawing_pointf" type_code="31"> <X>391.5</X> |
+されている行を見ると、なかなか難しそうです。入力側のポッチから、インプットのデータの型指定から、位置まで、すべて指定しなければ出来なさそうです。
しかし、このxmlデータを利用して、少し面白いことができます。まずはこちらをご覧ください。
こちらのふたつのコンポーネントを青枠と赤枠に分けて、テキストエディタに貼ります。
このとき、NumberSliderは含まないでください
引き算側のGUID
1 2 3 4 5 |
<chunk name="Object" index="0"> <items count="2"> <item name="GUID" type_name="gh_guid" type_code="9">9c007a04-d0d9-48e4-9da3-9ba142bc4d46</item> <item name="Name" type_name="gh_string" type_code="10">Subtraction</item> </items> |
を足し算側のGUID
1 2 3 4 5 |
<chunk name="Object" index="0"> <items count="2"> <item name="GUID" type_name="gh_guid" type_code="9">a0d62394-a118-422d-abb3-6af115c75b25</item> <item name="Name" type_name="gh_string" type_code="10">Addition</item> </items> |
側に書き換えます。その後、書きかえたテキストデータをコピペすると…
なんと入力が入れ替わりました。
しかし、注意してください。Diffで見たように、この入れ替えを行うには、コンポーネントの対称性が保たれていることが重要です。
COMMENTS