{"id":1861,"date":"2026-07-17T11:13:23","date_gmt":"2026-07-17T11:13:23","guid":{"rendered":"https:\/\/inventorics.com\/?post_type=portfolio&#038;p=1861"},"modified":"2026-08-07T15:26:18","modified_gmt":"2026-08-07T15:26:18","slug":"bike-frame-pattern-1-manual","status":"publish","type":"portfolio","link":"https:\/\/inventorics.com\/?portfolio=bike-frame-pattern-1-manual","title":{"rendered":"Bike frame pattern 1 &#8211; manual"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Manual for the use of a Rhino file with an associated Grasshopper definition to create an aggregation of bicycle frames.<br><a href=\"https:\/\/inventorics.com\/?portfolio=bike-frame-pattern-1-files\" data-type=\"link\" data-id=\"https:\/\/inventorics.com\/?portfolio=bike-frame-pattern-1-files\">Download the files here.<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"723\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/title-image-scaled.jpg\" alt=\"\" class=\"wp-image-1867\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/title-image-scaled.jpg 2560w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/title-image-300x85.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/title-image-1024x289.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/title-image-768x217.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/title-image-1536x434.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/title-image-2048x578.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Overview of Grasshopper definition<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The definition is structured into 5 sections: <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wasp aggregation <\/li>\n\n\n\n<li>Inventory sorting<\/li>\n\n\n\n<li>Part placement<\/li>\n\n\n\n<li>Kangaroo simulation<\/li>\n\n\n\n<li>Postproduction, evaluation, and labeling <\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1937\" height=\"848\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_rhino.jpg\" alt=\"\" class=\"wp-image-1864\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_rhino.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_rhino-300x131.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_rhino-1024x448.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_rhino-768x336.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_rhino-1536x672.jpg 1536w\" sizes=\"auto, (max-width: 1937px) 100vw, 1937px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Geometries in Rhino workspace that are referenced in the definition<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2511\" height=\"943\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail1.jpg\" alt=\"\" class=\"wp-image-1870\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail1.jpg 2511w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail1-300x113.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail1-1024x385.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail1-768x288.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail1-1536x577.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail1-2048x769.jpg 2048w\" sizes=\"auto, (max-width: 2511px) 100vw, 2511px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section1 in detail<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In section 1, a Wasp aggregation is set up with a standard proto-part. When you open the associated rhino file, the part geometry is automatically loaded from rhino model space (a). <br>At section b) points and lines to define part connections are referenced in the containers inside the purple group at the left, and then\u2014together with mesh geometry\u2014compiled as a wasp part. <br>In section c) connection rules are defined. Together with the positions of connection points and lines these rules are critical for creating the pattern. Finally all components are combined to construct a stochastic aggregation. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This specific pattern is build with so-called hierarchical parts. Learn more about hierarchical parts <a href=\"https:\/\/www.youtube.com\/watch?v=iSFxKGDWaeA\">here<\/a>.<br>Individual parts are first composed in a mini-aggregation to form a macro-module, these modules containing multiple parts are then defined as a new part (d).<br>In section e), an aggregation from hierarchical parts is built with a bounding volume from rhino workspace set as global constraint. At the end, hierarchical parts are disassembled into the constituent basic parts and those removed that exceed the bounding volume.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you switch visible the component highlighted in the screenshot above, the preliminary aggregation of identical proto-parts is previewed in Rhino model space.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1937\" height=\"848\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_proto-aggr.jpg\" alt=\"\" class=\"wp-image-1874\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_proto-aggr.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_proto-aggr-300x131.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_proto-aggr-1024x448.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_proto-aggr-768x336.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_proto-aggr-1536x672.jpg 1536w\" sizes=\"auto, (max-width: 1937px) 100vw, 1937px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Wasp <\/sup><\/em><sup><em>proto-part aggregation<\/em><\/sup><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">By altering the bounding box volume in Rhino workspace, the extents of the aggregation can be changed. Because every second bicycle frame is rotated 90\u00b0, this pattern can also change form a flat into a volumetric lattice. When changing the bounding volume height, parts start to stack. <br>You need to make sure that the bicycle frame that is referenced as a block from the rhino workspace remains inside the bounding volume.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2198\" height=\"1100\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/aggr-stacking.jpg\" alt=\"\" class=\"wp-image-1880\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/aggr-stacking.jpg 2198w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/aggr-stacking-300x150.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/aggr-stacking-1024x512.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/aggr-stacking-768x384.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/aggr-stacking-1536x769.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/aggr-stacking-2048x1025.jpg 2048w\" sizes=\"auto, (max-width: 2198px) 100vw, 2198px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Parts from the inventory are automatically duplicated when the bounding box is larger and the number of parts in the pattern exceeds the amount of inventory parts. When you go very large, the number of parts set at the wasp aggregation in section 1 may also be adjusted.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2376\" height=\"886\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail-2.jpg\" alt=\"\" class=\"wp-image-1883\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail-2.jpg 2376w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail-2-300x112.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail-2-1024x382.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail-2-768x286.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail-2-1536x573.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail-2-2048x764.jpg 2048w\" sizes=\"auto, (max-width: 2376px) 100vw, 2376px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section2 in detail<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In section 2, the inventory of 3D scanned bicycle frames is mapped to the Wasp proto-part aggregation to replace the uniform placeholders. <br>In section a), you find a catalog of bicycle frames as curves (center-line axes) and meshes internalized in two separate containers.<br>At b) only those center-line axes are picked that are required for connections in the predefined aggregation pattern (&#8220;pattern1&#8221;) saved with this file, the selected axes are modified to exactly fit within the scan meshes (c).<br>In section d) parts in the inventory are randomly jittered using the slider highlighted in blue, at e) parts from the inventory are mapped to the positions of each proto-part instance.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2544\" height=\"1277\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail3.jpg\" alt=\"\" class=\"wp-image-1885\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail3.jpg 2544w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail3-300x151.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail3-1024x514.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail3-768x386.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail3-1536x771.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail3-2048x1028.jpg 2048w\" sizes=\"auto, (max-width: 2544px) 100vw, 2544px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section3 in detail<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In section 3, data from the wasp aggregation graph is used to set up connections and alignment constraints for the Kangaroo physics simulation in section 4. <br>A graph defines a topology of connections, each node in the graph represents a part, and lines between nodes represent connections. Besides a graphical representation of connectivity as lines and vertices (screenshot below), the output of the graph components are synchronous lists. Each list contains entries for each connection in the graph, listing part indices at start and end, as well as connection indices at start and end of connections. This information is used to assign relationships between geometries that are later translated into constraints for a Kangaroo simulation, this determines which parts are connected and eg. which frame profiles should co-align. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1937\" height=\"848\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_aggr-graph.jpg\" alt=\"\" class=\"wp-image-1889\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_aggr-graph.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_aggr-graph-300x131.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_aggr-graph-1024x448.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_aggr-graph-768x336.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/1a_aggr-graph-1536x672.jpg 1536w\" sizes=\"auto, (max-width: 1937px) 100vw, 1937px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Parts with preview of connection graph in green<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">At the beginning in section a), different instances of the aggregation graph component output different sub-sets of the graph dependent on which connections are called (specified by Wasp rules) at the connection filter input &#8220;CR&#8221;.<br>At b), points on the center-axes are defined that are later used for alignment constraints.<br>At the other end (c) preconfigured part geometries (axes and points) are sorted according to the connection graph and fed into Kangaroo constraints.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1784\" height=\"1188\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail4.jpg\" alt=\"\" class=\"wp-image-1887\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail4.jpg 1784w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail4-300x200.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail4-1024x682.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail4-768x511.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail4-1536x1023.jpg 1536w\" sizes=\"auto, (max-width: 1784px) 100vw, 1784px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section4 in detail<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In section 4 a physics simulation with Kangaroo 3D is set up. First, parts as rigid bodies and constraints for connections and co-alignment are defined (a) based on the connection graph information from the previous section 3. <br>These are compiled and fed into a Kangaroo simulation component (&#8220;Kangaroo Solver&#8221;) (b). The simulation can be started and stopped by switching the toggle, and it is reset with the button above. <br>Alternatively, the &#8220;Zombie Solver&#8221; above can be activated for simulation. Be careful, the model will freeze until the simulation is resolved, you will not see the form finding process in real time, and dependent on the size of your model this can take a few seconds! It is recommended to disable the standard solver before you try the Zombie. <br>Dependent on which solver you use, the output is channeled for further processing (c).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1749\" height=\"1260\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail5.jpg\" alt=\"\" class=\"wp-image-1891\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail5.jpg 1749w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail5-300x216.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail5-1024x738.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail5-768x553.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/Detail5-1536x1107.jpg 1536w\" sizes=\"auto, (max-width: 1749px) 100vw, 1749px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section 5 in detail<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, in section 5 results are visualized. At first the preview of the component highlighted in section a) needs to be activated to visualize the 3D scanned bicycle frame parts after simulation colored by instance. The component inside the red group next to &#8220;scan names&#8221; displays part names. <br>In section b) below, co-alignment axes, deviation angle tags at each connection, and global deviation values can be displayed.(highlighted from left to right).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is what it looks like when you switch on all the display items mentioned above:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1937\" height=\"848\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/5_rhino.jpg\" alt=\"\" class=\"wp-image-1893\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/5_rhino.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/5_rhino-300x131.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/5_rhino-1024x448.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/5_rhino-768x336.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/07\/5_rhino-1536x672.jpg 1536w\" sizes=\"auto, (max-width: 1937px) 100vw, 1937px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to play with modifications of the overall form, you could drag parts with left mouse button while the simulation is active and running (does not work nicely with MacOS). With some limitations, the aggregation can be bent and shaped, as a reference see also <a href=\"https:\/\/inventorics.com\/?p=1110\">this entry on our blog<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The capacity of this specific pattern to be layered, can be used to design space-truss-like structures. For reference, see also <a href=\"https:\/\/inventorics.com\/?p=680\">this post,<\/a> where we experimented with a double-layer configuration. Placing smaller frames at the bottom layer, and larger ones at the top affects the entire structure to bend slightly in the alignment simulation process. When you want to implement something like this, you might want to lower the alignment constraint forces in the Kangaroo section to avoid over-constraining and to speed up simulation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2099\" height=\"575\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2024\/06\/pattern1_sort-def_long-elevation_2-part_crop.jpg\" alt=\"\" class=\"wp-image-690\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2024\/06\/pattern1_sort-def_long-elevation_2-part_crop.jpg 2099w, https:\/\/inventorics.com\/wp-content\/uploads\/2024\/06\/pattern1_sort-def_long-elevation_2-part_crop-300x82.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2024\/06\/pattern1_sort-def_long-elevation_2-part_crop-1024x281.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2024\/06\/pattern1_sort-def_long-elevation_2-part_crop-768x210.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2024\/06\/pattern1_sort-def_long-elevation_2-part_crop-1536x421.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2024\/06\/pattern1_sort-def_long-elevation_2-part_crop-2048x561.jpg 2048w\" sizes=\"auto, (max-width: 2099px) 100vw, 2099px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Manual for the use of a Rhino file with an associated Grasshopper definition to create an aggregation of bicycle frames.Download the files here. The definition is structured into 5 sections: In section 1, a Wasp aggregation is set up with a standard proto-part. When you open the associated rhino file, the part geometry is automatically [&hellip;]<\/p>\n","protected":false},"featured_media":1895,"comment_status":"closed","ping_status":"closed","template":"","portfolio_cat":[51,57],"portfolio_skill":[],"class_list":["post-1861","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry","portfolio_cat-manuals","portfolio_cat-bike-frames"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/portfolio\/1861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/types\/portfolio"}],"replies":[{"embeddable":true,"href":"https:\/\/inventorics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1861"}],"version-history":[{"count":8,"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/portfolio\/1861\/revisions"}],"predecessor-version":[{"id":2125,"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/portfolio\/1861\/revisions\/2125"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/media\/1895"}],"wp:attachment":[{"href":"https:\/\/inventorics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1861"}],"wp:term":[{"taxonomy":"portfolio_cat","embeddable":true,"href":"https:\/\/inventorics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fportfolio_cat&post=1861"},{"taxonomy":"portfolio_skill","embeddable":true,"href":"https:\/\/inventorics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fportfolio_skill&post=1861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}