{"id":1272,"date":"2026-03-05T15:09:25","date_gmt":"2026-03-05T15:09:25","guid":{"rendered":"https:\/\/inventorics.com\/?post_type=portfolio&#038;p=1272"},"modified":"2026-06-24T15:11:01","modified_gmt":"2026-06-24T15:11:01","slug":"bike-frame-pattern-4-manual","status":"publish","type":"portfolio","link":"https:\/\/inventorics.com\/?portfolio=bike-frame-pattern-4-manual","title":{"rendered":"Bike frame pattern 4 &#8211; manual"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"845\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/title-image-scaled.jpg\" alt=\"\" class=\"wp-image-1276\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/title-image-scaled.jpg 2560w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/title-image-300x99.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/title-image-1024x338.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/title-image-768x253.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/title-image-1536x507.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/title-image-2048x676.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/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=\"470\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_rhino_annotate.jpg\" alt=\"\" class=\"wp-image-1282\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_rhino_annotate.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_rhino_annotate-300x73.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_rhino_annotate-1024x248.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_rhino_annotate-768x186.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_rhino_annotate-1536x373.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=\"2077\" height=\"1031\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-1-1.jpg\" alt=\"\" class=\"wp-image-1298\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-1-1.jpg 2077w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-1-1-300x149.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-1-1-1024x508.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-1-1-768x381.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-1-1-1536x762.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-1-1-2048x1017.jpg 2048w\" sizes=\"auto, (max-width: 2077px) 100vw, 2077px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section 1 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, and then\u2014together with geometry\u2014compiled as a wasp part. <br>In section c) connection rules are defined inside the white panels, together with the positions of connection points and lines these rules are critical for and finally all components are combined to construct a stochastic aggregation (d) with a bounding volume from rhino workspace set as global constraint.<\/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=\"470\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_proto-aggr.jpg\" alt=\"\" class=\"wp-image-1299\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_proto-aggr.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_proto-aggr-300x73.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_proto-aggr-1024x248.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_proto-aggr-768x186.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/1a_proto-aggr-1536x373.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. For the pattern to remain  a flat interconnected mesh, it is important to keep the height of the box volume the same and only modify length and width (Non-rectangular geometries would also work). 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=\"2409\" height=\"1179\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-2.jpg\" alt=\"\" class=\"wp-image-1317\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-2.jpg 2409w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-2-300x147.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-2-1024x501.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-2-768x376.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-2-1536x752.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-2-2048x1002.jpg 2048w\" sizes=\"auto, (max-width: 2409px) 100vw, 2409px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section 2 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>in section b) the inventory is split in two lists, separating diamond frame type and step-through frames. <br>At c only those center-line axes are picked that are required for connections in the predefined aggregation pattern (&#8220;pattern4&#8221;) saved with this file, the selected axes are modified to exactly fit within intersections with other axes (e) and offset to define the distance between connected pipes in the aggregation (f).<br>In section d) parts in the inventory are randomly jittered using the slider highlighted in blue, at g) parts are mapped to each the positions of each proto-part.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2495\" height=\"852\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-3.jpg\" alt=\"\" class=\"wp-image-1332\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-3.jpg 2495w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-3-300x102.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-3-1024x350.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-3-768x262.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-3-1536x525.jpg 1536w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-3-2048x699.jpg 2048w\" sizes=\"auto, (max-width: 2495px) 100vw, 2495px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section 3 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=\"470\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/3a_rhino.jpg\" alt=\"\" class=\"wp-image-1337\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/3a_rhino.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/3a_rhino-300x73.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/3a_rhino-1024x248.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/3a_rhino-768x186.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/3a_rhino-1536x373.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) parts along the pattern edge are selected to place step-through frames (because in this frame type, the top tube is missing, they can only be placed at the boundary).<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=\"1783\" height=\"1161\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-4.jpg\" alt=\"\" class=\"wp-image-1339\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-4.jpg 1783w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-4-300x195.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-4-1024x667.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-4-768x500.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-4-1536x1000.jpg 1536w\" sizes=\"auto, (max-width: 1783px) 100vw, 1783px\" \/><figcaption class=\"wp-element-caption\"><em><sup>Section 4 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=\"1561\" height=\"1243\" src=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-5.jpg\" alt=\"\" class=\"wp-image-1340\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-5.jpg 1561w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-5-300x239.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-5-1024x815.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-5-768x612.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/Detail-5-1536x1223.jpg 1536w\" sizes=\"auto, (max-width: 1561px) 100vw, 1561px\" \/><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).<br>In section c), connection overlap can be displayed as aligned dimensions and with the component inside the red group markings for placing connectors are created (leave this disabled during Kangaroo simulation for calculation speed).<\/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\/03\/5_rhino.jpg\" alt=\"\" class=\"wp-image-1341\" srcset=\"https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/5_rhino.jpg 1937w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/5_rhino-300x131.jpg 300w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/5_rhino-1024x448.jpg 1024w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/5_rhino-768x336.jpg 768w, https:\/\/inventorics.com\/wp-content\/uploads\/2026\/03\/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). The aggregation will behave like a fabric that can be bent and shaped, as a reference see also <a href=\"https:\/\/inventorics.com\/?p=1058\">this entry on our blog<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 loaded from rhino model space (a). At section b) points and lines to define part connections are referenced in the containers inside the [&hellip;]<\/p>\n","protected":false},"featured_media":1274,"comment_status":"closed","ping_status":"closed","template":"","portfolio_cat":[51],"portfolio_skill":[],"class_list":["post-1272","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry","portfolio_cat-manuals"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/portfolio\/1272","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=1272"}],"version-history":[{"count":7,"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/portfolio\/1272\/revisions"}],"predecessor-version":[{"id":1344,"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/portfolio\/1272\/revisions\/1344"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inventorics.com\/index.php?rest_route=\/wp\/v2\/media\/1274"}],"wp:attachment":[{"href":"https:\/\/inventorics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1272"}],"wp:term":[{"taxonomy":"portfolio_cat","embeddable":true,"href":"https:\/\/inventorics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fportfolio_cat&post=1272"},{"taxonomy":"portfolio_skill","embeddable":true,"href":"https:\/\/inventorics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fportfolio_skill&post=1272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}