{"id":1736,"date":"2014-03-22T19:02:52","date_gmt":"2014-03-22T18:02:52","guid":{"rendered":"http:\/\/blog.modelical.com\/?p=496"},"modified":"2024-10-18T08:54:06","modified_gmt":"2024-10-18T06:54:06","slug":"grasshopper-scripting-104","status":"publish","type":"post","link":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/","title":{"rendered":"Grasshopper Scripting 104"},"content":{"rendered":"<h2>Lists<\/h2>\n<p>In the last post we <a title=\"Grasshopper Scripting 103 \u2013 Conditionals and Operators\" href=\"https:\/\/www.modelical.com\/en\/grasshopper-scripting-103-conditional-statements-and-operators\/\">discussed applying conditional operations<\/a> to single values. But that is way too simple. We expect to process many different values when working with Grasshopper and the power of scripting increases when we deal with collections of data. The main collection type you should care about is The List.<\/p>\n<p>Download <a title=\"Lists\" href=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/B10_GHS_104_Lists.zip\">here the GH file (0.9.014) containing the examples.<\/a><\/p>\n<h3>Working With Lists<\/h3>\n<p>Lists can be created or processed within the scope of a Grasshopper C# scripting component. To access an input parameter as a list we must specify so in the context menu. This will allow us to iterate through all the elements of the list instead of performing the defined operations for each input by default, as happened in the examples in 103.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-3949\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListAccess.jpg\" alt=\"\" width=\"995\" height=\"707\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListAccess.jpg 995w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListAccess-480x341.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListAccess-768x546.jpg 768w\" sizes=\"(max-width: 995px) 100vw, 995px\" \/><\/p>\n<p>Now we can access the list as a whole to, for instance, measure how many elements are there in the list with the Count property.<\/p>\n<pre class=\"lang:c# decode:true\"> private void RunScript(List&lt;double&gt; x, ref object A)\r\n  {\r\n     A = String.Format(\"There are {0} elements in the list\", x.Count);\r\n  }<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-3950\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListCount.jpg\" alt=\"\" width=\"1323\" height=\"445\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListCount.jpg 1323w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListCount-480x161.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListCount-768x258.jpg 768w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ListCount-1280x431.jpg 1280w\" sizes=\"(max-width: 1323px) 100vw, 1323px\" \/><\/p>\n<h3><strong>Declaring Lists<\/strong><\/h3>\n<p>In order to process a list we are going to need a bit more of flow control than just <a title=\"Grasshopper Scripting 103 \u2013 Conditional Statements and Operators\" href=\"https:\/\/www.modelical.com\/en\/grasshopper-scripting-103-conditional-statements-and-operators\/\">conditionals<\/a>\u00a0but before diving into loops let&#8217;s see how to declare and populate a list inside a C# component.<\/p>\n<p>Lists are a special construct that needs to be declared with a sentence you should get familiar to.<\/p>\n<pre class=\"lang:c# decode:true\">List&lt;double&gt; myList = new List&lt;double&gt;();<\/pre>\n<p>We must precede our variable name with the words &#8220;List&lt;dataType&gt;&#8221; and then assign a &#8220;new&#8221; empty list by calling the function &#8220;List&lt;double&gt;()&#8221;. Whenever you see a statement with empty parenthesis like .ToString() you are dealing with a function (called methods in C# jargon).<\/p>\n<p>Let&#8217;s see lists in action:<\/p>\n<pre class=\"lang:c# decode:true\">private void RunScript(ref object A, ref object B, ref object C)\r\n  {\r\n    \/\/declare a new list\r\n    List&lt;int&gt; myList = new List&lt;int&gt;();\r\n\r\n    \/\/fill the list with Fibonacci series\r\n    myList.Add(1);\r\n    myList.Add(1);\r\n    myList.Add(2);\r\n    myList.Add(3);\r\n    myList.Add(5);\r\n    myList.Add(8);\r\n    myList.Add(13);\r\n\r\n    \/\/output myList through A\r\n    A = myList;\r\n\r\n    \/\/create a new list copying the contents of myList\r\n    List&lt;int&gt; myReversedList = new List&lt;int&gt;(myList);\r\n\r\n    \/\/use the Reverse Method to find the reversed version of the list\r\n    myReversedList.Reverse();\r\n\r\n    \/\/output the second list through B\r\n    B = myReversedList;\r\n\r\n    \/\/retrieve the third element in the list\r\n    C = myList[2];\r\n\r\n  }<\/pre>\n<p>We interact with List mainly through methods and properties:<\/p>\n<ul>\n<li><strong>List.Add(E)<\/strong> will add E to the list.<\/li>\n<li><strong>List.Reverse()<\/strong> will invert the order of elements in the list.<\/li>\n<li><strong>List[i]<\/strong> will retrieve the element of the list with index i<\/li>\n<li><strong>List.Count<\/strong> will access the property containing the length of the list;<\/li>\n<\/ul>\n<h3>A Note On Reference-Type Variables<\/h3>\n<p>In the <a title=\"Grasshopper Scripting 102 \u2013 Variables and Assignment\" href=\"https:\/\/www.modelical.com\/en\/grasshopper-scripting-102-variables-and-assignment\/\">second lesson<\/a> we talked about reference-type values saying they were more flexible. You have to be careful when dealing with them as they behave quite different from value-type variables. Let&#8217;s seen an example.<\/p>\n<pre class=\"lang:c# decode:true\">private void RunScript(ref object A, ref object B)\r\n  {\r\n    \/\/declare a first variable\r\n    int myFirstInteger = 3;\r\n    \/\/declare and assign a second variable\r\n    int mySecondInteger = myFirstInteger;\r\n    \/\/modify the second variable\r\n    mySecondInteger += 5;\r\n    \/\/output values\r\n    A = myFirstInteger;\r\n    B = mySecondInteger;\r\n\r\n  }<\/pre>\n<p>The result here is something we would expect, the second variable gets the same as the first, then we alter the former but the later stays the same.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-3955\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ValueTypes.jpg\" alt=\"\" width=\"800\" height=\"319\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ValueTypes.jpg 800w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ValueTypes-480x191.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ValueTypes-768x306.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Now let&#8217;s do something similar with a list of strings:<\/p>\n<pre class=\"lang:c# decode:true\"> private void RunScript(ref object A, ref object B, ref object C)\r\n  {\r\n    \/\/declare a new list\r\n    List&lt;string&gt; myList = new List&lt;string&gt;();\r\n    \/\/fill the list with animal names\r\n    myList.Add(\"Dog\");\r\n    myList.Add(\"Cat\");\r\n    myList.Add(\"Rabbit\");\r\n    myList.Add(\"Lion\");\r\n    myList.Add(\"Tiger\");\r\n    myList.Add(\"Elephant\");\r\n\r\n    \/\/output myList through A\r\n    A = myList;\r\n    \/\/create a new void list\r\n    List&lt;string&gt; mySecondList = new List&lt;string&gt;();\r\n    \/\/assign myList to mySecondList\r\n    mySecondList = myList;\r\n    \/\/reverse the second list\r\n    mySecondList.Reverse();\r\n    \/\/output the second list through B\r\n    B = mySecondList;\r\n\r\n  }<\/pre>\n<p>Look at the result:<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-3952\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ReferenceTypes.jpg\" alt=\"\" width=\"800\" height=\"429\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ReferenceTypes.jpg 800w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ReferenceTypes-480x257.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/03\/ReferenceTypes-768x412.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Weird right? Despite we only reversed the second list, both outputs have been reversed. That is because Lists, and Points, Surfaces, Meshes and everything else are Reference-Type variables, meaning that when we called\u00a0<em>mySecondList = myList;<\/em> we where not copying the contents of one list into the other but actually linking both variables to the same data, so if we modify one we&#8217;ll do so for all of its references.<\/p>\n<p>That&#8217;s why, on the previous example, we created the copy of the list not using a &#8220;=&#8221; statement but a speciall method of Lists:<\/p>\n<pre class=\"lang:c# decode:true\">List&lt;int&gt; myReversedList = new List&lt;int&gt;(myList); \/\/this will crate myReversedList as a brand new copy of myList<\/pre>\n<p>Understanding this is important not to get fooled when working with loops and complex assignments.<\/p>\n<h3>Challenge<\/h3>\n<p>1. Write a component that checks if a list has an odd number of items and if so, returns the element at the middle.<br \/>\n2. Write your own version of the List Item component.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lists In the last post we discussed applying conditional operations to single values. But that is way too simple. We expect to process many different values when working with Grasshopper and the power of scripting increases when we deal with collections of data. The main collection type you should care about is The List. Download [&hellip;]<\/p>\n","protected":false},"author":64,"featured_media":27120,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[423,418],"class_list":["post-1736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guidelines","tag-technology-c","tag-technology-grasshopper"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Grasshopper Scripting 104 - Modelical<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grasshopper Scripting 104 - Modelical\" \/>\n<meta property=\"og:description\" content=\"Lists In the last post we discussed applying conditional operations to single values. But that is way too simple. We expect to process many different values when working with Grasshopper and the power of scripting increases when we deal with collections of data. The main collection type you should care about is The List. Download [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/\" \/>\n<meta property=\"og:site_name\" content=\"Modelical\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Modelical\/\" \/>\n<meta property=\"article:published_time\" content=\"2014-03-22T18:02:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-18T06:54:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/04\/Posts_34_GH_2-400x250-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Roberto Molinos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@modelical\" \/>\n<meta name=\"twitter:site\" content=\"@modelical\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roberto Molinos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/\"},\"author\":{\"name\":\"Roberto Molinos\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\"},\"headline\":\"Grasshopper Scripting 104\",\"datePublished\":\"2014-03-22T18:02:52+00:00\",\"dateModified\":\"2024-10-18T06:54:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/\"},\"wordCount\":546,\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/Posts_34_GH_2-400x250-1.jpg\",\"keywords\":[\"Tec C#\",\"Tec Grasshopper\"],\"articleSection\":[\"Guidelines\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/\",\"name\":\"Grasshopper Scripting 104 - Modelical\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/Posts_34_GH_2-400x250-1.jpg\",\"datePublished\":\"2014-03-22T18:02:52+00:00\",\"dateModified\":\"2024-10-18T06:54:06+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/Posts_34_GH_2-400x250-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/Posts_34_GH_2-400x250-1.jpg\",\"width\":400,\"height\":250},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-104\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Grasshopper Scripting 101\",\"item\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/grasshopper-scripting-101\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Grasshopper Scripting 104\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/\",\"name\":\"Modelical\",\"description\":\"We build information\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/#\\\/schema\\\/person\\\/3ad52fd99e6b5b98a59ef24c76a7c2d5\",\"name\":\"Roberto Molinos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro\",\"caption\":\"Roberto Molinos\"},\"sameAs\":[\"https:\\\/\\\/www.modelical.com\"],\"url\":\"https:\\\/\\\/www.modelical.com\\\/en\\\/author\\\/roberto\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Grasshopper Scripting 104 - Modelical","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/","og_locale":"en_US","og_type":"article","og_title":"Grasshopper Scripting 104 - Modelical","og_description":"Lists In the last post we discussed applying conditional operations to single values. But that is way too simple. We expect to process many different values when working with Grasshopper and the power of scripting increases when we deal with collections of data. The main collection type you should care about is The List. Download [&hellip;]","og_url":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/","og_site_name":"Modelical","article_publisher":"https:\/\/www.facebook.com\/Modelical\/","article_published_time":"2014-03-22T18:02:52+00:00","article_modified_time":"2024-10-18T06:54:06+00:00","og_image":[{"width":400,"height":250,"url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/04\/Posts_34_GH_2-400x250-1.jpg","type":"image\/jpeg"}],"author":"Roberto Molinos","twitter_card":"summary_large_image","twitter_creator":"@modelical","twitter_site":"@modelical","twitter_misc":{"Written by":"Roberto Molinos","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/#article","isPartOf":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/"},"author":{"name":"Roberto Molinos","@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5"},"headline":"Grasshopper Scripting 104","datePublished":"2014-03-22T18:02:52+00:00","dateModified":"2024-10-18T06:54:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/"},"wordCount":546,"image":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/04\/Posts_34_GH_2-400x250-1.jpg","keywords":["Tec C#","Tec Grasshopper"],"articleSection":["Guidelines"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/","url":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/","name":"Grasshopper Scripting 104 - Modelical","isPartOf":{"@id":"https:\/\/www.modelical.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/#primaryimage"},"image":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/04\/Posts_34_GH_2-400x250-1.jpg","datePublished":"2014-03-22T18:02:52+00:00","dateModified":"2024-10-18T06:54:06+00:00","author":{"@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5"},"breadcrumb":{"@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/#primaryimage","url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/04\/Posts_34_GH_2-400x250-1.jpg","contentUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2015\/04\/Posts_34_GH_2-400x250-1.jpg","width":400,"height":250},{"@type":"BreadcrumbList","@id":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-104\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Grasshopper Scripting 101","item":"https:\/\/www.modelical.com\/en\/grasshopper-scripting-101\/"},{"@type":"ListItem","position":2,"name":"Grasshopper Scripting 104"}]},{"@type":"WebSite","@id":"https:\/\/www.modelical.com\/en\/#website","url":"https:\/\/www.modelical.com\/en\/","name":"Modelical","description":"We build information","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.modelical.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.modelical.com\/en\/#\/schema\/person\/3ad52fd99e6b5b98a59ef24c76a7c2d5","name":"Roberto Molinos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro","url":"https:\/\/secure.gravatar.com\/avatar\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9346c12c96cb942be9bb8b2454e296662a1baa0b4cd461ab315ae9a5185b0db6?s=96&d=initials&r=g&initials=ro","caption":"Roberto Molinos"},"sameAs":["https:\/\/www.modelical.com"],"url":"https:\/\/www.modelical.com\/en\/author\/roberto\/"}]}},"_links":{"self":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/posts\/1736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/comments?post=1736"}],"version-history":[{"count":0,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/posts\/1736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/media\/27120"}],"wp:attachment":[{"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/media?parent=1736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/categories?post=1736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modelical.com\/en\/wp-json\/wp\/v2\/tags?post=1736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}