diff --git a/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝⵈ◯ⵙ◯ⵈᗝ◯/◯ᔓᔕⓄᴥᗱᗴᑐᑕⓄИNꖴ옷ᴥ◯⚪◯ᴥ옷ꖴИNⓄᑐᑕᗱᗴᴥⓄᔓᔕ◯ⵙ◯ᔓᔕⓄᴥᗱᗴᑐᑕⓄИNꖴ옷ᴥ◯⚪◯ᴥ옷ꖴИNⓄᑐᑕᗱᗴᴥⓄᔓᔕ◯/◯ᴥᗱᗴߦⓄ옷ᔓᔕᗩᴥᕤᕦ◯⚪◯ᕤᕦᴥᗩᔓᔕ옷Ⓞߦᗱᗴᴥ◯ⵙ◯ᴥᗱᗴߦⓄ옷ᔓᔕᗩᴥᕤᕦ◯⚪◯ᕤᕦᴥᗩᔓᔕ옷Ⓞߦᗱᗴᴥ◯/XHG.⠀⠀⠀⠀◯⠀ᗱᗴᴥᑎ✤ᗩᗯᴥᑎᑐᑕ⠀◯⠀ᗱᗴᗯꖴ✤ᗩᗯꖴᴥᗱᗴᗝ⠀◯⠀ᗝᗱᗴߦᗩᙏ⠀◯⠀옷ߦᗩᴥᕤᕦ⠀◯⠀⠀⠀⠀ⵙ⠀⠀⠀⠀◯⠀ᕤᕦᴥᗩߦ옷⠀◯⠀ᙏᗩߦᗱᗴᗝ⠀◯⠀ᗝᗱᗴᴥꖴᗯᗩ✤ꖴᗯᗱᗴ⠀◯⠀ᑐᑕᑎᴥᗯᗩ✤ᑎᴥᗱᗴ⠀◯⠀⠀⠀⠀.GHX b/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝⵈ◯ⵙ◯ⵈᗝ◯/◯ᔓᔕⓄᴥᗱᗴᑐᑕⓄИNꖴ옷ᴥ◯⚪◯ᴥ옷ꖴИNⓄᑐᑕᗱᗴᴥⓄᔓᔕ◯ⵙ◯ᔓᔕⓄᴥᗱᗴᑐᑕⓄИNꖴ옷ᴥ◯⚪◯ᴥ옷ꖴИNⓄᑐᑕᗱᗴᴥⓄᔓᔕ◯/◯ᴥᗱᗴߦⓄ옷ᔓᔕᗩᴥᕤᕦ◯⚪◯ᕤᕦᴥᗩᔓᔕ옷Ⓞߦᗱᗴᴥ◯ⵙ◯ᴥᗱᗴߦⓄ옷ᔓᔕᗩᴥᕤᕦ◯⚪◯ᕤᕦᴥᗩᔓᔕ옷Ⓞߦᗱᗴᴥ◯/XHG.⠀⠀⠀⠀◯⠀ᗱᗴᴥᑎ✤ᗩᗯᴥᑎᑐᑕ⠀◯⠀ᗱᗴᗯꖴ✤ᗩᗯꖴᴥᗱᗴᗝ⠀◯⠀ᗝᗱᗴߦᗩᙏ⠀◯⠀옷ߦᗩᴥᕤᕦ⠀◯⠀⠀⠀⠀ⵙ⠀⠀⠀⠀◯⠀ᕤᕦᴥᗩߦ옷⠀◯⠀ᙏᗩߦᗱᗴᗝ⠀◯⠀ᗝᗱᗴᴥꖴᗯᗩ✤ꖴᗯᗱᗴ⠀◯⠀ᑐᑕᑎᴥᗯᗩ✤ᑎᴥᗱᗴ⠀◯⠀⠀⠀⠀.GHX new file mode 100644 index 00000000..f75c103f --- /dev/null +++ b/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝⵈ◯ⵙ◯ⵈᗝ◯/◯ᔓᔕⓄᴥᗱᗴᑐᑕⓄИNꖴ옷ᴥ◯⚪◯ᴥ옷ꖴИNⓄᑐᑕᗱᗴᴥⓄᔓᔕ◯ⵙ◯ᔓᔕⓄᴥᗱᗴᑐᑕⓄИNꖴ옷ᴥ◯⚪◯ᴥ옷ꖴИNⓄᑐᑕᗱᗴᴥⓄᔓᔕ◯/◯ᴥᗱᗴߦⓄ옷ᔓᔕᗩᴥᕤᕦ◯⚪◯ᕤᕦᴥᗩᔓᔕ옷Ⓞߦᗱᗴᴥ◯ⵙ◯ᴥᗱᗴߦⓄ옷ᔓᔕᗩᴥᕤᕦ◯⚪◯ᕤᕦᴥᗩᔓᔕ옷Ⓞߦᗱᗴᴥ◯/XHG.⠀⠀⠀⠀◯⠀ᗱᗴᴥᑎ✤ᗩᗯᴥᑎᑐᑕ⠀◯⠀ᗱᗴᗯꖴ✤ᗩᗯꖴᴥᗱᗴᗝ⠀◯⠀ᗝᗱᗴߦᗩᙏ⠀◯⠀옷ߦᗩᴥᕤᕦ⠀◯⠀⠀⠀⠀ⵙ⠀⠀⠀⠀◯⠀ᕤᕦᴥᗩߦ옷⠀◯⠀ᙏᗩߦᗱᗴᗝ⠀◯⠀ᗝᗱᗴᴥꖴᗯᗩ✤ꖴᗯᗱᗴ⠀◯⠀ᑐᑕᑎᴥᗯᗩ✤ᑎᴥᗱᗴ⠀◯⠀⠀⠀⠀.GHX @@ -0,0 +1,29349 @@ + + + + + + + + 0 + 2 + 2 + + + + + + + 1 + 0 + 7 + + + + + + bae02583-699d-4132-85d9-a1b0849ff49d + Shaded + 4 + + 255;201;201;201 + + + 255;191;191;191 + + + + + + false + 0 + 0 + 0 + 0 + 0 + false + 0 + 0 + 0 + 0 + false + 0 + false + 0 + + + + + + + 633740217794324378 + + XHG.⠀⠀⠀⠀◯⠀ᗱᗴᴥᑎ✤ᗩᗯᴥᑎᑐᑕ⠀◯⠀ᗱᗴᗯꖴ✤ᗩᗯꖴᴥᗱᗴᗝ⠀◯⠀ᗝᗱᗴߦᗩᙏ⠀◯⠀옷ߦᗩᴥᕤᕦ⠀◯⠀⠀⠀⠀ⵙ⠀⠀⠀⠀◯⠀ᕤᕦᴥᗩߦ옷⠀◯⠀ᙏᗩߦᗱᗴᗝ⠀◯⠀ᗝᗱᗴᴥꖴᗯᗩ✤ꖴᗯᗱᗴ⠀◯⠀ᑐᑕᑎᴥᗯᗩ✤ᑎᴥᗱᗴ⠀◯⠀⠀⠀⠀.GHX + + + + + 0 + + + + + + 126 + -236 + + 1.48452353 + + + + + 1 + + + + + + 237 + -83 + + true + O + 1.48452353 + + + + + + + + + 0 + + + + + 3 + + + + + Pufferfish, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null + 3.0.0.0 + Michael Pryor + 1c9de8a1-315f-4c56-af06-8f69fee80a7a + Pufferfish + 3.0.0.0 + + + + + ShowcaseTools, Version=1.2.8.0, Culture=neutral, PublicKeyToken=null + 1.2.8.0 + + 00000000-0000-0000-0000-000000000000 + Other Assembly + + + + + + Heteroptera, Version=0.7.2.4, Culture=neutral, PublicKeyToken=null + 0.7.2.4 + Amin Bahrami [Studio Helioripple] + 08bdcae0-d034-48dd-a145-24a9fcf3d3ff + Heteroptera + 0.7.2.4 + + + + + + + 242 + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 0d49a38f-8d38-4bd7-b312-a15d0cac849e + Panel + + false + 1 + ee837d01-6e26-4e31-8848-75349a619706 + 1 + Double click to edit panel content… + + + + + + 3020 + 504 + 119 + 129 + + 0 + 0 + 0 + + 3020.181 + 504.5611 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + false + + + + + Courier New + 8 + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 399ae478-9faa-4113-878a-ecbeb9023e91 + 18e93f2f-ac8b-477a-9b1d-c3e107cc3c5b + f8463a6a-537d-44ae-a102-2cbf6773c33a + 6264624f-4741-4ad5-b390-ffeaf96b650b + 1b2f3b06-cd4a-4566-8774-a6a44795fbab + 85b00841-044b-4e33-a4ec-9b92802b26a4 + e0c48ccf-10ce-4e90-99aa-82531dc21fa4 + 52d7ea4f-a46f-446b-990e-bc0781dd5bfd + 47c2637e-e747-48a1-8a92-8e349052dbe1 + 745c7cd8-626b-4ae3-af49-236a0540c9db + d2205dfc-8d4a-4036-b26c-f14bc5cca3f9 + e5dbc17c-65a4-4ede-98e9-cc175d4ef477 + db6d761f-a5ff-4557-88d7-7e388111c80b + 13 + 40f8014e-3465-4f19-b781-aab0c9c39fe5 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + f8463a6a-537d-44ae-a102-2cbf6773c33a + 6264624f-4741-4ad5-b390-ffeaf96b650b + 1b2f3b06-cd4a-4566-8774-a6a44795fbab + db6d761f-a5ff-4557-88d7-7e388111c80b + 05da3e76-3947-41c3-ba67-834e727e19e6 + c724c2b6-0db7-40c2-8f7d-af88759b670e + 91aee5d2-ed06-49da-9459-04507d020564 + 26aaa1d5-1508-4eca-81e0-1445e9996c66 + 8 + 399ae478-9faa-4113-878a-ecbeb9023e91 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 85b00841-044b-4e33-a4ec-9b92802b26a4 + e0c48ccf-10ce-4e90-99aa-82531dc21fa4 + 52d7ea4f-a46f-446b-990e-bc0781dd5bfd + 47c2637e-e747-48a1-8a92-8e349052dbe1 + 745c7cd8-626b-4ae3-af49-236a0540c9db + d2205dfc-8d4a-4036-b26c-f14bc5cca3f9 + e5dbc17c-65a4-4ede-98e9-cc175d4ef477 + 7 + 18e93f2f-ac8b-477a-9b1d-c3e107cc3c5b + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 3091dae8-d5dc-4fac-a891-c5a5c7118bd1 + b15849e1-cdad-4c2e-becd-859af856d608 + 2187d492-e79a-43d1-9758-c683cee6a1a6 + 64a13dde-4d5b-4c3c-9590-dd2d98964c51 + 108b0aae-e403-4a36-b12b-8ef951a35c50 + f33205f0-793a-41b8-b72a-e667cf426b4f + 8d36667c-3eb9-462e-91a9-b77c202939ca + 360c0603-8317-424e-a8c3-12ddeacddebd + 8 + 9c976e8a-0a2d-4fb1-a458-b40424176e99 + Group + + + + + + + + + + + fb6aba99-fead-4e42-b5d8-c6de5ff90ea6 + DotNET VB Script (LEGACY) + + + + + A VB.NET scriptable component + f8463a6a-537d-44ae-a102-2cbf6773c33a + DotNET VB Script (LEGACY) + Turtle + 0 + Dim i As Integer + Dim dir As New On3dVector(1, 0, 0) + Dim pos As New On3dVector(0, 0, 0) + Dim axis As New On3dVector(0, 0, 1) + Dim pnts As New List(Of On3dVector) + + pnts.Add(pos) + + For i = 0 To Forward.Count() - 1 + Dim P As New On3dVector + dir.Rotate(Left(i), axis) + P = dir * Forward(i) + pnts(i) + pnts.Add(P) + Next + + Points = pnts + + + + + + 4298 + 388 + 119 + 44 + + + 4359 + 410 + + + + + + 1 + 1 + 2 + Script Variable Forward + Script Variable Left + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + true + true + Forward + Left + true + true + + + + + 2 + Print, Reflect and Error streams + Output parameter Points + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + true + true + Output + Points + false + false + + + + + 1 + false + Script Variable Forward + ce1f978e-a982-441e-8781-42beeed9349f + Forward + Forward + true + 1 + true + 11d6ae9c-db85-41da-a72e-197fbac37970 + 1 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 4300 + 390 + 44 + 20 + + + 4323.5 + 400 + + + + + + + + 1 + false + Script Variable Left + 57e2c9a0-b37d-4c4b-9e2b-b0e17a521d43 + Left + Left + true + 1 + true + 4ebc6662-8141-4321-80cb-843bf3aabe95 + 1 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 4300 + 410 + 44 + 20 + + + 4323.5 + 420 + + + + + + + + Print, Reflect and Error streams + 33dd288d-3d90-4a29-8ab3-866accaf2be0 + Output + Output + false + 0 + + + + + + 4374 + 390 + 41 + 20 + + + 4394.5 + 400 + + + + + + + + Output parameter Points + a7101779-445c-4899-9b31-ce0a4803f08d + Points + Points + false + 0 + + + + + + 4374 + 410 + 41 + 20 + + + 4394.5 + 420 + + + + + + + + + + + + e64c5fb1-845c-4ab1-8911-5f338516ba67 + Series + + + + + Create a series of numbers. + 3091dae8-d5dc-4fac-a891-c5a5c7118bd1 + Series + Series + + + + + + 448 + 502 + 104 + 64 + + + 498 + 534 + + + + + + First number in the series + bfe8e6e2-eddc-4584-8ce4-005a112f16fc + Start + Start + false + 0 + + + + + + 450 + 504 + 33 + 20 + + + 468 + 514 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Step size for each successive number + 3ef6124c-d6dc-426b-a979-0ad9d65d59da + Step + Step + false + 2b79d86a-c886-48ba-a41d-bd2a6298f66d + 1 + + + + + + 450 + 524 + 33 + 20 + + + 468 + 534 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Number of values in the series + 41382c6d-efca-4f46-89a4-f4a83cdfe7f4 + Count + Count + false + 7f4503d3-711b-4865-8533-135f511f6962 + 1 + + + + + + 450 + 544 + 33 + 20 + + + 468 + 554 + + + + + + 1 + + + + + 1 + {0} + + + + + 500 + + + + + + + + + + + 1 + Series of numbers + 4a521433-15f9-4232-bbd6-a4193c7aaecc + Series + Series + false + 0 + + + + + + 513 + 504 + 37 + 60 + + + 531.5 + 534 + + + + + + + + + + + + dd8134c0-109b-4012-92be-51d843edfff7 + Duplicate Data + + + + + Duplicate data a predefined number of times. + b15849e1-cdad-4c2e-becd-859af856d608 + Duplicate Data + Duplicate Data + + + + + + 435 + 165 + 107 + 64 + + + 494 + 197 + + + + + + 1 + Data to duplicate + 907f9087-e15f-4411-b460-551d6e02779d + Data + Data + false + dbcbb453-e3a7-47df-892d-f8d3b9463741 + 1 + + + + + + 437 + 167 + 42 + 20 + + + 459.5 + 177 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Integer + 1 + + + + + + + + + + + Number of duplicates + 4af8efc9-5fa2-429a-bc4a-bc67bfcdce44 + Number + Number + false + 7f4503d3-711b-4865-8533-135f511f6962 + 1 + + + + + + 437 + 187 + 42 + 20 + + + 459.5 + 197 + + + + + + 1 + + + + + 1 + {0} + + + + + 500 + + + + + + + + + + + Retain list order + 96c94299-014f-4d47-a2bf-e758b61acfb5 + Order + Order + false + 0 + + + + + + 437 + 207 + 42 + 20 + + + 459.5 + 217 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + 1 + Duplicated data + 11d6ae9c-db85-41da-a72e-197fbac37970 + Data + Data + false + 0 + + + + + + 509 + 167 + 31 + 60 + + + 524.5 + 197 + + + + + + + + + + + + f5ea9d41-f062-487e-8dbf-7666ca53fbcd + Interpolate + + + + + Create an interpolated curve through a set of points. + 6264624f-4741-4ad5-b390-ffeaf96b650b + Interpolate + Interpolate + + + + + + 4470 + 335 + 121 + 64 + + + 4530 + 367 + + + + + + 1 + Interpolation points + 9fa61b9f-3d6a-4de9-b3cf-891575df3642 + Vertices + Vertices + false + 1b2f3b06-cd4a-4566-8774-a6a44795fbab + 1 + + + + + + 4472 + 337 + 43 + 20 + + + 4495 + 347 + + + + + + + + Curve degree + 45884fa8-c111-46db-9464-f554212d0881 + Degree + Degree + false + 0 + + + + + + 4472 + 357 + 43 + 20 + + + 4495 + 367 + + + + + + 1 + + + + + 1 + {0} + + + + + 3 + + + + + + + + + + + Periodic curve + 39a08521-0941-45d2-b08b-e760b22d1cfd + Periodic + Periodic + false + 0 + + + + + + 4472 + 377 + 43 + 20 + + + 4495 + 387 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Resulting nurbs curve + fbac77a5-b15a-4a25-8bf0-69012470613a + Curve + Curve + false + 0 + + + + + + 4545 + 337 + 44 + 20 + + + 4567 + 347 + + + + + + + + Curve length + 9e8512d8-16fc-432e-836f-b8d89a934da4 + Length + Length + false + 0 + + + + + + 4545 + 357 + 44 + 20 + + + 4567 + 367 + + + + + + + + Curve domain + 0b6cb763-0a93-4ae2-96a2-fdcd7eb5bc57 + Domain + Domain + false + 0 + + + + + + 4545 + 377 + 44 + 20 + + + 4567 + 387 + + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + 7f4503d3-711b-4865-8533-135f511f6962 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 11 + + 250.0 + + + + + + 64 + 228 + 250 + 20 + + + 64.23257 + 228.5999 + + + + + + + + + + 9df5e896-552d-4c8c-b9ca-4fc147ffa022 + Expression + + + + + Evaluate an expression + 1/2*X^2+1/6*X^3+1/24*X^4+1/120*X^5+1/720*X^6+1/5040*X^7+1/40320*X^8++1/322560*X^9 + ccba0cf5-bf78-4d56-8ae4-a8179e226134 + Expression + Expression + + + + + + 1806 + 956 + 903 + 84 + + + 2344 + 998 + + + + + + 4 + ba80fd98-91a1-4958-b6a7-a94e40e52bdb + ba80fd98-91a1-4958-b6a7-a94e40e52bdb + ba80fd98-91a1-4958-b6a7-a94e40e52bdb + ba80fd98-91a1-4958-b6a7-a94e40e52bdb + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Expression variable + dd7fdd44-23e0-495d-acff-e72efd794035 + Variable X + X + true + 38133632-4c97-466b-b444-265770619668 + 1 + + + + + + 1808 + 958 + 188 + 20 + + + 1903.5 + 968 + + + + + + + + Expression variable + de1f1771-1bb3-4fa6-a496-93db22855cd1 + Variable O_EZIS_O_SIZE_O + O_EZIS_O_SIZE_O + true + 0 + + + + + + 1808 + 978 + 188 + 20 + + + 1903.5 + 988 + + + + + + + + Expression variable + 275ad39a-b984-4aaf-81ae-4e66af05f4b5 + Variable O_REWOP_TOOR_O_ROOT_POWER_O + O_REWOP_TOOR_O_ROOT_POWER_O + true + 0 + + + + + + 1808 + 998 + 188 + 20 + + + 1903.5 + 1008 + + + + + + + + Expression variable + 37f0162d-6447-441a-b2ea-f4d2401e6c66 + Variable O_REWOP_O_POWER_O + O_REWOP_O_POWER_O + true + 0 + + + + + + 1808 + 1018 + 188 + 20 + + + 1903.5 + 1028 + + + + + + + + Result of expression + d5068386-bfdb-4d84-9996-16eda0ccf7db + Result + R + false + 0 + + + + + + 2691 + 958 + 16 + 80 + + + 2699 + 998 + + + + + + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + 75ab0454-6c42-41ca-a7bd-b7b690490a13 + Stream Filter + Stream Filter + + + + + + 3032 + 676 + 92 + 124 + + + 3077 + 738 + + + + + + 6 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + 83525f8f-2c3e-4486-91b5-1b42392675d7 + Gate + Gate + false + ec572a50-b5f4-4170-9323-7003be9b43b3 + 1 + + + + + + 3034 + 678 + 28 + 20 + + + 3049.5 + 688 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + 8b88afc8-fcb9-4c01-9028-fd394c23cf23 + false + Stream 0 + 0 + true + f95124bc-63c1-434b-b826-b22df9438a92 + 1 + + + + + + 3034 + 698 + 28 + 20 + + + 3049.5 + 708 + + + + + + + + 2 + Input stream at index 1 + 168a17f0-c4a6-431a-a210-921e101f2e82 + false + Stream 1 + 1 + true + d5068386-bfdb-4d84-9996-16eda0ccf7db + 1 + + + + + + 3034 + 718 + 28 + 20 + + + 3049.5 + 728 + + + + + + + + 2 + Input stream at index 2 + 8c31653e-a32d-4e15-848e-6e8646f02af5 + false + Stream 2 + 2 + true + f7b0f737-7ab2-4e8c-b330-bda8f73ff3ab + 1 + + + + + + 3034 + 738 + 28 + 20 + + + 3049.5 + 748 + + + + + + + + 2 + Input stream at index 3 + 6d94601b-423b-4d8d-bac6-0815a8b74468 + false + Stream 3 + 3 + true + 0 + + + + + + 3034 + 758 + 28 + 20 + + + 3049.5 + 768 + + + + + + + + 2 + Input stream at index 4 + a39af198-a084-47e9-836d-0fc9ef465e43 + false + Stream 4 + 4 + true + 0 + + + + + + 3034 + 778 + 28 + 20 + + + 3049.5 + 788 + + + + + + + + 2 + Filtered stream + ee837d01-6e26-4e31-8848-75349a619706 + false + Stream + S(2) + false + 0 + + + + + + 3092 + 678 + 30 + 120 + + + 3107 + 738 + + + + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + b4eccbd7-ec6f-4278-a2cb-b03c5e170c4f + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 1 + + 0.00162145672 + + + + + + 64 + 285 + 250 + 20 + + + 64.36103 + 285.7393 + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + dbcbb453-e3a7-47df-892d-f8d3b9463741 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 1 + + 1.00000000000 + + + + + + 64 + 171 + 250 + 20 + + + 64.97442 + 171.3352 + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 2187d492-e79a-43d1-9758-c683cee6a1a6 + Quick Graph + Quick Graph + false + 0 + 64a13dde-4d5b-4c3c-9590-dd2d98964c51 + 1 + + + + + + 473 + 311 + 50 + 50 + + + 473.3266 + 311.0284 + + -1 + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + true + 1b2f3b06-cd4a-4566-8774-a6a44795fbab + Point + Point + false + a7101779-445c-4899-9b31-ce0a4803f08d + 1 + + + + + + 4432 + 410 + 50 + 24 + + + 4457.368 + 422.4215 + + + + + + + + + + 7376fe41-74ec-497e-b367-1ffe5072608b + Curvature Graph + + + + + Draws Rhino Curvature Graphs. + 85b00841-044b-4e33-a4ec-9b92802b26a4 + Curvature Graph + Curvature Graph + + + + + + 5632 + 637 + 71 + 64 + + + 5689 + 669 + + + + + + Curve for Curvature graph display + true + 9a2b3a48-9e03-4a25-9672-df993c7af69e + Curve + Curve + false + 26aaa1d5-1508-4eca-81e0-1445e9996c66 + 1 + + + + + + 5634 + 639 + 40 + 20 + + + 5655.5 + 649 + + + + + + + + Sampling density of the Graph + a21fee7a-4577-40a0-9e16-413f22aeb91c + Density + Density + false + 52d7ea4f-a46f-446b-990e-bc0781dd5bfd + 1 + + + + + + 5634 + 659 + 40 + 20 + + + 5655.5 + 669 + + + + + + 1 + + + + + 1 + {0} + + + + + 5 + + + + + + + + + + + Scale of graph + ddf1838a-ad8a-47c2-9cce-da00c20c6dbc + Scale + Scale + false + e0c48ccf-10ce-4e90-99aa-82531dc21fa4 + 1 + + + + + + 5634 + 679 + 40 + 20 + + + 5655.5 + 689 + + + + + + 1 + + + + + 1 + {0} + + + + + 105 + + + + + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + e0c48ccf-10ce-4e90-99aa-82531dc21fa4 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 11 + + 116.0 + + + + + + 5374 + 679 + 250 + 20 + + + 5374.916 + 679.1877 + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + 52d7ea4f-a46f-446b-990e-bc0781dd5bfd + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 11 + + 1.0 + + + + + + 5374 + 659 + 250 + 20 + + + 5374.916 + 659.1877 + + + + + + + + + + 0f1b9b0c-4a67-47b2-8fad-6a06d70f7699 + 1c9de8a1-315f-4c56-af06-8f69fee80a7a + Curve Length Between + + + + + Get the lengths along a curve between points on the curve (or optionally parameters on the curve), if points are not on the curve they will be pulled to it. + 47c2637e-e747-48a1-8a92-8e349052dbe1 + Curve Length Between + Curve Length Between + + + + + + 5406 + 319 + 153 + 84 + + + 5481 + 361 + + + + + + Curve to get lengths along + b0a9f649-9c42-496c-9cda-b2b216ec2c52 + Curve + Curve + false + 26aaa1d5-1508-4eca-81e0-1445e9996c66 + 1 + + + + + + 5408 + 321 + 58 + 20 + + + 5438.5 + 331 + + + + + + + + 1 + Set of points on curve to get lengths between + a335f5c8-4861-4c47-a7ab-6a50cbf2a80c + Points + Points + true + 1b2f3b06-cd4a-4566-8774-a6a44795fbab + 1 + + + + + + 5408 + 341 + 58 + 20 + + + 5438.5 + 351 + + + + + + + + 1 + Optional set of parameters on curve to get lengths between instead of points (will override points if points are also input) + 1cc30870-d5ce-4705-9a10-caa871f0b54e + Parameters + Parameters + true + 0 + + + + + + 5408 + 361 + 58 + 20 + + + 5438.5 + 371 + + + + + + + + If true, the lengths output is normalized (0.0 - 1.0) + bcd794d0-d84f-4eaa-af33-8417a47448c6 + Normalized + Normalized + false + 0 + + + + + + 5408 + 381 + 58 + 20 + + + 5438.5 + 391 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Lengths along curve between points on curve + 03646085-cd1c-4bc2-a433-02a6913962b9 + Lengths + Lengths + false + 0 + + + + + + 5496 + 321 + 61 + 40 + + + 5526.5 + 341 + + + + + + + + 1 + Curve parameters at the points on curve + 763a6ab8-3ee4-40e0-b30c-10fd8174bb6d + Parameters + Parameters + false + 0 + + + + + + 5496 + 361 + 61 + 40 + + + 5526.5 + 381 + + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 745c7cd8-626b-4ae3-af49-236a0540c9db + Panel + + false + 0 + 03646085-cd1c-4bc2-a433-02a6913962b9 + 1 + + + + + + + 5406 + 235 + 153 + 83 + + 0 + 0 + 0 + + 5406.916 + 235.1877 + + + + + + 2 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + 2fcc2743-8339-4cdf-a046-a1f17439191d + Remap Numbers + + + + + Remap numbers into a new numeric domain + 5176388a-09a0-485f-a61b-86ca4133d143 + Remap Numbers + Remap Numbers + + + + + + 742 + 340 + 118 + 64 + + + 797 + 372 + + + + + + Value to remap + 713f56fc-3246-4341-9d6d-35018b37be8f + Value + Value + false + dcb8ed0e-8de9-4e9f-9000-3d1a09dc5205 + 1 + + + + + + 744 + 342 + 38 + 20 + + + 764.5 + 352 + + + + + + + + Source domain + 566fbaef-fa0c-41d3-8c52-f9c05388b4a4 + Source + Source + false + 647ca9d7-c459-4567-b1b0-cee1ec05054d + 1 + + + + + + 744 + 362 + 38 + 20 + + + 764.5 + 372 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1 + + + + + + + + + + + + Target domain + fbeb2315-57d5-4515-8f8d-cc0f4b04822f + Target + Target + false + 0 + + + + + + 744 + 382 + 38 + 20 + + + 764.5 + 392 + + + + + + 1 + + + + + 1 + {0} + + + + + + -0.125 + 1 + + + + + + + + + + + + Remapped number + 422f0673-4114-467f-9168-b0403a88f411 + Mapped + Mapped + false + 0 + + + + + + 812 + 342 + 46 + 30 + + + 835 + 357 + + + + + + + + Remapped and clipped number + 1c8c8478-75ef-4206-b941-41bcfd627062 + Clipped + Clipped + false + 0 + + + + + + 812 + 372 + 46 + 30 + + + 835 + 387 + + + + + + + + + + + + ce46b74e-00c9-43c4-805a-193b69ea4a11 + Multiplication + + + + + Mathematical multiplication + 6d25352b-33ca-48a8-ab43-53179d95b0fb + Multiplication + Multiplication + + + + + + 238 + 104 + 85 + 44 + + + 269 + 126 + + + + + + 2 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + First item for multiplication + 23add0d6-a756-4c31-8341-72c06356da19 + A + A + true + 2b79d86a-c886-48ba-a41d-bd2a6298f66d + 1 + + + + + + 240 + 106 + 14 + 20 + + + 248.5 + 116 + + + + + + + + Second item for multiplication + 7af55dcd-ec14-4969-97b4-78c804c97205 + B + B + true + 60fa302b-18a5-403b-b0fc-cd3754eca389 + 1 + + + + + + 240 + 126 + 14 + 20 + + + 248.5 + 136 + + + + + + + + Result of multiplication + 647ca9d7-c459-4567-b1b0-cee1ec05054d + Result + Result + false + 0 + + + + + + 284 + 106 + 37 + 40 + + + 302.5 + 126 + + + + + + + + + + + + + + 9c007a04-d0d9-48e4-9da3-9ba142bc4d46 + Subtraction + + + + + Mathematical subtraction + 725dd03f-64f2-4c77-8811-cd39398b3a24 + Subtraction + Subtraction + + + + + + 52 + 106 + 85 + 44 + + + 83 + 128 + + + + + + 2 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + First operand for subtraction + 9ace34b1-d827-462c-bbd9-b95f8fb17b1b + A + A + true + 7f4503d3-711b-4865-8533-135f511f6962 + 1 + + + + + + 54 + 108 + 14 + 20 + + + 62.5 + 118 + + + + + + + + Second operand for subtraction + 9ad42727-5801-474e-b5f6-5d4a60cb8aaf + B + B + true + 0 + + + + + + 54 + 128 + 14 + 20 + + + 62.5 + 138 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Integer + 1 + + + + + + + + + + + Result of subtraction + 60fa302b-18a5-403b-b0fc-cd3754eca389 + Result + Result + false + 0 + + + + + + 98 + 108 + 37 + 40 + + + 116.5 + 128 + + + + + + + + + + + + + + bc984576-7aa6-491f-a91d-e444c33675a7 + Graph Mapper + + + + + Represents a numeric mapping function +Sine wave distribution +Sine wave distribution +Sine wave distribution +Linear distribution +Bezier curve evaluator +Bezier curve evaluator +Bezier curve evaluator +Bezier curve evaluator +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution +Sine wave distribution + 706ffbb0-702c-491f-a74d-4e16a7775ef0 + Graph Mapper + Graph Mapper + false + 5917db7e-118b-4878-99f9-86cb65630be6 + 1 + + + + + + 2204 + 384 + 100 + 100 + + + 2204.648 + 384.5441 + + + + + + false + + + + + 0 + 1 + 0 + 1 + + + + + 7d54f77a-a866-49ed-95eb-b1f9fb25a1f1 + Sine + + + + + 0 + 0.27770441770553589 + 0 + 0.10393106937408447 + + + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + f65e1d2c-74a6-4e3f-acae-ae928cdb8ced + Quick Graph + Quick Graph + false + 0 + 706ffbb0-702c-491f-a74d-4e16a7775ef0 + 1 + + + + + + 2227 + 335 + 50 + 50 + + + 2227.176 + 335.1881 + + -1 + + + + + + + + + 2fcc2743-8339-4cdf-a046-a1f17439191d + Remap Numbers + + + + + Remap numbers into a new numeric domain + 8a783897-74ac-493b-a0c2-d8ddf62db0f8 + Remap Numbers + Remap Numbers + + + + + + 3695 + 190 + 118 + 64 + + + 3750 + 222 + + + + + + Value to remap + 06e5a85e-643b-41e3-8fbb-23d80f5223d6 + Value + Value + false + dfd1f709-d217-40fc-b128-8766ed2358ee + 1 + + + + + + 3697 + 192 + 38 + 20 + + + 3717.5 + 202 + + + + + + + + Source domain + 8a0ef931-3a59-4826-92d1-1f392dd9a0df + Source + Source + false + 0 + + + + + + 3697 + 212 + 38 + 20 + + + 3717.5 + 222 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1 + + + + + + + + + + + + Target domain + 7ee0714f-0c51-416c-a619-3d972ed29d5b + Target + Target + false + 647ca9d7-c459-4567-b1b0-cee1ec05054d + 1 + + + + + + 3697 + 232 + 38 + 20 + + + 3717.5 + 242 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1 + + + + + + + + + + + + Remapped number + 3ea53d0c-9c58-4a76-8030-df17815bd399 + Mapped + Mapped + false + 0 + + + + + + 3765 + 192 + 46 + 30 + + + 3788 + 207 + + + + + + + + Remapped and clipped number + 72a49e9b-260d-434a-95e8-c051441e8af9 + Clipped + Clipped + false + 0 + + + + + + 3765 + 222 + 46 + 30 + + + 3788 + 237 + + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + a5a61131-29ef-4f06-83a2-6939f2b63834 + Quick Graph + Quick Graph + false + 0 + 3ea53d0c-9c58-4a76-8030-df17815bd399 + 1 + + + + + + 3728 + 140 + 50 + 50 + + -1 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 75ab0454-6c42-41ca-a7bd-b7b690490a13 + 639bec7d-9515-4310-8f0f-b63740a1c650 + b1084035-5560-4cd1-af8b-32dd0d3282a5 + 0d49a38f-8d38-4bd7-b312-a15d0cac849e + 4 + af944404-3678-44fd-baea-bf7c9a9d6242 + Group + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 639bec7d-9515-4310-8f0f-b63740a1c650 + Quick Graph + Quick Graph + false + 0 + 0d49a38f-8d38-4bd7-b312-a15d0cac849e + 1 + + + + + + 3143 + 477 + 50 + 50 + + -1 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + f95124bc-63c1-434b-b826-b22df9438a92 + Panel + + false + 1 + 706ffbb0-702c-491f-a74d-4e16a7775ef0 + 1 + Double click to edit panel content… + + + + + + 2311 + 384 + 112 + 100 + + 0 + 0 + 0 + + 2311.981 + 384.9904 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 5917db7e-118b-4878-99f9-86cb65630be6 + Panel + + false + 1 + 8d0d12bd-da23-49cc-b34c-50a33768057a + 1 + Double click to edit panel content… + + + + + + 2083 + 385 + 113 + 100 + + 0 + 0 + 0 + + 2083.122 + 385.0728 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 131a4f8d-7ebd-4caf-9407-e9acd79c61a6 + Quick Graph + Quick Graph + false + 0 + 5917db7e-118b-4878-99f9-86cb65630be6 + 1 + + + + + + 2112 + 334 + 50 + 50 + + + 2112.936 + 334.8834 + + -1 + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + bee774d6-9b56-47d4-8b19-d665b2b1a8c3 + Quick Graph + Quick Graph + false + 0 + f95124bc-63c1-434b-b826-b22df9438a92 + 1 + + + + + + 2340 + 334 + 50 + 50 + + + 2340.305 + 334.7302 + + -1 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 706ffbb0-702c-491f-a74d-4e16a7775ef0 + f65e1d2c-74a6-4e3f-acae-ae928cdb8ced + f95124bc-63c1-434b-b826-b22df9438a92 + 5917db7e-118b-4878-99f9-86cb65630be6 + 131a4f8d-7ebd-4caf-9407-e9acd79c61a6 + bee774d6-9b56-47d4-8b19-d665b2b1a8c3 + 6 + f8335be0-0446-49b1-bf81-1578314c365e + Group + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 8d0d12bd-da23-49cc-b34c-50a33768057a + Panel + + false + 1 + 422f0673-4114-467f-9168-b0403a88f411 + 1 + Double click to edit panel content… + + + + + + 869 + 330 + 113 + 100 + + 0 + 0 + 0 + + 869.3433 + 330.3398 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + b8a26bbb-b702-427a-8001-28477cb0d5e1 + Quick Graph + Quick Graph + false + 0 + 422f0673-4114-467f-9168-b0403a88f411 + 1 + + + + + + 777 + 290 + 50 + 50 + + + 777.1058 + 290.1783 + + -1 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + dcb8ed0e-8de9-4e9f-9000-3d1a09dc5205 + Panel + + false + 1 + 4a521433-15f9-4232-bbd6-a4193c7aaecc + 1 + Double click to edit panel content… + + + + + + 610 + 333 + 113 + 100 + + 0 + 0 + 0 + + 610.1078 + 333.3149 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 52b8bbb4-5ec0-4e58-bce4-e4e8041e086c + Quick Graph + Quick Graph + false + 0 + dcb8ed0e-8de9-4e9f-9000-3d1a09dc5205 + 1 + + + + + + 656 + 241 + 50 + 50 + + + 656.1058 + 241.1783 + + -1 + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 0065c9f4-4022-47bb-b930-47d68af8bdda + Quick Graph + Quick Graph + false + 0 + 8d0d12bd-da23-49cc-b34c-50a33768057a + 1 + + + + + + 898 + 279 + 50 + 50 + + + 898.1058 + 279.1783 + + -1 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 5176388a-09a0-485f-a61b-86ca4133d143 + 8d0d12bd-da23-49cc-b34c-50a33768057a + b8a26bbb-b702-427a-8001-28477cb0d5e1 + dcb8ed0e-8de9-4e9f-9000-3d1a09dc5205 + 52b8bbb4-5ec0-4e58-bce4-e4e8041e086c + 0065c9f4-4022-47bb-b930-47d68af8bdda + 6 + 316c9a71-5f66-44ce-9efe-55a57f1e1088 + Group + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 214649b8-645a-4e58-bdaa-e9158023b0dc + Quick Graph + Quick Graph + false + 0 + dfd1f709-d217-40fc-b128-8766ed2358ee + 1 + + + + + + 3594 + 140 + 50 + 50 + + -1 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 4ebc6662-8141-4321-80cb-843bf3aabe95 + Panel + + false + 1 + 3ea53d0c-9c58-4a76-8030-df17815bd399 + 1 + Double click to edit panel content… + + + + + + 3818 + 190 + 137 + 64 + + 0 + 0 + 0 + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + false + + + + + Courier New + 10 + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 9c2b87a1-9826-4d2c-8dff-24149c523113 + Quick Graph + Quick Graph + false + 0 + 4ebc6662-8141-4321-80cb-843bf3aabe95 + 1 + + + + + + 3857 + 139 + 50 + 50 + + -1 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + dfd1f709-d217-40fc-b128-8766ed2358ee + Panel + + false + 1 + 0d49a38f-8d38-4bd7-b312-a15d0cac849e + 1 + Double click to edit panel content… + + + + + + 3552 + 190 + 137 + 64 + + 0 + 0 + 0 + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + false + + + + + Courier New + 10 + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 8a783897-74ac-493b-a0c2-d8ddf62db0f8 + a5a61131-29ef-4f06-83a2-6939f2b63834 + 214649b8-645a-4e58-bdaa-e9158023b0dc + 4ebc6662-8141-4321-80cb-843bf3aabe95 + 9c2b87a1-9826-4d2c-8dff-24149c523113 + dfd1f709-d217-40fc-b128-8766ed2358ee + 6 + 37b2f3fe-eb4b-42b2-b110-24323a6c4f8e + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 47c2637e-e747-48a1-8a92-8e349052dbe1 + 745c7cd8-626b-4ae3-af49-236a0540c9db + 2 + d2205dfc-8d4a-4036-b26c-f14bc5cca3f9 + Group + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 70ab407d-d29e-4f3f-a92e-55d56f91fda7 + Quick Graph + Quick Graph + false + 0 + d5068386-bfdb-4d84-9996-16eda0ccf7db + 1 + + + + + + 2229 + 905 + 50 + 50 + + + 2229.379 + 905.8666 + + -1 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 4de0d94d-205c-4537-90b2-4779fa3e73cf + Panel + + false + 1 + d5068386-bfdb-4d84-9996-16eda0ccf7db + 1 + Double click to edit panel content… + + + + + + 2729 + 956 + 112 + 84 + + 0 + 0 + 0 + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 38133632-4c97-466b-b444-265770619668 + Panel + + false + 1 + 422f0673-4114-467f-9168-b0403a88f411 + 1 + Double click to edit panel content… + + + + + + 1675 + 956 + 113 + 84 + + 0 + 0 + 0 + + 1675.76 + 956.476 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + ec4e97a7-6b42-49bc-a131-9084c1bc9f10 + Quick Graph + Quick Graph + false + 0 + 38133632-4c97-466b-b444-265770619668 + 1 + + + + + + 1704 + 905 + 50 + 50 + + + 1704.453 + 905.7198 + + -1 + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 625e6906-d4e6-4844-b8f6-27591a02cff9 + Quick Graph + Quick Graph + false + 0 + 4de0d94d-205c-4537-90b2-4779fa3e73cf + 1 + + + + + + 2757 + 905 + 50 + 50 + + -1 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + ccba0cf5-bf78-4d56-8ae4-a8179e226134 + 70ab407d-d29e-4f3f-a92e-55d56f91fda7 + 4de0d94d-205c-4537-90b2-4779fa3e73cf + 38133632-4c97-466b-b444-265770619668 + ec4e97a7-6b42-49bc-a131-9084c1bc9f10 + 625e6906-d4e6-4844-b8f6-27591a02cff9 + 6 + 6efa3d52-1834-4736-9896-b9ace5921bc6 + Group + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 64a13dde-4d5b-4c3c-9590-dd2d98964c51 + Panel + + false + 1 + 4a521433-15f9-4232-bbd6-a4193c7aaecc + 1 + Double click to edit panel content… + + + + + + 467 + 398 + 64 + 64 + + 0 + 0 + 0 + + 467.4489 + 398.3881 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 3091dae8-d5dc-4fac-a891-c5a5c7118bd1 + 2187d492-e79a-43d1-9758-c683cee6a1a6 + 64a13dde-4d5b-4c3c-9590-dd2d98964c51 + 3 + 108b0aae-e403-4a36-b12b-8ef951a35c50 + Group + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + f33205f0-793a-41b8-b72a-e667cf426b4f + Quick Graph + Quick Graph + false + 0 + 8d36667c-3eb9-462e-91a9-b77c202939ca + 1 + + + + + + 471 + -21 + 50 + 50 + + + 471.2058 + -20.31791 + + -1 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 8d36667c-3eb9-462e-91a9-b77c202939ca + Panel + + false + 1 + 11d6ae9c-db85-41da-a72e-197fbac37970 + 1 + Double click to edit panel content… + + + + + + 465 + 64 + 65 + 64 + + 0 + 0 + 0 + + 465.3378 + 64.0417 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + b15849e1-cdad-4c2e-becd-859af856d608 + f33205f0-793a-41b8-b72a-e667cf426b4f + 8d36667c-3eb9-462e-91a9-b77c202939ca + 3 + 360c0603-8317-424e-a8c3-12ddeacddebd + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 7f4503d3-711b-4865-8533-135f511f6962 + b4eccbd7-ec6f-4278-a2cb-b03c5e170c4f + dbcbb453-e3a7-47df-892d-f8d3b9463741 + 6d25352b-33ca-48a8-ab43-53179d95b0fb + 725dd03f-64f2-4c77-8811-cd39398b3a24 + 5 + 9f40f8a3-e80b-4326-9b93-fa343dc8a33b + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 85b00841-044b-4e33-a4ec-9b92802b26a4 + e0c48ccf-10ce-4e90-99aa-82531dc21fa4 + 52d7ea4f-a46f-446b-990e-bc0781dd5bfd + 3 + e5dbc17c-65a4-4ede-98e9-cc175d4ef477 + Group + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + f8463a6a-537d-44ae-a102-2cbf6773c33a + 1b2f3b06-cd4a-4566-8774-a6a44795fbab + 2 + db6d761f-a5ff-4557-88d7-7e388111c80b + Group + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 05da3e76-3947-41c3-ba67-834e727e19e6 + Quick Graph + Quick Graph + false + 0 + c724c2b6-0db7-40c2-8f7d-af88759b670e + 1 + + + + + + 4340 + 94 + 50 + 50 + + + 4340.368 + 94.42151 + + -1 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + c724c2b6-0db7-40c2-8f7d-af88759b670e + Panel + + false + 1 + a7101779-445c-4899-9b31-ce0a4803f08d + 1 + Double click to edit panel content… + + + + + + 4226 + 143 + 293 + 64 + + 0 + 0 + 0 + + 4226.368 + 143.4215 + + + + + + 1 + + 255;255;255;255 + + true + true + true + false + false + false + + + + + Courier New + 10 + + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 3 + + 150;255;255;255 + + A group of Grasshopper objects + 05da3e76-3947-41c3-ba67-834e727e19e6 + c724c2b6-0db7-40c2-8f7d-af88759b670e + 2 + 91aee5d2-ed06-49da-9459-04507d020564 + Group + + + + + + + + + + + de131812-96cf-4cef-b9ee-7c7031802751 + 00000000-0000-0000-0000-000000000000 + InfoGlasses + + + + + To show the components' advances information.Right click to have advanced options + 546fe52e-bbd2-4d56-b00e-8387b971af78 + 0 + InfoGlasses + InfoGlasses + 0 + 0 + + + + + + 0;245;245;245 + + + 0;31;31;31 + + true + + 255;128;128;128 + + 128 + 8 + true + true + true + 2 + 0 + + 255;255;255;255 + + true + true + + + + + + -146 + 89 + 172 + 28 + + + -45 + 103 + + + + + + Run + 6d01728c-b147-43c0-ad5c-7b17637bac77 + Run + Run + false + 0 + + + + + + -144 + 91 + 24 + 24 + + + -70.5 + 103 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + + + + + 079bd9bd-54a0-41d4-98af-db999015f63d + VB Script + + + + + Private Function IsSet(ByVal param As String) As Boolean ' Check if an input parameter has data + Dim i As Integer = Component.Params.IndexOfInputParam(param) + If i > -1 Then + Return Component.Params.Input.ElementAt(i).DataType > 1 ' input parameter DataType of 1 means it's not receiving input (internal or external) + Else + Msg("error", "Input parameter '" & param & "' not found") + Return False + End If + End Function + + Private Sub Msg(ByVal type As String, ByVal msg As String) ' Output an error, warning, or informational message + Select Case type + Case "error" + Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, msg) + Print("Error: " & msg) + Case "warning" + Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, msg) + Print("Warning: " & msg) + Case "info" + Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, msg) + Print(msg) + End Select + End Sub + + ' Solve for the m parameter from length and width (reference {1} equation (34), except b = width and K(k) and E(k) should be K(m) and E(m)) + Private Function SolveMFromLenWid(ByVal L As Double, ByVal w As Double) As Double + If w = 0 Then + Return Defined.M_ZERO_W ' for the boundry condition width = 0, bypass the function and return the known m value + End If + + Dim n As Integer = 1 ' Iteration counter (quit if >MAXIT) + Dim lower As Double = 0 ' m must be within this range + Dim upper As Double = 1 + Dim m As Double + Dim cwl As Double + + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + cwl = 2 * EllipticE(m) / EllipticK(m) - 1 ' calculate w/L with the test value of m + If cwl < w / L Then ' compares the calculated w/L with the actual w/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + Return m + End Function + + ' Solve for the m parameter from length and height (reference {1} equation (33), except K(k) should be K(m) and k = sqrt(m)) + ' Note that it's actually possible to find 2 valid values for m (hence 2 width values) at certain height values + Private Function SolveMFromLenHt(ByVal L As Double, ByVal h As Double) As List(Of Double) + Dim n As Integer = 1 ' Iteration counter (quit if >MAXIT) + Dim lower As Double = 0 ' m must be within this range + Dim upper As Double = 1 + Dim twoWidths As Boolean = h / L >= Defined.DOUBLE_W_HL_RATIO And h / L < Defined.MAX_HL_RATIO ' check to see if h/L is within the range where 2 solutions for the width are possible + Dim m As Double + Dim mult_m As New List(Of Double) + Dim chl As Double + + If twoWidths Then + ' find the first of two possible solutions for m with the following limits: + lower = Defined.M_DOUBLE_W ' see constants at bottom of script + upper = Defined.M_MAXHEIGHT ' see constants at bottom of script + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + chl = Math.Sqrt(m) / EllipticK(m) ' calculate h/L with the test value of m + If chl > h / L Then ' compares the calculated h/L with the actual h/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + mult_m.Add(m) + + ' then find the second of two possible solutions for m with the following limits: + lower = Defined.M_MAXHEIGHT ' see constants at bottom of script + upper = 1 + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + chl = Math.Sqrt(m) / EllipticK(m) ' calculate h/L with the test value of m + If chl < h / L Then ' compares the calculated h/L with the actual h/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + + If m <= Defined.M_MAX Then ' return this m parameter only if it falls within the maximum useful value (above which the curve breaks down) + mult_m.Add(m) + End If + + Else + ' find the one possible solution for the m parameter + upper = Defined.M_DOUBLE_W ' limit the upper end of the search to the maximum value of m for which only one solution exists + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + chl = Math.Sqrt(m) / EllipticK(m) ' calculate h/L with the test value of m + If chl > h / L Then ' compares the calculated h/L with the actual h/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + mult_m.Add(m) + End If + + Return mult_m + End Function + + ' Solve for the m parameter from width and height (derived from reference {1} equations (33) and (34) with same notes as above) + Private Function SolveMFromWidHt(ByVal w As Double, ByVal h As Double) As Double + Dim n As Integer = 1 ' Iteration counter (quit if >MAXIT) + Dim lower As Double = 0 ' m must be within this range + Dim upper As Double = 1 + Dim m As Double + Dim cwh As Double + + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + cwh = (2 * EllipticE(m) - EllipticK(m)) / Math.Sqrt(m) ' calculate w/h with the test value of m + If cwh < w / h Then ' compares the calculated w/h with the actual w/h then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + + Return m + End Function + + ' Calculate length based on height and an m parameter, derived from reference {1} equation (33), except K(k) should be K(m) and k = sqrt(m) + Private Function Cal_L(ByVal h As Double, ByVal m As Double) As Double + Return h * EllipticK(m) / Math.Sqrt(m) + End Function + + ' Calculate width based on length and an m parameter, derived from reference {1} equation (34), except b = width and K(k) and E(k) should be K(m) and E(m) + Private Function Cal_W(ByVal L As Double, ByVal m As Double) As Double + Return L * (2 * EllipticE(m) / EllipticK(m) - 1) + End Function + + ' Calculate height based on length and an m parameter, from reference {1} equation (33), except K(k) should be K(m) and k = sqrt(m) + Private Function Cal_H(ByVal L As Double, ByVal m As Double) As Double + Return L * Math.Sqrt(m) / EllipticK(m) + End Function + + ' Calculate the unique m parameter based on a start tangent angle, from reference {2}, just above equation (9a), that states k = Sin(angle / 2 + Pi / 4), + ' but as m = k^2 and due to this script's need for an angle rotated 90° versus the one in reference {1}, the following formula is the result + ' New note: verified by reference {4}, pg. 78 at the bottom + Private Function Cal_M(ByVal a As Double) As Double + Return (1 - Math.Cos(a)) / 2 ' equal to Sin^2(a/2) too + End Function + + ' Calculate start tangent angle based on an m parameter, derived from above formula + Private Function Cal_A(ByVal m As Double) As Double + Return Math.Acos(1 - 2 * m) + End Function + + ' This is the heart of this script, taking the found (or specified) length, width, and angle values along with the found m parameter to create + ' a list of points that approximate the shape or form of the elastica. It works by finding the x and y coordinates (which are reversed versus + ' the original equations (12a) and (12b) from reference {2} due to the 90° difference in orientation) based on the tangent angle along the curve. + ' See reference {2} for more details on how they derived it. Note that to simplify things, the algorithm only calculates the points for half of the + ' curve, then mirrors those points along the y-axis. + Private Function FindBendForm(ByVal L As Double, ByVal w As Double, ByVal m As Double, ByVal ang As Double, ByVal refPln As Plane) As List(Of Point3d) + L = L / 2 ' because the below algorithm is based on the formulas in reference {2} for only half of the curve + w = w / 2 ' same + + If ang = 0 Then ' if angle (and height) = 0, then simply return the start and end points of the straight line + Dim out As New List(Of Point3d) + out.Add(refPln.PointAt(w, 0, 0)) + out.Add(refPln.PointAt(-w, 0, 0)) + Return out + End If + + Dim x As Double + Dim y As Double + Dim halfCurvePts As New List(Of Point3d) + Dim fullCurvePts As New List(Of Point3d) + Dim translatedPts As New List(Of Point3d) + + ang -= Math.PI / 2 ' a hack to allow this algorithm to work, since the original curve in paper {2} was rotated 90° + Dim angB As Double = ang + (-Math.PI / 2 - ang) / Defined.CURVEDIVS ' angB is the 'lowercase theta' which should be in formula {2}(12b) as the interval + ' start [a typo...see equation(3)]. It's necessary to start angB at ang + [interval] instead of just ang due to integration failing at angB = ang + halfCurvePts.Add(New Point3d(w, 0, 0)) ' start with this known initial point, as integration will fail when angB = ang + + ' each point {x, y} is calculated from the tangent angle, angB, that occurs at each point (which is why this iterates from ~ang to -pi/2, the known end condition) + Do While Math.Round(angB, Defined.ROUNDTO) >= Math.Round(-Math.PI / 2, Defined.ROUNDTO) + y = (Math.Sqrt(2) * Math.Sqrt(Math.Sin(ang) - Math.Sin(angB)) * (w + L)) / (2 * EllipticE(m)) ' note that x and y are swapped vs. (12a) and (12b) + x = (L / (Math.Sqrt(2) * EllipticK(m))) * Simpson(angB, -Math.PI / 2, 500, ang) ' calculate the Simpson approximation of the integral (function f below) + ' over the interval angB ('lowercase theta') to -pi/2. side note: is 500 too few iterations for the Simson algorithm? + + If Math.Round(x, Defined.ROUNDTO) = 0 Then x = 0 + halfCurvePts.Add(New Point3d(x, y, 0)) + + angB += (-Math.PI / 2 - ang) / Defined.CURVEDIVS ' onto the next tangent angle + Loop + + ' After finding the x and y values for half of the curve, add the {-x, y} values for the rest of the curve + For Each point As Point3d In halfCurvePts + If Math.Round(point.X, Defined.ROUNDTO) = 0 Then + If Math.Round(point.Y, Defined.ROUNDTO) = 0 Then + fullCurvePts.Add(New Point3d(0, 0, 0)) ' special case when width = 0: when x = 0, only duplicate the point when y = 0 too + End If + Else + fullCurvePts.Add(New Point3d(-point.X, point.Y, 0)) + End If + Next + halfCurvePts.Reverse + fullCurvePts.AddRange(halfCurvePts) + + For Each p As Point3d In fullCurvePts + translatedPts.Add(refPln.PointAt(p.X, p.Y, p.Z)) ' translate the points from the reference plane to the world plane + Next + + Return translatedPts + End Function + + ' Interpolates the points from FindBendForm to create the Elastica curve. Uses start & end tangents for greater accuracy. + Private Function MakeCurve(ByVal pts As List(Of Point3d), ByVal ang As Double, ByVal refPln As Plane) As Curve + If ang <> 0 Then + Dim ts, te As New Vector3d(refPln.XAxis) + ts.Rotate(ang, refPln.ZAxis) + te.Rotate(-ang, refPln.ZAxis) + Return Curve.CreateInterpolatedCurve(pts, 3, CurveKnotStyle.Chord, ts, te) ' 3rd degree curve with 'Chord' Knot Style + Else + Return Curve.CreateInterpolatedCurve(pts, 3) ' if angle (and height) = 0, then simply interpolate the straight line (no start/end tangents) + End If + End Function + + ' Implements the Simpson approximation for an integral of function f below + Public Function Simpson(a As Double, b As Double, n As Integer, theta As Double) As Double 'n should be an even number + Dim j As Integer, s1 As Double, s2 As Double, h As Double + h = (b - a) / n + s1 = 0 + s2 = 0 + For j = 1 To n - 1 Step 2 + s1 = s1 + fn(a + j * h, theta) + Next j + For j = 2 To n - 2 Step 2 + s2 = s2 + fn(a + j * h, theta) + Next j + Simpson = h / 3 * (fn(a, theta) + 4 * s1 + 2 * s2 + fn(b, theta)) + End Function + + ' Specific calculation for the above integration + Public Function fn(x As Double, theta As Double) As Double + fn = Math.Sin(x) / (Math.Sqrt(Math.Sin(theta) - Math.Sin(x))) ' from reference {2} formula (12b) + End Function + + + ' Return the Complete Elliptic integral of the 1st kind + ' Abramowitz and Stegun p.591, formula 17.3.11 + ' Code from http://www.codeproject.com/Articles/566614/Elliptic-integrals + Public Function EllipticK(ByVal m As Double) As Double + Dim sum, term, above, below As Double + sum = 1 + term = 1 + above = 1 + below = 2 + + For i As Integer = 1 To 100 + term *= above / below + sum += Math.Pow(m, i) * Math.Pow(term, 2) + above += 2 + below += 2 + Next + sum *= 0.5 * Math.PI + Return sum + End Function + + + ' Return the Complete Elliptic integral of the 2nd kind + ' Abramowitz and Stegun p.591, formula 17.3.12 + ' Code from http://www.codeproject.com/Articles/566614/Elliptic-integrals + Public Function EllipticE(ByVal m As Double) As Double + Dim sum, term, above, below As Double + sum = 1 + term = 1 + above = 1 + below = 2 + + For i As Integer = 1 To 100 + term *= above / below + sum -= Math.Pow(m, i) * Math.Pow(term, 2) / above + above += 2 + below += 2 + Next + sum *= 0.5 * Math.PI + Return sum + End Function + + Friend Partial NotInheritable Class Defined + Private Sub New() + End Sub + + ' Note: most of these values for m and h/L ratio were found with Wolfram Alpha and either specific intercepts (x=0) or local minima/maxima. They should be constant. + Public Const M_SKETCHY As Double = 0.95 ' value of the m parameter where the curvature near the ends of the curve gets wonky + Public Const M_MAX As Double = 0.993 ' maximum useful value of the m parameter, above which this algorithm for the form of the curve breaks down + Public Const M_ZERO_W As Double = 0.826114765984970336 ' value of the m parameter when width = 0 + Public Const M_MAXHEIGHT As Double = 0.701327460663101223 ' value of the m parameter at maximum possible height of the bent rod/wire + Public Const M_DOUBLE_W As Double = 0.180254422335013983 ' minimum value of the m parameter when two width values are possible for a given height and length + Public Const DOUBLE_W_HL_RATIO As Double = 0.257342117984635757 ' value of the height/length ratio above which there are two possible width values + Public Const MAX_HL_RATIO As Double = 0.403140189705650243 ' maximum possible value of the height/length ratio + + Public Const MAXERR As Double = 0.0000000001 ' error tolerance + Public Const MAXIT As Integer = 100 ' maximum number of iterations + Public Const ROUNDTO As Integer = 10 ' number of decimal places to round off to + Public Const CURVEDIVS As Integer = 50 ' number of sample points for building the curve (or half-curve as it were) + End Class + A VB.NET scriptable component + + 98 + 86 + + true + 84724672-afcf-4457-9ded-ef302f621c7f + VB Script + VB Script + true + 0 + ' ----------------------------------------------------------------- + ' Elastic Bending Script by Will McElwain + ' Created February 2014 + ' + ' DESCRIPTION: + ' This beast creates the so-called 'elastica curve', the shape a long, thin rod or wire makes when it is bent elastically (i.e. not permanently). In this case, force + ' is assumed to only be applied horizontally (which would be in line with the rod at rest) and both ends are assumed to be pinned or hinged meaning they are free + ' to rotate (as opposed to clamped, when the end tangent angle is fixed, usually horizontally). An interesting finding is that it doesn't matter what the material or + ' cross-sectional area is, as long as they're uniform along the entire length. Everything makes the same shape when bent as long as it doesn't cross the threshold + ' from elastic to plastic (permanent) deformation (I don't bother to find that limit here, but can be found if the yield stress for a material is known). + ' + ' Key to the formulas used in this script are elliptic integrals, specifically K(m), the complete elliptic integral of the first kind, and E(m), the complete elliptic + ' integral of the second kind. There was a lot of confusion over the 'm' and 'k' parameters for these functions, as some people use them interchangeably, but they are + ' not the same. m = k^2 (thus k = Sqrt(m)). I try to use the 'm' parameter exclusively to avoid this confusion. Note that there is a unique 'm' parameter for every + ' configuration/shape of the elastica curve. + ' + ' This script tries to find that unique 'm' parameter based on the inputs. The algorithm starts with a test version of m, evaluates an expression, say 2*E(m)/K(m)-1, + ' then compares the result to what it should be (in this case, a known width/length ratio). Iterate until the correct m is found. Once we have m, we can then calculate + ' all of the other unknowns, then find points that lie on that curve, then interpolate those points for the actual curve. You can also use Wolfram|Alpha as I did to + ' find the m parameter based on the equations in this script (example here: http://tiny.cc/t4tpbx for when say width=45.2 and length=67.1). + ' + ' Other notes: + ' * This script works with negative values for width, which will creat a self-intersecting curve (as it should). The curvature of the elastica starts to break down around + ' m=0.95 (~154°), but this script will continue to work until M_MAX, m=0.993 (~169°). If you wish to ignore self-intersecting curves, set ignoreSelfIntersecting to True + ' * When the only known values are length and height, it is actually possible for certain ratios of height to length to have two valid m values (thus 2 possible widths + ' and angles). This script will return them both. + ' * Only the first two valid parameters (of the required ones) will be used, meaning if all four are connected (length, width or a PtB, height, and angle), this script will + ' only use length and width (or a PtB). + ' * Depending on the magnitude of your inputs (say if they're really small, like if length < 10), you might have to increase the constant ROUNDTO at the bottom + ' + ' REFERENCES: + ' {1} "The elastic rod" by M.E. Pacheco Q. & E. Pina, http://www.scielo.org.mx/pdf/rmfe/v53n2/v53n2a8.pdf + ' {2} "An experiment in nonlinear beam theory" by A. Valiente, http://www.deepdyve.com/lp/doc/I3lwnxdfGz , also here: http://tiny.cc/Valiente_AEiNBT + ' {3} "Snap buckling, writhing and Loop formation In twisted rods" by V.G.A. GOSS, http://myweb.lsbu.ac.uk/~gossga/thesisFinal.pdf + ' {4} "Theory of Elastic Stability" by Stephen Timoshenko, http://www.scribd.com/doc/50402462/Timoshenko-Theory-of-Elastic-Stability (start on p. 76) + ' + ' INPUT: + ' PtA - First anchor point (required) + ' PtB - Second anchor point (optional, though 2 out of the 4--length, width, height, angle--need to be specified) + ' [note that PtB can be the same as PtA (meaning width would be zero)] + ' [also note that if a different width is additionally specified that's not equal to the distance between PtA and PtB, then the end point will not equal PtB anymore] + ' Pln - Plane of the bent rod/wire, which bends up in the +y direction. The line between PtA and PtB (if specified) must be parallel to the x-axis of this plane + ' + ' ** 2 of the following 4 need to be specified ** + ' Len - Length of the rod/wire, which needs to be > 0 + ' Wid - Width between the endpoints of the curve [note: if PtB is specified in addition, and distance between PtA and PtB <> width, the end point will be relocated + ' Ht - Height of the bent rod/wire (when negative, curve will bend downward, relative to the input plane, instead) + ' Ang - Inner departure angle or tangent angle (in radians) at the ends of the bent rod/wire. Set up so as width approaches length (thus height approaches zero), angle approaches zero + ' + ' * Following variables only needed for optional calculating of bending force, not for shape of curve. + ' E - Young's modulus (modulus of elasticity) in GPa (=N/m^2) (material-specific. for example, 7075 aluminum is roughly 71.7 GPa) + ' I - Second moment of area (or area moment of inertia) in m^4 (cross-section-specific. for example, a hollow rod + ' would have I = pi * (outer_diameter^4 - inner_diameter^4) / 32 + ' Note: E*I is also known as flexural rigidity or bending stiffness + ' + ' OUTPUT: + ' out - only for debugging messages + ' Pts - the list of points that approximate the shape of the elastica + ' Crv - the 3rd-degree curve interpolated from those points (with accurate start & end tangents) + ' L - the length of the rod/wire + ' W - the distance (width) between the endpoints of the rod/wire + ' H - the height of the bent rod/wire + ' A - the tangent angle at the (start) end of the rod/wire + ' F - the force needed to hold the rod/wire in a specific shape (based on the material properties & cross-section) **be sure your units for 'I' match your units for the + ' rest of your inputs (length, width, etc.). Also note that the critical buckling load (force) that makes the rod/wire start to bend can be found at height=0 + ' + ' THANKS TO: + ' Mårten Nettelbladt (thegeometryofbending.blogspot.com) + ' Daniel Piker (Kangaroo plugin) + ' David Rutten (Grasshopper guru) + ' Euler & Bernoulli (the O.G.'s) + ' + ' ----------------------------------------------------------------- + + Dim ignoreSelfIntersecting As Boolean = False ' set to True if you don't want to output curves where width < 0, which creates a self-intersecting curve + + Dim inCt As Integer = 0 ' count the number of required parameters that are receiving data + Dim length As Double + Dim width As System.Object = Nothing ' need to set as Nothing so we can check if it has been assigned a value later + Dim height As Double + Dim angle As Double + Dim m As Double + Dim multiple_m As New List(Of Double) + Dim AtoB As Line + Dim flip_H As Boolean = False ' if height is negative, this flag will be set + Dim flip_A As Boolean = False ' if angle is negative, this flag will be set + + If Not IsSet("Pln") Then + Msg("error", "Base plane is not set") + Return + End If + + If Not IsSet("PtA") Then + Msg("error", "Point A is not set") + Return + End If + + If Math.Round(Pln.DistanceTo(PtA), Defined.ROUNDTO) <> 0 Then + Msg("error", "Point A is not on the base plane") + Return + End If + + Dim refPlane As Plane = Pln ' create a reference plane = input plane and set the origin of it to PtA in case PtA isn't the origin already + refPlane.Origin = PtA + + If IsSet("PtB") Then + If Math.Round(Pln.DistanceTo(PtB), Defined.ROUNDTO) <> 0 Then + Msg("error", "Point B is not on the base plane") + Return + End If + + AtoB = New Line(PtA, PtB) + If AtoB.Length <> 0 And Not AtoB.Direction.IsPerpendicularTo(Pln.YAxis) Then + Msg("error", "The line between PtA and PtB is not perpendicular to the Y-axis of the specified plane") + Return + End If + + inCt += 1 + If IsSet("Wid") Then Msg("info", "Wid will override the distance between PtA and PtB. If you do not want this to happen, disconnect PtB or Wid.") + + width = PtA.DistanceTo(PtB) ' get the width (distance) between PtA and PtB + + Dim refPtB As Point3d + refPlane.RemapToPlaneSpace(PtB, refPtB) + If refPtB.X < 0 Then width = -width ' check if PtB is to the left of PtA...if so, width is negative + End If + + If IsSet("Len") Then inCt += 1 + If IsSet("Wid") Then inCt += 1 + If IsSet("Ht") Then inCt += 1 + If IsSet("Ang") Then inCt += 1 + If inCt > 2 Then Msg("info", "More parameters set than are required (out of length, width, height, angle). Only using the first two valid ones.") + + ' check for connected/specified inputs. note: only the first two that it comes across will be used + If IsSet("Len") Then ' if length is specified then... + If Len <= 0 Then + Msg("error", "Length cannot be negative or zero") + Return + End If + If IsSet("Wid") Then ' find height & angle based on length and specified width + If Wid > Len Then + Msg("error", "Width is greater than length") + Return + End If + If Wid = Len Then ' skip the solver and set the known values + height = 0 + m = 0 + angle = 0 + width = Wid + Else + m = SolveMFromLenWid(Len, Wid) + height = Cal_H(Len, m) ' L * Sqrt(m) / K(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + width = Wid + End If + + Else If width IsNot Nothing Then ' find height & angle based on length and calculated width (distance between PtA and PtB) + If width > Len Then + Msg("error", "Width is greater than length") + Return + End If + If width = Len Then ' skip the solver and set the known values + height = 0 + m = 0 + angle = 0 + Else + m = SolveMFromLenWid(Len, width) + height = Cal_H(Len, m) ' L * Sqrt(m) / K(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + + Else If IsSet("Ht") Then ' find width & angle based on length and height ** possible to return 2 results ** + If Math.Abs(Ht / Len) > Defined.MAX_HL_RATIO Then + Msg("error", "Height not possible with given length") + Return + End If + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + If Ht = 0 Then ' skip the solver and set the known values + width = Len + angle = 0 + Else + multiple_m = SolveMFromLenHt(Len, Ht) ' note that it's possible for two values of m to be found if height is close to max height + If multiple_m.Count = 1 Then ' if there's only one m value returned, calculate the width & angle here. we'll deal with multiple m values later + m = multiple_m.Item(0) + width = Cal_W(Len, m) ' L * (2 * E(m) / K(m) - 1) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + End If + height = Ht + + Else If IsSet("Ang") Then ' find width & height based on length and angle + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then ' skip the solver and set the known values + width = Len + height = 0 + Else + width = Cal_W(Len, m) ' L * (2 * E(m) / K(m) - 1) + height = Cal_H(Len, m) ' L * Sqrt(m) / K(m) + End If + angle = Ang + + Else + Msg("error", "Need to specify one more parameter in addition to length") + Return + End If + length = Len + + Else If IsSet("Wid") Then ' if width is specified then... + If IsSet("Ht") Then ' find length & angle based on specified width and height + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + If Ht = 0 Then ' skip the solver and set the known values + length = Wid + angle = 0 + Else + m = SolveMFromWidHt(Wid, Ht) + length = Cal_L(Ht, m) ' h * K(m) / Sqrt(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + height = Ht + + Else If IsSet("Ang") Then ' find length & height based on specified width and angle + If Wid = 0 Then + Msg("error", "Curve not possible with width = 0 and an angle as inputs") + Return + End If + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then ' skip the solver and set the known values + length = Wid + height = 0 + Else + length = Wid / (2 * EllipticE(m) / EllipticK(m) - 1) + If length < 0 Then + Msg("error", "Curve not possible at specified width and angle (calculated length is negative)") + Return + End If + height = Cal_H(length, m) ' L * Sqrt(m) / K(m) + End If + angle = Ang + + Else + Msg("error", "Need to specify one more parameter in addition to width (Wid)") + Return + End If + width = Wid + + Else If width IsNot Nothing Then ' if width is determined by PtA and PtB then... + If IsSet("Ht") Then ' find length & angle based on calculated width and height + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + If Ht = 0 Then ' skip the solver and set the known values + length = width + angle = 0 + Else + m = SolveMFromWidHt(width, Ht) + length = Cal_L(Ht, m) ' h * K(m) / Sqrt(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + height = Ht + + Else If IsSet("Ang") Then ' find length & height based on calculated width and angle + If width = 0 Then + Msg("error", "Curve not possible with width = 0 and an angle as inputs") + Return + End If + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then ' skip the solver and set the known values + length = width + height = 0 + Else + length = width / (2 * EllipticE(m) / EllipticK(m) - 1) + If length < 0 Then + Msg("error", "Curve not possible at specified width and angle (calculated length is negative)") + Return + End If + height = Cal_H(length, m) ' L * Sqrt(m) / K(m) + End If + angle = Ang + + Else + Msg("error", "Need to specify one more parameter in addition to PtA and PtB") + Return + End If + + Else If IsSet("Ht") Then ' if height is specified then... + If IsSet("Ang") Then ' find length & width based on height and angle + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_H = True + flip_A = True + End If + If Ht = 0 Then + Msg("error", "Height can't = 0 if only height and angle are specified") + Return + Else + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = Not flip_A + flip_H = Not flip_H + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then + Msg("error", "Angle can't = 0 if only height and angle are specified") + Return + Else + length = Cal_L(Ht, m) ' h * K(m) / Sqrt(m) + width = Cal_W(length, m) ' L * (2 * E(m) / K(m) - 1) + End If + angle = Ang + End If + height = Ht + + Else + Msg("error", "Need to specify one more parameter in addition to height") + Return + End If + + Else If IsSet("Ang") Then + Msg("error", "Need to specify one more parameter in addition to angle") + Return + Else + Msg("error", "Need to specify two of the four parameters: length, width (or PtB), height, and angle") + Return + End If + + If m > Defined.M_MAX Then + Msg("error", "Form of curve not solvable with current algorithm and given inputs") + Return + End If + + refPlane.Origin = refPlane.PointAt(width / 2, 0, 0) ' adjust the origin of the reference plane so that the curve is centered about the y-axis (start of the curve is at x = -width/2) + + If multiple_m.Count > 1 Then ' if there is more than one m value returned, calculate the width, angle, and curve for each + Dim multi_pts As New DataTree(Of Point3d) + Dim multi_crv As New List(Of Curve) + Dim tmp_pts As New List(Of Point3d) + Dim multi_W, multi_A, multi_F As New List(Of Double) + Dim j As Integer = 0 ' used for creating a new branch (GH_Path) for storing pts which is itself a list of points + + For Each m_val As Double In multiple_m + width = Cal_W(length, m_val) 'length * (2 * EllipticE(m_val) / EllipticK(m_val) - 1) + + If width < 0 And ignoreSelfIntersecting Then + Msg("warning", "One curve is self-intersecting. To enable these, set ignoreSelfIntersecting to False") + Continue For + End If + + If m_val >= Defined.M_SKETCHY Then Msg("info", "Accuracy of the curve whose width = " & Math.Round(width, 4) & " is not guaranteed") + + angle = Cal_A(m_val) 'Math.Asin(2 * m_val - 1) + refPlane.Origin = refPlane.PointAt(width / 2, 0, 0) ' adjust the origin of the reference plane so that the curve is centered about the y-axis (start of the curve is at x = -width/2) + + tmp_pts = FindBendForm(length, width, m_val, angle, refPlane) + multi_pts.AddRange(tmp_pts, New GH_Path(j)) + multi_crv.Add(MakeCurve(tmp_pts, angle, refPlane)) + + multi_W.Add(width) + If flip_A Then angle = -angle + multi_A.Add(angle) + + E = E * 10 ^ 9 ' Young's modulus input E is in GPa, so we convert to Pa here (= N/m^2) + multi_F.Add(EllipticK(m_val) ^ 2 * E * I / length ^ 2) ' from reference {4} pg. 79 + + j += 1 + refPlane.Origin = PtA ' reset the reference plane origin to PtA for the next m_val + 'Print("length=" & length & ", width=" & width & ", height=" & height & ", angle=" & angle & ", m=" & m_val & ", k=" & Math.Sqrt(m_val) & ", w/L=" & width / length & ", h/L=" & height / length & ", w/h=" & width / height) + Next + + ' assign the outputs + Pts = multi_pts + Crv = multi_crv + L = length + W = multi_W + If flip_H Then height = -height + H = height + A = multi_A + F = multi_F + + Else ' only deal with the single m value + If m >= Defined.M_SKETCHY Then Msg("info", "Accuracy of the curve at these parameters is not guaranteed") + + If width < 0 And ignoreSelfIntersecting Then + Msg("error", "Curve is self-intersecting. To enable these, set ignoreSelfIntersecting to False") + Return + End If + + Pts = FindBendForm(length, width, m, angle, refPlane) + Crv = MakeCurve(pts, angle, refPlane) + L = length + W = width + If flip_H Then height = -height + H = height + If flip_A Then angle = -angle + A = angle + + E = E * 10 ^ 9 ' Young's modulus input E is in GPa, so we convert to Pa here (= N/m^2) + F = EllipticK(m) ^ 2 * E * I / length ^ 2 ' from reference {4} pg. 79. Note: the critical buckling (that makes the rod/wire start to bend) can be found at height=0 (width=length) + + 'height = Math.Sqrt(((2 * Len / 5) ^ 2 - ((Wid - Len / 5) / 2) ^ 2) ' quick approximation discovered by Mårten of 'Geometry of Bending' fame ( http://tiny.cc/it2pbx ) + 'width = (Len +/- 2 * Math.Sqrt(4 * Len ^ 2 - 25 * Ht ^ 2)) / 5 ' derived from above + 'length = (2 * Math.Sqrt(15 * Ht ^ 2 + 4 * Wid ^ 2) - Wid) / 3 ' derived from above + + 'Print("length=" & length & ", width=" & width & ", height=" & height & ", angle=" & angle & ", m=" & m & ", k=" & Math.Sqrt(m) & ", w/L=" & width / length & ", h/L=" & height / length & ", w/h=" & width / height) + End If + + + + + + + 2239 + 2912 + 84 + 184 + + + 2281 + 3004 + + + + + + 9 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 8 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script Variable PtA + c384ac3f-df4d-453d-a7c5-387e93a60b13 + PtA + PtA + true + 0 + true + 0 + e1937b56-b1da-4c12-8bd8-e34ee81746ef + + + + + + 2241 + 2914 + 25 + 20 + + + 2255 + 2924 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + Grasshopper.Kernel.Types.GH_Point + + + + + + + + + + + true + Script Variable PtB + 8bddec7a-5cee-4c2d-a042-aa892fd83b36 + PtB + PtB + true + 0 + true + 0 + e1937b56-b1da-4c12-8bd8-e34ee81746ef + + + + + + 2241 + 2934 + 25 + 20 + + + 2255 + 2944 + + + + + + + + true + Script Variable Pln + b3259d85-c916-4d9a-99bf-7e895fca6eec + Pln + Pln + true + 0 + true + 0 + 3897522d-58e9-4d60-b38c-978ddacfedd8 + + + + + + 2241 + 2954 + 25 + 20 + + + 2255 + 2964 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Plane + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + true + Script Variable Len + fb43f351-f380-4f29-8e4f-9fb2010411db + Len + Len + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2241 + 2974 + 25 + 20 + + + 2255 + 2984 + + + + + + + + true + Script Variable Wid + 93dbd769-ff0d-4cae-938b-75d6be10d33d + Wid + Wid + true + 0 + true + 5efa96ce-0a9b-4178-9dd5-b7e889d7e5f9 + 1 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2241 + 2994 + 25 + 20 + + + 2255 + 3004 + + + + + + + + true + Script Variable Ht + 9ce1f865-89f1-4a5b-a1c9-65f77f658109 + Ht + Ht + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2241 + 3014 + 25 + 20 + + + 2255 + 3024 + + + + + + + + true + Script Variable Ang + 717409d3-a5de-4c70-987d-4ebacb963883 + Ang + Ang + true + 0 + true + f67b69a9-68b4-4391-9b0b-36f79b377ace + 1 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2241 + 3034 + 25 + 20 + + + 2255 + 3044 + + + + + + + + true + Script Variable E + e7404a32-6dcf-4dac-96ec-df9fcf003e19 + E + E + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2241 + 3054 + 25 + 20 + + + 2255 + 3064 + + + + + + + + true + Script Variable I + 3b61faa3-6a4f-4d43-96da-0fe1d52fda2b + I + I + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2241 + 3074 + 25 + 20 + + + 2255 + 3084 + + + + + + + + 1 + Print, Reflect and Error streams + 7de3b2dc-fe4e-43e1-a0a8-4bc81691250c + out + out + false + 0 + + + + + + 2296 + 2914 + 25 + 22 + + + 2308.5 + 2925.25 + + + + + + + + Output parameter Pts + e309227c-8c84-4572-b1a0-62b15cb940a1 + Pts + Pts + false + 0 + + + + + + 2296 + 2936 + 25 + 23 + + + 2308.5 + 2947.75 + + + + + + + + Output parameter Crv + 5a25ab62-6c28-4610-a63f-6f176662a312 + Crv + Crv + false + 0 + + + + + + 2296 + 2959 + 25 + 22 + + + 2308.5 + 2970.25 + + + + + + + + Output parameter L + 9b38a7ff-5647-4812-906b-0380c8c21268 + L + L + false + 0 + + + + + + 2296 + 2981 + 25 + 23 + + + 2308.5 + 2992.75 + + + + + + + + Output parameter W + 280df3eb-0705-4e69-a3c9-6590c1a91136 + W + W + false + 0 + + + + + + 2296 + 3004 + 25 + 22 + + + 2308.5 + 3015.25 + + + + + + + + Output parameter H + 42e4bfc9-2a39-48b3-8134-0710963c7972 + H + H + false + 0 + + + + + + 2296 + 3026 + 25 + 23 + + + 2308.5 + 3037.75 + + + + + + + + Output parameter A + dea0908a-7936-4573-864b-36836a562088 + A + A + false + 0 + + + + + + 2296 + 3049 + 25 + 22 + + + 2308.5 + 3060.25 + + + + + + + + Output parameter F + 720572bc-2bf4-4e70-ae3b-809c1be16c82 + F + F + false + 0 + + + + + + 2296 + 3071 + 25 + 23 + + + 2308.5 + 3082.75 + + + + + + + + + + + + + + 9c85271f-89fa-4e9f-9f4a-d75802120ccc + Division + + + + + Mathematical division + 97ab47f4-b3a2-4564-9661-8a5c3ac8c83b + Division + Division + + + + + + 2093 + 3067 + 85 + 44 + + + 2124 + 3089 + + + + + + Item to divide (dividend) + 2db69d8c-38ac-4c96-b360-bef99ba41020 + A + A + false + 5efa96ce-0a9b-4178-9dd5-b7e889d7e5f9 + 1 + + + + + + 2095 + 3069 + 14 + 20 + + + 2103.5 + 3079 + + + + + + + + Item to divide with (divisor) + f262caa8-23c8-4c87-a3e1-aab77ecc8452 + B + B + false + 0 + + + + + + 2095 + 3089 + 14 + 20 + + + 2103.5 + 3099 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Integer + 4 + + + + + + + + + + + The result of the Division + 3d453240-0714-43b0-9db3-0e05947c2bae + Result + Result + false + 0 + + + + + + 2139 + 3069 + 37 + 40 + + + 2157.5 + 3089 + + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 5efa96ce-0a9b-4178-9dd5-b7e889d7e5f9 + Panel + + false + 0 + 0 + sqrt(2)/2 + + + + + + 1972 + 3010 + 74 + 40 + + 0 + 0 + 0 + + 1972.334 + 3010.739 + + + + + + + 255;255;250;90 + + true + true + true + false + false + true + + + + + + + + + d5967b9f-e8ee-436b-a8ad-29fdcecf32d5 + Curve + + + + + Contains a collection of generic curves + true + 01ec555e-389e-4f79-97f1-1e34a435f926 + Curve + Curve + false + 5a25ab62-6c28-4610-a63f-6f176662a312 + 1 + + + + + + 2360 + 2993 + 50 + 24 + + + 2385.325 + 3005.589 + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + true + 4e129894-4acb-4e3e-9863-9f02f2b80c22 + End Points + End Points + + + + + + 2474 + 3599 + 99 + 44 + + + 2524 + 3621 + + + + + + Curve to evaluate + 77310ce5-68e0-49e6-92ca-50d1c7d0596c + Curve + Curve + false + d72b105e-c560-49a3-88af-d38a5fcc6218 + 1 + + + + + + 2476 + 3601 + 33 + 40 + + + 2494 + 3621 + + + + + + + + Curve start point + 0cbeac5f-bb06-499c-a5bd-0cad96bfe260 + Start + Start + false + 0 + + + + + + 2539 + 3601 + 32 + 20 + + + 2555 + 3611 + + + + + + + + Curve end point + 8c7568cf-d561-4af4-aaac-9c6d9d1f0a49 + End + End + false + 0 + + + + + + 2539 + 3621 + 32 + 20 + + + 2555 + 3631 + + + + + + + + + + + + be907708-07eb-456c-9f92-40f2ce6d3745 + 1c9de8a1-315f-4c56-af06-8f69fee80a7a + Points Trim Curve + + + + + Trim a curve with a set of points (or optionally a set of parameters) like a dash pattern, if points are not on the curve they will be pulled to it. + true + 26431423-61ab-49d1-8368-fced14900c9d + Points Trim Curve + Points Trim Curve + + + + + + 2606 + 3455 + 164 + 84 + + + 2681 + 3497 + + + + + + Curve to trim + 42d2d5d3-68cf-4430-ba72-2438a6b322aa + Curve + Curve + false + d72b105e-c560-49a3-88af-d38a5fcc6218 + 1 + + + + + + 2608 + 3457 + 58 + 20 + + + 2638.5 + 3467 + + + + + + + + 1 + Points to trim with + 372630ea-71a0-4f68-94d7-38efc8854536 + Points + Points + true + 72ecb537-67d8-4cef-8f39-2f72e8125b26 + d5b47c77-5cd0-4170-867f-ca163e32c1cb + 2 + + + + + + 2608 + 3477 + 58 + 20 + + + 2638.5 + 3487 + + + + + + + + 1 + Optional parameters to trim with instead of points (will override points if points are also input) + ee0f3b05-838e-4adc-9697-16d1a1834bfb + Parameters + Parameters + true + 0 + + + + + + 2608 + 3497 + 58 + 20 + + + 2638.5 + 3507 + + + + + + + + Flip the trimming pattern to switch which parts of the curve get trimmed away + 3b29b120-33b8-4411-8ccc-751d5827bd91 + Flip + Flip + false + 0 + + + + + + 2608 + 3517 + 58 + 20 + + + 2638.5 + 3527 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Resulting trimmed curves + 906326de-dd53-486c-ba85-24d817bedbfc + Trimmed + Trimmed + false + 0 + + + + + + 2696 + 3457 + 72 + 26 + + + 2732 + 3470.333 + + + + + + + + 1 + Curve sub-domain for each remaining part of the curve after trimming + fcd822f6-4443-4c23-82e0-23438c49863d + Sub-Domains + Sub-Domains + false + 0 + + + + + + 2696 + 3483 + 72 + 27 + + + 2732 + 3497 + + + + + + + + True if the points trimmed the curve, False if the points did not trim the curve + 75f86ecb-5aac-483f-b6a8-54641851bde3 + Intersected + Intersected + false + 0 + + + + + + 2696 + 3510 + 72 + 27 + + + 2732 + 3523.667 + + + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + true + 72ecb537-67d8-4cef-8f39-2f72e8125b26 + Point + Point + false + 0cbeac5f-bb06-499c-a5bd-0cad96bfe260 + 1 + + + + + + 2547 + 3566 + 50 + 24 + + + 2572.885 + 3578.891 + + + + + + + + + + ccc7b468-e743-4049-891f-299432545898 + Curve Middle + + + + + Get the point in the middle of a curve + 70518cdb-7ee0-4314-8da7-706740513e8f + Curve Middle + Curve Middle + + + + + + 2627 + 3344 + 116 + 28 + + + 2677 + 3358 + + + + + + Curve for mid-point. + e232d78f-395c-4808-b966-1c0174b7afea + Curve + Curve + false + d72b105e-c560-49a3-88af-d38a5fcc6218 + 1 + + + + + + 2629 + 3346 + 33 + 24 + + + 2647 + 3358 + + + + + + + + Point in the middle of the curve + d5b47c77-5cd0-4170-867f-ca163e32c1cb + Midpoint + Midpoint + false + 0 + + + + + + 2692 + 3346 + 49 + 24 + + + 2716.5 + 3358 + + + + + + + + + + + + 310f9597-267e-4471-a7d7-048725557528 + 08bdcae0-d034-48dd-a145-24a9fcf3d3ff + GraphMapper+ + + + + + External Graph mapper +You can Right click on the Heteromapper's icon and choose "AutoDomain" mode to define Output domain based on input domain interval; otherwise it'll be set to 0-1 in "Normalized" mode. + 20c6552b-b3bb-4a89-94ca-13c4e2e43db9 + GraphMapper+ + GraphMapper+ + + + + + false + + + + + + 1801 + 2724 + 129 + 104 + + + 1868 + 2776 + + + + + + External curve as a graph + 6c693ab3-3b94-405b-adbc-1512efb9d9a9 + Curve + Curve + false + 888980c4-0dec-45f4-8006-fa5b932a754f + 1 + + + + + + 1803 + 2726 + 50 + 20 + + + 1829.5 + 2736 + + + + + + + + Optional Rectangle boundary. If omitted the curve's would be landed + 9b3712d5-0c29-4704-b116-357d73c66bd9 + Boundary + Boundary + true + d222d866-05d2-41e8-9567-8cca0e0544d2 + 1 + + + + + + 1803 + 2746 + 50 + 20 + + + 1829.5 + 2756 + + + + + + + + 1 + List of input numbers + 0e38d596-b622-4667-b4b9-ae05975994a4 + Numbers + Numbers + false + bd4aaa1e-5c93-4d92-a13b-51513caaff31 + 1 + + + + + + 1803 + 2766 + 50 + 20 + + + 1829.5 + 2776 + + + + + + 1 + + + + + 9 + {0} + + + + + 0.1 + + + + + 0.2 + + + + + 0.3 + + + + + 0.4 + + + + + 0.5 + + + + + 0.6 + + + + + 0.7 + + + + + 0.8 + + + + + 0.9 + + + + + + + + + + + (Optional) Input Domain +if omitted, it would be 0-1 in "Normalize" mode by default + or be the interval of the input list in case of selecting "AutoDomain" mode + 5bcbd057-e761-453c-8d9b-0c136cd52c8a + Input + Input + true + 0 + + + + + + 1803 + 2786 + 50 + 20 + + + 1829.5 + 2796 + + + + + + + + (Optional) Output Domain + if omitted, it would be 0-1 in "Normalize" mode by default + or be the interval of the input list in case of selecting "AutoDomain" mode + cb3c83b1-ea5d-4556-a2cd-947db2b85070 + Output + Output + true + 0 + + + + + + 1803 + 2806 + 50 + 20 + + + 1829.5 + 2816 + + + + + + + + 1 + Output Numbers + aa99eb53-f847-4761-874c-b2b7a794afd6 + Number + Number + false + 0 + + + + + + 1883 + 2726 + 45 + 100 + + + 1905.5 + 2776 + + + + + + + + + + + + 575660b1-8c79-4b8d-9222-7ab4a6ddb359 + Rectangle 2Pt + + + + + Create a rectangle from a base plane and two points + true + 854346d9-987e-4342-8d62-d29ccc1a4cd3 + Rectangle 2Pt + Rectangle 2Pt + + + + + + 1934 + 2464 + 129 + 84 + + + 1992 + 2506 + + + + + + Rectangle base plane + c5fedded-f2bb-44cc-a6db-545b7f0215de + Plane + RANGE + false + 0 + + + + + + 1936 + 2466 + 41 + 20 + + + 1958 + 2476 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + First corner point. + 2c06c2ff-6848-4d61-8acd-ae78937cb293 + Point A + Point A + false + 52cef00d-db8e-4b87-8695-4352608b0e17 + 1 + + + + + + 1936 + 2486 + 41 + 20 + + + 1958 + 2496 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Second corner point. + 114f8d8e-db76-4e96-86ba-7a143c7ced74 + Point B + Point B + false + 011b00fc-5add-41a0-9757-9d38ebdc9d11 + 1 + + + + + + 1936 + 2506 + 41 + 20 + + + 1958 + 2516 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 1 + 1 + 0 + + + + + + + + + + + + Rectangle corner fillet radius + a236b107-43f0-4732-ab0f-101a758127ea + Radius + Radius + false + 0 + + + + + + 1936 + 2526 + 41 + 20 + + + 1958 + 2536 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Rectangle defined by P, A and B + d222d866-05d2-41e8-9567-8cca0e0544d2 + Rectangle + Rectangle + false + 0 + + + + + + 2007 + 2466 + 54 + 40 + + + 2034 + 2486 + + + + + + + + Length of rectangle curve + 830470ec-1feb-48e8-bbd9-ef386ee8c7cc + Length + Length + false + 0 + + + + + + 2007 + 2506 + 54 + 40 + + + 2034 + 2526 + + + + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + bd4aaa1e-5c93-4d92-a13b-51513caaff31 + Relay + Relay + false + 8d0d12bd-da23-49cc-b34c-50a33768057a + 1 + + + + + + 2819 + 2867 + 44 + 16 + + + 2841 + 2875 + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + true + f678f333-3b39-4b6c-bd80-2b85058c90ac + Move + Move + + + + + + 2868 + 2923 + 141 + 44 + + + 2936 + 2945 + + + + + + Base geometry + 7cab920d-d74d-4e0c-8312-2eeecf42c38b + Geometry + Geometry + true + 3a20ff06-eeb1-4b64-926b-3dfaf9128bc9 + 1 + + + + + + 2870 + 2925 + 51 + 20 + + + 2897 + 2935 + + + + + + + + Translation vector + cff43877-ee64-4b45-9621-9ab78fdbe784 + Motion + Motion + false + 0c707852-20e8-4815-9445-3fe270b3ab5b + 1 + + + + + + 2870 + 2945 + 51 + 20 + + + 2897 + 2955 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 9d691b43-c570-4280-97d7-5f1b84e62bac + Geometry + Geometry + false + 0 + + + + + + 2951 + 2925 + 56 + 20 + + + 2979 + 2935 + + + + + + + + Transformation data + 626436ef-0482-4ada-97e5-693d8281ed11 + Transform + Transform + false + 0 + + + + + + 2951 + 2945 + 56 + 20 + + + 2979 + 2955 + + + + + + + + + + + + 4c4e56eb-2f04-43f9-95a3-cc46a14f495a + Line + + + + + Create a line between two points. + true + 55fdd8e2-6ed0-4f24-88d8-94d449dfe815 + Line + Line + + + + + + 2841 + 3566 + 117 + 44 + + + 2913 + 3588 + + + + + + Line start point + d8c018ef-493f-49db-b7f3-21301fec544e + Start Point + Start Point + false + 72ecb537-67d8-4cef-8f39-2f72e8125b26 + 1 + + + + + + 2843 + 3568 + 55 + 20 + + + 2872 + 3578 + + + + + + + + Line end point + 4e3b1748-0d5a-4b92-92f1-4c2c570cf1f8 + End Point + End Point + false + d5b47c77-5cd0-4170-867f-ca163e32c1cb + 1 + + + + + + 2843 + 3588 + 55 + 20 + + + 2872 + 3598 + + + + + + + + Line segment + d059be0c-4090-490e-a401-02c4c42d0e64 + Line + Line + false + 0 + + + + + + 2928 + 3568 + 28 + 40 + + + 2942 + 3588 + + + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + true + 7c8554dc-77a9-4f2d-a00d-ed5180e8d21c + Point + Point + false + e309227c-8c84-4572-b1a0-62b15cb940a1 + 1 + + + + + + 2362 + 2943 + 50 + 24 + + + 2387.679 + 2955.742 + + + + + + + + + + b7798b74-037e-4f0c-8ac7-dc1043d093e0 + Rotate + + + + + Rotate an object in a plane. + true + af4e5930-41a9-427c-86d8-99365f78aab9 + Rotate + Rotate + + + + + + 2427 + 2992 + 141 + 64 + + + 2495 + 3024 + + + + + + Base geometry + 6b566a37-e83d-473d-8cc1-0c08a064cb4f + Geometry + Geometry + true + 01ec555e-389e-4f79-97f1-1e34a435f926 + 1 + + + + + + 2429 + 2994 + 51 + 20 + + + 2456 + 3004 + + + + + + + + Rotation angle in radians + aca27465-1f43-49df-a779-65df3110b2a4 + Angle + Angle + false + 0 + false + + + + + + 2429 + 3014 + 51 + 20 + + + 2456 + 3024 + + + + + + 1 + + + + + 1 + {0} + + + + + 0.78539816339744828 + + + + + + + + + + + Rotation plane + d170ea32-fc51-46dc-980c-1763b657e23c + Plane + Plane + false + 0 + + + + + + 2429 + 3034 + 51 + 20 + + + 2456 + 3044 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Rotated geometry + c8cb0202-0ba9-413f-8c18-78a41199eff6 + Geometry + Geometry + false + 0 + + + + + + 2510 + 2994 + 56 + 30 + + + 2538 + 3009 + + + + + + + + Transformation data + b98b2b1f-87b9-4da5-84dd-6c473ae1e526 + Transform + Transform + false + 0 + + + + + + 2510 + 3024 + 56 + 30 + + + 2538 + 3039 + + + + + + + + + + + + 7376fe41-74ec-497e-b367-1ffe5072608b + Curvature Graph + + + + + Draws Rhino Curvature Graphs. + c87abc29-194c-4036-933b-8f0747cc8976 + Curvature Graph + Curvature Graph + + + + + + 5599 + 3393 + 71 + 64 + + + 5656 + 3425 + + + + + + Curve for Curvature graph display + true + 0c1236a3-1968-48db-af7c-61e00644cfb4 + Curve + Curve + false + b75a0e49-7509-488b-94f8-b51b4bf11f2d + 1 + + + + + + 5601 + 3395 + 40 + 20 + + + 5622.5 + 3405 + + + + + + + + Sampling density of the Graph + 7a05d6a0-86c7-4550-b98f-3202010f750f + Density + Density + false + 0 + + + + + + 5601 + 3415 + 40 + 20 + + + 5622.5 + 3425 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Scale of graph + f45fa326-9ffd-4918-8076-081b2acdb1c3 + Scale + Scale + false + 2a0c1556-bd05-4482-b651-4fd3859576a2 + 1 + + + + + + 5601 + 3435 + 40 + 20 + + + 5622.5 + 3445 + + + + + + 1 + + + + + 1 + {0} + + + + + 105 + + + + + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + 2a0c1556-bd05-4482-b651-4fd3859576a2 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 11 + + 95.0 + + + + + + 5536 + 3542 + 250 + 20 + + + 5536.763 + 3542.561 + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + true + 93f1758c-16b2-47e0-9871-afe9a3c07192 + End Points + End Points + + + + + + 2635 + 3153 + 99 + 44 + + + 2685 + 3175 + + + + + + Curve to evaluate + a3e0b1a1-c0ff-40d8-a23a-6735946903a9 + Curve + Curve + false + 3a20ff06-eeb1-4b64-926b-3dfaf9128bc9 + 1 + + + + + + 2637 + 3155 + 33 + 40 + + + 2655 + 3175 + + + + + + + + Curve start point + daf1895d-8166-4bdc-ad22-e212ef083484 + Start + Start + false + 0 + + + + + + 2700 + 3155 + 32 + 20 + + + 2716 + 3165 + + + + + + + + Curve end point + ce5fe135-fef0-44f7-964b-dee0af11743b + End + End + false + 0 + + + + + + 2700 + 3175 + 32 + 20 + + + 2716 + 3185 + + + + + + + + + + + + 4c4e56eb-2f04-43f9-95a3-cc46a14f495a + Line + + + + + Create a line between two points. + true + a724e5f9-d3b4-4904-85ed-571c608ddc9d + Line + Line + + + + + + 2751 + 3093 + 117 + 44 + + + 2823 + 3115 + + + + + + Line start point + f355542c-c932-44af-9d08-b6201a513b4b + Start Point + Start Point + false + daf1895d-8166-4bdc-ad22-e212ef083484 + 1 + + + + + + 2753 + 3095 + 55 + 20 + + + 2782 + 3105 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Line end point + 3993a4f5-894d-4aa8-89eb-80548d0ad96d + End Point + End Point + false + ce5fe135-fef0-44f7-964b-dee0af11743b + 1 + + + + + + 2753 + 3115 + 55 + 20 + + + 2782 + 3125 + + + + + + + + Line segment + 0c707852-20e8-4815-9445-3fe270b3ab5b + Line + Line + false + 0 + + + + + + 2838 + 3095 + 28 + 40 + + + 2852 + 3115 + + + + + + + + + + + + a4cd2751-414d-42ec-8916-476ebf62d7fe + Radians + + + + + Convert an angle specified in degrees to radians + b254acc1-4dfa-4c4f-aad0-ccd1396b9649 + Radians + Radians + + + + + + 2083 + 3120 + 123 + 28 + + + 2144 + 3134 + + + + + + Angle in degrees + 973f26ed-5dd3-4096-a3de-7544409d532c + Degrees + Degrees + false + 6b57512c-182b-4345-bcd0-089ea0276076 + 1 + + + + + + 2085 + 3122 + 44 + 24 + + + 2108.5 + 3134 + + + + + + + + Angle in radians + f67b69a9-68b4-4391-9b0b-36f79b377ace + Radians + Radians + false + 0 + + + + + + 2159 + 3122 + 45 + 24 + + + 2181.5 + 3134 + + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + 6b57512c-182b-4345-bcd0-089ea0276076 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 2 + + 45.0000000000 + + + + + + 1895 + 3161 + 250 + 20 + + + 1895.314 + 3161.471 + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + true + c414aca5-bb51-4900-b198-4c86419d65d4 + Join Curves + Join Curves + + + + + + 3157 + 3065 + 137 + 44 + + + 3236 + 3087 + + + + + + 1 + Curves to join + 32373b89-9c7c-40b0-9ab5-c5e5f5ea0b4b + 1 + Curves + Curves + false + 9d691b43-c570-4280-97d7-5f1b84e62bac + 95808d86-d6c9-4382-9226-e80f2969b037 + 2 + + + + + + 3159 + 3067 + 62 + 20 + + + 3199.5 + 3077 + + + + + + + + Preserve direction of input curves + 9b2a9ea2-b4aa-427a-8e09-f5d92e00fc54 + Preserve + Preserve + false + 0 + + + + + + 3159 + 3087 + 62 + 20 + + + 3199.5 + 3097 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + 758b07e1-eba4-4854-bc42-821bfaf9cf50 + Curves + Curves + false + 0 + + + + + + 3251 + 3067 + 41 + 40 + + + 3271.5 + 3087 + + + + + + + + + + + + 079bd9bd-54a0-41d4-98af-db999015f63d + VB Script + + + + + Private Function IsSet(ByVal param As String) As Boolean ' Check if an input parameter has data + Dim i As Integer = Component.Params.IndexOfInputParam(param) + If i > -1 Then + Return Component.Params.Input.ElementAt(i).DataType > 1 ' input parameter DataType of 1 means it's not receiving input (internal or external) + Else + Msg("error", "Input parameter '" & param & "' not found") + Return False + End If + End Function + + Private Sub Msg(ByVal type As String, ByVal msg As String) ' Output an error, warning, or informational message + Select Case type + Case "error" + Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, msg) + Print("Error: " & msg) + Case "warning" + Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, msg) + Print("Warning: " & msg) + Case "info" + Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, msg) + Print(msg) + End Select + End Sub + + ' Solve for the m parameter from length and width (reference {1} equation (34), except b = width and K(k) and E(k) should be K(m) and E(m)) + Private Function SolveMFromLenWid(ByVal L As Double, ByVal w As Double) As Double + If w = 0 Then + Return Defined.M_ZERO_W ' for the boundry condition width = 0, bypass the function and return the known m value + End If + + Dim n As Integer = 1 ' Iteration counter (quit if >MAXIT) + Dim lower As Double = 0 ' m must be within this range + Dim upper As Double = 1 + Dim m As Double + Dim cwl As Double + + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + cwl = 2 * EllipticE(m) / EllipticK(m) - 1 ' calculate w/L with the test value of m + If cwl < w / L Then ' compares the calculated w/L with the actual w/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + Return m + End Function + + ' Solve for the m parameter from length and height (reference {1} equation (33), except K(k) should be K(m) and k = sqrt(m)) + ' Note that it's actually possible to find 2 valid values for m (hence 2 width values) at certain height values + Private Function SolveMFromLenHt(ByVal L As Double, ByVal h As Double) As List(Of Double) + Dim n As Integer = 1 ' Iteration counter (quit if >MAXIT) + Dim lower As Double = 0 ' m must be within this range + Dim upper As Double = 1 + Dim twoWidths As Boolean = h / L >= Defined.DOUBLE_W_HL_RATIO And h / L < Defined.MAX_HL_RATIO ' check to see if h/L is within the range where 2 solutions for the width are possible + Dim m As Double + Dim mult_m As New List(Of Double) + Dim chl As Double + + If twoWidths Then + ' find the first of two possible solutions for m with the following limits: + lower = Defined.M_DOUBLE_W ' see constants at bottom of script + upper = Defined.M_MAXHEIGHT ' see constants at bottom of script + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + chl = Math.Sqrt(m) / EllipticK(m) ' calculate h/L with the test value of m + If chl > h / L Then ' compares the calculated h/L with the actual h/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + mult_m.Add(m) + + ' then find the second of two possible solutions for m with the following limits: + lower = Defined.M_MAXHEIGHT ' see constants at bottom of script + upper = 1 + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + chl = Math.Sqrt(m) / EllipticK(m) ' calculate h/L with the test value of m + If chl < h / L Then ' compares the calculated h/L with the actual h/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + + If m <= Defined.M_MAX Then ' return this m parameter only if it falls within the maximum useful value (above which the curve breaks down) + mult_m.Add(m) + End If + + Else + ' find the one possible solution for the m parameter + upper = Defined.M_DOUBLE_W ' limit the upper end of the search to the maximum value of m for which only one solution exists + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + chl = Math.Sqrt(m) / EllipticK(m) ' calculate h/L with the test value of m + If chl > h / L Then ' compares the calculated h/L with the actual h/L then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + mult_m.Add(m) + End If + + Return mult_m + End Function + + ' Solve for the m parameter from width and height (derived from reference {1} equations (33) and (34) with same notes as above) + Private Function SolveMFromWidHt(ByVal w As Double, ByVal h As Double) As Double + Dim n As Integer = 1 ' Iteration counter (quit if >MAXIT) + Dim lower As Double = 0 ' m must be within this range + Dim upper As Double = 1 + Dim m As Double + Dim cwh As Double + + Do While (upper - lower) > Defined.MAXERR AndAlso (n) < Defined.MAXIT ' Repeat until range narrow enough or MAXIT + m = (upper + lower) / 2 + cwh = (2 * EllipticE(m) - EllipticK(m)) / Math.Sqrt(m) ' calculate w/h with the test value of m + If cwh < w / h Then ' compares the calculated w/h with the actual w/h then narrows the range of possible m + upper = m + Else + lower = m + End If + n += 1 + Loop + + Return m + End Function + + ' Calculate length based on height and an m parameter, derived from reference {1} equation (33), except K(k) should be K(m) and k = sqrt(m) + Private Function Cal_L(ByVal h As Double, ByVal m As Double) As Double + Return h * EllipticK(m) / Math.Sqrt(m) + End Function + + ' Calculate width based on length and an m parameter, derived from reference {1} equation (34), except b = width and K(k) and E(k) should be K(m) and E(m) + Private Function Cal_W(ByVal L As Double, ByVal m As Double) As Double + Return L * (2 * EllipticE(m) / EllipticK(m) - 1) + End Function + + ' Calculate height based on length and an m parameter, from reference {1} equation (33), except K(k) should be K(m) and k = sqrt(m) + Private Function Cal_H(ByVal L As Double, ByVal m As Double) As Double + Return L * Math.Sqrt(m) / EllipticK(m) + End Function + + ' Calculate the unique m parameter based on a start tangent angle, from reference {2}, just above equation (9a), that states k = Sin(angle / 2 + Pi / 4), + ' but as m = k^2 and due to this script's need for an angle rotated 90° versus the one in reference {1}, the following formula is the result + ' New note: verified by reference {4}, pg. 78 at the bottom + Private Function Cal_M(ByVal a As Double) As Double + Return (1 - Math.Cos(a)) / 2 ' equal to Sin^2(a/2) too + End Function + + ' Calculate start tangent angle based on an m parameter, derived from above formula + Private Function Cal_A(ByVal m As Double) As Double + Return Math.Acos(1 - 2 * m) + End Function + + ' This is the heart of this script, taking the found (or specified) length, width, and angle values along with the found m parameter to create + ' a list of points that approximate the shape or form of the elastica. It works by finding the x and y coordinates (which are reversed versus + ' the original equations (12a) and (12b) from reference {2} due to the 90° difference in orientation) based on the tangent angle along the curve. + ' See reference {2} for more details on how they derived it. Note that to simplify things, the algorithm only calculates the points for half of the + ' curve, then mirrors those points along the y-axis. + Private Function FindBendForm(ByVal L As Double, ByVal w As Double, ByVal m As Double, ByVal ang As Double, ByVal refPln As Plane) As List(Of Point3d) + L = L / 2 ' because the below algorithm is based on the formulas in reference {2} for only half of the curve + w = w / 2 ' same + + If ang = 0 Then ' if angle (and height) = 0, then simply return the start and end points of the straight line + Dim out As New List(Of Point3d) + out.Add(refPln.PointAt(w, 0, 0)) + out.Add(refPln.PointAt(-w, 0, 0)) + Return out + End If + + Dim x As Double + Dim y As Double + Dim halfCurvePts As New List(Of Point3d) + Dim fullCurvePts As New List(Of Point3d) + Dim translatedPts As New List(Of Point3d) + + ang -= Math.PI / 2 ' a hack to allow this algorithm to work, since the original curve in paper {2} was rotated 90° + Dim angB As Double = ang + (-Math.PI / 2 - ang) / Defined.CURVEDIVS ' angB is the 'lowercase theta' which should be in formula {2}(12b) as the interval + ' start [a typo...see equation(3)]. It's necessary to start angB at ang + [interval] instead of just ang due to integration failing at angB = ang + halfCurvePts.Add(New Point3d(w, 0, 0)) ' start with this known initial point, as integration will fail when angB = ang + + ' each point {x, y} is calculated from the tangent angle, angB, that occurs at each point (which is why this iterates from ~ang to -pi/2, the known end condition) + Do While Math.Round(angB, Defined.ROUNDTO) >= Math.Round(-Math.PI / 2, Defined.ROUNDTO) + y = (Math.Sqrt(2) * Math.Sqrt(Math.Sin(ang) - Math.Sin(angB)) * (w + L)) / (2 * EllipticE(m)) ' note that x and y are swapped vs. (12a) and (12b) + x = (L / (Math.Sqrt(2) * EllipticK(m))) * Simpson(angB, -Math.PI / 2, 500, ang) ' calculate the Simpson approximation of the integral (function f below) + ' over the interval angB ('lowercase theta') to -pi/2. side note: is 500 too few iterations for the Simson algorithm? + + If Math.Round(x, Defined.ROUNDTO) = 0 Then x = 0 + halfCurvePts.Add(New Point3d(x, y, 0)) + + angB += (-Math.PI / 2 - ang) / Defined.CURVEDIVS ' onto the next tangent angle + Loop + + ' After finding the x and y values for half of the curve, add the {-x, y} values for the rest of the curve + For Each point As Point3d In halfCurvePts + If Math.Round(point.X, Defined.ROUNDTO) = 0 Then + If Math.Round(point.Y, Defined.ROUNDTO) = 0 Then + fullCurvePts.Add(New Point3d(0, 0, 0)) ' special case when width = 0: when x = 0, only duplicate the point when y = 0 too + End If + Else + fullCurvePts.Add(New Point3d(-point.X, point.Y, 0)) + End If + Next + halfCurvePts.Reverse + fullCurvePts.AddRange(halfCurvePts) + + For Each p As Point3d In fullCurvePts + translatedPts.Add(refPln.PointAt(p.X, p.Y, p.Z)) ' translate the points from the reference plane to the world plane + Next + + Return translatedPts + End Function + + ' Interpolates the points from FindBendForm to create the Elastica curve. Uses start & end tangents for greater accuracy. + Private Function MakeCurve(ByVal pts As List(Of Point3d), ByVal ang As Double, ByVal refPln As Plane) As Curve + If ang <> 0 Then + Dim ts, te As New Vector3d(refPln.XAxis) + ts.Rotate(ang, refPln.ZAxis) + te.Rotate(-ang, refPln.ZAxis) + Return Curve.CreateInterpolatedCurve(pts, 3, CurveKnotStyle.Chord, ts, te) ' 3rd degree curve with 'Chord' Knot Style + Else + Return Curve.CreateInterpolatedCurve(pts, 3) ' if angle (and height) = 0, then simply interpolate the straight line (no start/end tangents) + End If + End Function + + ' Implements the Simpson approximation for an integral of function f below + Public Function Simpson(a As Double, b As Double, n As Integer, theta As Double) As Double 'n should be an even number + Dim j As Integer, s1 As Double, s2 As Double, h As Double + h = (b - a) / n + s1 = 0 + s2 = 0 + For j = 1 To n - 1 Step 2 + s1 = s1 + fn(a + j * h, theta) + Next j + For j = 2 To n - 2 Step 2 + s2 = s2 + fn(a + j * h, theta) + Next j + Simpson = h / 3 * (fn(a, theta) + 4 * s1 + 2 * s2 + fn(b, theta)) + End Function + + ' Specific calculation for the above integration + Public Function fn(x As Double, theta As Double) As Double + fn = Math.Sin(x) / (Math.Sqrt(Math.Sin(theta) - Math.Sin(x))) ' from reference {2} formula (12b) + End Function + + + ' Return the Complete Elliptic integral of the 1st kind + ' Abramowitz and Stegun p.591, formula 17.3.11 + ' Code from http://www.codeproject.com/Articles/566614/Elliptic-integrals + Public Function EllipticK(ByVal m As Double) As Double + Dim sum, term, above, below As Double + sum = 1 + term = 1 + above = 1 + below = 2 + + For i As Integer = 1 To 100 + term *= above / below + sum += Math.Pow(m, i) * Math.Pow(term, 2) + above += 2 + below += 2 + Next + sum *= 0.5 * Math.PI + Return sum + End Function + + + ' Return the Complete Elliptic integral of the 2nd kind + ' Abramowitz and Stegun p.591, formula 17.3.12 + ' Code from http://www.codeproject.com/Articles/566614/Elliptic-integrals + Public Function EllipticE(ByVal m As Double) As Double + Dim sum, term, above, below As Double + sum = 1 + term = 1 + above = 1 + below = 2 + + For i As Integer = 1 To 100 + term *= above / below + sum -= Math.Pow(m, i) * Math.Pow(term, 2) / above + above += 2 + below += 2 + Next + sum *= 0.5 * Math.PI + Return sum + End Function + + Friend Partial NotInheritable Class Defined + Private Sub New() + End Sub + + ' Note: most of these values for m and h/L ratio were found with Wolfram Alpha and either specific intercepts (x=0) or local minima/maxima. They should be constant. + Public Const M_SKETCHY As Double = 0.95 ' value of the m parameter where the curvature near the ends of the curve gets wonky + Public Const M_MAX As Double = 0.993 ' maximum useful value of the m parameter, above which this algorithm for the form of the curve breaks down + Public Const M_ZERO_W As Double = 0.826114765984970336 ' value of the m parameter when width = 0 + Public Const M_MAXHEIGHT As Double = 0.701327460663101223 ' value of the m parameter at maximum possible height of the bent rod/wire + Public Const M_DOUBLE_W As Double = 0.180254422335013983 ' minimum value of the m parameter when two width values are possible for a given height and length + Public Const DOUBLE_W_HL_RATIO As Double = 0.257342117984635757 ' value of the height/length ratio above which there are two possible width values + Public Const MAX_HL_RATIO As Double = 0.403140189705650243 ' maximum possible value of the height/length ratio + + Public Const MAXERR As Double = 0.0000000001 ' error tolerance + Public Const MAXIT As Integer = 100 ' maximum number of iterations + Public Const ROUNDTO As Integer = 10 ' number of decimal places to round off to + Public Const CURVEDIVS As Integer = 50 ' number of sample points for building the curve (or half-curve as it were) + End Class + A VB.NET scriptable component + + 98 + 86 + + true + 0ee0d29e-783d-4fcb-832e-e2bc26ea1e1d + VB Script + VB Script + true + 0 + ' ----------------------------------------------------------------- + ' Elastic Bending Script by Will McElwain + ' Created February 2014 + ' + ' DESCRIPTION: + ' This beast creates the so-called 'elastica curve', the shape a long, thin rod or wire makes when it is bent elastically (i.e. not permanently). In this case, force + ' is assumed to only be applied horizontally (which would be in line with the rod at rest) and both ends are assumed to be pinned or hinged meaning they are free + ' to rotate (as opposed to clamped, when the end tangent angle is fixed, usually horizontally). An interesting finding is that it doesn't matter what the material or + ' cross-sectional area is, as long as they're uniform along the entire length. Everything makes the same shape when bent as long as it doesn't cross the threshold + ' from elastic to plastic (permanent) deformation (I don't bother to find that limit here, but can be found if the yield stress for a material is known). + ' + ' Key to the formulas used in this script are elliptic integrals, specifically K(m), the complete elliptic integral of the first kind, and E(m), the complete elliptic + ' integral of the second kind. There was a lot of confusion over the 'm' and 'k' parameters for these functions, as some people use them interchangeably, but they are + ' not the same. m = k^2 (thus k = Sqrt(m)). I try to use the 'm' parameter exclusively to avoid this confusion. Note that there is a unique 'm' parameter for every + ' configuration/shape of the elastica curve. + ' + ' This script tries to find that unique 'm' parameter based on the inputs. The algorithm starts with a test version of m, evaluates an expression, say 2*E(m)/K(m)-1, + ' then compares the result to what it should be (in this case, a known width/length ratio). Iterate until the correct m is found. Once we have m, we can then calculate + ' all of the other unknowns, then find points that lie on that curve, then interpolate those points for the actual curve. You can also use Wolfram|Alpha as I did to + ' find the m parameter based on the equations in this script (example here: http://tiny.cc/t4tpbx for when say width=45.2 and length=67.1). + ' + ' Other notes: + ' * This script works with negative values for width, which will creat a self-intersecting curve (as it should). The curvature of the elastica starts to break down around + ' m=0.95 (~154°), but this script will continue to work until M_MAX, m=0.993 (~169°). If you wish to ignore self-intersecting curves, set ignoreSelfIntersecting to True + ' * When the only known values are length and height, it is actually possible for certain ratios of height to length to have two valid m values (thus 2 possible widths + ' and angles). This script will return them both. + ' * Only the first two valid parameters (of the required ones) will be used, meaning if all four are connected (length, width or a PtB, height, and angle), this script will + ' only use length and width (or a PtB). + ' * Depending on the magnitude of your inputs (say if they're really small, like if length < 10), you might have to increase the constant ROUNDTO at the bottom + ' + ' REFERENCES: + ' {1} "The elastic rod" by M.E. Pacheco Q. & E. Pina, http://www.scielo.org.mx/pdf/rmfe/v53n2/v53n2a8.pdf + ' {2} "An experiment in nonlinear beam theory" by A. Valiente, http://www.deepdyve.com/lp/doc/I3lwnxdfGz , also here: http://tiny.cc/Valiente_AEiNBT + ' {3} "Snap buckling, writhing and Loop formation In twisted rods" by V.G.A. GOSS, http://myweb.lsbu.ac.uk/~gossga/thesisFinal.pdf + ' {4} "Theory of Elastic Stability" by Stephen Timoshenko, http://www.scribd.com/doc/50402462/Timoshenko-Theory-of-Elastic-Stability (start on p. 76) + ' + ' INPUT: + ' PtA - First anchor point (required) + ' PtB - Second anchor point (optional, though 2 out of the 4--length, width, height, angle--need to be specified) + ' [note that PtB can be the same as PtA (meaning width would be zero)] + ' [also note that if a different width is additionally specified that's not equal to the distance between PtA and PtB, then the end point will not equal PtB anymore] + ' Pln - Plane of the bent rod/wire, which bends up in the +y direction. The line between PtA and PtB (if specified) must be parallel to the x-axis of this plane + ' + ' ** 2 of the following 4 need to be specified ** + ' Len - Length of the rod/wire, which needs to be > 0 + ' Wid - Width between the endpoints of the curve [note: if PtB is specified in addition, and distance between PtA and PtB <> width, the end point will be relocated + ' Ht - Height of the bent rod/wire (when negative, curve will bend downward, relative to the input plane, instead) + ' Ang - Inner departure angle or tangent angle (in radians) at the ends of the bent rod/wire. Set up so as width approaches length (thus height approaches zero), angle approaches zero + ' + ' * Following variables only needed for optional calculating of bending force, not for shape of curve. + ' E - Young's modulus (modulus of elasticity) in GPa (=N/m^2) (material-specific. for example, 7075 aluminum is roughly 71.7 GPa) + ' I - Second moment of area (or area moment of inertia) in m^4 (cross-section-specific. for example, a hollow rod + ' would have I = pi * (outer_diameter^4 - inner_diameter^4) / 32 + ' Note: E*I is also known as flexural rigidity or bending stiffness + ' + ' OUTPUT: + ' out - only for debugging messages + ' Pts - the list of points that approximate the shape of the elastica + ' Crv - the 3rd-degree curve interpolated from those points (with accurate start & end tangents) + ' L - the length of the rod/wire + ' W - the distance (width) between the endpoints of the rod/wire + ' H - the height of the bent rod/wire + ' A - the tangent angle at the (start) end of the rod/wire + ' F - the force needed to hold the rod/wire in a specific shape (based on the material properties & cross-section) **be sure your units for 'I' match your units for the + ' rest of your inputs (length, width, etc.). Also note that the critical buckling load (force) that makes the rod/wire start to bend can be found at height=0 + ' + ' THANKS TO: + ' Mårten Nettelbladt (thegeometryofbending.blogspot.com) + ' Daniel Piker (Kangaroo plugin) + ' David Rutten (Grasshopper guru) + ' Euler & Bernoulli (the O.G.'s) + ' + ' ----------------------------------------------------------------- + + Dim ignoreSelfIntersecting As Boolean = False ' set to True if you don't want to output curves where width < 0, which creates a self-intersecting curve + + Dim inCt As Integer = 0 ' count the number of required parameters that are receiving data + Dim length As Double + Dim width As System.Object = Nothing ' need to set as Nothing so we can check if it has been assigned a value later + Dim height As Double + Dim angle As Double + Dim m As Double + Dim multiple_m As New List(Of Double) + Dim AtoB As Line + Dim flip_H As Boolean = False ' if height is negative, this flag will be set + Dim flip_A As Boolean = False ' if angle is negative, this flag will be set + + If Not IsSet("Pln") Then + Msg("error", "Base plane is not set") + Return + End If + + If Not IsSet("PtA") Then + Msg("error", "Point A is not set") + Return + End If + + If Math.Round(Pln.DistanceTo(PtA), Defined.ROUNDTO) <> 0 Then + Msg("error", "Point A is not on the base plane") + Return + End If + + Dim refPlane As Plane = Pln ' create a reference plane = input plane and set the origin of it to PtA in case PtA isn't the origin already + refPlane.Origin = PtA + + If IsSet("PtB") Then + If Math.Round(Pln.DistanceTo(PtB), Defined.ROUNDTO) <> 0 Then + Msg("error", "Point B is not on the base plane") + Return + End If + + AtoB = New Line(PtA, PtB) + If AtoB.Length <> 0 And Not AtoB.Direction.IsPerpendicularTo(Pln.YAxis) Then + Msg("error", "The line between PtA and PtB is not perpendicular to the Y-axis of the specified plane") + Return + End If + + inCt += 1 + If IsSet("Wid") Then Msg("info", "Wid will override the distance between PtA and PtB. If you do not want this to happen, disconnect PtB or Wid.") + + width = PtA.DistanceTo(PtB) ' get the width (distance) between PtA and PtB + + Dim refPtB As Point3d + refPlane.RemapToPlaneSpace(PtB, refPtB) + If refPtB.X < 0 Then width = -width ' check if PtB is to the left of PtA...if so, width is negative + End If + + If IsSet("Len") Then inCt += 1 + If IsSet("Wid") Then inCt += 1 + If IsSet("Ht") Then inCt += 1 + If IsSet("Ang") Then inCt += 1 + If inCt > 2 Then Msg("info", "More parameters set than are required (out of length, width, height, angle). Only using the first two valid ones.") + + ' check for connected/specified inputs. note: only the first two that it comes across will be used + If IsSet("Len") Then ' if length is specified then... + If Len <= 0 Then + Msg("error", "Length cannot be negative or zero") + Return + End If + If IsSet("Wid") Then ' find height & angle based on length and specified width + If Wid > Len Then + Msg("error", "Width is greater than length") + Return + End If + If Wid = Len Then ' skip the solver and set the known values + height = 0 + m = 0 + angle = 0 + width = Wid + Else + m = SolveMFromLenWid(Len, Wid) + height = Cal_H(Len, m) ' L * Sqrt(m) / K(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + width = Wid + End If + + Else If width IsNot Nothing Then ' find height & angle based on length and calculated width (distance between PtA and PtB) + If width > Len Then + Msg("error", "Width is greater than length") + Return + End If + If width = Len Then ' skip the solver and set the known values + height = 0 + m = 0 + angle = 0 + Else + m = SolveMFromLenWid(Len, width) + height = Cal_H(Len, m) ' L * Sqrt(m) / K(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + + Else If IsSet("Ht") Then ' find width & angle based on length and height ** possible to return 2 results ** + If Math.Abs(Ht / Len) > Defined.MAX_HL_RATIO Then + Msg("error", "Height not possible with given length") + Return + End If + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + If Ht = 0 Then ' skip the solver and set the known values + width = Len + angle = 0 + Else + multiple_m = SolveMFromLenHt(Len, Ht) ' note that it's possible for two values of m to be found if height is close to max height + If multiple_m.Count = 1 Then ' if there's only one m value returned, calculate the width & angle here. we'll deal with multiple m values later + m = multiple_m.Item(0) + width = Cal_W(Len, m) ' L * (2 * E(m) / K(m) - 1) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + End If + height = Ht + + Else If IsSet("Ang") Then ' find width & height based on length and angle + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then ' skip the solver and set the known values + width = Len + height = 0 + Else + width = Cal_W(Len, m) ' L * (2 * E(m) / K(m) - 1) + height = Cal_H(Len, m) ' L * Sqrt(m) / K(m) + End If + angle = Ang + + Else + Msg("error", "Need to specify one more parameter in addition to length") + Return + End If + length = Len + + Else If IsSet("Wid") Then ' if width is specified then... + If IsSet("Ht") Then ' find length & angle based on specified width and height + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + If Ht = 0 Then ' skip the solver and set the known values + length = Wid + angle = 0 + Else + m = SolveMFromWidHt(Wid, Ht) + length = Cal_L(Ht, m) ' h * K(m) / Sqrt(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + height = Ht + + Else If IsSet("Ang") Then ' find length & height based on specified width and angle + If Wid = 0 Then + Msg("error", "Curve not possible with width = 0 and an angle as inputs") + Return + End If + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then ' skip the solver and set the known values + length = Wid + height = 0 + Else + length = Wid / (2 * EllipticE(m) / EllipticK(m) - 1) + If length < 0 Then + Msg("error", "Curve not possible at specified width and angle (calculated length is negative)") + Return + End If + height = Cal_H(length, m) ' L * Sqrt(m) / K(m) + End If + angle = Ang + + Else + Msg("error", "Need to specify one more parameter in addition to width (Wid)") + Return + End If + width = Wid + + Else If width IsNot Nothing Then ' if width is determined by PtA and PtB then... + If IsSet("Ht") Then ' find length & angle based on calculated width and height + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + If Ht = 0 Then ' skip the solver and set the known values + length = width + angle = 0 + Else + m = SolveMFromWidHt(width, Ht) + length = Cal_L(Ht, m) ' h * K(m) / Sqrt(m) + angle = Cal_A(m) ' Acos(1 - 2 * m) + End If + height = Ht + + Else If IsSet("Ang") Then ' find length & height based on calculated width and angle + If width = 0 Then + Msg("error", "Curve not possible with width = 0 and an angle as inputs") + Return + End If + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = True + flip_H = True + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then ' skip the solver and set the known values + length = width + height = 0 + Else + length = width / (2 * EllipticE(m) / EllipticK(m) - 1) + If length < 0 Then + Msg("error", "Curve not possible at specified width and angle (calculated length is negative)") + Return + End If + height = Cal_H(length, m) ' L * Sqrt(m) / K(m) + End If + angle = Ang + + Else + Msg("error", "Need to specify one more parameter in addition to PtA and PtB") + Return + End If + + Else If IsSet("Ht") Then ' if height is specified then... + If IsSet("Ang") Then ' find length & width based on height and angle + If Ht < 0 Then + Ht = -Ht ' if height is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_H = True + flip_A = True + End If + If Ht = 0 Then + Msg("error", "Height can't = 0 if only height and angle are specified") + Return + Else + If Ang < 0 Then + Ang = -Ang ' if angle is negative, set it to positive (for the calculations) but flip the reference plane about its x-axis + refPlane.Transform(Transform.Mirror(New Plane(refPlane.Origin, refPlane.XAxis, refPlane.ZAxis))) + flip_A = Not flip_A + flip_H = Not flip_H + End If + m = Cal_M(Ang) ' (1 - Cos(a)) / 2 + If Ang = 0 Then + Msg("error", "Angle can't = 0 if only height and angle are specified") + Return + Else + length = Cal_L(Ht, m) ' h * K(m) / Sqrt(m) + width = Cal_W(length, m) ' L * (2 * E(m) / K(m) - 1) + End If + angle = Ang + End If + height = Ht + + Else + Msg("error", "Need to specify one more parameter in addition to height") + Return + End If + + Else If IsSet("Ang") Then + Msg("error", "Need to specify one more parameter in addition to angle") + Return + Else + Msg("error", "Need to specify two of the four parameters: length, width (or PtB), height, and angle") + Return + End If + + If m > Defined.M_MAX Then + Msg("error", "Form of curve not solvable with current algorithm and given inputs") + Return + End If + + refPlane.Origin = refPlane.PointAt(width / 2, 0, 0) ' adjust the origin of the reference plane so that the curve is centered about the y-axis (start of the curve is at x = -width/2) + + If multiple_m.Count > 1 Then ' if there is more than one m value returned, calculate the width, angle, and curve for each + Dim multi_pts As New DataTree(Of Point3d) + Dim multi_crv As New List(Of Curve) + Dim tmp_pts As New List(Of Point3d) + Dim multi_W, multi_A, multi_F As New List(Of Double) + Dim j As Integer = 0 ' used for creating a new branch (GH_Path) for storing pts which is itself a list of points + + For Each m_val As Double In multiple_m + width = Cal_W(length, m_val) 'length * (2 * EllipticE(m_val) / EllipticK(m_val) - 1) + + If width < 0 And ignoreSelfIntersecting Then + Msg("warning", "One curve is self-intersecting. To enable these, set ignoreSelfIntersecting to False") + Continue For + End If + + If m_val >= Defined.M_SKETCHY Then Msg("info", "Accuracy of the curve whose width = " & Math.Round(width, 4) & " is not guaranteed") + + angle = Cal_A(m_val) 'Math.Asin(2 * m_val - 1) + refPlane.Origin = refPlane.PointAt(width / 2, 0, 0) ' adjust the origin of the reference plane so that the curve is centered about the y-axis (start of the curve is at x = -width/2) + + tmp_pts = FindBendForm(length, width, m_val, angle, refPlane) + multi_pts.AddRange(tmp_pts, New GH_Path(j)) + multi_crv.Add(MakeCurve(tmp_pts, angle, refPlane)) + + multi_W.Add(width) + If flip_A Then angle = -angle + multi_A.Add(angle) + + E = E * 10 ^ 9 ' Young's modulus input E is in GPa, so we convert to Pa here (= N/m^2) + multi_F.Add(EllipticK(m_val) ^ 2 * E * I / length ^ 2) ' from reference {4} pg. 79 + + j += 1 + refPlane.Origin = PtA ' reset the reference plane origin to PtA for the next m_val + 'Print("length=" & length & ", width=" & width & ", height=" & height & ", angle=" & angle & ", m=" & m_val & ", k=" & Math.Sqrt(m_val) & ", w/L=" & width / length & ", h/L=" & height / length & ", w/h=" & width / height) + Next + + ' assign the outputs + Pts = multi_pts + Crv = multi_crv + L = length + W = multi_W + If flip_H Then height = -height + H = height + A = multi_A + F = multi_F + + Else ' only deal with the single m value + If m >= Defined.M_SKETCHY Then Msg("info", "Accuracy of the curve at these parameters is not guaranteed") + + If width < 0 And ignoreSelfIntersecting Then + Msg("error", "Curve is self-intersecting. To enable these, set ignoreSelfIntersecting to False") + Return + End If + + Pts = FindBendForm(length, width, m, angle, refPlane) + Crv = MakeCurve(pts, angle, refPlane) + L = length + W = width + If flip_H Then height = -height + H = height + If flip_A Then angle = -angle + A = angle + + E = E * 10 ^ 9 ' Young's modulus input E is in GPa, so we convert to Pa here (= N/m^2) + F = EllipticK(m) ^ 2 * E * I / length ^ 2 ' from reference {4} pg. 79. Note: the critical buckling (that makes the rod/wire start to bend) can be found at height=0 (width=length) + + 'height = Math.Sqrt(((2 * Len / 5) ^ 2 - ((Wid - Len / 5) / 2) ^ 2) ' quick approximation discovered by Mårten of 'Geometry of Bending' fame ( http://tiny.cc/it2pbx ) + 'width = (Len +/- 2 * Math.Sqrt(4 * Len ^ 2 - 25 * Ht ^ 2)) / 5 ' derived from above + 'length = (2 * Math.Sqrt(15 * Ht ^ 2 + 4 * Wid ^ 2) - Wid) / 3 ' derived from above + + 'Print("length=" & length & ", width=" & width & ", height=" & height & ", angle=" & angle & ", m=" & m & ", k=" & Math.Sqrt(m) & ", w/L=" & width / length & ", h/L=" & height / length & ", w/h=" & width / height) + End If + + + + + + + 2318 + 3341 + 84 + 184 + + + 2360 + 3433 + + + + + + 9 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 8 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script Variable PtA + e0b340a6-33e3-4438-bc60-5fea5b18f4fa + PtA + PtA + true + 0 + true + 0 + e1937b56-b1da-4c12-8bd8-e34ee81746ef + + + + + + 2320 + 3343 + 25 + 20 + + + 2334 + 3353 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + Grasshopper.Kernel.Types.GH_Point + + + + + + + + + + + true + Script Variable PtB + a74e4c29-c138-4cd0-b6ec-cd627a642509 + PtB + PtB + true + 0 + true + 0 + e1937b56-b1da-4c12-8bd8-e34ee81746ef + + + + + + 2320 + 3363 + 25 + 20 + + + 2334 + 3373 + + + + + + + + true + Script Variable Pln + f4a02e94-d4ad-4590-84da-4f3345f5db67 + Pln + Pln + true + 0 + true + 0 + 3897522d-58e9-4d60-b38c-978ddacfedd8 + + + + + + 2320 + 3383 + 25 + 20 + + + 2334 + 3393 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Plane + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + true + Script Variable Len + e8ad0a50-2a34-4c5c-abc5-fbeb62b12cf3 + Len + Len + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2320 + 3403 + 25 + 20 + + + 2334 + 3413 + + + + + + + + true + Script Variable Wid + 3d51ade1-9c1d-448d-ae91-7266d9eeadc1 + Wid + Wid + true + 0 + true + 0c529f4b-39cf-4343-8565-04e4988cf6c0 + 1 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2320 + 3423 + 25 + 20 + + + 2334 + 3433 + + + + + + + + true + Script Variable Ht + 42b3091b-80e1-471c-a7f5-f1248e8297a0 + Ht + Ht + true + 0 + true + e0ec9007-74c8-4451-9373-9d9815942542 + 1 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2320 + 3443 + 25 + 20 + + + 2334 + 3453 + + + + + + + + true + Script Variable Ang + 8c2cb104-2fdb-463a-9d03-caa3dc8e6828 + Ang + Ang + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2320 + 3463 + 25 + 20 + + + 2334 + 3473 + + + + + + + + true + Script Variable E + f1b789aa-353e-4333-a570-95733cae4b39 + E + E + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2320 + 3483 + 25 + 20 + + + 2334 + 3493 + + + + + + + + true + Script Variable I + c95788d2-4a1a-44bf-a2f3-e275b3a140ea + I + I + true + 0 + true + 0 + 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7 + + + + + + 2320 + 3503 + 25 + 20 + + + 2334 + 3513 + + + + + + + + 1 + Print, Reflect and Error streams + fa2597fb-ad52-4ad7-9f68-56f0ba98f216 + out + out + false + 0 + + + + + + 2375 + 3343 + 25 + 22 + + + 2387.5 + 3354.25 + + + + + + + + Output parameter Pts + 4fecf712-f978-4ff9-b599-c7123ce298cb + Pts + Pts + false + 0 + + + + + + 2375 + 3365 + 25 + 23 + + + 2387.5 + 3376.75 + + + + + + + + Output parameter Crv + 85964c8e-57ef-45e8-8254-561b34e4791d + Crv + Crv + false + 0 + + + + + + 2375 + 3388 + 25 + 22 + + + 2387.5 + 3399.25 + + + + + + + + Output parameter L + ac6ba150-f790-44ec-a438-7c12be8544ee + L + L + false + 0 + + + + + + 2375 + 3410 + 25 + 23 + + + 2387.5 + 3421.75 + + + + + + + + Output parameter W + 685d261b-2e57-4de3-88c1-b53a7e4828c6 + W + W + false + 0 + + + + + + 2375 + 3433 + 25 + 22 + + + 2387.5 + 3444.25 + + + + + + + + Output parameter H + 99095cd4-3684-4b3e-bea7-c8ffb6520772 + H + H + false + 0 + + + + + + 2375 + 3455 + 25 + 23 + + + 2387.5 + 3466.75 + + + + + + + + Output parameter A + b9e6ad28-add8-420b-948a-b9279ad8639a + A + A + false + 0 + + + + + + 2375 + 3478 + 25 + 22 + + + 2387.5 + 3489.25 + + + + + + + + Output parameter F + e30242aa-438c-437f-ad33-e353fcbc48a9 + F + F + false + 0 + + + + + + 2375 + 3500 + 25 + 23 + + + 2387.5 + 3511.75 + + + + + + + + + + + + + + 9c85271f-89fa-4e9f-9f4a-d75802120ccc + Division + + + + + Mathematical division + ba901ef1-d5bb-488c-bed2-4d5efcaf066a + Division + Division + + + + + + 2134 + 3523 + 85 + 44 + + + 2165 + 3545 + + + + + + Item to divide (dividend) + 9ccc7383-23f3-43af-8052-b389131cec7e + A + A + false + 0c529f4b-39cf-4343-8565-04e4988cf6c0 + 1 + + + + + + 2136 + 3525 + 14 + 20 + + + 2144.5 + 3535 + + + + + + + + Item to divide with (divisor) + 8ea54c3d-a3c0-4996-af5a-57b158fd7368 + B + B + false + 0 + + + + + + 2136 + 3545 + 14 + 20 + + + 2144.5 + 3555 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Integer + 2 + + + + + + + + + + + The result of the Division + e0ec9007-74c8-4451-9373-9d9815942542 + Result + Result + false + 0 + + + + + + 2180 + 3525 + 37 + 40 + + + 2198.5 + 3545 + + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 0c529f4b-39cf-4343-8565-04e4988cf6c0 + Panel + + false + 0 + 0 + 1 + + + + + + 2073 + 3401 + 50 + 40 + + 0 + 0 + 0 + + 2073.659 + 3401.652 + + + + + + + 255;255;250;90 + + true + true + true + false + false + true + + + + + + + + + d5967b9f-e8ee-436b-a8ad-29fdcecf32d5 + Curve + + + + + Contains a collection of generic curves + true + d72b105e-c560-49a3-88af-d38a5fcc6218 + Curve + Curve + false + 85964c8e-57ef-45e8-8254-561b34e4791d + 1 + + + + + + 2502 + 3422 + 50 + 24 + + + 2527.107 + 3434.742 + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + true + 8b426ac6-24de-4f08-ad84-83617eecb720 + Point + Point + false + 4fecf712-f978-4ff9-b599-c7123ce298cb + 1 + + + + + + 2473 + 3357 + 50 + 24 + + + 2498.377 + 3369.371 + + + + + + + + + + 5edaea74-32cb-4586-bd72-66694eb73160 + Rotate Direction + + + + + Rotate an object from one direction to another. + true + 3ca9109e-5711-4668-aa7a-76e025e71ad5 + Rotate Direction + Rotate Direction + + + + + + 2930 + 3025 + 141 + 84 + + + 2998 + 3067 + + + + + + Base geometry + be1d3f68-1fcc-4419-ad85-22d9d3e8eab6 + Geometry + Geometry + true + 9d691b43-c570-4280-97d7-5f1b84e62bac + 1 + + + + + + 2932 + 3027 + 51 + 20 + + + 2959 + 3037 + + + + + + + + Rotation center point + f7caea19-11f5-4dff-8813-34938da071bf + Center + Center + false + ce5fe135-fef0-44f7-964b-dee0af11743b + 1 + + + + + + 2932 + 3047 + 51 + 20 + + + 2959 + 3057 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Initial direction + f3b75996-879a-4307-9a74-e978eb3499ab + From + From + false + 0 + + + + + + 2932 + 3067 + 51 + 20 + + + 2959 + 3077 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1.4375 + 0 + + + + + + + + + + + + Final direction + bffb57d0-a6bd-4b3e-b070-7949b4a2658a + To + To + false + 0 + + + + + + 2932 + 3087 + 51 + 20 + + + 2959 + 3097 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + -0.4375 + 0 + + + + + + + + + + + + Rotated geometry + 95808d86-d6c9-4382-9226-e80f2969b037 + Geometry + Geometry + false + 0 + + + + + + 3013 + 3027 + 56 + 40 + + + 3041 + 3047 + + + + + + + + Transformation data + bd8e3bd1-96c0-4cbc-ae55-68541dba89cc + Transform + Transform + false + 0 + + + + + + 3013 + 3067 + 56 + 40 + + + 3041 + 3087 + + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + true + 38b73c41-dd47-42c4-a343-1585add88094 + Move + Move + + + + + + 2822 + 3483 + 141 + 44 + + + 2890 + 3505 + + + + + + Base geometry + a46e87ba-876d-44df-a6e1-178ead5de52b + Geometry + Geometry + true + 906326de-dd53-486c-ba85-24d817bedbfc + 1 + + + + + + 2824 + 3485 + 51 + 20 + + + 2851 + 3495 + + + + + + + + Translation vector + abf6c321-9050-420b-9965-5c0891ceb67c + Motion + Motion + false + d059be0c-4090-490e-a401-02c4c42d0e64 + 1 + + + + + + 2824 + 3505 + 51 + 20 + + + 2851 + 3515 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 1f0edef8-f630-4c9b-ab05-943f35e216fe + Geometry + Geometry + false + 0 + + + + + + 2905 + 3485 + 56 + 20 + + + 2933 + 3495 + + + + + + + + Transformation data + bcc76fc5-9c2f-42ea-bf2f-2e92cfc7afe7 + Transform + Transform + false + 0 + + + + + + 2905 + 3505 + 56 + 20 + + + 2933 + 3515 + + + + + + + + + + + + 5edaea74-32cb-4586-bd72-66694eb73160 + Rotate Direction + + + + + Rotate an object from one direction to another. + true + 2b145999-86bb-4d5d-aaeb-6c6eb29e750d + Rotate Direction + Rotate Direction + + + + + + 3184 + 3569 + 141 + 84 + + + 3252 + 3611 + + + + + + Base geometry + 05db87bc-84af-4828-a400-01d83ec6db33 + Geometry + Geometry + true + 1f0edef8-f630-4c9b-ab05-943f35e216fe + 1 + + + + + + 3186 + 3571 + 51 + 20 + + + 3213 + 3581 + + + + + + + + Rotation center point + 4a4c5c55-44b5-4148-9eea-d29da354727c + Center + Center + false + d5b47c77-5cd0-4170-867f-ca163e32c1cb + 1 + + + + + + 3186 + 3591 + 51 + 20 + + + 3213 + 3601 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Initial direction + 3d9b489c-abf3-455a-9b02-adf96edcc74f + From + From + false + 0 + + + + + + 3186 + 3611 + 51 + 20 + + + 3213 + 3621 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1.4375 + 0 + + + + + + + + + + + + Final direction + 281fdcb4-bbe8-4310-833a-697f11915b5b + To + To + false + 0 + + + + + + 3186 + 3631 + 51 + 20 + + + 3213 + 3641 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + -0.4375 + 0 + + + + + + + + + + + + Rotated geometry + 9a89200f-f4c2-4c65-a052-afed86b461c2 + Geometry + Geometry + false + 0 + + + + + + 3267 + 3571 + 56 + 40 + + + 3295 + 3591 + + + + + + + + Transformation data + c86117cb-c85d-4d07-843a-ccb69a4bf337 + Transform + Transform + false + 0 + + + + + + 3267 + 3611 + 56 + 40 + + + 3295 + 3631 + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + 078c6506-4f72-4372-8f91-5deb76a93fe4 + Join Curves + Join Curves + + + + + + 3288 + 3372 + 121 + 44 + + + 3351 + 3394 + + + + + + 1 + Curves to join + 79539ab7-4342-4290-89a8-1f3fbba43c0c + Curves + Curves + false + 1f0edef8-f630-4c9b-ab05-943f35e216fe + 9a89200f-f4c2-4c65-a052-afed86b461c2 + 2 + + + + + + 3290 + 3374 + 46 + 20 + + + 3314.5 + 3384 + + + + + + + + Preserve direction of input curves + d3760e74-bd51-457f-9c51-ff5cdb2bec85 + Preserve + Preserve + false + 0 + + + + + + 3290 + 3394 + 46 + 20 + + + 3314.5 + 3404 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + e7274196-c69b-461c-966a-aaa3b6bc4020 + Curves + Curves + false + 0 + + + + + + 3366 + 3374 + 41 + 40 + + + 3386.5 + 3394 + + + + + + + + + + + + 3581f42a-9592-4549-bd6b-1c0fc39d067b + Construct Point + + + + + Construct a point from {xyz} coordinates. + true + b8db0342-47bb-44ee-8a08-130ef408e66f + Construct Point + Construct Point + + + + + + 1688 + 2529 + 132 + 64 + + + 1770 + 2561 + + + + + + {x} coordinate + 01cd14f3-2c1e-4279-935e-f0b00af0c9f8 + X coordinate + X coordinate + false + 0ab31ee5-a662-42db-a9f0-ca0831013edc + 1 + + + + + + 1690 + 2531 + 65 + 20 + + + 1724 + 2541 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {y} coordinate + 63868fb4-9bf2-4e3f-963b-29443ca99af1 + Y coordinate + Y coordinate + false + 0ab31ee5-a662-42db-a9f0-ca0831013edc + 1 + + + + + + 1690 + 2551 + 65 + 20 + + + 1724 + 2561 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {z} coordinate + d4325105-b09e-4ce7-b978-59a6855e5c0d + Z coordinate + Z coordinate + false + 0 + + + + + + 1690 + 2571 + 65 + 20 + + + 1724 + 2581 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Point coordinate + 011b00fc-5add-41a0-9757-9d38ebdc9d11 + Point + Point + false + 0 + + + + + + 1785 + 2531 + 33 + 60 + + + 1801.5 + 2561 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 6ecfa3d1-7e96-49b0-9f64-5a35c882f968 + Number Slider + Number Slider + false + 0 + + + + + + 1338 + 2511 + 198 + 20 + + + 1338.134 + 2511.813 + + + + + + 6 + 1 + 0 + 2 + 0 + 0 + 1.256412 + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + true + 5840f73e-243d-4142-b769-dd8891e36334 + Stream Filter + LENGTH HALF/FUL + + + + + + 3690 + 3051 + 131 + 84 + + + 3774 + 3093 + + + + + + 4 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + ffd627e0-e54e-4e0c-bcc5-60b32e18cea3 + Gate + CURVE TYPE + false + 0f588dae-4330-4978-89d6-31e140c1ef33 + 1 + + + + + + 3692 + 3053 + 67 + 20 + + + 3727 + 3063 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + 9e868ff4-d200-4ddd-a0b9-50abf423f440 + false + Stream 0 + 0 + true + e7274196-c69b-461c-966a-aaa3b6bc4020 + 1 + + + + + + 3692 + 3073 + 67 + 20 + + + 3727 + 3083 + + + + + + + + 2 + Input stream at index 1 + 78fcba4f-4ce2-47c9-bf9b-c4adff508a7f + false + Stream 1 + 1 + true + 758b07e1-eba4-4854-bc42-821bfaf9cf50 + 1 + + + + + + 3692 + 3093 + 67 + 20 + + + 3727 + 3103 + + + + + + + + 2 + Input stream at index 2 + 5dff9f76-eb50-44dc-b1eb-c9898788a0a5 + false + Stream 2 + 2 + true + 0 + + + + + + 3692 + 3113 + 67 + 20 + + + 3727 + 3123 + + + + + + + + 2 + Filtered stream + 95ca53c7-443e-429f-a7dc-278f84d0a48c + false + Stream + S(0) + false + 0 + + + + + + 3789 + 3053 + 30 + 80 + + + 3804 + 3093 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 0f588dae-4330-4978-89d6-31e140c1ef33 + Number Slider + Number Slider + false + 0 + + + + + + 3438 + 3047 + 198 + 20 + + + + + + 3 + 1 + 1 + 2 + 0 + 0 + 0 + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + true + ff7f5b2c-a915-4c5e-886d-6ec174279627 + Mirror + Mirror + + + + + + 3667 + 3471 + 141 + 44 + + + 3735 + 3493 + + + + + + Base geometry + 431aeb3e-993a-47b5-920b-24347721f626 + Geometry + Geometry + true + 95ca53c7-443e-429f-a7dc-278f84d0a48c + 1 + + + + + + 3669 + 3473 + 51 + 20 + + + 3696 + 3483 + + + + + + + + Mirror plane + 03d6e1b5-01ed-4dd2-8734-4bb536b18334 + Plane + Plane + false + 779eff81-4202-43c4-b822-be6d5708a2ad + 1 + + + + + + 3669 + 3493 + 51 + 20 + + + 3696 + 3503 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + 69d8adef-a727-4fa0-95ae-f21809de9848 + Geometry + Geometry + false + 0 + + + + + + 3750 + 3473 + 56 + 20 + + + 3778 + 3483 + + + + + + + + Transformation data + 1561f8f2-e4a6-48df-98a1-9a689c70d76d + Transform + Transform + false + 0 + + + + + + 3750 + 3493 + 56 + 20 + + + 3778 + 3503 + + + + + + + + + + + + 8529dbdf-9b6f-42e9-8e1f-c7a2bde56a70 + Line + + + + + Contains a collection of line segments + true + 779eff81-4202-43c4-b822-be6d5708a2ad + Line + Line + false + 0 + + + + + + 3587 + 3536 + 50 + 24 + + + 3612 + 3548 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0.5 + 0.5 + 0 + 1 + 0.5 + 0 + + + + + + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + true + 38e2ed78-3a97-41e1-948b-a55ed34f8f19 + Stream Filter + Stream Filter + + + + + + 3889 + 3405 + 111 + 64 + + + 3953 + 3437 + + + + + + 3 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + b4efe14a-5e77-49f3-ac0d-d8c027ecae3f + Gate + INVERSE + false + 3b27b381-d905-4990-82e0-6406c2491f3b + 1 + + + + + + 3891 + 3407 + 47 + 20 + + + 3916 + 3417 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + e73560a2-4caf-428b-b3ba-27c7b17699d7 + false + Stream 0 + 0 + true + 95ca53c7-443e-429f-a7dc-278f84d0a48c + 1 + + + + + + 3891 + 3427 + 47 + 20 + + + 3916 + 3437 + + + + + + + + 2 + Input stream at index 1 + b4fc22b3-5b97-48b9-96e0-54d84d86fce8 + false + Stream 1 + 1 + true + 69d8adef-a727-4fa0-95ae-f21809de9848 + 1 + + + + + + 3891 + 3447 + 47 + 20 + + + 3916 + 3457 + + + + + + + + 2 + Filtered stream + 7421a218-027d-49f4-995f-e5ea05249d8d + false + Stream + S(0) + false + 0 + + + + + + 3968 + 3407 + 30 + 60 + + + 3983 + 3437 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 3b27b381-d905-4990-82e0-6406c2491f3b + Number Slider + Number Slider + false + 0 + + + + + + 3623 + 3396 + 198 + 20 + + + + + + 3 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + b75a0e49-7509-488b-94f8-b51b4bf11f2d + Relay + Relay + false + 882400bc-d4cf-428b-bfa4-53f56cbcc266 + 1 + + + + + + 5379 + 3351 + 44 + 16 + + + 5401 + 3359 + + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + 125a372b-916c-4b37-84e8-53786f7108ea + Relay + Relay + false + 6ecfa3d1-7e96-49b0-9f64-5a35c882f968 + 1 + + + + + + 1596 + 2488 + 44 + 16 + + + 1618 + 2496 + + + + + + + + + + 9df5e896-552d-4c8c-b9ca-4fc147ffa022 + Expression + + + + + Evaluate an expression + SQRT(.5^2-(X-.5)^2) + cb8ec022-a111-4dc0-a87f-bd75075a2189 + Expression + Expression + + + + + + 2978 + 2495 + 218 + 28 + + + 3086 + 2509 + + + + + + 1 + ba80fd98-91a1-4958-b6a7-a94e40e52bdb + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Expression variable + ffbdf6aa-4a5c-41a5-9597-7cf05d6e7248 + Variable X + X + true + 9e9f4f4f-a388-4f49-8d53-728a6060a353 + 1 + + + + + + 2980 + 2497 + 14 + 24 + + + 2988.5 + 2509 + + + + + + + + Result of expression + d61f0e54-a368-4744-9900-999ee664a002 + Result + R + false + 0 + + + + + + 3178 + 2497 + 16 + 24 + + + 3186 + 2509 + + + + + + + + + + + + + + 9445ca40-cc73-4861-a455-146308676855 + Range + + + + + Create a range of numbers. + f60618ee-abe9-4d04-838d-e97d9bbd4c50 + Range + Range + + + + + + 2814 + 2482 + 129 + 44 + + + 2888 + 2504 + + + + + + Domain of numeric range + 358be461-3b86-4650-be18-191234e9f8eb + Domain + Domain + false + 84010b74-1472-4b6f-b22b-76c13308c5f0 + 1 + + + + + + 2816 + 2484 + 57 + 20 + + + 2854 + 2494 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1 + + + + + + + + + + + + Number of steps + 77c4007b-a224-467c-934c-2ba972202963 + x-1 + Steps + Steps + false + 20752e07-ebcc-4d02-a6cd-d82084b6b31e + 1 + + + + + + 2816 + 2504 + 57 + 20 + + + 2854 + 2514 + + + + + + 1 + + + + + 1 + {0} + + + + + 10 + + + + + + + + + + + 1 + Range of numbers + 9e9f4f4f-a388-4f49-8d53-728a6060a353 + Range + Range + false + 0 + + + + + + 2903 + 2484 + 38 + 40 + + + 2922 + 2504 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 20752e07-ebcc-4d02-a6cd-d82084b6b31e + Number Slider + Number Slider + false + 0 + + + + + + 2372 + 2574 + 256 + 20 + + + 2372.196 + 2574.041 + + + + + + 3 + 1 + 1 + 1024 + 0 + 0 + 1024 + + + + + + + + + 9445ca40-cc73-4861-a455-146308676855 + Range + + + + + Create a range of numbers. + c4a486d6-6db4-4b93-b4b2-1215072b97e9 + Range + Range + + + + + + 2667 + 2558 + 129 + 44 + + + 2741 + 2580 + + + + + + Domain of numeric range + 6af85166-98f6-458a-b28b-b8abf7051847 + Domain + Domain + false + 84010b74-1472-4b6f-b22b-76c13308c5f0 + 1 + + + + + + 2669 + 2560 + 57 + 20 + + + 2707 + 2570 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1 + + + + + + + + + + + + Number of steps + 4e049b87-bafc-4dc7-a896-c4f45eafbfec + x-1 + Steps + Steps + false + 20752e07-ebcc-4d02-a6cd-d82084b6b31e + 1 + + + + + + 2669 + 2580 + 57 + 20 + + + 2707 + 2590 + + + + + + 1 + + + + + 1 + {0} + + + + + 10 + + + + + + + + + + + 1 + Range of numbers + 6b4e3bee-632c-48c2-b1ff-6409e6bd940b + Range + Range + false + 0 + + + + + + 2756 + 2560 + 38 + 40 + + + 2775 + 2580 + + + + + + + + + + + + 3581f42a-9592-4549-bd6b-1c0fc39d067b + Construct Point + + + + + Construct a point from {xyz} coordinates. + true + d182f473-7281-4969-9552-b4c7eeb99315 + Construct Point + Construct Point + + + + + + 2827 + 2550 + 132 + 64 + + + 2909 + 2582 + + + + + + {x} coordinate + fc6f82b1-fa90-42e7-9d87-684e1be89ed9 + X coordinate + X coordinate + false + 6b4e3bee-632c-48c2-b1ff-6409e6bd940b + 1 + + + + + + 2829 + 2552 + 65 + 20 + + + 2863 + 2562 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {y} coordinate + 4712f5ee-0d95-456c-849d-a3ea0090476d + Y coordinate + Y coordinate + false + d61f0e54-a368-4744-9900-999ee664a002 + 1 + + + + + + 2829 + 2572 + 65 + 20 + + + 2863 + 2582 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {z} coordinate + b0c8bbef-3b86-4cab-817c-42b668b68cc4 + Z coordinate + Z coordinate + false + 0 + + + + + + 2829 + 2592 + 65 + 20 + + + 2863 + 2602 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Point coordinate + 4083ea09-cc94-40b5-9ff3-cec56f81d4a1 + Point + Point + false + 0 + + + + + + 2924 + 2552 + 33 + 60 + + + 2940.5 + 2582 + + + + + + + + + + + + 2b2a4145-3dff-41d4-a8de-1ea9d29eef33 + Interpolate + + + + + Create an interpolated curve through a set of points. + true + 0974ed3a-cf56-4777-994e-616c5436f465 + Interpolate + Interpolate + + + + + + 2985 + 2536 + 128 + 84 + + + 3052 + 2578 + + + + + + 1 + Interpolation points + 5379013a-34f1-4ad7-92e4-b5fe055722ff + Vertices + Vertices + false + 4083ea09-cc94-40b5-9ff3-cec56f81d4a1 + 1 + + + + + + 2987 + 2538 + 50 + 20 + + + 3013.5 + 2548 + + + + + + + + Curve degree + c542417b-2adc-4ac4-9888-a0240e431bf7 + Degree + Degree + false + 0 + + + + + + 2987 + 2558 + 50 + 20 + + + 3013.5 + 2568 + + + + + + 1 + + + + + 1 + {0} + + + + + 3 + + + + + + + + + + + Periodic curve + 83ec7924-a6ec-4d49-bc94-f9cd25dcd48f + Periodic + Periodic + false + 0 + + + + + + 2987 + 2578 + 50 + 20 + + + 3013.5 + 2588 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Knot spacing (0=uniform, 1=chord, 2=sqrtchord) + 8cf7ec2a-bc2c-4bac-9921-a5233118e292 + KnotStyle + KnotStyle + false + 0 + + + + + + 2987 + 2598 + 50 + 20 + + + 3013.5 + 2608 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Resulting nurbs curve + 710fdf45-f9ba-4d67-a78e-ca6a2c7d480d + Curve + Curve + false + 0 + + + + + + 3067 + 2538 + 44 + 26 + + + 3089 + 2551.333 + + + + + + + + Curve length + 5d50c135-660f-4974-89a5-9e85c1d47a37 + Length + Length + false + 0 + + + + + + 3067 + 2564 + 44 + 27 + + + 3089 + 2578 + + + + + + + + Curve domain + ae7780b8-4c5e-4512-82fc-4ef57b12e15a + Domain + Domain + false + 0 + + + + + + 3067 + 2591 + 44 + 27 + + + 3089 + 2604.667 + + + + + + + + + + + + d1a28e95-cf96-4936-bf34-8bf142d731bf + Construct Domain + + + + + Create a numeric domain from two numeric extremes. + 6c9fb824-d4fa-47c3-b084-f57486e39c83 + Construct Domain + Construct Domain + + + + + + 2644 + 2482 + 143 + 44 + + + 2726 + 2504 + + + + + + Start value of numeric domain + 3118bc41-1e08-484b-9cf8-25a54b9611d9 + Domain start + Domain start + false + 79948b5c-accb-4874-82f5-80f6d481f9be + 1 + + + + + + 2646 + 2484 + 65 + 20 + + + 2680 + 2494 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + End value of numeric domain + 683657b3-b493-4d55-874a-804536797f9c + Domain end + Domain end + false + 9537fbd4-118a-4c90-ad08-af82a9111050 + 1 + + + + + + 2646 + 2504 + 65 + 20 + + + 2680 + 2514 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Numeric domain between {A} and {B} + 84010b74-1472-4b6f-b22b-76c13308c5f0 + Domain + Domain + false + 0 + + + + + + 2741 + 2484 + 44 + 40 + + + 2763 + 2504 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 9537fbd4-118a-4c90-ad08-af82a9111050 + Number Slider + Number Slider + false + 0 + + + + + + 2333 + 2510 + 256 + 20 + + + 2333.584 + 2510.481 + + + + + + 3 + 1 + 0 + 16 + 0 + 0 + 0.5 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 79948b5c-accb-4874-82f5-80f6d481f9be + Number Slider + Number Slider + false + 0 + + + + + + 2371 + 2484 + 256 + 20 + + + 2371.6 + 2484.241 + + + + + + 3 + 1 + 0 + 100 + 0 + 0 + 0 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 255;255;255;255 + + A group of Grasshopper objects + cb8ec022-a111-4dc0-a87f-bd75075a2189 + f60618ee-abe9-4d04-838d-e97d9bbd4c50 + 20752e07-ebcc-4d02-a6cd-d82084b6b31e + c4a486d6-6db4-4b93-b4b2-1215072b97e9 + d182f473-7281-4969-9552-b4c7eeb99315 + 0974ed3a-cf56-4777-994e-616c5436f465 + 6c9fb824-d4fa-47c3-b084-f57486e39c83 + 9537fbd4-118a-4c90-ad08-af82a9111050 + 79948b5c-accb-4874-82f5-80f6d481f9be + bfdc16c2-8a8e-4556-b19c-220b0aeb4340 + b4cc584f-7b40-4647-89e7-8b7f5680c28d + 7e8d883b-2637-4556-8b0c-a4dd67804f95 + ebeb1b10-dbbd-48e6-8ad0-50330378b54d + 377ad2c5-d633-428b-9ccd-176001388528 + a99ceacf-2966-48c6-8fba-fe644a6b0725 + 15 + de9faebe-cf94-46a8-be84-81888b293ae0 + Group + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + bfdc16c2-8a8e-4556-b19c-220b0aeb4340 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 9 + + 0.018 + + + + + + 3233 + 2601 + 250 + 20 + + + + + + + + + + 5a41528b-12b9-40dc-a3f2-842034d267c4 + Text Tag 3D + + + + + Represents a list of 3D text tags in a Rhino viewport + true + ebeb1b10-dbbd-48e6-8ad0-50330378b54d + Text Tag 3D + Text Tag 3D + + + + + + 3582 + 2524 + 92 + 104 + + + 3660 + 2576 + + + + + + Location and orientation of text tag + true + f86ef879-b68d-419c-a791-e4913174ef58 + Location + Location + false + e557ad21-f790-4ef2-a195-f6d92dadcc52 + 1 + + + + + + 3584 + 2526 + 61 + 20 + + + 3616 + 2536 + + + + + + + + The text to display + 7bdd5bce-5031-40c6-9203-64a660006dd2 + Text + Text + true + 0 + + + + + + 3584 + 2546 + 61 + 20 + + + 3616 + 2556 + + + + + + 1 + + + + + 1 + {0} + + + + + false + SQRT(.5^2-(X-.5)^2) + + + + + + + + + + + Size of text + 458e4487-618e-4885-be55-caddf58824df + Size + Size + false + bfdc16c2-8a8e-4556-b19c-220b0aeb4340 + 1 + + + + + + 3584 + 2566 + 61 + 20 + + + 3616 + 2576 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Optional colour of tag + f198067a-34b0-4e2e-ad91-dc1c8de64868 + Colour + Colour + true + 0 + + + + + + 3584 + 2586 + 61 + 20 + + + 3616 + 2596 + + + + + + 1 + + + + + 1 + {0} + + + + + + 255;212;212;212 + + + + + + + + + + + + Text justification + 8bcd2047-4bb9-4113-a532-16fcd3cd3a0d + Justification + Justification + false + 0 + + + + + + 3584 + 2606 + 61 + 20 + + + 3616 + 2616 + + + + + + 1 + + + + + 1 + {0} + + + + + 8 + + + + + + + + + + + + + + + c048ad76-ffcd-43b1-a007-4dd1b2373326 + Horizontal Frame + + + + + Get a horizontally aligned frame along a curve at a specified parameter. + 377ad2c5-d633-428b-9ccd-176001388528 + Horizontal Frame + Horizontal Frame + + + + + + 3436 + 2546 + 125 + 44 + + + 3506 + 2568 + + + + + + Curve to evaluate + 47377e50-3a9a-4171-b1ce-5bd90932649c + Curve + Curve + false + 710fdf45-f9ba-4d67-a78e-ca6a2c7d480d + 1 + + + + + + 3438 + 2548 + 53 + 20 + + + 3466 + 2558 + + + + + + + + Parameter on curve domain to evaluate + 6d0f185c-e196-4216-8e5b-730aa1f8d194 + Parameter + Parameter + false + a99ceacf-2966-48c6-8fba-fe644a6b0725 + 1 + + + + + + 3438 + 2568 + 53 + 20 + + + 3466 + 2578 + + + + + + + + Horizontal curve frame at {t} + e557ad21-f790-4ef2-a195-f6d92dadcc52 + Frame + Frame + false + 0 + + + + + + 3521 + 2548 + 38 + 40 + + + 3540 + 2568 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + a99ceacf-2966-48c6-8fba-fe644a6b0725 + Number Slider + Number Slider + false + 0 + + + + + + 3221 + 2568 + 198 + 20 + + + + + + 6 + 1 + 0 + 255 + 0 + 0 + 63 + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + true + 3279d68f-7597-44b9-8aad-e4fe735828f7 + Stream Filter + Stream Filter + + + + + + 2596 + 2881 + 142 + 64 + + + 2691 + 2913 + + + + + + 3 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + 10ba25b6-e04d-4cf7-9dd8-4c8daa39cb53 + Gate + ARC/ELASTICA + false + ff680718-832f-4986-8b29-3aff2ad3133a + 1 + + + + + + 2598 + 2883 + 78 + 20 + + + 2638.5 + 2893 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + 3efba95c-dff5-407f-8ce8-4cbed2c3354b + false + Stream 0 + 0 + true + 710fdf45-f9ba-4d67-a78e-ca6a2c7d480d + 1 + + + + + + 2598 + 2903 + 78 + 20 + + + 2638.5 + 2913 + + + + + + + + 2 + Input stream at index 1 + 150b4c0e-979b-45cd-998a-05ac030ec92b + false + Stream 1 + 1 + true + c8cb0202-0ba9-413f-8c18-78a41199eff6 + 1 + + + + + + 2598 + 2923 + 78 + 20 + + + 2638.5 + 2933 + + + + + + + + 2 + Filtered stream + d93f3ae5-6608-4cd2-ba51-d27384a4dc2f + false + Stream + S(1) + false + 0 + + + + + + 2706 + 2883 + 30 + 60 + + + 2721 + 2913 + + + + + + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + 3a20ff06-eeb1-4b64-926b-3dfaf9128bc9 + Relay + Relay + false + d93f3ae5-6608-4cd2-ba51-d27384a4dc2f + 1 + + + + + + 2722 + 2980 + 44 + 16 + + + 2744 + 2988 + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + ff680718-832f-4986-8b29-3aff2ad3133a + Number Slider + Number Slider + false + 0 + + + + + + 2213 + 2836 + 198 + 20 + + + 2213.644 + 2836.331 + + + + + + 3 + 1 + 1 + 1 + 0 + 0 + 1 + + + + + + + + + 2162e72e-72fc-4bf8-9459-d4d82fa8aa14 + Divide Curve + + + + + Divide a curve into equal length segments + true + 32e88abc-cfdf-4e61-ae3f-e4129c2c5df5 + Divide Curve + Divide Curve + + + + + + 4098 + 3456 + 128 + 64 + + + 4148 + 3488 + + + + + + Curve to divide + cabea499-c2af-407c-980e-96deb3d15c1b + Curve + Curve + false + 7421a218-027d-49f4-995f-e5ea05249d8d + 1 + + + + + + 4100 + 3458 + 33 + 20 + + + 4118 + 3468 + + + + + + + + Number of segments + 1525861f-b7e1-492e-a217-8df2b5f1a722 + Count + Count + false + 577a0c63-7505-4fc3-994b-d5d38301a3fc + 1 + + + + + + 4100 + 3478 + 33 + 20 + + + 4118 + 3488 + + + + + + 1 + + + + + 1 + {0} + + + + + 10 + + + + + + + + + + + Split segments at kinks + ec09d0b6-53d6-4eb8-b46c-8b1cfbecc318 + Kinks + Kinks + false + 0 + + + + + + 4100 + 3498 + 33 + 20 + + + 4118 + 3508 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + 1 + Division points + b03b55af-9732-4b7c-98ff-c56c1740de98 + Points + Points + false + 0 + + + + + + 4163 + 3458 + 61 + 20 + + + 4193.5 + 3468 + + + + + + + + 1 + Tangent vectors at division points + 8854baf9-cf78-45a1-8262-d3d0990ba0b3 + Tangents + Tangents + false + 0 + + + + + + 4163 + 3478 + 61 + 20 + + + 4193.5 + 3488 + + + + + + + + 1 + Parameter values at division points + f8847ac1-f514-4b7a-a694-6d68a3582041 + Parameters + Parameters + false + 0 + + + + + + 4163 + 3498 + 61 + 20 + + + 4193.5 + 3508 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 577a0c63-7505-4fc3-994b-d5d38301a3fc + Number Slider + Number Slider + false + 0 + + + + + + 4026 + 3584 + 198 + 20 + + + + + + 3 + 1 + 1 + 4096 + 0 + 0 + 771 + + + + + + + + + 2b2a4145-3dff-41d4-a8de-1ea9d29eef33 + Interpolate + + + + + Create an interpolated curve through a set of points. + 037aecf6-bd80-4ff2-9f79-297d0c92e8ad + Interpolate + Interpolate + + + + + + 4281 + 3445 + 128 + 84 + + + 4348 + 3487 + + + + + + 1 + Interpolation points + 99844fad-bde2-4a19-bba5-1567f450e0bc + Vertices + Vertices + false + b03b55af-9732-4b7c-98ff-c56c1740de98 + 1 + + + + + + 4283 + 3447 + 50 + 20 + + + 4309.5 + 3457 + + + + + + + + Curve degree + a959dd2a-7364-45cf-bf88-876a52aa0d8c + Degree + Degree + false + 0 + + + + + + 4283 + 3467 + 50 + 20 + + + 4309.5 + 3477 + + + + + + 1 + + + + + 1 + {0} + + + + + 3 + + + + + + + + + + + Periodic curve + f3a51e4c-62cb-44d6-8eb6-f713fd1968aa + Periodic + Periodic + false + 0 + + + + + + 4283 + 3487 + 50 + 20 + + + 4309.5 + 3497 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Knot spacing (0=uniform, 1=chord, 2=sqrtchord) + cfaf952d-296c-4916-8d20-1237992d32ea + KnotStyle + KnotStyle + false + 0 + + + + + + 4283 + 3507 + 50 + 20 + + + 4309.5 + 3517 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Resulting nurbs curve + 84483650-6de2-4340-95b5-2a3cc431dd70 + Curve + Curve + false + 0 + + + + + + 4363 + 3447 + 44 + 26 + + + 4385 + 3460.333 + + + + + + + + Curve length + 73c19336-c5e0-418f-ad77-8f5064ed9f0d + Length + Length + false + 0 + + + + + + 4363 + 3473 + 44 + 27 + + + 4385 + 3487 + + + + + + + + Curve domain + eb56cecb-2f9e-4037-9aff-6c57a0b75202 + Domain + Domain + false + 0 + + + + + + 4363 + 3500 + 44 + 27 + + + 4385 + 3513.667 + + + + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + true + f90c3e55-584b-49ac-b3b1-816024d60148 + Stream Filter + REBUILD + + + + + + 4422 + 3364 + 111 + 64 + + + 4486 + 3396 + + + + + + 3 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + ee9e9541-44da-419f-8139-b2ce704b0bfc + Gate + REBUILD + false + 7c933fbe-4308-4b2b-961e-960cdef76722 + 1 + + + + + + 4424 + 3366 + 47 + 20 + + + 4449 + 3376 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + 8ba40bbc-8b6d-409c-ae28-586d7b4b6ba8 + false + Stream 0 + 0 + true + 7421a218-027d-49f4-995f-e5ea05249d8d + 1 + + + + + + 4424 + 3386 + 47 + 20 + + + 4449 + 3396 + + + + + + + + 2 + Input stream at index 1 + 94662ab1-ecd9-4786-832d-3fa5f6029e0a + false + Stream 1 + 1 + true + 84483650-6de2-4340-95b5-2a3cc431dd70 + 1 + + + + + + 4424 + 3406 + 47 + 20 + + + 4449 + 3416 + + + + + + + + 2 + Filtered stream + 864fffcb-78f2-4f1d-984d-c524b8bd661d + false + Stream + S(0) + false + 0 + + + + + + 4501 + 3366 + 30 + 60 + + + 4516 + 3396 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 7c933fbe-4308-4b2b-961e-960cdef76722 + Number Slider + Number Slider + false + 0 + + + + + + 4304 + 3313 + 198 + 20 + + + + + + 3 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + ec572a50-b5f4-4170-9323-7003be9b43b3 + Number Slider + Number Slider + false + 0 + + + + + + 2973 + 655 + 198 + 20 + + + 2973.93 + 655.7738 + + + + + + 3 + 1 + 1 + 2 + 0 + 0 + 2 + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + 26aaa1d5-1508-4eca-81e0-1445e9996c66 + Relay + Relay + false + ea3716e7-2081-4c05-8195-f83a4ab37d5e + 1 + + + + + + 5251 + 461 + 44 + 16 + + + 5273 + 469 + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + 719b60d9-6fe8-4351-814d-4a1a53a216df + Line SDL + Line SDL + + + + + + 4545 + 542 + 109 + 64 + + + 4609 + 574 + + + + + + Line start point + 4f8acb7d-921f-4cca-8712-b7cb6675cf7a + Start + Start + false + 0 + + + + + + 4547 + 544 + 47 + 20 + + + 4572 + 554 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Line tangent (direction) + 1eaec4e2-c83c-4ece-979b-f45b285a34fb + Direction + Direction + false + 0 + + + + + + 4547 + 564 + 47 + 20 + + + 4572 + 574 + + + + + + 1 + + + + + 1 + {0} + + + + + + 65.875 + 0 + 0 + + + + + + + + + + + + Line length + 07595e14-1844-4c4d-95ad-34d563fad49a + Length + Length + false + 7a7c446d-c7b5-478c-85d3-38514268a55d + 1 + + + + + + 4547 + 584 + 47 + 20 + + + 4572 + 594 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + c61c1322-6bbb-4acb-b40d-8ae95ef13892 + Line + Line + false + 0 + + + + + + 4624 + 544 + 28 + 60 + + + 4638 + 574 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 7a7c446d-c7b5-478c-85d3-38514268a55d + Number Slider + Number Slider + false + 0 + + + + + + 4468 + 663 + 198 + 20 + + + + + + 3 + 1 + 1 + 256 + 0 + 0 + 128 + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + ec285bec-b16a-434d-86aa-a3aa372a0f05 + Line SDL + MIRROR LINE + + + + + + 5021 + 679 + 152 + 64 + + + 5085 + 711 + + + + + + Line start point + abcc7ceb-47cc-4dbe-95ce-ca6b35f27a9b + Start + Start + false + 85c0355c-c111-48bb-954d-f48b78d77eb6 + 1 + + + + + + 5023 + 681 + 47 + 20 + + + 5048 + 691 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Line tangent (direction) + 6d6f8f52-8c55-477f-bbf2-2bba07b01c37 + Direction + Direction + false + 0 + + + + + + 5023 + 701 + 47 + 20 + + + 5048 + 711 + + + + + + 1 + + + + + 1 + {0} + + + + + + -1 + -1 + 0 + + + + + + + + + + + + Line length + 88bef87d-45b6-40fa-bb19-17dff7035205 + Length + Length + false + 0 + + + + + + 5023 + 721 + 47 + 20 + + + 5048 + 731 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + 59b9138e-ce78-40d9-8cb1-87a7d9936c9c + Line + MIRROR LINE + false + 0 + + + + + + 5100 + 681 + 71 + 60 + + + 5135.5 + 711 + + + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + true + d377e323-bd41-4750-91c4-0876fdef2858 + End Points + End Points + + + + + + 4676 + 500 + 99 + 44 + + + 4726 + 522 + + + + + + Curve to evaluate + 56876946-f35b-4819-91b0-3c57658cd104 + Curve + Curve + false + c61c1322-6bbb-4acb-b40d-8ae95ef13892 + 1 + + + + + + 4678 + 502 + 33 + 40 + + + 4696 + 522 + + + + + + + + Curve start point + c5d2e187-1805-4037-b4a3-a62c37ac0cf6 + Start + Start + false + 0 + + + + + + 4741 + 502 + 32 + 20 + + + 4757 + 512 + + + + + + + + Curve end point + cf11138f-f85a-4ee6-a215-a6263d8393c1 + End + End + false + 0 + + + + + + 4741 + 522 + 32 + 20 + + + 4757 + 532 + + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + 9ddba3f5-8f43-4cf1-b299-d21c2b6c3f70 + Line SDL + Line SDL + + + + + + 4750 + 610 + 109 + 64 + + + 4814 + 642 + + + + + + Line start point + 840d3ba4-9f1a-4771-90f3-5673e4b0d885 + Start + Start + false + cf11138f-f85a-4ee6-a215-a6263d8393c1 + 1 + + + + + + 4752 + 612 + 47 + 20 + + + 4777 + 622 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Line tangent (direction) + 86a0460c-675a-4181-bab5-5eb0f6fa9c46 + Direction + Direction + false + 0 + + + + + + 4752 + 632 + 47 + 20 + + + 4777 + 642 + + + + + + 1 + + + + + 1 + {0} + + + + + + -1 + 1 + 0 + + + + + + + + + + + + Line length + 50fd7288-95ab-4e84-a473-f8638edfb46a + Length + Length + false + 7a7c446d-c7b5-478c-85d3-38514268a55d + 1 + + + + + + 4752 + 652 + 47 + 20 + + + 4777 + 662 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + f95e29d5-4bc0-4786-85f4-893aacd2d9d8 + Line + Line + false + 0 + + + + + + 4829 + 612 + 28 + 60 + + + 4843 + 642 + + + + + + + + + + + + 6b7ba278-5c9d-42f1-a61d-6209cbd44907 + Curve Proximity + + + + + Find the pair of closest points between two curves. + f5ccc54d-6cb6-4b5d-9e83-ea97921972f8 + Curve Proximity + Curve Proximity + + + + + + 4662 + 421 + 126 + 64 + + + 4723 + 453 + + + + + + First curve + c7d572f6-76c0-4965-a2fd-098bf72bf991 + Curve A + Curve A + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4664 + 423 + 44 + 30 + + + 4687.5 + 438 + + + + + + + + Second curve + 08582a6c-4d15-4e55-85aa-85d3b7060f45 + Curve B + Curve B + false + d3b2d65f-7b80-4df2-91ae-3509446f422e + 1 + + + + + + 4664 + 453 + 44 + 30 + + + 4687.5 + 468 + + + + + + + + Point on curve A closest to curve B + 3f24c2f4-a57e-4682-8f22-f875a1c0bfae + Point A + Point A + false + 0 + + + + + + 4738 + 423 + 48 + 20 + + + 4762 + 433 + + + + + + + + Point on curve B closest to curve A + 1afe42e1-bc59-406e-81b5-253216722a55 + Point B + Point B + false + 0 + + + + + + 4738 + 443 + 48 + 20 + + + 4762 + 453 + + + + + + + + Smallest distance between two curves + aec1af83-2284-4687-9aec-0790a24f74d6 + Distance + Distance + false + 0 + + + + + + 4738 + 463 + 48 + 20 + + + 4762 + 473 + + + + + + + + + + + + 4c4e56eb-2f04-43f9-95a3-cc46a14f495a + Line + + + + + Create a line between two points. + true + 0f4e29a4-53aa-4f3d-9b6f-0c32287a6c34 + Line + MIRROR LINE + + + + + + 4941 + 468 + 200 + 44 + + + 5013 + 490 + + + + + + Line start point + 9d7b31f2-e4c2-4d0e-8c0b-58934341d34d + Start Point + Start Point + false + 3f24c2f4-a57e-4682-8f22-f875a1c0bfae + 1 + + + + + + 4943 + 470 + 55 + 20 + + + 4972 + 480 + + + + + + + + Line end point + c718e8fd-37bd-43a1-9ce6-8f5ae3b5e8ac + End Point + End Point + false + 1afe42e1-bc59-406e-81b5-253216722a55 + 1 + + + + + + 4943 + 490 + 55 + 20 + + + 4972 + 500 + + + + + + + + Line segment + d6eec887-16e2-4f6a-b973-1c656787bada + Line + MIRROR CUTING LINE + false + 0 + + + + + + 5028 + 470 + 111 + 40 + + + 5083.5 + 490 + + + + + + + + + + + + 84627490-0fb2-4498-8138-ad134ee4cb36 + Curve | Curve + + + + + Solve intersection events for two curves. + true + ca0ac8cb-0afb-40ef-ab66-a0c1a4912072 + Curve | Curve + Curve | Curve + + + + + + 4914 + 561 + 133 + 64 + + + 4975 + 593 + + + + + + First curve + d006c797-ce32-4a5c-8fce-eeece7dd1ead + Curve A + Curve A + false + d6eec887-16e2-4f6a-b973-1c656787bada + 1 + + + + + + 4916 + 563 + 44 + 30 + + + 4939.5 + 578 + + + + + + + + Second curve + d472f470-0275-4dea-b327-457e10278d4c + Curve B + Curve B + false + c61c1322-6bbb-4acb-b40d-8ae95ef13892 + 1 + + + + + + 4916 + 593 + 44 + 30 + + + 4939.5 + 608 + + + + + + + + 1 + Intersection events + 85c0355c-c111-48bb-954d-f48b78d77eb6 + Points + Points + false + 0 + + + + + + 4990 + 563 + 55 + 20 + + + 5017.5 + 573 + + + + + + + + 1 + Parameters on first curve + a574f5f0-9645-4f0e-8a48-024fddcb2988 + Params A + Params A + false + 0 + + + + + + 4990 + 583 + 55 + 20 + + + 5017.5 + 593 + + + + + + + + 1 + Parameters on second curve + b618f41f-8347-42b4-bcce-bbfdeae83bc8 + Params B + Params B + false + 0 + + + + + + 4990 + 603 + 55 + 20 + + + 5017.5 + 613 + + + + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + true + 6addf0b0-489a-40c6-a48e-74d5b13dfb6e + Mirror + Mirror + + + + + + 4958 + 381 + 141 + 44 + + + 5026 + 403 + + + + + + Base geometry + fefc1139-1162-49a0-acb4-8df8341fec0e + Geometry + Geometry + true + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4960 + 383 + 51 + 20 + + + 4987 + 393 + + + + + + + + Mirror plane + a61e136e-3c52-4403-92cb-3691508b47c7 + Plane + Plane + false + f95e29d5-4bc0-4786-85f4-893aacd2d9d8 + 1 + + + + + + 4960 + 403 + 51 + 20 + + + 4987 + 413 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + d3b2d65f-7b80-4df2-91ae-3509446f422e + Geometry + Geometry + false + 0 + + + + + + 5041 + 383 + 56 + 20 + + + 5069 + 393 + + + + + + + + Transformation data + cc63d2a4-59c0-4ee5-8971-0812b43527be + Transform + Transform + false + 0 + + + + + + 5041 + 403 + 56 + 20 + + + 5069 + 413 + + + + + + + + + + + + 65f34325-a2fe-4fd6-8ac7-1cc9e6455bfb + 1c9de8a1-315f-4c56-af06-8f69fee80a7a + Mirror Cut Curve + + + + + Cut a curve with a plane, mirror the kept side of the cut across a mirror plane, and combine it with the kept side. + true + 240c211c-ba42-4048-bc97-e44d2e18170a + Mirror Cut Curve + Mirror Cut Curve + + + + + + 4843 + 132 + 183 + 184 + + + 4943 + 224 + + + + + + Curve to mirror cut + 7a36101f-56a8-45bf-8dcb-d1a619652b91 + Curve + Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4845 + 134 + 83 + 20 + + + 4888 + 144 + + + + + + + + Plane that the kept side of the curve cut gets mirrored across + c73f3bfd-66b5-46bc-89e3-979e655b37f2 + Mirror Plane + Mirror Plane + false + 59b9138e-ce78-40d9-8cb1-87a7d9936c9c + 1 + + + + + + 4845 + 154 + 83 + 20 + + + 4888 + 164 + + + + + + + + Parts of the curve within this distance from the mirror plane will be additionally cut away + 2b0959c7-f4db-4e35-bb02-936aaa10d53a + Reach + Reach + false + 0 + + + + + + 4845 + 174 + 83 + 20 + + + 4888 + 184 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Distance to offset the kept parts of the curve from the mirror plane (or offset from the reach if reach in not zero) + b5ca8561-cb23-42c8-bfd3-daae40f670e9 + Offset + Offset + false + 0 + + + + + + 4845 + 194 + 83 + 20 + + + 4888 + 204 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Flip the mirror direction + 2df1e4de-b4a9-49a5-bd1e-d2e545096824 + Flip + Flip + false + 0 + + + + + + 4845 + 214 + 83 + 20 + + + 4888 + 224 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Join the mirror cut curves + 76c6073f-e5c8-45e1-9f4a-1c08ca966c8d + Join + Join + false + 0 + + + + + + 4845 + 234 + 83 + 20 + + + 4888 + 244 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Keep the curve and mirror it normally if it is mirror cut into non-existence + e0909465-6595-400c-a10c-7f83a50dd4c1 + Keep + Keep + false + 0 + + + + + + 4845 + 254 + 83 + 20 + + + 4888 + 264 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Determines how the mirror cut curves are connected + +0 = Linear +1 = Tangency +2 = Curvature +3 = Meet Ends + 6d0ebce5-38b2-4d13-9a4c-bec59d394b73 + Connection Type + Connection Type + false + 0 + + + + + + 4845 + 274 + 83 + 20 + + + 4888 + 284 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Bulge factor for the mirror cut curve connections (-B = Negative Bulge, 0.0 = No Bulge, +B = Positive Bulge) + 76871e12-a380-4bfc-a766-7fbc0b21876e + Bulge + Bulge + false + 0 + + + + + + 4845 + 294 + 83 + 20 + + + 4888 + 304 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 1 + Resulting mirror cut curves + 92f661f6-4319-4861-ad6a-a59b608327fc + Mirror Cut + Mirror Cut + false + 0 + + + + + + 4958 + 134 + 66 + 36 + + + 4991 + 152 + + + + + + + + The splitting index (only if Join is false) + +To split the mirror cut curve set at the mirror use this as the index input on Grasshopper's Split List component. + 2930bdfc-a558-40f6-9dcb-da855adbb036 + Split Index + Split Index + false + 0 + + + + + + 4958 + 170 + 66 + 36 + + + 4991 + 188 + + + + + + + + The plane at the reach distance + e8b32b49-9ae0-4958-b375-30f99fc9a1e5 + Reach Plane + Reach Plane + false + 0 + + + + + + 4958 + 206 + 66 + 36 + + + 4991 + 224 + + + + + + + + The plane at the offset distance + dcdbf4e7-5dfc-4e6d-8716-a19152e42ade + Offset Plane + Offset Plane + false + 0 + + + + + + 4958 + 242 + 66 + 36 + + + 4991 + 260 + + + + + + + + True if the curve was intersected by the mirror cut, False if the curve was not intersected by the mirror cut + 308874a3-735e-4350-901b-90ca30ecd1de + Intersected + Intersected + false + 0 + + + + + + 4958 + 278 + 66 + 36 + + + 4991 + 296 + + + + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + 979151a5-e3ce-4c44-9a9c-741915882b6c + Stream Filter + Stream Filter + + + + + + 5109 + 294 + 92 + 64 + + + 5154 + 326 + + + + + + 3 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + 3894d296-76b4-465c-bd68-877edf10a6ad + Gate + Gate + false + cd7ea3bd-3415-417e-ba5d-c031853b6eef + 1 + + + + + + 5111 + 296 + 28 + 20 + + + 5126.5 + 306 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + 5801260e-8c4f-4ed8-8d16-86247fb09e4b + false + Stream 0 + 0 + true + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 5111 + 316 + 28 + 20 + + + 5126.5 + 326 + + + + + + + + 2 + Input stream at index 1 + 9d902d16-dbe2-4524-8bfe-2599aeb14f79 + false + Stream 1 + 1 + true + 92f661f6-4319-4861-ad6a-a59b608327fc + 1 + + + + + + 5111 + 336 + 28 + 20 + + + 5126.5 + 346 + + + + + + + + 2 + Filtered stream + ea3716e7-2081-4c05-8195-f83a4ab37d5e + false + Stream + S(0) + false + 0 + + + + + + 5169 + 296 + 30 + 60 + + + 5184 + 326 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + cd7ea3bd-3415-417e-ba5d-c031853b6eef + Number Slider + Number Slider + false + 0 + + + + + + 5108 + 206 + 198 + 20 + + + + + + 3 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + b7798b74-037e-4f0c-8ac7-dc1043d093e0 + Rotate + + + + + Rotate an object in a plane. + true + 488c670f-c4ab-4751-877c-6fb093be3ccb + Rotate + Rotate + + + + + + 4998 + 775 + 141 + 64 + + + 5066 + 807 + + + + + + Base geometry + be6e2de5-14ca-4c17-8fde-a2b3e16e49d4 + Geometry + Geometry + true + d6eec887-16e2-4f6a-b973-1c656787bada + 1 + + + + + + 5000 + 777 + 51 + 20 + + + 5027 + 787 + + + + + + + + Rotation angle in radians + d10e0b7a-8a49-47a6-b0b6-bfe3b3be2b19 + Angle + Angle + false + 99f948aa-ab0f-4331-99f0-8e49f4381ea3 + 1 + false + + + + + + 5000 + 797 + 51 + 20 + + + 5027 + 807 + + + + + + 1 + + + + + 1 + {0} + + + + + 1.5707963267948966 + + + + + + + + + + + Rotation plane + 42a99a4c-28c4-4cb9-acf1-ff642a4e983c + Plane + Plane + false + 1afe42e1-bc59-406e-81b5-253216722a55 + 1 + + + + + + 5000 + 817 + 51 + 20 + + + 5027 + 827 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Rotated geometry + cbcaca56-5288-457f-baee-891e32e535d7 + Geometry + Geometry + false + 0 + + + + + + 5081 + 777 + 56 + 30 + + + 5109 + 792 + + + + + + + + Transformation data + 5a95a0a0-42bd-4d31-8229-8c15dae9d9b3 + Transform + Transform + false + 0 + + + + + + 5081 + 807 + 56 + 30 + + + 5109 + 822 + + + + + + + + + + + + a4cd2751-414d-42ec-8916-476ebf62d7fe + Radians + + + + + Convert an angle specified in degrees to radians + afa2ae6d-563a-411a-8b73-f0b45df727d3 + Radians + Radians + + + + + + 4786 + 822 + 123 + 28 + + + 4847 + 836 + + + + + + Angle in degrees + 23595876-82ff-4a6c-a6a8-2873214b3922 + Degrees + Degrees + false + 6da939a1-5898-43d5-b831-243d9c406cb2 + 1 + + + + + + 4788 + 824 + 44 + 24 + + + 4811.5 + 836 + + + + + + + + Angle in radians + 99f948aa-ab0f-4331-99f0-8e49f4381ea3 + Radians + Radians + false + 0 + + + + + + 4862 + 824 + 45 + 24 + + + 4884.5 + 836 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 6da939a1-5898-43d5-b831-243d9c406cb2 + Number Slider + Number Slider + false + 0 + + + + + + 4607 + 758 + 198 + 20 + + + + + + 3 + 1 + 1 + 90 + 0 + 0 + 90 + + + + + + + + + fe502a6c-31bc-4089-821d-05de68d7fe76 + 1c9de8a1-315f-4c56-af06-8f69fee80a7a + Curve Length At + + + + + Get the length along a curve from its start to a point on the curve (or optionally to a parameter on the curve), if point is not on the curve it will be pulled to it. + true + 1db1e857-d74f-42e1-b4c0-6099a830a680 + Curve Length At + Curve Length At + + + + + + 4646 + 5 + 147 + 84 + + + 4720 + 47 + + + + + + Curve to get length along + ea7720f2-a320-4004-aa0c-00e4e4b01239 + Curve + Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4648 + 7 + 57 + 20 + + + 4678 + 17 + + + + + + + + Point on curve to get length to + 2a018bf0-6ca3-4dd6-8ea5-c67710ab1fef + Point + Point + true + 76429ee8-2e7d-4d4b-ac2b-34e913d1b9c1 + 1 + + + + + + 4648 + 27 + 57 + 20 + + + 4678 + 37 + + + + + + + + Optional parameter on curve to get length to instead of a point (will override point if a point is also input) + 46f156d1-c6b3-405e-951a-e0b9dd83df0c + Parameter + Parameter + true + 0 + + + + + + 4648 + 47 + 57 + 20 + + + 4678 + 57 + + + + + + + + If true, the length output is normalized (0.0 - 1.0) + 47d1919c-cf07-4b64-88a7-9ce7df657d25 + Normalized + Normalized + false + 0 + + + + + + 4648 + 67 + 57 + 20 + + + 4678 + 77 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Length along curve from start to the point on curve + 92606c4d-9209-45eb-a092-288edcad529f + Length + Length + false + 0 + + + + + + 4735 + 7 + 56 + 40 + + + 4763 + 27 + + + + + + + + Curve parameter at the point on curve + 36f96bb6-fa93-41f7-bb71-890789aafcc4 + Parameter + Parameter + false + 0 + + + + + + 4735 + 47 + 56 + 40 + + + 4763 + 67 + + + + + + + + + + + + 7f6a9d34-0470-4bb7-aadd-07496bcbe572 + Point On Curve + + + + + Evaluates a curve at a specific location + true + 76429ee8-2e7d-4d4b-ac2b-34e913d1b9c1 + Point On Curve + Point On Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + 0.343 + + + + + + 4595 + 127 + 120 + 20 + + + + + + + + + + aaa665bd-fd6e-4ccb-8d2c-c5b33072125d + Curvature + + + + + Evaluate the curvature of a curve at a specified parameter. + true + af0bea5e-7bf6-4f1b-933a-80fba4a8f309 + Curvature + Curvature + + + + + + 4725 + -81 + 140 + 64 + + + 4795 + -49 + + + + + + Curve to evaluate + 807d3d4d-8588-4f72-977d-f085af7710a4 + Curve + Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4727 + -79 + 53 + 30 + + + 4755 + -64 + + + + + + + + Parameter on curve domain to evaluate + b158b1fe-7b33-4623-be1f-9dc9d935a7be + Parameter + Parameter + false + 36f96bb6-fa93-41f7-bb71-890789aafcc4 + 1 + + + + + + 4727 + -49 + 53 + 30 + + + 4755 + -34 + + + + + + + + Point on curve at {t} + fddf3285-20a3-42a4-b39d-b9a2a9609ec5 + Point + Point + false + 0 + + + + + + 4810 + -79 + 53 + 20 + + + 4836.5 + -69 + + + + + + + + Curvature vector at {t} + 82c9a2b9-6b13-43ad-b872-5de4d684d071 + Curvature + Curvature + false + 0 + + + + + + 4810 + -59 + 53 + 20 + + + 4836.5 + -49 + + + + + + + + Curvature circle at {t} + 924ff156-a262-48aa-bf78-1115b8290baa + Curvature + Curvature + false + 0 + + + + + + 4810 + -39 + 53 + 20 + + + 4836.5 + -29 + + + + + + + + + + + + 3c5edcba-b7a5-4710-b076-4b19a7080a2b + 08bdcae0-d034-48dd-a145-24a9fcf3d3ff + Center + + + + + Returns the center of a geometry and the Diameter of it's bounding box as the Dimention +You can Right Click on the component's icon and choose "ForAll" option to have center point of a group of geometries. +Besides You can Right click on the component's icon and choose one of three provided options (Spacial/ Planar/ Basement ) to have Desired type of center. + true + 6a0e5005-183c-4ece-be96-cf4cb7eb9dc7 + Center + Center + + + + + + 4974 + -132 + 144 + 44 + + + 5044 + -110 + + + + + + 1 + Geometric + 66855b2d-500d-4bb4-a0d8-ba9ed331c1c0 + Geometric + Geometric + false + 924ff156-a262-48aa-bf78-1115b8290baa + 1 + + + + + + 4976 + -130 + 53 + 40 + + + 5004 + -110 + + + + + + + + 1 + Center + c8443129-e88c-4956-8575-af5b2757c37b + Center + Center + false + 0 + + + + + + 5059 + -130 + 57 + 20 + + + 5087.5 + -120 + + + + + + + + 1 + Diagonal size of geometry's bounding box + a7eabf9f-e9ed-4702-ad86-89b594e75b66 + Dimension + Dimension + false + 0 + + + + + + 5059 + -110 + 57 + 20 + + + 5087.5 + -100 + + + + + + + + + + + + 4c4e56eb-2f04-43f9-95a3-cc46a14f495a + Line + + + + + Create a line between two points. + true + 673b9d07-1207-465a-a8ea-e01c348f1ac2 + Line + Line + + + + + + 4944 + 27 + 117 + 44 + + + 5016 + 49 + + + + + + Line start point + 88114937-6f3e-4b14-a462-0fc8c506efe2 + Start Point + Start Point + false + 76429ee8-2e7d-4d4b-ac2b-34e913d1b9c1 + 1 + + + + + + 4946 + 29 + 55 + 20 + + + 4975 + 39 + + + + + + + + Line end point + ca1637a6-80ed-42d2-87b6-41e3388f143b + End Point + End Point + false + c8443129-e88c-4956-8575-af5b2757c37b + 1 + + + + + + 4946 + 49 + 55 + 20 + + + 4975 + 59 + + + + + + + + Line segment + dd0c862c-c189-496a-87a8-cc52af55c562 + Line + Line + false + 0 + + + + + + 5031 + 29 + 28 + 40 + + + 5045 + 49 + + + + + + + + + + + + b7798b74-037e-4f0c-8ac7-dc1043d093e0 + Rotate + + + + + Rotate an object in a plane. + true + 79439e82-c4d8-4436-b0ad-cda16c6aa83b + Rotate + Rotate + + + + + + 5130 + -13 + 141 + 64 + + + 5198 + 19 + + + + + + Base geometry + fc12ed3d-ffad-41d5-85d7-13516c3f64a1 + Geometry + Geometry + true + dd0c862c-c189-496a-87a8-cc52af55c562 + 1 + + + + + + 5132 + -11 + 51 + 20 + + + 5159 + -1 + + + + + + + + Rotation angle in radians + cbf10d6b-ae54-47b2-9028-581079ab99c3 + Angle + Angle + false + 0 + false + + + + + + 5132 + 9 + 51 + 20 + + + 5159 + 19 + + + + + + 1 + + + + + 1 + {0} + + + + + 1.5707963267948966 + + + + + + + + + + + Rotation plane + 3af0fe48-16b1-431a-b366-9ef2be1b5e8c + Plane + Plane + false + fddf3285-20a3-42a4-b39d-b9a2a9609ec5 + 1 + + + + + + 5132 + 29 + 51 + 20 + + + 5159 + 39 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Rotated geometry + 31d60323-1eef-4417-85fb-8764785d56f7 + Geometry + Geometry + false + 0 + + + + + + 5213 + -11 + 56 + 30 + + + 5241 + 4 + + + + + + + + Transformation data + a3296a2d-933d-47d8-b2e0-809e4a55cf77 + Transform + Transform + false + 0 + + + + + + 5213 + 19 + 56 + 30 + + + 5241 + 34 + + + + + + + + + + + + 4d2a06bd-4b0f-4c65-9ee0-4220e4c01703 + Scale + + + + + Scale an object uniformly in all directions. + true + d42e858d-8437-4870-af59-81c5025866e7 + Scale + Scale + + + + + + 5382 + -35 + 141 + 64 + + + 5450 + -3 + + + + + + Base geometry + 1237ed46-855f-4f2e-a5a3-96a4dea47090 + Geometry + Geometry + true + 31d60323-1eef-4417-85fb-8764785d56f7 + 1 + + + + + + 5384 + -33 + 51 + 20 + + + 5411 + -23 + + + + + + + + Center of scaling + e3a882e9-5f59-4b36-8cfe-d4a648a34166 + Center + Center + false + fddf3285-20a3-42a4-b39d-b9a2a9609ec5 + 1 + + + + + + 5384 + -13 + 51 + 20 + + + 5411 + -3 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Scaling factor + 7bda9ed9-ae4e-43ac-b87a-6bee4a56e282 + Factor + Factor + false + 1cbbdc3e-57b5-4089-93fb-4522f2f7834a + 1 + + + + + + 5384 + 7 + 51 + 20 + + + 5411 + 17 + + + + + + 1 + + + + + 1 + {0} + + + + + 0.5 + + + + + + + + + + + Scaled geometry + b772f85b-98e0-4e36-ae96-f51b17b2c411 + Geometry + Geometry + false + 0 + + + + + + 5465 + -33 + 56 + 30 + + + 5493 + -18 + + + + + + + + Transformation data + 06265c1f-3652-4a94-b8f6-6edd376dbb34 + Transform + Transform + false + 0 + + + + + + 5465 + -3 + 56 + 30 + + + 5493 + 12 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + d82e34b8-7fcf-49ee-9d53-a7d05165198f + Number Slider + Number Slider + false + 0 + + + + + + 5136 + 102 + 198 + 20 + + + 5136.684 + 102.2449 + + + + + + 3 + 1 + 1 + 10 + 0 + 0 + 6 + + + + + + + + + a3371040-e552-4bc8-b0ff-10a840258e88 + Negative + + + + + Compute the negative of a value. + true + 264fbfa5-781a-4fa7-a58a-4cf1522dbf35 + Negative + Negative + + + + + + 5370 + 65 + 103 + 28 + + + 5419 + 79 + + + + + + Input value + 63cddb0c-d4c3-41f7-be6e-db11d395f22a + Value + Value + false + d82e34b8-7fcf-49ee-9d53-a7d05165198f + 1 + + + + + + 5372 + 67 + 32 + 24 + + + 5389.5 + 79 + + + + + + + + Output value + 1cbbdc3e-57b5-4089-93fb-4522f2f7834a + Result + Result + false + 0 + + + + + + 5434 + 67 + 37 + 24 + + + 5452.5 + 79 + + + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + d4e41e66-e5b0-41a3-9efa-ae69bdd9bed7 + End Points + End Points + + + + + + 3144 + 3172 + 99 + 44 + + + 3194 + 3194 + + + + + + Curve to evaluate + 4ad9e46d-6a98-43d5-a873-1c099de1f7a0 + Curve + Curve + false + 9d691b43-c570-4280-97d7-5f1b84e62bac + 1 + + + + + + 3146 + 3174 + 33 + 40 + + + 3164 + 3194 + + + + + + + + Curve start point + 73e31c66-775b-40b7-8b1a-4a625bf9aa32 + Start + Start + false + 0 + + + + + + 3209 + 3174 + 32 + 20 + + + 3225 + 3184 + + + + + + + + Curve end point + 65549b65-763e-42a9-a596-c9d1e4aeb398 + End + End + false + 0 + + + + + + 3209 + 3194 + 32 + 20 + + + 3225 + 3204 + + + + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + f67fe8ff-4d10-425b-8c75-79702721c7c3 + Mirror + Mirror + + + + + + 4606 + 3437 + 141 + 44 + + + 4674 + 3459 + + + + + + Base geometry + 58fbca11-6629-48f5-9530-e0f25c9d5c88 + Geometry + Geometry + true + 864fffcb-78f2-4f1d-984d-c524b8bd661d + 1 + + + + + + 4608 + 3439 + 51 + 20 + + + 4635 + 3449 + + + + + + + + Mirror plane + e19d9396-296b-466c-a0fa-a1edb2deb830 + Plane + Plane + false + 520a508f-2426-4a9a-a491-89d5c13cb6d0 + 1 + + + + + + 4608 + 3459 + 51 + 20 + + + 4635 + 3469 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + 988e111a-f147-4329-96de-2f47316d01b2 + Geometry + Geometry + false + 0 + + + + + + 4689 + 3439 + 56 + 20 + + + 4717 + 3449 + + + + + + + + Transformation data + ee9e6cb5-5d5e-4771-828a-93ffb7bf57cd + Transform + Transform + false + 0 + + + + + + 4689 + 3459 + 56 + 20 + + + 4717 + 3469 + + + + + + + + + + + + 8529dbdf-9b6f-42e9-8e1f-c7a2bde56a70 + Line + + + + + Contains a collection of line segments + 520a508f-2426-4a9a-a491-89d5c13cb6d0 + Line + Line + false + 0 + + + + + + 4457 + 3574 + 50 + 24 + + + 4482.037 + 3586.759 + + + + + + 1 + + + + + 1 + {0} + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + + + + + + + + + + + + + + ce46b74e-00c9-43c4-805a-193b69ea4a11 + Multiplication + + + + + Mathematical multiplication + 161d2c09-fdf9-441c-b323-5007b0507897 + Multiplication + Multiplication + + + + + + 1509 + 2593 + 85 + 44 + + + 1540 + 2615 + + + + + + 2 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + First item for multiplication + 1a351b03-fc07-444b-ad10-fa7cfeee3af5 + A + A + true + 125a372b-916c-4b37-84e8-53786f7108ea + 1 + + + + + + 1511 + 2595 + 14 + 20 + + + 1519.5 + 2605 + + + + + + + + Second item for multiplication + a0660bb3-8f0d-4b46-b26d-d4863f815158 + B + B + true + 0 + + + + + + 1511 + 2615 + 14 + 20 + + + 1519.5 + 2625 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Integer + 16 + + + + + + + + + + + Result of multiplication + 0ab31ee5-a662-42db-a9f0-ca0831013edc + Result + Result + false + 0 + + + + + + 1555 + 2595 + 37 + 40 + + + 1573.5 + 2615 + + + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + 7221b5e9-2e77-4ecb-9ad6-90532f7e7415 + Join Curves + Join Curves + + + + + + 4651 + 3276 + 137 + 44 + + + 4730 + 3298 + + + + + + 1 + Curves to join + 641d539a-1d45-4c8e-ab8e-726e6ecfafd6 + 1 + Curves + Curves + false + 864fffcb-78f2-4f1d-984d-c524b8bd661d + 988e111a-f147-4329-96de-2f47316d01b2 + 2 + + + + + + 4653 + 3278 + 62 + 20 + + + 4693.5 + 3288 + + + + + + + + Preserve direction of input curves + ac794d57-8162-4c4b-85b0-a021a860160a + Preserve + Preserve + false + 0 + + + + + + 4653 + 3298 + 62 + 20 + + + 4693.5 + 3308 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + 8f93381c-91c2-49bd-a529-a5ce8f8e4702 + Curves + Curves + false + 0 + + + + + + 4745 + 3278 + 41 + 40 + + + 4765.5 + 3298 + + + + + + + + + + + + cae9fe53-6d63-44ed-9d6d-13180fbf6f89 + 1c9de8a1-315f-4c56-af06-8f69fee80a7a + Curve Graph Mapper + + + + + Remap values with a custom graph using input curves. + b37eac67-0843-4344-9956-3d92330016a1 + Curve Graph Mapper + Curve Graph Mapper + + + + + + 1777 + 2862 + 163 + 224 + + + 1845 + 2974 + + + + + + 1 + One or multiple graph curves to graph map values with + 120f989a-d69b-47cc-8833-f7f4a9083270 + Curves + Curves + false + bf230807-dbf0-49e8-9136-fa1e124bdb30 + 1 + + + + + + 1779 + 2864 + 51 + 27 + + + 1806 + 2877.75 + + + + + + + + Rectangle which defines the boundary of the graph, graph curves should be atleast partially inside this boundary + c1169407-50c6-4509-a033-ee580e697555 + Rectangle + Rectangle + false + d222d866-05d2-41e8-9567-8cca0e0544d2 + 1 + + + + + + 1779 + 2891 + 51 + 28 + + + 1806 + 2905.25 + + + + + + + + 1 + Values to graph map. Values are plotted along the X Axis, intersected with the graph curves, then mapped to the Y Axis + c07225be-f364-4a48-b228-f0a151a71478 + Values + Values + false + bd4aaa1e-5c93-4d92-a13b-51513caaff31 + 1 + + + + + + 1779 + 2919 + 51 + 27 + + + 1806 + 2932.75 + + + + + + + + Domain of the graphs X Axis, where the values get plotted (if omitted the input value lists domain bounds is used) + 86925885-b3fa-4a0a-90fc-85f970b7e3d1 + X Axis + X Axis + true + 0 + + + + + + 1779 + 2946 + 51 + 28 + + + 1806 + 2960.25 + + + + + + + + Domain of the graphs Y Axis, where the values get mapped to (if omitted the input value lists domain bounds is used) + 8547247e-48ec-468f-a4fe-e5fa45ef9233 + Y Axis + Y Axis + true + 0 + + + + + + 1779 + 2974 + 51 + 27 + + + 1806 + 2987.75 + + + + + + + + Flip the graphs X Axis from the bottom of the graph to the top of the graph + b2fa0ece-a9e9-43af-bddd-c034bd468744 + Flip + Flip + false + 0 + + + + + + 1779 + 3001 + 51 + 28 + + + 1806 + 3015.25 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Resize the graph by snapping it to the extents of the graph curves, in the plane of the boundary rectangle + 71e58007-a301-489b-8e47-b1b188a2c6ac + Snap + Snap + false + 0 + + + + + + 1779 + 3029 + 51 + 27 + + + 1806 + 3042.75 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Size of the graph labels + e99fdbfe-34d3-4457-9597-fbc92fec43ef + Text Size + Text Size + false + 0 + + + + + + 1779 + 3056 + 51 + 28 + + + 1806 + 3070.25 + + + + + + 1 + + + + + 1 + {0} + + + + + 0.25 + + + + + + + + + + + 1 + Resulting graph mapped values, mapped on the Y Axis + d3c05f2f-fcc7-4063-ac10-b690ce1be88f + Mapped + Mapped + false + 0 + + + + + + 1860 + 2864 + 78 + 20 + + + 1899 + 2874 + + + + + + + + 1 + The graph curves inside the boundary of the graph + c332f52b-f404-4ea7-9fe5-ff625e090375 + Graph Curves + Graph Curves + false + 0 + + + + + + 1860 + 2884 + 78 + 20 + + + 1899 + 2894 + + + + + + + + 1 + The points on the graph curves where the X Axis input values intersected + true + ff6e9d06-30f0-4e2b-8866-7f0eea59f480 + Graph Points + Graph Points + false + 0 + + + + + + 1860 + 2904 + 78 + 20 + + + 1899 + 2914 + + + + + + + + 1 + The lines from the X Axis input values to the graph curves + true + 7a1f249a-242a-4474-be0d-53c66a2e4afa + Value Lines + Value Lines + false + 0 + + + + + + 1860 + 2924 + 78 + 20 + + + 1899 + 2934 + + + + + + + + 1 + The points plotted on the X Axis which represent the input values + true + 4bc60ac5-5e44-4cce-92af-4b69b946ebb0 + Value Points + Value Points + false + 0 + + + + + + 1860 + 2944 + 78 + 20 + + + 1899 + 2954 + + + + + + + + 1 + The lines from the graph curves to the Y Axis graph mapped values + true + 060cb155-b497-47d4-82f3-738947f3705a + Mapped Lines + Mapped Lines + false + 0 + + + + + + 1860 + 2964 + 78 + 20 + + + 1899 + 2974 + + + + + + + + 1 + The points mapped on the Y Axis which represent the graph mapped values + true + f62c3a5d-6d87-46f3-9414-6dbf016061ff + Mapped Points + Mapped Points + false + 0 + + + + + + 1860 + 2984 + 78 + 20 + + + 1899 + 2994 + + + + + + + + The graph boundary background as a surface + 9668f4a4-b08e-436b-bcb7-0eb76b4842ba + Boundary + Boundary + false + 0 + + + + + + 1860 + 3004 + 78 + 20 + + + 1899 + 3014 + + + + + + + + 1 + The graph labels as curve outlines + 20801864-ac3f-422d-9cd8-23260a3aa1ac + Labels + Labels + false + 0 + + + + + + 1860 + 3024 + 78 + 20 + + + 1899 + 3034 + + + + + + + + 1 + True for input values outside of the X Axis domain bounds +False for input values inside of the X Axis domain bounds + dec45669-43cf-4f0a-a7a0-e259b267fd84 + Out Of Bounds + Out Of Bounds + false + 0 + + + + + + 1860 + 3044 + 78 + 20 + + + 1899 + 3054 + + + + + + + + 1 + True for input values on the X Axis which intersect a graph curve +False for input values on the X Axis which do not intersect a graph curve + 529404f3-0177-4622-95b7-a4912efa5d9a + Intersected + Intersected + false + 0 + + + + + + 1860 + 3064 + 78 + 20 + + + 1899 + 3074 + + + + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + 888980c4-0dec-45f4-8006-fa5b932a754f + Relay + Relay + false + b75a0e49-7509-488b-94f8-b51b4bf11f2d + 1 + + + + + + 1619 + 2720 + 44 + 16 + + + 1641 + 2728 + + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + bf230807-dbf0-49e8-9136-fa1e124bdb30 + Relay + Relay + false + b75a0e49-7509-488b-94f8-b51b4bf11f2d + 1 + + + + + + 1645 + 2914 + 44 + 16 + + + 1667 + 2922 + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + f3dcc498-5332-4136-8b5d-8307a1699189 + Number Slider + Number Slider + false + 0 + + + + + + 1934 + 2681 + 198 + 20 + + + 1934.588 + 2681.381 + + + + + + 3 + 1 + 1 + 1 + 0 + 0 + 1 + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + 1f435ea7-b15e-42a2-b05d-d86d6095476b + Stream Filter + Stream Filter + + + + + + 2172 + 2725 + 92 + 64 + + + 2217 + 2757 + + + + + + 3 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + cfe0f6d4-2600-4fc2-a693-ca2a11a72f45 + Gate + Gate + false + f3dcc498-5332-4136-8b5d-8307a1699189 + 1 + + + + + + 2174 + 2727 + 28 + 20 + + + 2189.5 + 2737 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + 2ec69885-a97f-42a1-87e4-db80fe69bf3f + false + Stream 0 + 0 + true + aa99eb53-f847-4761-874c-b2b7a794afd6 + 1 + + + + + + 2174 + 2747 + 28 + 20 + + + 2189.5 + 2757 + + + + + + + + 2 + Input stream at index 1 + 25105d7c-2bee-4104-9638-bd9b09c56d05 + false + Stream 1 + 1 + true + d3c05f2f-fcc7-4063-ac10-b690ce1be88f + 1 + + + + + + 2174 + 2767 + 28 + 20 + + + 2189.5 + 2777 + + + + + + + + 2 + Filtered stream + f7b0f737-7ab2-4e8c-b330-bda8f73ff3ab + false + Stream + S(1) + false + 0 + + + + + + 2232 + 2727 + 30 + 60 + + + 2247 + 2757 + + + + + + + + + + + + + + 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef + Quick Graph + + + + + 1 + Display a set of y-values as a graph + 36ed4567-d839-4fe6-8bea-38b48834ede6 + Quick Graph + Quick Graph + false + 0 + f7b0f737-7ab2-4e8c-b330-bda8f73ff3ab + 1 + + + + + + 2150 + 2536 + 150 + 150 + + + 2150.525 + 2536.906 + + 0 + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + true + 963306af-b369-4549-91c6-d87b15ddcd8b + Mirror + Mirror + + + + + + 4752 + 3513 + 141 + 44 + + + 4820 + 3535 + + + + + + Base geometry + 158bac51-def3-4482-84b1-d2af3d89e96a + Geometry + Geometry + true + 8f93381c-91c2-49bd-a529-a5ce8f8e4702 + 1 + + + + + + 4754 + 3515 + 51 + 20 + + + 4781 + 3525 + + + + + + + + Mirror plane + aca91943-0176-490c-9c09-4c5706a99c08 + Plane + Plane + false + ac386334-feed-477a-8bc6-c95a5def5d4f + 1 + + + + + + 4754 + 3535 + 51 + 20 + + + 4781 + 3545 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + 30ab48f0-9c91-4105-b339-743bf77a2ee0 + Geometry + Geometry + false + 0 + + + + + + 4835 + 3515 + 56 + 20 + + + 4863 + 3525 + + + + + + + + Transformation data + 406788d9-d23d-4528-a0b3-a32ca9571f34 + Transform + Transform + false + 0 + + + + + + 4835 + 3535 + 56 + 20 + + + 4863 + 3545 + + + + + + + + + + + + 8529dbdf-9b6f-42e9-8e1f-c7a2bde56a70 + Line + + + + + Contains a collection of line segments + ac386334-feed-477a-8bc6-c95a5def5d4f + Line + Line + false + 0 + + + + + + 4710 + 3657 + 50 + 24 + + + 4735.909 + 3669.756 + + + + + + 1 + + + + + 1 + {0} + + + + + + 2 + 1 + 0 + 0 + 1 + 0 + + + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + e0bf787e-e463-473e-a0e4-a0d615f46a68 + Join Curves + Join Curves + + + + + + 4934 + 3326 + 137 + 44 + + + 5013 + 3348 + + + + + + 1 + Curves to join + 340d4f7e-b03a-4b70-bb3f-0301bd27cdd4 + 1 + Curves + Curves + false + 8f93381c-91c2-49bd-a529-a5ce8f8e4702 + d3d6ce8c-75f1-4f3a-a3b1-d149d1d7ed4e + 2 + + + + + + 4936 + 3328 + 62 + 20 + + + 4976.5 + 3338 + + + + + + + + Preserve direction of input curves + cdb6b7f6-7975-4b40-b7ac-962f0f587d4c + Preserve + Preserve + false + 0 + + + + + + 4936 + 3348 + 62 + 20 + + + 4976.5 + 3358 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + f19f5885-3af6-43ca-a9b1-f19c6f0d7d9b + Curves + Curves + false + 0 + + + + + + 5028 + 3328 + 41 + 40 + + + 5048.5 + 3348 + + + + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + 02dcbd3d-c189-40fb-b0cb-b9b6e2503e80 + Mirror + Mirror + + + + + + 5133 + 3499 + 141 + 44 + + + 5201 + 3521 + + + + + + Base geometry + af9fdc06-0e22-4fb4-a730-d370ea3d586f + Geometry + Geometry + true + f19f5885-3af6-43ca-a9b1-f19c6f0d7d9b + 1 + + + + + + 5135 + 3501 + 51 + 20 + + + 5162 + 3511 + + + + + + + + Mirror plane + 4e45551b-b6b6-4ab5-bb08-7903b9e73728 + Plane + Plane + false + 5fe31173-9882-4eb9-a1ff-69261d6a1d6d + 1 + + + + + + 5135 + 3521 + 51 + 20 + + + 5162 + 3531 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + fa886a6f-7dd3-4fcd-91a0-ef9b0aee0827 + Geometry + Geometry + false + 0 + + + + + + 5216 + 3501 + 56 + 20 + + + 5244 + 3511 + + + + + + + + Transformation data + 7228596e-ff77-4761-8d2d-0547ed6c6ca3 + Transform + Transform + false + 0 + + + + + + 5216 + 3521 + 56 + 20 + + + 5244 + 3531 + + + + + + + + + + + + 8529dbdf-9b6f-42e9-8e1f-c7a2bde56a70 + Line + + + + + Contains a collection of line segments + 5fe31173-9882-4eb9-a1ff-69261d6a1d6d + Line + Line + false + 0 + + + + + + 5070 + 3721 + 50 + 24 + + + 5095.282 + 3733.534 + + + + + + 1 + + + + + 1 + {0} + + + + + + 4 + 1 + 0 + 0 + 1 + 0 + + + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + a3bdb442-4f6c-49ca-8ee1-e86a20ba335a + Join Curves + Join Curves + + + + + + 5129 + 3358 + 137 + 44 + + + 5208 + 3380 + + + + + + 1 + Curves to join + fa68183e-24b1-4ec9-9786-56e15e83e8ce + 1 + Curves + Curves + false + f19f5885-3af6-43ca-a9b1-f19c6f0d7d9b + fa886a6f-7dd3-4fcd-91a0-ef9b0aee0827 + 2 + + + + + + 5131 + 3360 + 62 + 20 + + + 5171.5 + 3370 + + + + + + + + Preserve direction of input curves + 1582c345-e0c8-4e7c-8992-e012336cfdd7 + Preserve + Preserve + false + 0 + + + + + + 5131 + 3380 + 62 + 20 + + + 5171.5 + 3390 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + 5fb9981e-83a0-4f44-86f1-b9f2a8df2415 + Curves + Curves + false + 0 + + + + + + 5223 + 3360 + 41 + 40 + + + 5243.5 + 3380 + + + + + + + + + + + + 9df5e896-552d-4c8c-b9ca-4fc147ffa022 + Expression + + + + + Evaluate an expression + 1/2*X^2+1/6*X^3+1/24*X^4+1/120*X^5+1/720*X^6+1/5040*X^7+1/40320*X^8++1/322560*X^9 + ea7761dd-655e-4acc-8f08-7e9de359b17b + Expression + Expression + + + + + + 2834 + 2211 + 729 + 28 + + + 3198 + 2225 + + + + + + 1 + ba80fd98-91a1-4958-b6a7-a94e40e52bdb + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Expression variable + adf5a857-cde7-4109-a163-329db95d1fbc + Variable X + X + true + 479e2e0d-a780-4b8b-8880-296c2865d84f + 1 + + + + + + 2836 + 2213 + 14 + 24 + + + 2844.5 + 2225 + + + + + + + + Result of expression + a3e572b7-8460-477e-8b21-a0f6ccee4a09 + Result + R + false + 0 + + + + + + 3545 + 2213 + 16 + 24 + + + 3553 + 2225 + + + + + + + + + + + + + + 9445ca40-cc73-4861-a455-146308676855 + Range + + + + + Create a range of numbers. + 3fe23929-c54b-4d69-8906-060ddf419ffb + Range + Range + + + + + + 2759 + 2266 + 129 + 44 + + + 2833 + 2288 + + + + + + Domain of numeric range + e14a9133-fd37-40c0-a725-c17711b8674b + Domain + Domain + false + c2e3ed25-7bc5-41d4-8d91-64fb92727afb + 1 + + + + + + 2761 + 2268 + 57 + 20 + + + 2799 + 2278 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1 + + + + + + + + + + + + Number of steps + ac4e8e3c-8162-466b-b199-7c681eb6409b + x-1 + Steps + Steps + false + 128af242-c5d6-4c33-9c40-346db3a83c21 + 1 + + + + + + 2761 + 2288 + 57 + 20 + + + 2799 + 2298 + + + + + + 1 + + + + + 1 + {0} + + + + + 10 + + + + + + + + + + + 1 + Range of numbers + 479e2e0d-a780-4b8b-8880-296c2865d84f + Range + Range + false + 0 + + + + + + 2848 + 2268 + 38 + 40 + + + 2867 + 2288 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 128af242-c5d6-4c33-9c40-346db3a83c21 + Number Slider + Number Slider + false + 0 + + + + + + 2372 + 2354 + 256 + 20 + + + 2372.616 + 2354.125 + + + + + + 3 + 1 + 1 + 1024 + 0 + 0 + 16 + + + + + + + + + 9445ca40-cc73-4861-a455-146308676855 + Range + + + + + Create a range of numbers. + b6fa66bc-8f51-4fd9-8900-73bd82d43231 + Range + Range + + + + + + 2667 + 2338 + 129 + 44 + + + 2741 + 2360 + + + + + + Domain of numeric range + bfb41409-fc68-4fc1-ae4f-29f9a0f0661b + Domain + Domain + false + c2e3ed25-7bc5-41d4-8d91-64fb92727afb + 1 + + + + + + 2669 + 2340 + 57 + 20 + + + 2707 + 2350 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 1 + + + + + + + + + + + + Number of steps + ba3e4a9e-2404-446f-962a-97139f98e4b7 + x-1 + Steps + Steps + false + 128af242-c5d6-4c33-9c40-346db3a83c21 + 1 + + + + + + 2669 + 2360 + 57 + 20 + + + 2707 + 2370 + + + + + + 1 + + + + + 1 + {0} + + + + + 10 + + + + + + + + + + + 1 + Range of numbers + 71eca093-1cad-437e-b31b-a8b5721370b1 + Range + Range + false + 0 + + + + + + 2756 + 2340 + 38 + 40 + + + 2775 + 2360 + + + + + + + + + + + + 3581f42a-9592-4549-bd6b-1c0fc39d067b + Construct Point + + + + + Construct a point from {xyz} coordinates. + true + 099ea0a7-4500-425d-af87-263944178b1a + Construct Point + Construct Point + + + + + + 2827 + 2330 + 132 + 64 + + + 2909 + 2362 + + + + + + {x} coordinate + cbb670ad-76f5-4a9a-9fb9-b531947e0415 + X coordinate + X coordinate + false + 71eca093-1cad-437e-b31b-a8b5721370b1 + 1 + + + + + + 2829 + 2332 + 65 + 20 + + + 2863 + 2342 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {y} coordinate + 37fd5c61-a605-4c07-aa74-5dc386832cfb + Y coordinate + Y coordinate + false + a3e572b7-8460-477e-8b21-a0f6ccee4a09 + 1 + + + + + + 2829 + 2352 + 65 + 20 + + + 2863 + 2362 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {z} coordinate + aa93adc8-6fe4-44d4-8cc6-b26dafd7d4fb + Z coordinate + Z coordinate + false + 0 + + + + + + 2829 + 2372 + 65 + 20 + + + 2863 + 2382 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Point coordinate + 78f00297-bf52-47d2-a199-6521f677a9eb + Point + Point + false + 0 + + + + + + 2924 + 2332 + 33 + 60 + + + 2940.5 + 2362 + + + + + + + + + + + + 2b2a4145-3dff-41d4-a8de-1ea9d29eef33 + Interpolate + + + + + Create an interpolated curve through a set of points. + 5b608709-26d9-4260-a2d0-d87f9b17f070 + Interpolate + Interpolate + + + + + + 2985 + 2316 + 128 + 84 + + + 3052 + 2358 + + + + + + 1 + Interpolation points + 2cdb773d-deca-4027-908c-66a79f997282 + Vertices + Vertices + false + 78f00297-bf52-47d2-a199-6521f677a9eb + 1 + + + + + + 2987 + 2318 + 50 + 20 + + + 3013.5 + 2328 + + + + + + + + Curve degree + 597cc886-1b9d-4515-a57f-a290a0120159 + Degree + Degree + false + 0 + + + + + + 2987 + 2338 + 50 + 20 + + + 3013.5 + 2348 + + + + + + 1 + + + + + 1 + {0} + + + + + 3 + + + + + + + + + + + Periodic curve + 0b5282c4-f52e-4553-ae8a-3f348c586329 + Periodic + Periodic + false + 0 + + + + + + 2987 + 2358 + 50 + 20 + + + 3013.5 + 2368 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Knot spacing (0=uniform, 1=chord, 2=sqrtchord) + 3f4e46d0-611a-4865-97d0-66615ba2544c + KnotStyle + KnotStyle + false + 0 + + + + + + 2987 + 2378 + 50 + 20 + + + 3013.5 + 2388 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Resulting nurbs curve + 89e2ec6c-a9fa-4ef6-a9f0-3e7b66a23ba8 + Curve + Curve + false + 0 + + + + + + 3067 + 2318 + 44 + 26 + + + 3089 + 2331.333 + + + + + + + + Curve length + cb32704c-8f69-43d8-a130-5082d2fcfd6a + Length + Length + false + 0 + + + + + + 3067 + 2344 + 44 + 27 + + + 3089 + 2358 + + + + + + + + Curve domain + 13e1f870-b7c5-444c-bb5f-23d2a81c7a1e + Domain + Domain + false + 0 + + + + + + 3067 + 2371 + 44 + 27 + + + 3089 + 2384.667 + + + + + + + + + + + + d1a28e95-cf96-4936-bf34-8bf142d731bf + Construct Domain + + + + + Create a numeric domain from two numeric extremes. + 415240eb-c8ac-4c48-b1e7-d3a9fca14a2d + Construct Domain + Construct Domain + + + + + + 2626 + 2202 + 143 + 44 + + + 2708 + 2224 + + + + + + Start value of numeric domain + ef805826-d683-40a2-aa34-35eef78b83ec + Domain start + Domain start + false + 4e4e4d5e-77d8-4f77-9214-00afbe9031a0 + 1 + + + + + + 2628 + 2204 + 65 + 20 + + + 2662 + 2214 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + End value of numeric domain + 11482385-4d54-4b89-9af0-40fea82601fd + Domain end + Domain end + false + 33012ff9-30c1-4d12-9636-3332639b69c7 + 1 + + + + + + 2628 + 2224 + 65 + 20 + + + 2662 + 2234 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Numeric domain between {A} and {B} + c2e3ed25-7bc5-41d4-8d91-64fb92727afb + Domain + Domain + false + 0 + + + + + + 2723 + 2204 + 44 + 40 + + + 2745 + 2224 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 3f7559cd-f8eb-4863-be0f-771c48551385 + Number Slider + Number Slider + false + 0 + + + + + + 2335 + 2332 + 256 + 20 + + + 2335.004 + 2332.565 + + + + + + 3 + 1 + 0 + 16 + 0 + 0 + 1.523 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 4e4e4d5e-77d8-4f77-9214-00afbe9031a0 + Number Slider + Number Slider + false + 0 + + + + + + 2332 + 2240 + 256 + 20 + + + 2332.915 + 2240.862 + + + + + + 3 + 1 + 0 + 100 + 0 + 0 + 0 + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 255;255;255;255 + + A group of Grasshopper objects + ea7761dd-655e-4acc-8f08-7e9de359b17b + 3fe23929-c54b-4d69-8906-060ddf419ffb + 128af242-c5d6-4c33-9c40-346db3a83c21 + b6fa66bc-8f51-4fd9-8900-73bd82d43231 + 099ea0a7-4500-425d-af87-263944178b1a + 5b608709-26d9-4260-a2d0-d87f9b17f070 + 415240eb-c8ac-4c48-b1e7-d3a9fca14a2d + 3f7559cd-f8eb-4863-be0f-771c48551385 + 4e4e4d5e-77d8-4f77-9214-00afbe9031a0 + 3f621e53-c84c-4cd8-9769-b0fc97b7f070 + b4cc584f-7b40-4647-89e7-8b7f5680c28d + 7e8d883b-2637-4556-8b0c-a4dd67804f95 + 1159ebe2-0417-4b81-8df3-428aed44a53f + 18011aa7-9bd0-4594-8ecd-100d2cc17275 + 4dacb4e3-e780-4884-9caf-85921383b97a + 15 + 697acc61-d5aa-4fd7-9449-e439a05879c5 + Group + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + 3f621e53-c84c-4cd8-9769-b0fc97b7f070 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 9 + + 0.018 + + + + + + 3233 + 2381 + 250 + 20 + + + 3233.42 + 2381.084 + + + + + + + + + + 5a41528b-12b9-40dc-a3f2-842034d267c4 + Text Tag 3D + + + + + Represents a list of 3D text tags in a Rhino viewport + true + 1159ebe2-0417-4b81-8df3-428aed44a53f + Text Tag 3D + Text Tag 3D + + + + + + 3582 + 2304 + 92 + 104 + + + 3660 + 2356 + + + + + + Location and orientation of text tag + true + 7f153151-4e27-4b7f-ae73-4bebdd148e92 + Location + Location + false + a2e949e5-7faa-40b6-b24e-f5e40fe331ad + 1 + + + + + + 3584 + 2306 + 61 + 20 + + + 3616 + 2316 + + + + + + + + The text to display + 1c9b22aa-1533-4c50-bcbd-8e13ee18b30e + Text + Text + true + 0 + + + + + + 3584 + 2326 + 61 + 20 + + + 3616 + 2336 + + + + + + 1 + + + + + 1 + {0} + + + + + false + 1/2*X^2+1/6*X^3+1/24*X^4+1/120*X^5+1/720*X^6+1/5040*X^7+1/40320*X^8++1/322560*X^9 + + + + + + + + + + + Size of text + 6aca2fa8-0ab4-4403-b7ed-9a64ef625ed8 + Size + Size + false + 3f621e53-c84c-4cd8-9769-b0fc97b7f070 + 1 + + + + + + 3584 + 2346 + 61 + 20 + + + 3616 + 2356 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Optional colour of tag + aa7c0ab5-9993-49d0-8108-b793645c6db7 + Colour + Colour + true + 0 + + + + + + 3584 + 2366 + 61 + 20 + + + 3616 + 2376 + + + + + + 1 + + + + + 1 + {0} + + + + + + 255;212;212;212 + + + + + + + + + + + + Text justification + cb1cdcf2-4788-47a0-bc2e-83302f713edc + Justification + Justification + false + 0 + + + + + + 3584 + 2386 + 61 + 20 + + + 3616 + 2396 + + + + + + 1 + + + + + 1 + {0} + + + + + 8 + + + + + + + + + + + + + + + c048ad76-ffcd-43b1-a007-4dd1b2373326 + Horizontal Frame + + + + + Get a horizontally aligned frame along a curve at a specified parameter. + 18011aa7-9bd0-4594-8ecd-100d2cc17275 + Horizontal Frame + Horizontal Frame + + + + + + 3436 + 2314 + 125 + 44 + + + 3506 + 2336 + + + + + + Curve to evaluate + 81a5bd15-3a5a-4dc4-9650-33e88f1d33b3 + Curve + Curve + false + 89e2ec6c-a9fa-4ef6-a9f0-3e7b66a23ba8 + 1 + + + + + + 3438 + 2316 + 53 + 20 + + + 3466 + 2326 + + + + + + + + Parameter on curve domain to evaluate + 34176a8a-27b4-4406-b953-94c8889264a8 + Parameter + Parameter + false + 4dacb4e3-e780-4884-9caf-85921383b97a + 1 + + + + + + 3438 + 2336 + 53 + 20 + + + 3466 + 2346 + + + + + + + + Horizontal curve frame at {t} + a2e949e5-7faa-40b6-b24e-f5e40fe331ad + Frame + Frame + false + 0 + + + + + + 3521 + 2316 + 38 + 40 + + + 3540 + 2336 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 4dacb4e3-e780-4884-9caf-85921383b97a + Number Slider + Number Slider + false + 0 + + + + + + 3223 + 2340 + 198 + 20 + + + 3223.686 + 2340.154 + + + + + + 6 + 1 + 0 + 255 + 0 + 0 + 63 + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + 0231c638-75e9-4782-a081-934beba9e3dc + End Points + End Points + + + + + + 3012 + 2700 + 99 + 44 + + + 3062 + 2722 + + + + + + Curve to evaluate + b5a228d2-e3cc-48ef-83a2-c1234d10225d + Curve + Curve + false + 89e2ec6c-a9fa-4ef6-a9f0-3e7b66a23ba8 + 1 + + + + + + 3014 + 2702 + 33 + 40 + + + 3032 + 2722 + + + + + + + + Curve start point + 1ad04470-0f1b-4c92-bd76-252ab82becc0 + Start + Start + false + 0 + + + + + + 3077 + 2702 + 32 + 20 + + + 3093 + 2712 + + + + + + + + Curve end point + a1868f5f-c467-4273-8b35-97754bd537b4 + End + End + false + 0 + + + + + + 3077 + 2722 + 32 + 20 + + + 3093 + 2732 + + + + + + + + + + + + b7798b74-037e-4f0c-8ac7-dc1043d093e0 + Rotate + + + + + Rotate an object in a plane. + ec01ab63-57bc-42d1-9d29-da092d8c7a28 + Rotate + Rotate + + + + + + 3094 + 2832 + 141 + 64 + + + 3162 + 2864 + + + + + + Base geometry + c408dc85-3093-4216-a153-cdbdc6176bf0 + Geometry + Geometry + true + 89e2ec6c-a9fa-4ef6-a9f0-3e7b66a23ba8 + 1 + + + + + + 3096 + 2834 + 51 + 20 + + + 3123 + 2844 + + + + + + + + Rotation angle in radians + ecbb7491-44b2-4029-afde-4f6996b13d11 + Angle + Angle + false + 0 + false + + + + + + 3096 + 2854 + 51 + 20 + + + 3123 + 2864 + + + + + + 1 + + + + + 1 + {0} + + + + + 3.1415926535897931 + + + + + + + + + + + Rotation plane + 1e75cd90-fcef-4ea2-b1a2-25e9be7dbc3a + Plane + Plane + false + a1868f5f-c467-4273-8b35-97754bd537b4 + 1 + + + + + + 3096 + 2874 + 51 + 20 + + + 3123 + 2884 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Rotated geometry + da6506c6-d2b3-4a8f-8217-00f0397ade8a + Geometry + Geometry + false + 0 + + + + + + 3177 + 2834 + 56 + 30 + + + 3205 + 2849 + + + + + + + + Transformation data + f05340df-23c3-45f2-9d48-4cd2112d4d3a + Transform + Transform + false + 0 + + + + + + 3177 + 2864 + 56 + 30 + + + 3205 + 2879 + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + bad947e7-fcf0-4a5d-8bce-5e359b9fa391 + Join Curves + Join Curves + + + + + + 3265 + 2962 + 121 + 44 + + + 3328 + 2984 + + + + + + 1 + Curves to join + 777156cd-0b69-409f-a453-5a71c55a78ab + Curves + Curves + false + 89e2ec6c-a9fa-4ef6-a9f0-3e7b66a23ba8 + da6506c6-d2b3-4a8f-8217-00f0397ade8a + 2 + + + + + + 3267 + 2964 + 46 + 20 + + + 3291.5 + 2974 + + + + + + + + Preserve direction of input curves + 6f8750db-b2af-47ad-a407-b3a5a7222345 + Preserve + Preserve + false + 0 + + + + + + 3267 + 2984 + 46 + 20 + + + 3291.5 + 2994 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + 4c0f4aae-e837-4b93-9746-6bb14388d5fe + Curves + Curves + false + 0 + + + + + + 3343 + 2964 + 41 + 40 + + + 3363.5 + 2984 + + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + 7f55bfc0-1cbf-49f8-980b-7423f1acc1ed + Line SDL + Line SDL + + + + + + 3240 + 2740 + 109 + 64 + + + 3304 + 2772 + + + + + + Line start point + 4ffd5612-ea77-4a6c-9745-1b4f374bce7c + Start + Start + false + 0 + + + + + + 3242 + 2742 + 47 + 20 + + + 3267 + 2752 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Line tangent (direction) + 79419927-b4e7-4123-b879-82cdd56c2d84 + Direction + Direction + false + 0 + + + + + + 3242 + 2762 + 47 + 20 + + + 3267 + 2772 + + + + + + 1 + + + + + 1 + {0} + + + + + + 1 + 1 + 0 + + + + + + + + + + + + Line length + d77c21a2-c64e-4606-a221-85da588dd1d6 + Length + Length + false + 1aae2506-52a6-4835-a014-88f8cfb466a9 + 1 + + + + + + 3242 + 2782 + 47 + 20 + + + 3267 + 2792 + + + + + + 1 + + + + + 1 + {0} + + + + + 2 + + + + + + + + + + + Line segment + e252c987-a930-489b-8b9e-4a53418965fd + Line + Line + false + 0 + + + + + + 3319 + 2742 + 28 + 60 + + + 3333 + 2772 + + + + + + + + + + + + 84627490-0fb2-4498-8138-ad134ee4cb36 + Curve | Curve + + + + + Solve intersection events for two curves. + 2227dacf-5c5b-4f33-8527-f1ae4c3bc9bb + Curve | Curve + Curve | Curve + + + + + + 3381 + 2650 + 133 + 64 + + + 3442 + 2682 + + + + + + First curve + b86b7594-574f-40a7-87fe-4a477db10920 + Curve A + Curve A + false + 89e2ec6c-a9fa-4ef6-a9f0-3e7b66a23ba8 + 1 + + + + + + 3383 + 2652 + 44 + 30 + + + 3406.5 + 2667 + + + + + + + + Second curve + f7929fc5-8e1a-45bd-a65c-0fadffc3e0e7 + Curve B + Curve B + false + e252c987-a930-489b-8b9e-4a53418965fd + 1 + + + + + + 3383 + 2682 + 44 + 30 + + + 3406.5 + 2697 + + + + + + + + 1 + Intersection events + 707f39c5-cce2-44d2-be1c-1565337e99aa + Points + Points + false + 0 + + + + + + 3457 + 2652 + 55 + 20 + + + 3484.5 + 2662 + + + + + + + + 1 + Parameters on first curve + f31778a9-5713-4aa1-8044-e57a01d766d5 + Params A + Params A + false + 0 + + + + + + 3457 + 2672 + 55 + 20 + + + 3484.5 + 2682 + + + + + + + + 1 + Parameters on second curve + f9f1dd6b-c996-49bc-97d7-c4395c6986a3 + Params B + Params B + false + 0 + + + + + + 3457 + 2692 + 55 + 20 + + + 3484.5 + 2702 + + + + + + + + + + + + 59daf374-bc21-4a5e-8282-5504fb7ae9ae + List Item + + + + + 0 + Retrieve a specific item from a list. + 300ddc9e-2f43-4e1d-9ad6-96a1769464a7 + List Item + List Item + + + + + + 3464 + 2808 + 77 + 64 + + + 3512 + 2840 + + + + + + 3 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 2e3ab970-8545-46bb-836c-1c11e5610bce + cb95db89-6165-43b6-9c41-5702bc5bf137 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 1 + Base list + 3bc69290-2fb4-4f4a-8473-2266c45da205 + List + List + false + 707f39c5-cce2-44d2-be1c-1565337e99aa + 1 + + + + + + 3466 + 2810 + 31 + 20 + + + 3483 + 2820 + + + + + + + + Item index + bfc8dc68-7e76-452e-b905-5f46e1aec63d + Index + Index + false + 0 + + + + + + 3466 + 2830 + 31 + 20 + + + 3483 + 2840 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Wrap index to list bounds + 30e431a7-4628-4d42-b58f-69198b48b24a + Wrap + Wrap + false + 0 + + + + + + 3466 + 2850 + 31 + 20 + + + 3483 + 2860 + + + + + + 1 + + + + + 1 + {0} + + + + + true + + + + + + + + + + + Item at {i'} + 5394ccd1-0666-4873-bd3d-f1edbf1ea26b + false + Item + i + false + 0 + + + + + + 3527 + 2810 + 12 + 60 + + + 3533 + 2840 + + + + + + + + + + + + + + 65283518-ad00-49d3-87fb-f76823ebb162 + Data Dam + + + + + 10000000 + 0 + Delay data on its way through the document + true + 2 + b3e2853d-6b13-4f01-9d5e-a2eaea483d57 + Data Dam + Data Dam + + + + + + 3586 + 2822 + 123 + 36 + + + 3630 + 2824 + + + + + + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 2 + Data to buffer + 3cf26102-6c7c-4702-9bda-98dc6fe8a741 + Data Data A + Data A + true + 5394ccd1-0666-4873-bd3d-f1edbf1ea26b + 1 + + + + + + 3588 + 2824 + 39 + 32 + + + 3609 + 2840 + + + + + + + + 2 + Buffered data + 3c27992c-b50b-4607-b659-16dbcf7f6564 + false + Data Data A + Data A + false + 0 + + + + + + 3665 + 2824 + 42 + 32 + + + 3686 + 2840 + + + + + + + + + + + + + + 65283518-ad00-49d3-87fb-f76823ebb162 + Data Dam + + + + + 10000000 + 0 + Delay data on its way through the document + true + 2 + 947994a4-1bcb-481c-a0e9-65b9b5d3dec0 + Data Dam + Data Dam + + + + + + 3739 + 2822 + 123 + 36 + + + 3783 + 2824 + + + + + + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 2 + Data to buffer + 7b3d0145-0d4a-4ca2-88c3-7692e4b830d0 + Data Data A + Data A + true + 3c27992c-b50b-4607-b659-16dbcf7f6564 + 1 + + + + + + 3741 + 2824 + 39 + 32 + + + 3762 + 2840 + + + + + + + + 2 + Buffered data + d9ec35cc-1baa-412a-8822-cb7e558e8883 + false + Data Data A + Data A + false + 0 + + + + + + 3818 + 2824 + 42 + 32 + + + 3839 + 2840 + + + + + + + + + + + + + + 9abae6b7-fa1d-448c-9209-4a8155345841 + Deconstruct + + + + + Deconstruct a point into its component parts. + 96ff3ff1-df8e-4bb9-822e-d450879ca889 + Deconstruct + Deconstruct + + + + + + 2464 + 2090 + 135 + 64 + + + 2511 + 2122 + + + + + + Input point + 37833088-5b0a-494a-bad5-3812d584b30b + Point + Point + false + d9ec35cc-1baa-412a-8822-cb7e558e8883 + 1 + + + + + + 2466 + 2092 + 30 + 60 + + + 2482.5 + 2122 + + + + + + + + Point {x} component + 7e7cd057-603d-465c-84b1-68429a049196 + X component + X component + false + 0 + + + + + + 2526 + 2092 + 71 + 20 + + + 2561.5 + 2102 + + + + + + + + Point {y} component + c9a930c1-c774-454f-a55a-d893de8f7b4d + Y component + Y component + false + 0 + + + + + + 2526 + 2112 + 71 + 20 + + + 2561.5 + 2122 + + + + + + + + Point {z} component + e0775a27-b566-48c1-b7f2-b3231fb1c85a + Z component + Z component + false + 0 + + + + + + 2526 + 2132 + 71 + 20 + + + 2561.5 + 2142 + + + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + 5bf0574b-1ffd-4fed-93cb-86d416a3a1e7 + End Points + End Points + + + + + + 3285 + 2860 + 99 + 44 + + + 3335 + 2882 + + + + + + Curve to evaluate + b0d6b75b-e8b0-405b-86eb-fb604d4fc026 + Curve + Curve + false + da6506c6-d2b3-4a8f-8217-00f0397ade8a + 1 + + + + + + 3287 + 2862 + 33 + 40 + + + 3305 + 2882 + + + + + + + + Curve start point + 73545423-70e5-4c34-9d68-07e279755946 + Start + Start + false + 0 + + + + + + 3350 + 2862 + 32 + 20 + + + 3366 + 2872 + + + + + + + + Curve end point + 5935cb55-8461-4851-96e1-3921ba19e5b3 + End + End + false + 0 + + + + + + 3350 + 2882 + 32 + 20 + + + 3366 + 2892 + + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + 2c9883b0-4204-432e-b3ce-92fb97d78f45 + Line SDL + Line SDL + + + + + + 3485 + 2940 + 109 + 64 + + + 3549 + 2972 + + + + + + Line start point + 2f48ec07-a97a-498b-a856-84da307bad3b + Start + Start + false + 73545423-70e5-4c34-9d68-07e279755946 + 1 + + + + + + 3487 + 2942 + 47 + 20 + + + 3512 + 2952 + + + + + + + + Line tangent (direction) + 702b7b0e-47fe-4a55-a652-1a3a9c1a2886 + Direction + Direction + false + 0 + + + + + + 3487 + 2962 + 47 + 20 + + + 3512 + 2972 + + + + + + 1 + + + + + 1 + {0} + + + + + + -0.4375 + 0 + 0 + + + + + + + + + + + + Line length + 96b90466-80cb-473d-9b5d-c219ccc5c6cd + Length + Length + false + 0 + + + + + + 3487 + 2982 + 47 + 20 + + + 3512 + 2992 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + 1d3dad9d-0d15-4d2b-bf0e-978dd2944097 + Line + Line + false + 0 + + + + + + 3564 + 2942 + 28 + 60 + + + 3578 + 2972 + + + + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + 0999ace9-690f-4923-944f-f86c4178e380 + Mirror + Mirror + + + + + + 3547 + 2884 + 141 + 44 + + + 3615 + 2906 + + + + + + Base geometry + 8c043b89-e60e-467d-98a1-5ac7ce4902d1 + Geometry + Geometry + true + 4c0f4aae-e837-4b93-9746-6bb14388d5fe + 1 + + + + + + 3549 + 2886 + 51 + 20 + + + 3576 + 2896 + + + + + + + + Mirror plane + 5abafdd4-f079-4710-9ec8-8d8fe577fcdf + Plane + Plane + false + 1d3dad9d-0d15-4d2b-bf0e-978dd2944097 + 1 + + + + + + 3549 + 2906 + 51 + 20 + + + 3576 + 2916 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + 71cb2f9f-c658-4161-a0bd-26275e365b65 + Geometry + Geometry + false + 0 + + + + + + 3630 + 2886 + 56 + 20 + + + 3658 + 2896 + + + + + + + + Transformation data + 99e0028c-f1fc-4d1c-86a0-14a8e39d77a0 + Transform + Transform + false + 0 + + + + + + 3630 + 2906 + 56 + 20 + + + 3658 + 2916 + + + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + 4bfe62c3-5659-4b07-985b-4eec6a799fc2 + End Points + End Points + + + + + + 3777 + 2879 + 99 + 44 + + + 3827 + 2901 + + + + + + Curve to evaluate + bd647c18-0bd5-408e-90f3-8ea0f4918e3d + Curve + Curve + false + 9714ff9c-33a4-4aa2-ac3d-47d31d846153 + 1 + + + + + + 3779 + 2881 + 33 + 40 + + + 3797 + 2901 + + + + + + + + Curve start point + 8a150b4a-a3d0-49e6-adfa-283ec49d5ba6 + Start + Start + false + 0 + + + + + + 3842 + 2881 + 32 + 20 + + + 3858 + 2891 + + + + + + + + Curve end point + 39efff96-4789-4a4c-b9d7-6ecccde730c7 + End + End + false + 0 + + + + + + 3842 + 2901 + 32 + 20 + + + 3858 + 2911 + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + f32c2aa3-eb6d-48dc-b2aa-d70c6b03ba21 + Join Curves + Join Curves + + + + + + 3673 + 2944 + 121 + 44 + + + 3736 + 2966 + + + + + + 1 + Curves to join + 7b4f5fbe-a75d-41fa-aad3-1ac5d8f0f806 + Curves + Curves + false + 71cb2f9f-c658-4161-a0bd-26275e365b65 + 4c0f4aae-e837-4b93-9746-6bb14388d5fe + 2 + + + + + + 3675 + 2946 + 46 + 20 + + + 3699.5 + 2956 + + + + + + + + Preserve direction of input curves + b0524256-55ef-41fa-afe7-aec4b4fb7837 + Preserve + Preserve + false + 0 + + + + + + 3675 + 2966 + 46 + 20 + + + 3699.5 + 2976 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + 9714ff9c-33a4-4aa2-ac3d-47d31d846153 + Curves + Curves + false + 0 + + + + + + 3751 + 2946 + 41 + 40 + + + 3771.5 + 2966 + + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + true + 79005952-0fc6-439d-95d0-8d595224c320 + Move + Move + + + + + + 3879 + 2933 + 141 + 44 + + + 3947 + 2955 + + + + + + Base geometry + 78a8c78b-70bb-4c03-968f-6c7dddf73cce + Geometry + Geometry + true + 9714ff9c-33a4-4aa2-ac3d-47d31d846153 + 1 + + + + + + 3881 + 2935 + 51 + 20 + + + 3908 + 2945 + + + + + + + + Translation vector + d16417b4-31c8-4062-ba06-4e95d8abf7b2 + Motion + Motion + false + 8a150b4a-a3d0-49e6-adfa-283ec49d5ba6 + 1 + + + + + + 3881 + 2955 + 51 + 20 + + + 3908 + 2965 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 5e676845-b462-4583-8c24-956eaa5518fd + Geometry + Geometry + false + 0 + + + + + + 3962 + 2935 + 56 + 20 + + + 3990 + 2945 + + + + + + + + Transformation data + a6a42d3f-be63-408e-84ab-042c2b1f2b5e + Transform + Transform + false + 0 + + + + + + 3962 + 2955 + 56 + 20 + + + 3990 + 2965 + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + bd37c7f4-ed86-4856-8314-82f907959555 + Join Curves + Join Curves + + + + + + 4061 + 2996 + 121 + 44 + + + 4124 + 3018 + + + + + + 1 + Curves to join + c222c791-02ae-4feb-8332-55eed3efd991 + Curves + Curves + false + 3a8ffb70-c4c4-4d77-ace6-72fdbebbf82b + 9714ff9c-33a4-4aa2-ac3d-47d31d846153 + 2 + + + + + + 4063 + 2998 + 46 + 20 + + + 4087.5 + 3008 + + + + + + + + Preserve direction of input curves + 09425dce-0231-45e1-84ff-8953a991491c + Preserve + Preserve + false + 0 + + + + + + 4063 + 3018 + 46 + 20 + + + 4087.5 + 3028 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + 4bd48c64-bce6-4170-935e-14cd641fb281 + Curves + Curves + false + 0 + + + + + + 4139 + 2998 + 41 + 40 + + + 4159.5 + 3018 + + + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + fcad8894-eddc-4cba-bc73-32250c865463 + End Points + End Points + + + + + + 4163 + 2896 + 99 + 44 + + + 4213 + 2918 + + + + + + Curve to evaluate + 1e135b74-9615-4367-b2f3-c38f6fa2ebed + Curve + Curve + false + 4bd48c64-bce6-4170-935e-14cd641fb281 + 1 + + + + + + 4165 + 2898 + 33 + 40 + + + 4183 + 2918 + + + + + + + + Curve start point + 04d54b2e-52e3-43c2-b754-9377d35c2ded + Start + Start + false + 0 + + + + + + 4228 + 2898 + 32 + 20 + + + 4244 + 2908 + + + + + + + + Curve end point + 23f25f50-53a4-4383-bee1-1b4ec8c4a6bc + End + End + false + 0 + + + + + + 4228 + 2918 + 32 + 20 + + + 4244 + 2928 + + + + + + + + + + + + 9abae6b7-fa1d-448c-9209-4a8155345841 + Deconstruct + + + + + Deconstruct a point into its component parts. + b999d9a0-08d5-442d-97a3-cb8f5a273fb6 + Deconstruct + Deconstruct + + + + + + 4645 + 2789 + 135 + 64 + + + 4692 + 2821 + + + + + + Input point + 4c3a69f6-30d8-452e-a548-8dc28501934b + Point + Point + false + bd6d5f7d-77c7-457d-a153-f0b0b79693ab + 1 + + + + + + 4647 + 2791 + 30 + 60 + + + 4663.5 + 2821 + + + + + + + + Point {x} component + 6290d204-9b2b-40d8-b73a-78868c2ac3c8 + X component + X component + false + 0 + + + + + + 4707 + 2791 + 71 + 20 + + + 4742.5 + 2801 + + + + + + + + Point {y} component + f5abf808-fb4d-4bff-b8d3-a7ffd2f5b68d + Y component + Y component + false + 0 + + + + + + 4707 + 2811 + 71 + 20 + + + 4742.5 + 2821 + + + + + + + + Point {z} component + 3092fbf7-ba00-455a-8a87-9143dcb96cb3 + Z component + Z component + false + 0 + + + + + + 4707 + 2831 + 71 + 20 + + + 4742.5 + 2841 + + + + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + 2e47c938-1f06-4bde-8191-313499db9349 + Relay + Relay + false + 6290d204-9b2b-40d8-b73a-78868c2ac3c8 + 1 + + + + + + 1601 + 2664 + 44 + 16 + + + 1623 + 2672 + + + + + + + + + + eeafc956-268e-461d-8e73-ee05c6f72c01 + Stream Filter + + + + + Filters a collection of input streams + 4b41493c-463a-4bc5-8ab9-1e3af602cbbe + Stream Filter + Stream Filter + + + + + + 5267 + 3134 + 92 + 64 + + + 5312 + 3166 + + + + + + 3 + 2e3ab970-8545-46bb-836c-1c11e5610bce + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + Index of Gate stream + ff11a81d-a9ef-4ac1-bb6c-9cfca8b9e255 + Gate + Gate + false + 914063b3-1049-452e-ad52-acaf81b972d7 + 1 + + + + + + 5269 + 3136 + 28 + 20 + + + 5284.5 + 3146 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + 2 + Input stream at index 0 + a09768e7-ac55-4ed5-9d43-8464672078a7 + false + Stream 0 + 0 + true + 5fb9981e-83a0-4f44-86f1-b9f2a8df2415 + 1 + + + + + + 5269 + 3156 + 28 + 20 + + + 5284.5 + 3166 + + + + + + + + 2 + Input stream at index 1 + cfc8aaba-df6f-40f9-b91e-5ffe2486e1ab + false + Stream 1 + 1 + true + e38fdda5-295d-429f-aaff-5bf969699dff + 1 + + + + + + 5269 + 3176 + 28 + 20 + + + 5284.5 + 3186 + + + + + + + + 2 + Filtered stream + 882400bc-d4cf-428b-bfa4-53f56cbcc266 + false + Stream + S(1) + false + 0 + + + + + + 5327 + 3136 + 30 + 60 + + + 5342 + 3166 + + + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 914063b3-1049-452e-ad52-acaf81b972d7 + Number Slider + Number Slider + false + 0 + + + + + + 5122 + 3071 + 198 + 20 + + + 5122.083 + 3071.478 + + + + + + 3 + 1 + 1 + 1 + 0 + 0 + 1 + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + true + 9453d07e-8b75-4351-8b65-2bbf7e314c8a + Move + Move + + + + + + 4242 + 3057 + 141 + 44 + + + 4310 + 3079 + + + + + + Base geometry + d2a5ead8-fe65-4041-8bc0-51c564030d95 + Geometry + Geometry + true + ee2ddca9-3a44-46c5-95f4-76c64d7daac8 + 1 + + + + + + 4244 + 3059 + 51 + 20 + + + 4271 + 3069 + + + + + + + + Translation vector + 4404cb8f-8995-4e16-bf57-a03bc7157437 + Motion + Motion + false + 04d54b2e-52e3-43c2-b754-9377d35c2ded + 1 + + + + + + 4244 + 3079 + 51 + 20 + + + 4271 + 3089 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + fa8f60fa-c7e5-4d85-945b-d41068fafcd8 + Geometry + Geometry + false + 0 + + + + + + 4325 + 3059 + 56 + 20 + + + 4353 + 3069 + + + + + + + + Transformation data + 87a91da5-f55e-41d5-8f5d-099af2714854 + Transform + Transform + false + 0 + + + + + + 4325 + 3079 + 56 + 20 + + + 4353 + 3089 + + + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + c728a4f8-b2fd-4c72-98aa-27864f4b8406 + End Points + End Points + + + + + + 4577 + 2970 + 99 + 44 + + + 4627 + 2992 + + + + + + Curve to evaluate + f964bc29-07de-4871-aba5-1ac832c92f5e + Curve + Curve + false + e38fdda5-295d-429f-aaff-5bf969699dff + 1 + + + + + + 4579 + 2972 + 33 + 40 + + + 4597 + 2992 + + + + + + + + Curve start point + bd6d5f7d-77c7-457d-a153-f0b0b79693ab + Start + Start + false + 0 + + + + + + 4642 + 2972 + 32 + 20 + + + 4658 + 2982 + + + + + + + + Curve end point + 50df8b2d-6c89-49e6-841c-2eb103da9c3f + End + End + false + 0 + + + + + + 4642 + 2992 + 32 + 20 + + + 4658 + 3002 + + + + + + + + + + + + 8073a420-6bec-49e3-9b18-367f6fd76ac3 + Join Curves + + + + + Join as many curves as possible + 3593af5c-bdb4-4e2a-bf5f-39433bcea6fd + Join Curves + Join Curves + + + + + + 4419 + 2943 + 121 + 44 + + + 4482 + 2965 + + + + + + 1 + Curves to join + 0c4b8184-583f-4545-9c4f-5531f334b368 + Curves + Curves + false + 1c0d70ba-3c79-47f9-98a5-cb9c31856c73 + 4bd48c64-bce6-4170-935e-14cd641fb281 + 2 + + + + + + 4421 + 2945 + 46 + 20 + + + 4445.5 + 2955 + + + + + + + + Preserve direction of input curves + 86d04439-8d86-49df-9571-db41d618e42d + Preserve + Preserve + false + 0 + + + + + + 4421 + 2965 + 46 + 20 + + + 4445.5 + 2975 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + 1 + Joined curves and individual curves that could not be joined. + e38fdda5-295d-429f-aaff-5bf969699dff + Curves + Curves + false + 0 + + + + + + 4497 + 2945 + 41 + 40 + + + 4517.5 + 2965 + + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 1aae2506-52a6-4835-a014-88f8cfb466a9 + Number Slider + Number Slider + false + 0 + + + + + + 2998 + 2784 + 198 + 20 + + + + + + 3 + 1 + 1 + 10 + 0 + 0 + 4 + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 33012ff9-30c1-4d12-9636-3332639b69c7 + Panel + + false + 0 + 0 + 1.2564126401 + + + + + + 2413 + 2269 + 91 + 40 + + 0 + 0 + 0 + + + + + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + 44b430eb-7d3b-47c4-89ba-5147f179979f + Mirror + Mirror + + + + + + 4003 + 2812 + 141 + 44 + + + 4071 + 2834 + + + + + + Base geometry + 8924123c-bcc7-4d6b-812e-e7b12d6c0e68 + Geometry + Geometry + true + 5e676845-b462-4583-8c24-956eaa5518fd + 1 + + + + + + 4005 + 2814 + 51 + 20 + + + 4032 + 2824 + + + + + + + + Mirror plane + 3b857671-61e5-4f76-b539-921e83340286 + Plane + Plane + false + 7379e2ec-69bb-4919-90a5-86dfe0bc960e + 1 + + + + + + 4005 + 2834 + 51 + 20 + + + 4032 + 2844 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + 3a8ffb70-c4c4-4d77-ace6-72fdbebbf82b + Geometry + Geometry + false + 0 + + + + + + 4086 + 2814 + 56 + 20 + + + 4114 + 2824 + + + + + + + + Transformation data + 86e359e2-7903-4e7e-9eca-2014f7c44953 + Transform + Transform + false + 0 + + + + + + 4086 + 2834 + 56 + 20 + + + 4114 + 2844 + + + + + + + + + + + + 8529dbdf-9b6f-42e9-8e1f-c7a2bde56a70 + Line + + + + + Contains a collection of line segments + 7379e2ec-69bb-4919-90a5-86dfe0bc960e + Line + Line + false + 0 + + + + + + 3909 + 2884 + 50 + 24 + + + 3934 + 2896 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + true + 61942aad-c550-4dee-b8b1-da408f8a147e + Mirror + Mirror + + + + + + 4382 + 2824 + 141 + 44 + + + 4450 + 2846 + + + + + + Base geometry + dc56aba1-5eed-4c22-b61f-3163879f7ab3 + Geometry + Geometry + true + 4bd48c64-bce6-4170-935e-14cd641fb281 + 1 + + + + + + 4384 + 2826 + 51 + 20 + + + 4411 + 2836 + + + + + + + + Mirror plane + aad2fb9c-08aa-45da-93be-603d03015281 + Plane + Plane + false + e968af5a-43f6-470e-b0c5-544c9df82364 + 1 + + + + + + 4384 + 2846 + 51 + 20 + + + 4411 + 2856 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + ee2ddca9-3a44-46c5-95f4-76c64d7daac8 + Geometry + Geometry + false + 0 + + + + + + 4465 + 2826 + 56 + 20 + + + 4493 + 2836 + + + + + + + + Transformation data + 24de9e46-dbe7-490b-8d8e-d0ce117890e8 + Transform + Transform + false + 0 + + + + + + 4465 + 2846 + 56 + 20 + + + 4493 + 2856 + + + + + + + + + + + + 8529dbdf-9b6f-42e9-8e1f-c7a2bde56a70 + Line + + + + + Contains a collection of line segments + e968af5a-43f6-470e-b0c5-544c9df82364 + Line + Line + false + 0 + + + + + + 4276 + 2860 + 50 + 24 + + + 4301 + 2872 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + + + + + + + + + + + + + + e9eb1dcf-92f6-4d4d-84ae-96222d60f56b + Move + + + + + Translate (move) an object along a vector. + 4c26ec9d-4f91-468a-bc58-9c7bf4d7a043 + Move + Move + + + + + + 4429 + 3063 + 141 + 44 + + + 4497 + 3085 + + + + + + Base geometry + 461733cd-8244-43d7-ad4d-ff16ea8a2e2c + Geometry + Geometry + true + fa8f60fa-c7e5-4d85-945b-d41068fafcd8 + 1 + + + + + + 4431 + 3065 + 51 + 20 + + + 4458 + 3075 + + + + + + + + Translation vector + 30444de0-7178-44c6-b4ce-a1cb99db5257 + Motion + Motion + false + 04d54b2e-52e3-43c2-b754-9377d35c2ded + 1 + + + + + + 4431 + 3085 + 51 + 20 + + + 4458 + 3095 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 10 + + + + + + + + + + + + Translated geometry + 1c0d70ba-3c79-47f9-98a5-cb9c31856c73 + Geometry + Geometry + false + 0 + + + + + + 4512 + 3065 + 56 + 20 + + + 4540 + 3075 + + + + + + + + Transformation data + 7f65432c-2a80-478e-a4be-2ddcf6b3edce + Transform + Transform + false + 0 + + + + + + 4512 + 3085 + 56 + 20 + + + 4540 + 3095 + + + + + + + + + + + + 3581f42a-9592-4549-bd6b-1c0fc39d067b + Construct Point + + + + + Construct a point from {xyz} coordinates. + true + dfb148f5-93b8-40ee-a283-aac1bdeffec2 + Construct Point + Construct Point + + + + + + 1719 + 2396 + 132 + 64 + + + 1801 + 2428 + + + + + + {x} coordinate + f073031b-286a-4b7e-8967-bc173cea92fd + X coordinate + X coordinate + false + 0 + + + + + + 1721 + 2398 + 65 + 20 + + + 1755 + 2408 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {y} coordinate + d38e5c57-cf99-4f88-b7da-2499dce1d4ac + Y coordinate + Y coordinate + false + de6684ff-cc29-4ae0-853f-5570ee53910b + 1 + + + + + + 1721 + 2418 + 65 + 20 + + + 1755 + 2428 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + {z} coordinate + dc14faec-3816-48f7-8bec-01b61461e515 + Z coordinate + Z coordinate + false + 0 + + + + + + 1721 + 2438 + 65 + 20 + + + 1755 + 2448 + + + + + + 1 + + + + + 1 + {0} + + + + + 0 + + + + + + + + + + + Point coordinate + 52cef00d-db8e-4b87-8695-4352608b0e17 + Point + Point + false + 0 + + + + + + 1816 + 2398 + 33 + 60 + + + 1832.5 + 2428 + + + + + + + + + + + + a3371040-e552-4bc8-b0ff-10a840258e88 + Negative + + + + + Compute the negative of a value. + 11c7c257-c908-4206-9a1d-5059940eed56 + Negative + Negative + + + + + + 1543 + 2378 + 103 + 28 + + + 1592 + 2392 + + + + + + Input value + d98f3160-63ff-4c9a-8c96-659cb0c79021 + Value + Value + false + 0ab31ee5-a662-42db-a9f0-ca0831013edc + 1 + + + + + + 1545 + 2380 + 32 + 24 + + + 1562.5 + 2392 + + + + + + + + Output value + 702f8b2a-7fe5-4fe0-95f5-e1e3b7b65a76 + Result + Result + false + 0 + + + + + + 1607 + 2380 + 37 + 24 + + + 1625.5 + 2392 + + + + + + + + + + + + 9c85271f-89fa-4e9f-9f4a-d75802120ccc + Division + + + + + Mathematical division + 17f06759-76ca-440f-9361-122e859fb639 + Division + Division + + + + + + 1580 + 2425 + 85 + 44 + + + 1611 + 2447 + + + + + + Item to divide (dividend) + 9eb6948a-524d-48d3-931b-70dae41b990b + A + A + false + 702f8b2a-7fe5-4fe0-95f5-e1e3b7b65a76 + 1 + + + + + + 1582 + 2427 + 14 + 20 + + + 1590.5 + 2437 + + + + + + + + Item to divide with (divisor) + a142ff64-f606-402f-9b39-d1aeba3a8cbb + B + B + false + 0 + + + + + + 1582 + 2447 + 14 + 20 + + + 1590.5 + 2457 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Integer + 8 + + + + + + + + + + + The result of the Division + de6684ff-cc29-4ae0-853f-5570ee53910b + Result + Result + false + 0 + + + + + + 1626 + 2427 + 37 + 40 + + + 1644.5 + 2447 + + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + ca01df76-d9f4-4d9e-87c7-b1466531ad49 + Line SDL + Line SDL + + + + + + 148 + 521 + 109 + 64 + + + 212 + 553 + + + + + + Line start point + 6a012364-bb07-413c-a3d4-824e66511676 + Start + Start + false + 0 + + + + + + 150 + 523 + 47 + 20 + + + 175 + 533 + + + + + + 1 + + + + + 1 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + Line tangent (direction) + a44ad05a-9bef-4077-9d18-0e598cc797c3 + Direction + Direction + false + 0 + + + + + + 150 + 543 + 47 + 20 + + + 175 + 553 + + + + + + 1 + + + + + 1 + {0} + + + + + + 152.8125 + 0 + 0 + + + + + + + + + + + + Line length + e45a2165-1c64-4e6c-a32a-6969c3895e27 + Length + Length + false + 2e1ddc4d-d964-4b70-b9be-e97ff55297f5 + 1 + + + + + + 150 + 563 + 47 + 20 + + + 175 + 573 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + d26c6324-f5f8-48f2-a846-d449e0b428d9 + Line + Line + false + 0 + + + + + + 227 + 523 + 28 + 60 + + + 241 + 553 + + + + + + + + + + + + 33bcf975-a0b2-4b54-99fd-585c893b9e88 + Digit Scroller + + + + + Numeric scroller for single numbers + 84ab0f98-f3b6-4521-9774-b8c36c371ef2 + Digit Scroller + Digit Scroller + false + 0 + + + + + 12 + Digit Scroller + 11 + + 95.0 + + + + + + -101 + 635 + 250 + 20 + + + -100.2487 + 635.7837 + + + + + + + + + + f12daa2f-4fd5-48c1-8ac3-5dea476912ca + Mirror + + + + + Mirror an object. + 901239b2-1d60-4a9b-ab6f-f731468852a6 + Mirror + Mirror + + + + + + 4916 + 3586 + 141 + 44 + + + 4984 + 3608 + + + + + + Base geometry + 9ae6b880-a76a-4615-a445-b4e1d3b79f39 + Geometry + Geometry + true + 30ab48f0-9c91-4105-b339-743bf77a2ee0 + 1 + + + + + + 4918 + 3588 + 51 + 20 + + + 4945 + 3598 + + + + + + + + Mirror plane + 8d54c88c-d4a7-437b-814d-7fb5e51f3c2d + Plane + Plane + false + 5aaf4477-a18c-4185-a3dd-6f9e6561caec + 1 + + + + + + 4918 + 3608 + 51 + 20 + + + 4945 + 3618 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + + + + + + + + + + + Mirrored geometry + d3d6ce8c-75f1-4f3a-a3b1-d149d1d7ed4e + Geometry + Geometry + false + 0 + + + + + + 4999 + 3588 + 56 + 20 + + + 5027 + 3598 + + + + + + + + Transformation data + 198352fa-5d7a-4795-a8c8-b1b9012a2dd4 + Transform + Transform + false + 0 + + + + + + 4999 + 3608 + 56 + 20 + + + 5027 + 3618 + + + + + + + + + + + + 8529dbdf-9b6f-42e9-8e1f-c7a2bde56a70 + Line + + + + + Contains a collection of line segments + 5aaf4477-a18c-4185-a3dd-6f9e6561caec + Line + Line + false + 0 + + + + + + 4803 + 3707 + 50 + 24 + + + 4828.552 + 3719.425 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + + + 11bbd48b-bb0a-4f1b-8167-fa297590390d + End Points + + + + + Extract the end points of a curve. + true + 80621a5f-7846-4ff7-981b-5872b72656bf + End Points + End Points + + + + + + 4432 + 267 + 99 + 44 + + + 4482 + 289 + + + + + + Curve to evaluate + b984a683-6769-414e-9b32-427e80fca078 + Curve + Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4434 + 269 + 33 + 40 + + + 4452 + 289 + + + + + + + + Curve start point + 5bbd66c6-f0aa-4f51-b7b6-163f2869cce4 + Start + Start + false + 0 + + + + + + 4497 + 269 + 32 + 20 + + + 4513 + 279 + + + + + + + + Curve end point + 0e7077e5-3137-4f94-9928-79aba3425b59 + End + End + false + 0 + + + + + + 4497 + 289 + 32 + 20 + + + 4513 + 299 + + + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + 648dc240-68d2-4025-a475-8c2773894934 + Point + Point + false + 0e7077e5-3137-4f94-9928-79aba3425b59 + 1 + + + + + + 4539 + 287 + 50 + 24 + + + 4564.096 + 299.7611 + + + + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + true + 10638caf-83c2-49b3-a612-433a2d1cfa62 + Point + Point + false + 5bbd66c6-f0aa-4f51-b7b6-163f2869cce4 + 1 + + + + + + 4541 + 252 + 50 + 24 + + + 4566.583 + 264.9861 + + + + + + + + + + 9abae6b7-fa1d-448c-9209-4a8155345841 + Deconstruct + + + + + Deconstruct a point into its component parts. + 7d32bbcf-4f64-4002-bdb5-ec26998a4af6 + Deconstruct + Deconstruct + + + + + + -140 + 518 + 135 + 64 + + + -93 + 550 + + + + + + Input point + fcc1c6ca-739e-45f7-bc7e-0a5fafea5768 + Point + Point + false + 648dc240-68d2-4025-a475-8c2773894934 + 1 + + + + + + -138 + 520 + 30 + 60 + + + -121.5 + 550 + + + + + + + + Point {x} component + 2e1ddc4d-d964-4b70-b9be-e97ff55297f5 + X component + X component + false + 0 + + + + + + -78 + 520 + 71 + 20 + + + -42.5 + 530 + + + + + + + + Point {y} component + ad763f35-9995-4d27-a8de-004b14f42559 + Y component + Y component + false + 0 + + + + + + -78 + 540 + 71 + 20 + + + -42.5 + 550 + + + + + + + + Point {z} component + c95bc646-d409-47eb-8f3d-b746faca558e + Z component + Z component + false + 0 + + + + + + -78 + 560 + 71 + 20 + + + -42.5 + 570 + + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 18559b17-1184-43fc-a05d-819cfb3bf74a + Panel + + false + 0 + ad763f35-9995-4d27-a8de-004b14f42559 + 1 + Double click to edit panel content… + + + + + + 8 + 361 + 160 + 100 + + 0 + 0 + 0 + + 8.196205 + 361.7971 + + + + + + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + fe502a6c-31bc-4089-821d-05de68d7fe76 + 1c9de8a1-315f-4c56-af06-8f69fee80a7a + Curve Length At + + + + + Get the length along a curve from its start to a point on the curve (or optionally to a parameter on the curve), if point is not on the curve it will be pulled to it. + d86c92c6-3d1d-45e9-ac8b-f0d3279ebc9c + Curve Length At + Curve Length At + + + + + + 4277 + 578 + 147 + 84 + + + 4351 + 620 + + + + + + Curve to get length along + 96af326e-9b9a-4812-b806-9ce3b51ba258 + Curve + Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4279 + 580 + 57 + 20 + + + 4309 + 590 + + + + + + + + Point on curve to get length to + 8cd2172a-83f7-4012-bef0-0b8f79d56915 + Point + Point + true + 414febcf-5e85-4052-bfee-ea0c308e5fcb + 1 + + + + + + 4279 + 600 + 57 + 20 + + + 4309 + 610 + + + + + + + + Optional parameter on curve to get length to instead of a point (will override point if a point is also input) + 135271a8-e94e-4b00-94e6-c63d826ff2f3 + Parameter + Parameter + true + 0 + + + + + + 4279 + 620 + 57 + 20 + + + 4309 + 630 + + + + + + + + If true, the length output is normalized (0.0 - 1.0) + d3f0c80b-5924-4362-99c5-54149cb770ba + Normalized + Normalized + false + 0 + + + + + + 4279 + 640 + 57 + 20 + + + 4309 + 650 + + + + + + 1 + + + + + 1 + {0} + + + + + false + + + + + + + + + + + Length along curve from start to the point on curve + c3191e3e-3b43-49e8-8fff-1036c20f062d + Length + Length + false + 0 + + + + + + 4366 + 580 + 56 + 40 + + + 4394 + 600 + + + + + + + + Curve parameter at the point on curve + d78242e6-1b00-4543-ac85-c5b17df35335 + Parameter + Parameter + false + 0 + + + + + + 4366 + 620 + 56 + 40 + + + 4394 + 640 + + + + + + + + + + + + 7f6a9d34-0470-4bb7-aadd-07496bcbe572 + Point On Curve + + + + + Evaluates a curve at a specific location + true + 414febcf-5e85-4052-bfee-ea0c308e5fcb + Point On Curve + Point On Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + 0.75 + + + + + + 4148.758 + 600.8815 + 80 + 20 + + + + + + + + + + aaa665bd-fd6e-4ccb-8d2c-c5b33072125d + Curvature + + + + + Evaluate the curvature of a curve at a specified parameter. + true + 6e495898-1370-4e64-81f1-f9c04c8929a1 + Curvature + Curvature + + + + + + 4172 + 721 + 140 + 64 + + + 4242 + 753 + + + + + + Curve to evaluate + febb5b17-c14e-4b00-8953-5c878804ce17 + Curve + Curve + false + fbac77a5-b15a-4a25-8bf0-69012470613a + 1 + + + + + + 4174 + 723 + 53 + 30 + + + 4202 + 738 + + + + + + + + Parameter on curve domain to evaluate + 03765f60-bf09-47f2-a2a6-48ae83364f3d + Parameter + Parameter + false + d78242e6-1b00-4543-ac85-c5b17df35335 + 1 + + + + + + 4174 + 753 + 53 + 30 + + + 4202 + 768 + + + + + + + + Point on curve at {t} + a318edee-e604-4cb8-8dd0-d6eaca4d5387 + Point + Point + false + 0 + + + + + + 4257 + 723 + 53 + 20 + + + 4283.5 + 733 + + + + + + + + Curvature vector at {t} + f21ad287-8e70-4ced-9b51-c0688fb21f3f + Curvature + Curvature + false + 0 + + + + + + 4257 + 743 + 53 + 20 + + + 4283.5 + 753 + + + + + + + + Curvature circle at {t} + 535b547e-bc0d-4803-994f-2b1e9e060541 + Curvature + Curvature + false + 0 + + + + + + 4257 + 763 + 53 + 20 + + + 4283.5 + 773 + + + + + + + + + + + + 3c5edcba-b7a5-4710-b076-4b19a7080a2b + 08bdcae0-d034-48dd-a145-24a9fcf3d3ff + Center + + + + + Returns the center of a geometry and the Diameter of it's bounding box as the Dimention +You can Right Click on the component's icon and choose "ForAll" option to have center point of a group of geometries. +Besides You can Right click on the component's icon and choose one of three provided options (Spacial/ Planar/ Basement ) to have Desired type of center. + eb4b472d-51dc-4d51-be82-e03a7afe312c + Center + Center + + + + + + 4342 + 786 + 144 + 44 + + + 4412 + 808 + + + + + + 1 + Geometric + eff55d2c-c657-45b7-9c56-71460d85a9fe + Geometric + Geometric + false + 535b547e-bc0d-4803-994f-2b1e9e060541 + 1 + + + + + + 4344 + 788 + 53 + 40 + + + 4372 + 808 + + + + + + + + 1 + Center + 15866e87-d6c1-43d0-ad6c-75f62109ec4f + Center + Center + false + 0 + + + + + + 4427 + 788 + 57 + 20 + + + 4455.5 + 798 + + + + + + + + 1 + Diagonal size of geometry's bounding box + e09907c2-3bbe-4aa2-8a27-49eff2b3ca66 + Dimension + Dimension + false + 0 + + + + + + 4427 + 808 + 57 + 20 + + + 4455.5 + 818 + + + + + + + + + + + + 4c4e56eb-2f04-43f9-95a3-cc46a14f495a + Line + + + + + Create a line between two points. + true + 367de52b-c055-4d79-925f-a82636f869aa + Line + Line + + + + + + 4335 + 706 + 117 + 44 + + + 4407 + 728 + + + + + + Line start point + 9108d2aa-9d87-479f-8a02-1a3a51408219 + Start Point + Start Point + false + 414febcf-5e85-4052-bfee-ea0c308e5fcb + 1 + + + + + + 4337 + 708 + 55 + 20 + + + 4366 + 718 + + + + + + + + Line end point + 9e010292-1b7a-432b-b13d-1e4b7f75fe8b + End Point + End Point + false + 15866e87-d6c1-43d0-ad6c-75f62109ec4f + 1 + + + + + + 4337 + 728 + 55 + 20 + + + 4366 + 738 + + + + + + + + Line segment + fcaa5747-85f6-427d-8d91-42e925505556 + Line + Line + false + 0 + + + + + + 4422 + 708 + 28 + 40 + + + 4436 + 728 + + + + + + + + + + + + 4c619bc9-39fd-4717-82a6-1e07ea237bbe + Line SDL + + + + + Create a line segment defined by start point, tangent and length.} + true + aa36a643-b05a-43cf-9d53-cc42b9dce626 + Line SDL + Line SDL + + + + + + 323 + 688 + 109 + 64 + + + 387 + 720 + + + + + + Line start point + 7313d66c-23e9-4659-a06d-b8ebff35708a + Start + Start + false + 414febcf-5e85-4052-bfee-ea0c308e5fcb + 1 + + + + + + 325 + 690 + 47 + 20 + + + 350 + 700 + + + + + + + + Line tangent (direction) + 795d2ac0-5ce5-4831-a0a7-2553f20d97a6 + Direction + Direction + false + 8b64714b-45a1-4990-9243-da541ef97636 + 1 + + + + + + 325 + 710 + 47 + 20 + + + 350 + 720 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 1 + + + + + + + + + + + + Line length + 7576a1f9-a82c-4131-8000-d3ca45061886 + Length + Length + false + 5db69753-2684-4734-8bca-97148a032e74 + 1 + + + + + + 325 + 730 + 47 + 20 + + + 350 + 740 + + + + + + 1 + + + + + 1 + {0} + + + + + 1 + + + + + + + + + + + Line segment + df088e5e-d57b-4e0d-b375-7fc383be9eff + Line + Line + false + 0 + + + + + + 402 + 690 + 28 + 60 + + + 416 + 720 + + + + + + + + + + + + b7798b74-037e-4f0c-8ac7-dc1043d093e0 + Rotate + + + + + Rotate an object in a plane. + true + e02ce106-dd4c-4f5d-bbc9-66da3265906b + Rotate + Rotate + + + + + + 4549 + 878 + 141 + 64 + + + 4617 + 910 + + + + + + Base geometry + 68c88a15-594b-444d-b8e9-f83b3240ed83 + Geometry + Geometry + true + fcaa5747-85f6-427d-8d91-42e925505556 + 1 + + + + + + 4551 + 880 + 51 + 20 + + + 4578 + 890 + + + + + + + + Rotation angle in radians + 75dc11fb-38ef-4e88-b4f8-c3cb90f48a96 + Angle + Angle + false + 0 + false + + + + + + 4551 + 900 + 51 + 20 + + + 4578 + 910 + + + + + + 1 + + + + + 1 + {0} + + + + + -1.5707963267948966 + + + + + + + + + + + Rotation plane + d7c3432c-7319-4ecc-b358-8b44933cddbd + Plane + Plane + false + 414febcf-5e85-4052-bfee-ea0c308e5fcb + 1 + + + + + + 4551 + 920 + 51 + 20 + + + 4578 + 930 + + + + + + 1 + + + + + 1 + {0} + + + + + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + + + + Rotated geometry + 8b64714b-45a1-4990-9243-da541ef97636 + Geometry + Geometry + false + 0 + + + + + + 4632 + 880 + 56 + 30 + + + 4660 + 895 + + + + + + + + Transformation data + 50be7adc-c966-462d-a5d6-d8976ef0c9a2 + Transform + Transform + false + 0 + + + + + + 4632 + 910 + 56 + 30 + + + 4660 + 925 + + + + + + + + + + + + c75b62fa-0a33-4da7-a5bd-03fd0068fd93 + Length + + + + + Measure the length of a curve. + c857f498-189c-4fe5-82ac-098207e4592c + Length + Length + + + + + + 155 + 770 + 107 + 28 + + + 205 + 784 + + + + + + Curve to measure + f6005822-06de-4bbb-9d2e-733811aaa8d2 + Curve + Curve + false + d26c6324-f5f8-48f2-a846-d449e0b428d9 + 1 + + + + + + 157 + 772 + 33 + 24 + + + 175 + 784 + + + + + + + + Curve length + 870ba227-6d67-490d-8fe1-8c49a991081a + Length + Length + false + 0 + + + + + + 220 + 772 + 40 + 24 + + + 240 + 784 + + + + + + + + + + + + 9c85271f-89fa-4e9f-9f4a-d75802120ccc + Division + + + + + Mathematical division + 432bc4e4-2199-4e58-a407-5c032f08901c + Division + Division + + + + + + 234 + 840 + 85 + 44 + + + 265 + 862 + + + + + + Item to divide (dividend) + 48cea1d4-1eab-4a1d-a049-21c21fa146c6 + A + A + false + 870ba227-6d67-490d-8fe1-8c49a991081a + 1 + + + + + + 236 + 842 + 14 + 20 + + + 244.5 + 852 + + + + + + + + Item to divide with (divisor) + 803c5f5d-ea6b-4c88-ab52-6b630d97248e + B + B + false + 0 + + + + + + 236 + 862 + 14 + 20 + + + 244.5 + 872 + + + + + + 1 + + + + + 1 + {0} + + + + + Grasshopper.Kernel.Types.GH_Integer + 1 + + + + + + + + + + + The result of the Division + 5db69753-2684-4734-8bca-97148a032e74 + Result + Result + false + 0 + + + + + + 280 + 842 + 37 + 40 + + + 298.5 + 862 + + + + + + + + + + + + b464fccb-50e7-41bd-9789-8438db9bea9f + Angle + + + + + Compute the angle between two vectors. + 93cdba74-1d80-4166-97e1-171a12823c52 + Angle + Angle + + + + + + 427 + 793 + 118 + 64 + + + 491 + 825 + + + + + + First vector + 9fc12fbe-ab5c-48a3-88c8-36d8d34abf0d + Vector A + Vector A + false + d26c6324-f5f8-48f2-a846-d449e0b428d9 + 1 + + + + + + 429 + 795 + 47 + 20 + + + 454 + 805 + + + + + + + + Second vector + 96050006-7191-4132-bacf-4fa81f9f05a1 + Vector B + Vector B + false + df088e5e-d57b-4e0d-b375-7fc383be9eff + 1 + + + + + + 429 + 815 + 47 + 20 + + + 454 + 825 + + + + + + + + Optional plane for 2D angle + b615a648-5493-4b20-bc6e-baf78874213f + Plane + Plane + true + 0 + + + + + + 429 + 835 + 47 + 20 + + + 454 + 845 + + + + + + + + Angle (in radians) between vectors + 75428287-47d8-4972-9646-1f5bf7c6b7ba + Angle + Angle + false + 0 + + + + + + 506 + 795 + 37 + 30 + + + 524.5 + 810 + + + + + + + + Reflex angle (in radians) between vectors + 1bdba050-74dd-4c58-bf12-a16ac9f5b84a + Reflex + Reflex + false + 0 + + + + + + 506 + 825 + 37 + 30 + + + 524.5 + 840 + + + + + + + + + + + + 0d77c51e-584f-44e8-aed2-c2ddf4803888 + Degrees + + + + + Convert an angle specified in radians to degrees + e36c7092-320d-45f9-b047-d4e8b8fb5e14 + Degrees + Degrees + + + + + + 566 + 811 + 123 + 28 + + + 625 + 825 + + + + + + Angle in radians + 5ab9bca8-ffff-42b8-b142-6d68af960996 + Radians + Radians + false + 75428287-47d8-4972-9646-1f5bf7c6b7ba + 1 + + + + + + 568 + 813 + 42 + 24 + + + 590.5 + 825 + + + + + + + + Angle in degrees + 9a4e3cd3-35fb-4872-9101-a1fc14c07f66 + Degrees + Degrees + false + 0 + + + + + + 640 + 813 + 47 + 24 + + + 663.5 + 825 + + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + bbcb1cb2-de09-4e0e-a732-1f0b4250646c + Panel + DEGRE + false + 0 + 9a4e3cd3-35fb-4872-9101-a1fc14c07f66 + 1 + Double click to edit panel content… + + + + + + -73 + 301 + 122 + 40 + + 0 + 0 + 0 + + -72.63697 + 301.288 + + + + + + + 255;255;255;255 + + false + false + true + false + false + true + + + + + Courier New + 10 + + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + f17a46d6-7223-453a-ac09-75c5af284a91 + Panel + + false + 0 + 0 + 0.001621456725625/1 + + + + + + 177 + 342 + 164 + 40 + + 0 + 0 + 0 + + 177.1474 + 342.723 + + + + + + + 255;255;255;255 + + true + true + true + false + false + true + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + 2b79d86a-c886-48ba-a41d-bd2a6298f66d + Relay + Relay + false + f17a46d6-7223-453a-ac09-75c5af284a91 + 1 + + + + + + 340 + 292 + 44 + 16 + + + 362 + 300 + + + + + + + + + + + + + + + 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 + + + + + \ No newline at end of file