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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