-
0
2
2
-
1
0
7
- 0817f529-aa76-40a7-8cad-914d072469b8
- Shaded
- 0
-
255;240;240;240
-
255;207;207;207
- 633740217794324378
- XHG.⠀⠀⠀⠀ⵙ⠀ᗱᗴ⠀ⵙ⠀ᴥ⠀ⵙ⠀ᑎ⠀ⵙ⠀✤⠀ⵙ⠀ᗩ⠀ⵙ⠀ᗯ⠀ⵙ⠀ᴥ⠀ⵙ⠀ᑎ⠀ⵙ⠀ᑐᑕ⠀ⵙ⠀◯⠀ⵙ⠀ᗝ⠀ⵙ⠀ᗱᗴ⠀ⵙ⠀ߦ⠀ⵙ⠀ᗩ⠀ⵙ⠀ᙏ⠀ⵙ⠀◯⠀ⵙ⠀ᗱᗴ⠀ⵙ⠀ᙁ⠀ⵙ⠀ߦ⠀ⵙ⠀ꖴ⠀ⵙ⠀✤⠀ⵙ⠀ᙁ⠀ⵙ⠀ᑎ⠀ⵙ⠀ᙏ⠀ⵙ⠀⠀⠀⠀◯⠀⠀⠀⠀ⵙ⠀⠀⠀⠀◯⠀⠀⠀⠀ⵙ⠀ᙏ⠀ⵙ⠀ᑎ⠀ⵙ⠀ᙁ⠀ⵙ⠀✤⠀ⵙ⠀ꖴ⠀ⵙ⠀ߦ⠀ⵙ⠀ᙁ⠀ⵙ⠀ᗱᗴ⠀ⵙ⠀◯⠀ⵙ⠀ᙏ⠀ⵙ⠀ᗩ⠀ⵙ⠀ߦ⠀ⵙ⠀ᗱᗴ⠀ⵙ⠀ᗝ⠀ⵙ⠀◯⠀ⵙ⠀ᑐᑕ⠀ⵙ⠀ᑎ⠀ⵙ⠀ᴥ⠀ⵙ⠀ᗯ⠀ⵙ⠀ᗩ⠀ⵙ⠀✤⠀ⵙ⠀ᑎ⠀ⵙ⠀ᴥ⠀ⵙ⠀ᗱᗴ⠀ⵙ⠀⠀⠀⠀.GHX
- 0
-
-1860
-168
- 0.926588058
- 0
- 0
- 1
- 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
- 204
- cae9fe53-6d63-44ed-9d6d-13180fbf6f89
- 1c9de8a1-315f-4c56-af06-8f69fee80a7a
- Curve Graph Mapper
- Remap values with a custom graph using input curves.
- true
- b8912b0c-0928-413c-aa6f-6b67cf5449da
- Curve Graph Mapper
- Curve Graph Mapper
-
1817
765
148
224
-
1879
877
- 1
- One or multiple graph curves to graph map values with
- 85f53a08-ab61-4f56-8cd9-9bd912b0c48f
- Curves
- Curves
- false
- 3efcf628-bc42-4274-8af9-de2b19540957
- 1
-
1819
767
48
27
-
1843
780.75
- Rectangle which defines the boundary of the graph, graph curves should be atleast partially inside this boundary
- 0e02fd24-0745-49a9-a4b7-ff422b70cb39
- Rectangle
- Rectangle
- false
- 332dde95-ad78-4c2f-8f95-7ea47795be9c
- 1
-
1819
794
48
28
-
1843
808.25
- 1
- Values to graph map. Values are plotted along the X Axis, intersected with the graph curves, then mapped to the Y Axis
- 5b744bfb-ede6-49bc-a6ad-5f2d866d78f5
- Values
- Values
- false
- 3540c5a6-ed00-4088-8256-5cc9330d7c01
- 1
-
1819
822
48
27
-
1843
835.75
- Domain of the graphs X Axis, where the values get plotted (if omitted the input value lists domain bounds is used)
- a4d08eda-8166-40a1-909c-1b293412b901
- X Axis
- X Axis
- true
- 0
-
1819
849
48
28
-
1843
863.25
- Domain of the graphs Y Axis, where the values get mapped to (if omitted the input value lists domain bounds is used)
- a3a866cf-9956-4e93-96df-4636df2256a5
- Y Axis
- Y Axis
- true
- 0
-
1819
877
48
27
-
1843
890.75
- Flip the graphs X Axis from the bottom of the graph to the top of the graph
- 777825bc-72d6-45cc-8a0a-d4569b064896
- Flip
- Flip
- false
- 0
-
1819
904
48
28
-
1843
918.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
- 0493b9c9-f683-4cf7-bb36-03d04691de0a
- Snap
- Snap
- false
- 0
-
1819
932
48
27
-
1843
945.75
- 1
- 1
- {0}
- true
- Size of the graph labels
- b4f01449-7664-4d79-8c6b-c6d6a0dd26df
- Text Size
- Text Size
- false
- 0
-
1819
959
48
28
-
1843
973.25
- 1
- 1
- {0}
- 0.0625
- 1
- Resulting graph mapped values, mapped on the Y Axis
- 80544141-adaf-4121-b91d-59dc485f5186
- Mapped
- Mapped
- false
- 0
-
1891
767
72
20
-
1927
777
- 1
- The graph curves inside the boundary of the graph
- f44cd3e2-065b-47ae-b68c-8dc7269113a6
- Graph Curves
- Graph Curves
- false
- 0
-
1891
787
72
20
-
1927
797
- 1
- The points on the graph curves where the X Axis input values intersected
- true
- f23df977-9843-48d8-80d0-aa719b62e93b
- Graph Points
- Graph Points
- false
- 0
-
1891
807
72
20
-
1927
817
- 1
- The lines from the X Axis input values to the graph curves
- true
- 49c0f244-7639-478c-b125-f0f743ef3b08
- Value Lines
- Value Lines
- false
- 0
-
1891
827
72
20
-
1927
837
- 1
- The points plotted on the X Axis which represent the input values
- true
- b18b2d57-121e-4f18-abf4-5a0dc8909b06
- Value Points
- Value Points
- false
- 0
-
1891
847
72
20
-
1927
857
- 1
- The lines from the graph curves to the Y Axis graph mapped values
- true
- 63bb4bb9-da44-4f8e-8284-9321d002f230
- Mapped Lines
- Mapped Lines
- false
- 0
-
1891
867
72
20
-
1927
877
- 1
- The points mapped on the Y Axis which represent the graph mapped values
- true
- abeb9f6f-41c5-4102-af4f-18bb0c94f8cc
- Mapped Points
- Mapped Points
- false
- 0
-
1891
887
72
20
-
1927
897
- The graph boundary background as a surface
- 8a39292d-bf27-45fa-b641-9e61af3087fd
- Boundary
- Boundary
- false
- 0
-
1891
907
72
20
-
1927
917
- 1
- The graph labels as curve outlines
- 94f4b70f-994c-4e81-89e0-4e8c57818b8f
- Labels
- Labels
- false
- 0
-
1891
927
72
20
-
1927
937
- 1
- True for input values outside of the X Axis domain bounds
False for input values inside of the X Axis domain bounds
- 29d03712-a8e1-44a1-ad57-33a6bec0f5b3
- Out Of Bounds
- Out Of Bounds
- false
- 0
-
1891
947
72
20
-
1927
957
- 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
- 2a7a89c4-4910-4ecb-bf2f-4ca1a695fbb5
- Intersected
- Intersected
- false
- 0
-
1891
967
72
20
-
1927
977
- c552a431-af5b-46a9-a8a4-0fcbc27ef596
- Group
- 1
-
150;170;135;255
- A group of Grasshopper objects
- be482996-5742-45ed-b0db-b31948b25ecc
- 96185633-510c-475e-aa5a-317aecb4d5ef
- ffa39098-dfcf-4fa6-b738-0143f6a56fd1
- 5cbfd570-f9d7-4f47-a4ba-3d56e722bd68
- c7e8046a-32a3-45ee-ac60-9a1a5babca87
- a4ba9384-9f7e-454a-b7ca-236f9cb656f4
- 6f995574-4aef-437c-a71c-de9746adc55f
- 16eda690-0fda-438a-a680-88d85b340e85
- 9b1a7f5e-3559-4c7f-8983-e110b9367ccd
- aef88e8f-e33d-4b86-84a2-dcd0b335020a
- e9347f50-2c3d-4ea4-afe3-39c1a9c1eecf
- 33d76231-d8af-4cdc-b6ad-84d3f4128c93
- ea567651-1b39-48f0-b826-b0439763d42f
- 1a2d8c95-6e59-4a15-9715-e09a63f5bdac
- b5ce4f30-134d-45a4-b228-680cb7c43718
- fd356245-280d-45b3-8e53-6f6db3cac3b8
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- 17
- 0e793369-6e78-49fb-90ed-b51263f573d0
- Group
- 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
- be482996-5742-45ed-b0db-b31948b25ecc
- VB Script
- VB
- 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
-
471
731
69
184
-
507
823
- 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
- 59449ef9-05ed-4dc9-8226-c71140ebee0e
- PtA
- PtA
- true
- 0
- true
- 185356cd-7c2c-43be-929c-08664fead7b6
- 1
- e1937b56-b1da-4c12-8bd8-e34ee81746ef
-
473
733
22
20
-
484
743
- true
- Script Variable PtB
- dcfecc5a-a797-4dd5-8113-7ff42a34b690
- PtB
- PtB
- true
- 0
- true
- 3650af54-be61-49e3-84ef-0d855566cb94
- 1
- e1937b56-b1da-4c12-8bd8-e34ee81746ef
-
473
753
22
20
-
484
763
- true
- Script Variable Pln
- e5baa4bf-8832-464d-b509-5e5a63a6c1f7
- Pln
- Pln
- true
- 0
- true
- 553f31ec-0f72-481e-ab04-97626f07c43a
- 1
- 3897522d-58e9-4d60-b38c-978ddacfedd8
-
473
773
22
20
-
484
783
- true
- Script Variable Len
- 109dbfe4-0341-4971-89fa-f5d18de07927
- Len
- Len
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
473
793
22
20
-
484
803
- true
- Script Variable Wid
- 9f556d24-607a-43ea-9776-93ac44530b2d
- Wid
- Wid
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
473
813
22
20
-
484
823
- true
- Script Variable Ht
- 35c2e17b-323c-4f1c-bf60-0e6dfbd26156
- Ht
- Ht
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
473
833
22
20
-
484
843
- true
- Script Variable Ang
- 40ffc963-a05b-46d6-8714-34be65128aff
- Ang
- Ang
- true
- 0
- true
- f8e31412-714a-4cc1-bfef-678fe31bf9eb
- 1
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
473
853
22
20
-
484
863
- true
- Script Variable E
- d6304781-6e12-4d73-a7f3-998a65ee405e
- E
- E
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
473
873
22
20
-
484
883
- true
- Script Variable I
- bd4895e2-5742-4cbf-83da-9c7d2e49c01e
- I
- I
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
473
893
22
20
-
484
903
- 1
- Print, Reflect and Error streams
- f28f837e-8c12-4625-8cb7-328675d707f4
- out
- out
- false
- 0
-
519
733
19
22
-
528.5
744.25
- Output parameter Pts
- e9b2febf-f54f-4469-a015-c2bac110b4a3
- Pts
- Pts
- false
- 0
-
519
755
19
23
-
528.5
766.75
- Output parameter Crv
- a20a05cc-1099-41a9-86c6-1cb13c534ffc
- Crv
- Crv
- false
- 0
-
519
778
19
22
-
528.5
789.25
- Output parameter L
- df8a57f3-1455-4b39-839c-7e1a57830df8
- L
- L
- false
- 0
-
519
800
19
23
-
528.5
811.75
- Output parameter W
- 9e74e94e-11a8-4aef-af9f-5a0e2f8d0342
- W
- W
- false
- 0
-
519
823
19
22
-
528.5
834.25
- Output parameter H
- 29605ab6-b1c4-4849-a08e-b9e58a465802
- H
- H
- false
- 0
-
519
845
19
23
-
528.5
856.75
- Output parameter A
- 5a089a3d-8af1-40d7-8a27-35031144c0ac
- A
- A
- false
- 0
-
519
868
19
22
-
528.5
879.25
- Output parameter F
- fa95972f-15fa-417b-9c53-e9241cdecf61
- F
- F
- false
- 0
-
519
890
19
23
-
528.5
901.75
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 96185633-510c-475e-aa5a-317aecb4d5ef
- Number Slider
- width
- false
- 0
-
12
811
157
20
-
12.72153
811.7632
- 2
- 1
- 0
- 400
- -130
- 0
- 183.21
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- ffa39098-dfcf-4fa6-b738-0143f6a56fd1
- Number Slider
- length
- false
- 0
-
12
784
160
20
-
12.37784
784.9132
- 2
- 1
- 0
- 400
- 0
- 0
- 300
- fbac3e32-f100-4292-8692-77240a42fd1a
- Point
- Contains a collection of three-dimensional points
- true
- 5cbfd570-f9d7-4f47-a4ba-3d56e722bd68
- Point
- Pt
- false
- e9b2febf-f54f-4469-a015-c2bac110b4a3
- 1
-
636
693
50
24
-
661.8324
705.6324
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- c7e8046a-32a3-45ee-ac60-9a1a5babca87
- Panel
- false
- 0
- 588cf1ad-e6d6-4e22-ac4d-133e6dd18684
- 1
- Double click to edit panel content…
-
710
907
105
55
- 0
- 0
- 0
-
710.0481
907.9934
-
255;255;250;90
- true
- true
- true
- false
- false
- true
- 0d77c51e-584f-44e8-aed2-c2ddf4803888
- Degrees
- Convert an angle specified in radians to degrees
- true
- a4ba9384-9f7e-454a-b7ca-236f9cb656f4
- Degrees
- Deg
-
613
919
49
28
-
637
933
- Angle in radians
- b47cb3ff-d339-4bf8-9a62-67237154401b
- Radians
- R
- false
- 5a089a3d-8af1-40d7-8a27-35031144c0ac
- 1
-
615
921
10
24
-
620
933
- Angle in degrees
- 588cf1ad-e6d6-4e22-ac4d-133e6dd18684
- Degrees
- D
- false
- 0
-
649
921
11
24
-
654.5
933
- 3581f42a-9592-4549-bd6b-1c0fc39d067b
- Construct Point
- Construct a point from {xyz} coordinates.
- true
- 6f995574-4aef-437c-a71c-de9746adc55f
- Construct Point
- Pt
-
254
602
52
64
-
279
634
- {x} coordinate
- f4cc2a89-59b7-48a6-950d-0b016217ef81
- X coordinate
- X
- false
- 827ed593-a53c-4a06-8c7f-23980c226d78
- 1
-
256
604
11
20
-
261.5
614
- 1
- 1
- {0}
- 0
- {y} coordinate
- b34a844c-f4f1-4eab-a69f-a8976dc71ff6
- Y coordinate
- Y
- false
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- 1
-
256
624
11
20
-
261.5
634
- 1
- 1
- {0}
- 0.5
- {z} coordinate
- 9017a9a4-ed96-46d9-a006-c319a210a900
- Z coordinate
- Z
- false
- 0
-
256
644
11
20
-
261.5
654
- 1
- 1
- {0}
- 0
- Point coordinate
- 185356cd-7c2c-43be-929c-08664fead7b6
- Point
- Pt
- false
- 0
-
291
604
13
60
-
297.5
634
- 3581f42a-9592-4549-bd6b-1c0fc39d067b
- Construct Point
- Construct a point from {xyz} coordinates.
- true
- 16eda690-0fda-438a-a680-88d85b340e85
- Construct Point
- Pt
-
251
671
52
64
-
276
703
- {x} coordinate
- a9fb135d-d3c2-45b1-b824-d7ac23be6784
- X coordinate
- X
- false
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- 1
-
253
673
11
20
-
258.5
683
- 1
- 1
- {0}
- 80
- {y} coordinate
- 6e01b007-0569-4149-a5fd-f1473c302da8
- Y coordinate
- Y
- false
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- 1
-
253
693
11
20
-
258.5
703
- 1
- 1
- {0}
- 0.5
- {z} coordinate
- 22a07e7e-8413-4c51-b459-670da0de4424
- Z coordinate
- Z
- false
- 0
-
253
713
11
20
-
258.5
723
- 1
- 1
- {0}
- 0
- Point coordinate
- 3650af54-be61-49e3-84ef-0d855566cb94
- Point
- Pt
- false
- 0
-
288
673
13
60
-
294.5
703
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- 9b1a7f5e-3559-4c7f-8983-e110b9367ccd
- Curve
- Crv
- false
- a20a05cc-1099-41a9-86c6-1cb13c534ffc
- 1
-
599
746
50
24
-
624.8213
758.1622
- 17b7152b-d30d-4d50-b9ef-c9fe25576fc2
- XY Plane
- World XY plane.
- true
- aef88e8f-e33d-4b86-84a2-dcd0b335020a
- XY Plane
- XY
-
333
744
49
28
-
358
758
- Origin of plane
- 083edf92-9248-4053-9066-409138e7f4b4
- Origin
- O
- false
- 0
-
335
746
11
24
-
340.5
758
- 1
- 1
- {0}
-
0
0
0
- World XY plane
- 553f31ec-0f72-481e-ab04-97626f07c43a
- Plane
- P
- false
- 0
-
370
746
10
24
-
375
758
- a4cd2751-414d-42ec-8916-476ebf62d7fe
- Radians
- Convert an angle specified in degrees to radians
- true
- e9347f50-2c3d-4ea4-afe3-39c1a9c1eecf
- Radians
- Rad
-
337
863
49
28
-
362
877
- Angle in degrees
- e1a58c09-29d9-44d5-bbd6-b2cc83183e41
- Degrees
- D
- false
- 8201ca98-0edb-4aa3-9ef0-1efdd7b5e887
- 1
-
339
865
11
24
-
344.5
877
- Angle in radians
- f8e31412-714a-4cc1-bfef-678fe31bf9eb
- Radians
- R
- false
- 0
-
374
865
10
24
-
379
877
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 33d76231-d8af-4cdc-b6ad-84d3f4128c93
- Number Slider
- angle °
- false
- 0
-
17
868
166
20
-
17.35091
868.6044
- 2
- 1
- 0
- 180
- -180
- 0
- 68.99
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- ea567651-1b39-48f0-b826-b0439763d42f
- Number Slider
- height
- false
- 0
-
13
838
160
20
-
13.45993
838.8031
- 2
- 1
- 0
- 200
- 0
- 0
- 112.83
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 1a2d8c95-6e59-4a15-9715-e09a63f5bdac
- Panel
- false
- 0
- df8a57f3-1455-4b39-839c-7e1a57830df8
- 1
- Double click to edit panel content…
-
591
787
106
38
- 0
- 0
- 0
-
591.8511
787.5596
-
255;255;250;90
- true
- true
- true
- false
- false
- true
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- b5ce4f30-134d-45a4-b228-680cb7c43718
- Panel
- false
- 0
- 9e74e94e-11a8-4aef-af9f-5a0e2f8d0342
- 1
- Double click to edit panel content…
-
710
812
105
55
- 0
- 0
- 0
-
710.41
812.4274
-
255;255;250;90
- true
- true
- true
- false
- false
- true
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- fd356245-280d-45b3-8e53-6f6db3cac3b8
- Panel
- false
- 0
- 29605ab6-b1c4-4849-a08e-b9e58a465802
- 1
- Double click to edit panel content…
-
590
847
108
38
- 0
- 0
- 0
-
590.7999
847.9436
-
255;255;250;90
- true
- true
- true
- false
- false
- true
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- Panel
- false
- 0
- 0
- .0625
-
70
664
50
20
- 0
- 0
- 0
-
70.01492
664.9438
-
255;255;250;90
- true
- true
- true
- false
- false
- true
- a3371040-e552-4bc8-b0ff-10a840258e88
- Negative
- Compute the negative of a value.
- true
- 4d74b572-72ca-479d-98fe-1102ff538c33
- Negative
- Negative
-
88
586
88
28
-
131
600
- Input value
- 83b04357-23f4-4431-86c3-eecc17e0641d
- Value
- Value
- false
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- 1
-
90
588
29
24
-
104.5
600
- Output value
- 827ed593-a53c-4a06-8c7f-23980c226d78
- Result
- Result
- false
- 0
-
143
588
31
24
-
158.5
600
- a3371040-e552-4bc8-b0ff-10a840258e88
- Negative
- Compute the negative of a value.
- true
- 8303ceac-85cb-4b06-a1bc-5a3acec9195b
- Negative
- Negative
-
212
863
88
28
-
255
877
- Input value
- aa6b2fdf-2dc8-405a-8f49-2222a4475acb
- Value
- Value
- false
- a4aa38fd-ae8b-4e84-b4c7-743f703e71af
- 1
-
214
865
29
24
-
228.5
877
- Output value
- 8201ca98-0edb-4aa3-9ef0-1efdd7b5e887
- Result
- Result
- false
- 0
-
267
865
31
24
-
282.5
877
- 33bcf975-a0b2-4b54-99fd-585c893b9e88
- Digit Scroller
- Numeric scroller for single numbers
- 1a02ba82-40d3-4bf4-b8ac-327ab3a2fcba
- Digit Scroller
- Digit Scroller
- false
- 0
- 12
- Digit Scroller
- 2
- 69.4835261549
-
10
912
250
20
-
10.55358
912.7772
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 6e7122df-586b-40b5-8852-b4b70d28d550
- Evaluate Length
- Evaluate Length
-
575
1038
132
64
-
643
1070
- Curve to evaluate
- 6b87fe5a-469b-4dbc-a3bf-2c3e7c67d430
- Curve
- Curve
- false
- 9b1a7f5e-3559-4c7f-8983-e110b9367ccd
- 1
-
577
1040
54
20
-
604
1050
- Length factor for curve evaluation
- 69704dd3-5305-4347-af38-1f32c89b621d
- Length
- Length
- false
- 0
-
577
1060
54
20
-
604
1070
- 1
- 1
- {0}
- 0.5
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 183ba7d5-3e4e-4b22-b417-d60183fe5b2c
- Normalized
- Normalized
- false
- 0
-
577
1080
54
20
-
604
1090
- 1
- 1
- {0}
- true
- Point at the specified length
- 433b436d-4910-46f4-9650-f296c051edf5
- Point
- Point
- false
- 0
-
655
1040
50
20
-
680
1050
- Tangent vector at the specified length
- c1d4dcca-7180-4b97-9f9a-80cc04b0dffc
- Tangent
- Tangent
- false
- 0
-
655
1060
50
20
-
680
1070
- Curve parameter at the specified length
- 1eb2e7ac-e933-430a-ba50-58b395246783
- Parameter
- Parameter
- false
- 0
-
655
1080
50
20
-
680
1090
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- b560ef2a-9861-4ee5-8522-fc9dcc95cc02
- Panel
- false
- 0
- 0
- 69.4835261591
-
102
1062
160
100
- 0
- 0
- 0
-
102.6052
1062.104
-
255;255;255;255
- true
- true
- true
- false
- false
- true
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- e09bbafc-c06b-42d5-8812-f6b9bfc9a91b
- Panel
- false
- 0
- 0
- 69.4835261507
-
103
1232
160
100
- 0
- 0
- 0
-
103.643
1232.527
-
255;255;255;255
- true
- true
- true
- false
- false
- true
- a0d62394-a118-422d-abb3-6af115c75b25
- Addition
- Mathematical addition
- true
- 6461cb0d-53e8-447a-9dd5-21685e9c1b56
- Addition
- Addition
-
301
1191
70
44
-
326
1213
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for addition
- b213aa95-0ac4-408c-8671-a4bf07ba90fa
- A
- A
- true
- b560ef2a-9861-4ee5-8522-fc9dcc95cc02
- 1
-
303
1193
11
20
-
308.5
1203
- Second item for addition
- 2ebd0ac0-5f46-479d-8998-908676aa6a2e
- B
- B
- true
- e09bbafc-c06b-42d5-8812-f6b9bfc9a91b
- 1
-
303
1213
11
20
-
308.5
1223
- Result of addition
- 9de1ab91-5e40-48a5-8f12-6972ae738da2
- Result
- Result
- false
- 0
-
338
1193
31
40
-
353.5
1213
- 9c85271f-89fa-4e9f-9f4a-d75802120ccc
- Division
- Mathematical division
- true
- c30373d0-ec20-4280-9436-ce49038cd4c1
- Division
- Division
-
387
1190
70
44
-
412
1212
- Item to divide (dividend)
- 071f8b44-ee60-4d29-8ec1-f1a4b1baaeef
- A
- A
- false
- 9de1ab91-5e40-48a5-8f12-6972ae738da2
- 1
-
389
1192
11
20
-
394.5
1202
- Item to divide with (divisor)
- 08b9213e-f8ba-468b-b73a-bf236911260a
- B
- B
- false
- 0
-
389
1212
11
20
-
394.5
1222
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 2
- The result of the Division
- 6b78ac8c-391c-4cdf-97f4-a84cb8e220bd
- Result
- Result
- false
- 0
-
424
1192
31
40
-
439.5
1212
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 8b3783ac-5ba5-402c-8407-2b780734dc78
- Panel
- false
- 0
- 6b78ac8c-391c-4cdf-97f4-a84cb8e220bd
- 1
- 69.4835261591
-
545
1140
160
100
- 0
- 0
- 0
-
545.8812
1140.321
-
255;255;255;255
- true
- true
- true
- false
- false
- true
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- a4aa38fd-ae8b-4e84-b4c7-743f703e71af
- Panel
- false
- 0
- 0
- 69.483526154878695999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
-
174
959
160
100
- 0
- 0
- 0
-
174.138
959.9938
-
255;255;255;255
- true
- true
- true
- false
- false
- true
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 91f6a16c-41fc-486b-9fd4-b8131503555a
- Number Slider
- Number Slider
- false
- 0
-
177
824
198
20
-
177.7085
824.2753
- 1
- 1
- 0
- 1
- 0
- 0
- 0.5
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 4c62ad4f-8a1b-4479-a981-a013f3a20cab
- Panel
- false
- 0
- 0
- -.5
-
391
967
160
100
- 0
- 0
- 0
-
391.3893
967.7534
-
255;255;255;255
- true
- true
- true
- false
- false
- true
- 429cbba9-55ee-4e84-98ea-876c44db879a
- Sub Curve
- Construct a curve from the sub-domain of a base curve.
- true
- 82846ba0-d510-4850-bf68-b577e527341e
- Sub Curve
- Sub Curve
-
907
1031
112
44
-
975
1053
- Base curve
- f15d4f38-3ee0-4021-8986-aeab968e6441
- Base curve
- Base curve
- false
- 9b1a7f5e-3559-4c7f-8983-e110b9367ccd
- 1
-
909
1033
54
20
-
936
1043
- Sub-domain to extract
- 181c412a-b343-4df1-9de8-9ba07b5fe126
- Domain
- Domain
- false
- 196cbbe7-089b-4b6f-8268-5a1a27de1f26
- 1
-
909
1053
54
20
-
936
1063
- Resulting sub curve
- f813c092-1a7a-4b2e-a320-c1970bc4b85c
- Curve
- Curve
- false
- 0
-
987
1033
30
40
-
1002
1053
- ccfd6ba8-ecb1-44df-a47e-08126a653c51
- Curve Domain
- Measure and set the curve domain
- true
- 5a071e6c-4e12-47f8-90ba-69f5a9cd57d0
- Curve Domain
- Curve Domain
-
744
1014
104
44
-
796
1036
- Curve to measure/modify
- 8ac53238-4505-4cfa-ab54-174725866cba
- Curve
- Curve
- false
- 9b1a7f5e-3559-4c7f-8983-e110b9367ccd
- 1
-
746
1016
38
20
-
765
1026
- Optional domain, if omitted the curve will not be modified.
- fee5c57f-8bff-4381-99f6-4deee29bb8a7
- Domain
- Domain
- true
- 0
-
746
1036
38
20
-
765
1046
- Curve with new domain.
- 613a055f-17a3-464e-9dfe-ded6ed940fcd
- Curve
- Curve
- false
- 0
-
808
1016
38
20
-
827
1026
- Domain of original curve.
- 4ed9d5db-0663-44a0-ac51-ed5582a49e75
- Domain
- Domain
- false
- 0
-
808
1036
38
20
-
827
1046
- 825ea536-aebb-41e9-af32-8baeb2ecb590
- Deconstruct Domain
- Deconstruct a numeric domain into its component parts.
- true
- f1615e2f-b974-4426-bac3-98d8df45ccd0
- Deconstruct Domain
- Deconstruct Domain
-
769
1065
92
44
-
821
1087
- Base domain
- 14d55ef3-9e4d-40ea-b49c-458b3b7a22d7
- Domain
- Domain
- false
- 4ed9d5db-0663-44a0-ac51-ed5582a49e75
- 1
-
771
1067
38
40
-
790
1087
- Start of domain
- 40fa7228-bb33-4bfb-8f91-5cecd1dcd263
- Start
- Start
- false
- 0
-
833
1067
26
20
-
846
1077
- End of domain
- ad21b06c-4790-4f87-9cc3-a3272475a156
- End
- End
- false
- 0
-
833
1087
26
20
-
846
1097
- 9c85271f-89fa-4e9f-9f4a-d75802120ccc
- Division
- Mathematical division
- true
- 39fa6758-00ec-41b2-9795-bfe3189fed61
- Division
- Division
-
780
1110
70
44
-
805
1132
- Item to divide (dividend)
- 3e34a1aa-0837-4f2a-9e32-de50ab641f56
- A
- A
- false
- ad21b06c-4790-4f87-9cc3-a3272475a156
- 1
-
782
1112
11
20
-
787.5
1122
- Item to divide with (divisor)
- 7093fce0-514e-4663-979b-8942facacf82
- B
- B
- false
- 0
-
782
1132
11
20
-
787.5
1142
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 2
- The result of the Division
- 4722382e-e207-42e1-b863-c92b3e3605ea
- Result
- Result
- false
- 0
-
817
1112
31
40
-
832.5
1132
- d1a28e95-cf96-4936-bf34-8bf142d731bf
- Construct Domain
- Create a numeric domain from two numeric extremes.
- true
- 839ff464-1b55-46dc-93e1-5906feedcbeb
- Construct Domain
- Construct Domain
-
763
1211
128
44
-
839
1233
- Start value of numeric domain
- c70a65e1-6859-4b62-aa9b-257bafb84151
- Domain start
- Domain start
- false
- 4722382e-e207-42e1-b863-c92b3e3605ea
- 1
-
765
1213
62
20
-
796
1223
- 1
- 1
- {0}
- 0
- End value of numeric domain
- 3fd49f84-13be-490e-9468-6c1d5a94b633
- Domain end
- Domain end
- false
- ad21b06c-4790-4f87-9cc3-a3272475a156
- 1
-
765
1233
62
20
-
796
1243
- 1
- 1
- {0}
- 1
- Numeric domain between {A} and {B}
- 196cbbe7-089b-4b6f-8268-5a1a27de1f26
- Domain
- Domain
- false
- 0
-
851
1213
38
40
-
870
1233
- 33bcf975-a0b2-4b54-99fd-585c893b9e88
- Digit Scroller
- Numeric scroller for single numbers
- af3fb1cd-4a6d-4dc8-92ce-9498185187cf
- Digit Scroller
- Digit Scroller
- false
- 0
- 12
- Digit Scroller
- 3
- 85.300000000
-
1047
1265
250
20
-
1047.619
1265.329
- 7376fe41-74ec-497e-b367-1ffe5072608b
- Curvature Graph
- Draws Rhino Curvature Graphs.
- true
- b044fc47-2218-43a9-a3b0-2df6397c7b5f
- Curvature Graph
- Curvature Graph
-
1370
1289
65
64
-
1421
1321
- Curve for Curvature graph display
- true
- 46611437-aad9-4467-8439-44ec9ae87f7f
- Curve
- Curve
- false
- a4db035a-a834-48b6-a951-08f0da775207
- 1
-
1372
1291
37
20
-
1390.5
1301
- Sampling density of the Graph
- 101641d2-b0bd-4e14-8cf1-608b5c0f42ed
- Density
- Density
- false
- 0
-
1372
1311
37
20
-
1390.5
1321
- 1
- 1
- {0}
- 1
- Scale of graph
- 1e907d78-b6c0-4b9e-bf28-59e5523809cc
- Scale
- Scale
- false
- af3fb1cd-4a6d-4dc8-92ce-9498185187cf
- 1
-
1372
1331
37
20
-
1390.5
1341
- 1
- 1
- {0}
- 105
- fb6aba99-fead-4e42-b5d8-c6de5ff90ea6
- DotNET VB Script (LEGACY)
- A VB.NET scriptable component
- true
- adb123dc-4c8b-4d8e-b8af-465911caa3a4
- 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
-
968
62
100
44
-
1023
84
- 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
- 64ea07bd-2ad8-4674-abc3-2e5035e25438
- Forward
- Forward
- true
- 1
- true
- 95ec1350-0cf8-4bd1-9939-9141bb7e8d4d
- 1
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
970
64
41
20
-
990.5
74
- 1
- false
- Script Variable Left
- f3a9ae4c-2ef8-4f61-a3d6-a8cc805154cb
- Left
- Left
- true
- 1
- true
- ca68313c-c52c-486d-8a23-bb53133b88ba
- 1
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
970
84
41
20
-
990.5
94
- Print, Reflect and Error streams
- e7376103-481d-411c-b340-9ecb0032bd5c
- Output
- out
- false
- 0
-
1035
64
31
20
-
1050.5
74
- Output parameter Points
- 8c6309b7-19ef-4990-a24c-6a9cd29aedde
- Points
- Points
- false
- 0
-
1035
84
31
20
-
1050.5
94
- e64c5fb1-845c-4ab1-8911-5f338516ba67
- Series
- Create a series of numbers.
- true
- 0cb9ecff-ea56-4e17-b511-9bbc9d37213d
- Series
- Series
-
459
114
49
64
-
484
146
- First number in the series
- cd21e6f4-b907-4df3-b15f-9636506736c4
- Start
- S
- false
- 0
-
461
116
11
20
-
466.5
126
- 1
- 1
- {0}
- 0
- Step size for each successive number
- ae880489-466a-4183-aac2-6507d997ab12
- Step
- N
- false
- 60ccecac-c32b-4ec9-a67d-f06dbc11dac8
- 1
-
461
136
11
20
-
466.5
146
- 1
- 1
- {0}
- 1
- Number of values in the series
- 9017a110-a8eb-4438-b4e8-efedbc8561e5
- Count
- C
- false
- aea56335-eea0-4482-a38d-76fd8894a70b
- 1
-
461
156
11
20
-
466.5
166
- 1
- 1
- {0}
- 500
- 1
- Series of numbers
- 0a12a540-f012-46af-a99e-d0c6ca2f91e8
- Series
- S
- false
- 0
-
496
116
10
60
-
501
146
- dd8134c0-109b-4012-92be-51d843edfff7
- Duplicate Data
- Duplicate data a predefined number of times.
- true
- 19d34331-3d5f-4e73-a579-2fb572d8dad8
- Duplicate Data
- Dup
-
461
36
50
64
-
486
68
- 1
- Data to duplicate
- c06aba14-c342-42bc-af8a-4b9a730d9416
- Data
- D
- false
- a6fbff5c-de44-40d1-a62d-b2666e9d8abc
- 1
-
463
38
11
20
-
468.5
48
- Number of duplicates
- 07ba82f9-7d88-459d-b360-a6a72ef0fb39
- Number
- N
- false
- 0e94a1ab-3131-4c59-b8f2-e8748666b639
- 1
-
463
58
11
20
-
468.5
68
- 1
- 1
- {0}
- 500
- Retain list order
- 80896721-cab2-41a4-bc83-3eb99ca1de30
- Order
- O
- false
- 0
-
463
78
11
20
-
468.5
88
- 1
- 1
- {0}
- true
- 1
- Duplicated data
- 95ec1350-0cf8-4bd1-9939-9141bb7e8d4d
- Data
- D
- false
- 0
-
498
38
11
60
-
503.5
68
- 3e8ca6be-fda8-4aaf-b5c0-3c54c8bb7312
- Number
- Contains a collection of floating point numbers
- aea56335-eea0-4482-a38d-76fd8894a70b
- Number
- PntNum
- false
- 30510cbc-939e-47f4-a157-892edbb7b2ec
- 1
-
367
112
50
24
-
392.4265
124.2116
- 1
- 1
- {0}
- 220
- bc984576-7aa6-491f-a91d-e444c33675a7
- Graph Mapper
- Represents a numeric mapping function
Sine wave distribution
Linear distribution
- f19a2d4a-2dc0-407f-97c4-93275253ee87
- Graph Mapper
- Graph
- false
- 0a12a540-f012-46af-a99e-d0c6ca2f91e8
- 1
-
580
239
138
138
-
580.5346
239.6815
- false
- 0
- 1
- 0
- 1
- 1
- 0
- 71629651-0343-46d7-ac9e-d6041f9fe66b
- Linear
- 0
- 1
- 0
- 1
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- a6fbff5c-de44-40d1-a62d-b2666e9d8abc
- Number Slider
- Forward
- false
- 0
-
195
68
170
20
-
195.2472
68.90955
- 4
- 1
- 0
- 1
- 0
- 0
- 1
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 3710b634-8373-477c-b89b-80ebcb3533c9
- Number Slider
- Left
- false
- 0
-
258
166
150
20
-
258.4472
166.2695
- 4
- 1
- 0
- 1
- 0
- 0
- 0.2636
- c552a431-af5b-46a9-a8a4-0fcbc27ef596
- Group
- 5
-
255;255;255;255
- A group of Grasshopper objects
- 82846ba0-d510-4850-bf68-b577e527341e
- 5a071e6c-4e12-47f8-90ba-69f5a9cd57d0
- f1615e2f-b974-4426-bac3-98d8df45ccd0
- 39fa6758-00ec-41b2-9795-bfe3189fed61
- 839ff464-1b55-46dc-93e1-5906feedcbeb
- 5
- 3492b1e6-6447-4510-957c-41f6e336b055
- Group
- c552a431-af5b-46a9-a8a4-0fcbc27ef596
- Group
- 5
-
255;255;255;255
- A group of Grasshopper objects
- 82846ba0-d510-4850-bf68-b577e527341e
- 1
- 8d826a5b-40a9-4723-b454-e6ec87d5d425
- Group
- b7798b74-037e-4f0c-8ac7-dc1043d093e0
- Rotate
- Rotate an object in a plane.
- true
- 1b23f03a-7ba4-4196-9ab5-4214ef1ea7a0
- Rotate
- Rotate
-
1100
1174
126
64
-
1162
1206
- Base geometry
- fb53b620-bff5-429b-9d61-5caa1a21acc4
- Geometry
- Geometry
- true
- 9a872b68-f4ef-437a-a7cf-5f3f10a7d5cf
- 1
-
1102
1176
48
20
-
1126
1186
- Rotation angle in radians
- b869e64b-fd1c-43b0-a938-aebd32db369b
- Angle
- Angle
- false
- 0
- false
-
1102
1196
48
20
-
1126
1206
- 1
- 1
- {0}
- 3.1415926535897931
- Rotation plane
- d32ea679-4549-4b70-96ef-d41ec2d137de
- Plane
- Plane
- false
- ea581112-e4ff-4ffd-ae67-550e059e2ab2
- 1
-
1102
1216
48
20
-
1126
1226
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Rotated geometry
- 29181bcb-8341-492d-a2cb-44fac4bbba27
- Geometry
- Geometry
- false
- 0
-
1174
1176
50
30
-
1199
1191
- Transformation data
- 23d6205a-9f8e-4802-9d7f-52415665c2b9
- Transform
- Transform
- false
- 0
-
1174
1206
50
30
-
1199
1221
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 623e4f22-0705-43ed-af97-41751fe9d194
- Evaluate Length
- Evaluate Length
-
1095
1048
132
64
-
1163
1080
- Curve to evaluate
- 6b723213-f7db-4e3b-91f9-c702eb4e3537
- Curve
- Curve
- false
- 9a872b68-f4ef-437a-a7cf-5f3f10a7d5cf
- 1
-
1097
1050
54
20
-
1124
1060
- Length factor for curve evaluation
- e6796bbc-6abe-4f97-a17a-9f9ce1205468
- Length
- Length
- false
- 0
-
1097
1070
54
20
-
1124
1080
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- b12f98e8-3e0c-40c0-8e56-79a98a6d9333
- Normalized
- Normalized
- false
- 0
-
1097
1090
54
20
-
1124
1100
- 1
- 1
- {0}
- true
- Point at the specified length
- ea581112-e4ff-4ffd-ae67-550e059e2ab2
- Point
- Point
- false
- 0
-
1175
1050
50
20
-
1200
1060
- Tangent vector at the specified length
- ce1bb5ba-0b4f-4438-8324-010c6a43e278
- Tangent
- Tangent
- false
- 0
-
1175
1070
50
20
-
1200
1080
- Curve parameter at the specified length
- 76669767-a041-41e6-a91a-8969de2f0633
- Parameter
- Parameter
- false
- 0
-
1175
1090
50
20
-
1200
1100
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- f0786d40-0f2c-42a7-bb40-b23125d62ba0
- Join Curves
- Join Curves
-
1115
943
106
44
-
1172
965
- 1
- Curves to join
- 35a8f88e-4b93-45c9-aba5-d9cb078f55b7
- Curves
- Curves
- false
- 9a872b68-f4ef-437a-a7cf-5f3f10a7d5cf
- 29181bcb-8341-492d-a2cb-44fac4bbba27
- 2
-
1117
945
43
20
-
1138.5
955
- Preserve direction of input curves
- 15ee08ed-c988-4f87-8532-ac6fc90b32da
- Preserve
- Preserve
- false
- 0
-
1117
965
43
20
-
1138.5
975
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- 3eb795c1-f2e8-4462-8d75-43548abc5c7a
- Curves
- Curves
- false
- 0
-
1184
945
35
40
-
1201.5
965
- d93100b6-d50b-40b2-831a-814659dc38e3
- Rectangle
- Create a rectangle on a plane
- true
- a5f50a86-74a5-4fcf-97ff-f306376cdcdf
- Rectangle
- Rectangle
-
1369
736
109
84
-
1416
778
- Rectangle base plane
- 8e0b3992-2836-4b47-aee5-6a6275fee65e
- Plane
- Plane
- false
- 0
-
1371
738
33
20
-
1387.5
748
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Dimensions of rectangle in plane X direction.
- 76658ffc-0c93-40f9-a177-12293c7c88a5
- X Size
- X Size
- false
- 0
-
1371
758
33
20
-
1387.5
768
- 1
- 1
- {0}
-
0
1
- Dimensions of rectangle in plane Y direction.
- 5541eed9-d957-4424-9f0e-aa146d4f37ed
- Y Size
- Y Size
- false
- 77f0ecec-7fa3-446d-a550-22710e20ed01
- 1
-
1371
778
33
20
-
1387.5
788
- 1
- 1
- {0}
-
0
1
- Rectangle corner fillet radius
- 774a0b91-1b49-4a86-a1cd-42c577e605ff
- Radius
- Radius
- false
- 0
-
1371
798
33
20
-
1387.5
808
- 1
- 1
- {0}
- 0
- Rectangle
- 0c3d97eb-e01e-4cd0-bcc9-899b5e8bd773
- Rectangle
- Rectangle
- false
- 0
-
1428
738
48
40
-
1452
758
- Length of rectangle curve
- 62638e03-d4b1-4c17-a012-0d9b4e4e69d9
- Length
- Length
- false
- 0
-
1428
778
48
40
-
1452
798
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 19781188-6033-4dfc-8e18-ac8a31146184
- Number Slider
- Number Slider
- false
- 0
-
85
89
198
20
-
85.37762
89.94292
- 0
- 1
- 0
- 1024
- 0
- 0
- 92
- fbac3e32-f100-4292-8692-77240a42fd1a
- Point
- Contains a collection of three-dimensional points
- true
- 9f928a18-1788-4d30-82d0-8902489b7cb1
- Point
- Point
- false
- 8c6309b7-19ef-4990-a24c-6a9cd29aedde
- 1
-
1073
178
50
24
-
1098.873
190.2037
- a4cd2751-414d-42ec-8916-476ebf62d7fe
- Radians
- Convert an angle specified in degrees to radians
- true
- 1a7582f2-97d6-4d9c-a343-c247a07b3113
- Radians
- Radians
-
297
235
108
28
-
352
249
- Angle in degrees
- 3bc85718-1091-40e8-94b6-e8f2b6244c7e
- Degrees
- Degrees
- false
- 95e54ab1-d9fe-4240-9ceb-e7de21dc8681
- 1
-
299
237
41
24
-
319.5
249
- Angle in radians
- 60ccecac-c32b-4ec9-a67d-f06dbc11dac8
- Radians
- Radians
- false
- 0
-
364
237
39
24
-
383.5
249
- 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef
- Quick Graph
- 1
- Display a set of y-values as a graph
- e8d2f33c-9799-4b66-99c9-5085acf3a34b
- Quick Graph
- Quick Graph
- false
- 0
- 17b8f919-7cf9-4e9d-a977-4975ac259f79
- 1
-
1402
586
150
150
-
1402.781
586.0236
- -1
- 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef
- Quick Graph
- 1
- Display a set of y-values as a graph
- 2c09d7cc-4b45-44b3-ad5e-f8fd156703ac
- Quick Graph
- Quick Graph
- false
- 0
- 80544141-adaf-4121-b91d-59dc485f5186
- 1
-
2194
365
150
150
-
2194.012
365.3451
- -1
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 6eddbd6b-0cfa-4602-bdcd-27e681eaa19e
- Relay
- false
- 80544141-adaf-4121-b91d-59dc485f5186
- 1
-
2066
806
40
16
-
2086
814
- 9d2583dd-6cf5-497c-8c40-c9a290598396
- Arc SED
- Create an arc defined by start point, end point and a tangent vector.
- true
- b11627c8-54cf-45d2-8af9-267b86d60819
- Arc SED
- Arc SED
-
956
837
105
64
-
1014
869
- Start point of arc
- d29119d4-5bda-4c10-8b33-20859402d506
- Start
- Start
- false
- 0
-
958
839
44
20
-
980
849
- 1
- 1
- {0}
-
0
0
0
- End point of arc
- 93932dd5-914f-4060-931f-0aad23bba2a6
- End
- End
- false
- 0
-
958
859
44
20
-
980
869
- 1
- 1
- {0}
-
0.5
0.5
0
- Direction (tangent) at start
- 986d5e48-8edb-473b-a075-9dab9fd3cd1e
- Direction
- Direction
- false
- 0
-
958
879
44
20
-
980
889
- 1
- 1
- {0}
-
0.5
0
0
- Resulting arc
- 6c8df061-7384-4eee-8c75-2c154bd3eed1
- Arc
- Arc
- false
- 0
-
1026
839
33
20
-
1042.5
849
- Arc plane
- true
- 9b323c43-8432-4535-9599-eb2528f001de
- Plane
- Plane
- false
- 0
-
1026
859
33
20
-
1042.5
869
- Arc radius
- 2e3b5ea5-ad47-47b7-986b-246147df43f2
- Radius
- Radius
- false
- 0
-
1026
879
33
20
-
1042.5
889
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 9a872b68-f4ef-437a-a7cf-5f3f10a7d5cf
- Relay
- false
- f813c092-1a7a-4b2e-a320-c1970bc4b85c
- 1
-
1034
965
40
16
-
1054
973
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- ca68313c-c52c-486d-8a23-bb53133b88ba
- Relay
- false
- 7b613319-bfe3-4474-aeb1-50e400eff353
- 1
-
908
86
40
16
-
928
94
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 7b613319-bfe3-4474-aeb1-50e400eff353
- Relay
- false
- 6eddbd6b-0cfa-4602-bdcd-27e681eaa19e
- 1
-
727
151
40
16
-
747
159
- 0d77c51e-584f-44e8-aed2-c2ddf4803888
- Degrees
- Convert an angle specified in radians to degrees
- true
- 9afed6a1-0b5d-4854-8d60-a3719e46c346
- Degrees
- Degrees
-
421
261
108
28
-
474
275
- Angle in radians
- 2acfb98b-717d-44fd-ba8c-5a99e01c96ae
- Radians
- Radians
- false
- 0a12a540-f012-46af-a99e-d0c6ca2f91e8
- 1
-
423
263
39
24
-
442.5
275
- Angle in degrees
- 2661efe3-a104-4708-91df-7e5f956c1a77
- Degrees
- Degrees
- false
- 0
-
486
263
41
24
-
506.5
275
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 17b8f919-7cf9-4e9d-a977-4975ac259f79
- Relay
- false
- 0a12a540-f012-46af-a99e-d0c6ca2f91e8
- 1
-
1148
839
40
16
-
1168
847
- 9445ca40-cc73-4861-a455-146308676855
- Range
- Create a range of numbers.
- true
- fdae7967-2946-4c76-8efb-2afc9fe307c9
- Range
- Range
-
808
1344
98
44
-
860
1366
- Domain of numeric range
- 20a2f9e4-9d26-4b07-8052-4a6233543d8e
- Domain
- Domain
- false
- 0
-
810
1346
38
20
-
829
1356
- 1
- 1
- {0}
-
0
1
- Number of steps
- 79611de4-461c-445d-8f31-815e8b37393a
- Steps
- Steps
- false
- 98c6d8a0-685b-4bbf-a8ff-19a05dce99a8
- 1
-
810
1366
38
20
-
829
1376
- 1
- 1
- {0}
- 10
- 1
- Range of numbers
- 0cb72483-7b48-42d0-9dd7-4aa4b04c8fd0
- Range
- Range
- false
- 0
-
872
1346
32
40
-
888
1366
- 9df5e896-552d-4c8c-b9ca-4fc147ffa022
- Expression
- Evaluate an expression
- -COS(PI*X)/2+.5
- true
- 3223a2a2-929e-492a-8f8e-51c2da3006ec
- true
- Expression
- Expression
-
908
1391
141
28
-
981
1405
- 1
- ba80fd98-91a1-4958-b6a7-a94e40e52bdb
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- Expression variable
- 61ac86fa-e12a-496a-afd3-cf0045689685
- true
- Variable Variable x
- X
- true
- 0cb72483-7b48-42d0-9dd7-4aa4b04c8fd0
- 1
-
910
1393
11
24
-
915.5
1405
- Result of expression
- fbad1d61-f6a3-496d-801a-d192eccbeca0
- true
- Result
- false
- 0
-
1041
1393
6
24
-
1044
1405
- 3581f42a-9592-4549-bd6b-1c0fc39d067b
- Construct Point
- Construct a point from {xyz} coordinates.
- true
- ccc20433-6140-4eb9-a297-3dee2aef2333
- Construct Point
- Construct Point
-
1011
1279
117
64
-
1087
1311
- {x} coordinate
- 82e7d129-2aec-420e-9173-13e1b59cc2c8
- X coordinate
- X coordinate
- false
- 0cb72483-7b48-42d0-9dd7-4aa4b04c8fd0
- 1
-
1013
1281
62
20
-
1044
1291
- 1
- 1
- {0}
- 0
- {y} coordinate
- 037185e9-cb6a-477f-9264-a78b7cc704d2
- Y coordinate
- Y coordinate
- false
- fbad1d61-f6a3-496d-801a-d192eccbeca0
- 1
-
1013
1301
62
20
-
1044
1311
- 1
- 1
- {0}
- 0
- {z} coordinate
- a8a57cbf-e1c3-44bf-9927-393f0da2b49d
- Z coordinate
- Z coordinate
- false
- 0
-
1013
1321
62
20
-
1044
1331
- 1
- 1
- {0}
- 0
- Point coordinate
- 319a8e4a-0a9d-4c4f-b007-9dd3bffdad8b
- Point
- Point
- false
- 0
-
1099
1281
27
60
-
1112.5
1311
- 2b2a4145-3dff-41d4-a8de-1ea9d29eef33
- Interpolate
- Create an interpolated curve through a set of points.
- true
- e8749b33-1bd7-41a8-a32e-f652be604699
- Interpolate
- Interpolate
-
1177
1281
113
84
-
1238
1323
- 1
- Interpolation points
- ef7d6f52-25bf-4721-b749-b02b1f560fd2
- Vertices
- Vertices
- false
- 319a8e4a-0a9d-4c4f-b007-9dd3bffdad8b
- 1
-
1179
1283
47
20
-
1202.5
1293
- Curve degree
- 2783af8f-6fee-4e9e-9682-191588a45244
- Degree
- Degree
- false
- 0
-
1179
1303
47
20
-
1202.5
1313
- 1
- 1
- {0}
- 3
- Periodic curve
- 9de54a4a-1658-4c37-b0f8-0984ea863aba
- Periodic
- Periodic
- false
- 0
-
1179
1323
47
20
-
1202.5
1333
- 1
- 1
- {0}
- false
- Knot spacing (0=uniform, 1=chord, 2=sqrtchord)
- 6e99b88d-7932-4bec-be05-2d0756473bd4
- KnotStyle
- KnotStyle
- false
- 0
-
1179
1343
47
20
-
1202.5
1353
- 1
- 1
- {0}
- 1
- Resulting nurbs curve
- 229ca461-198c-4419-84c7-d2f35bdc4fcf
- Curve
- Curve
- false
- 0
-
1250
1283
38
26
-
1269
1296.333
- Curve length
- e5717746-8298-4388-ab46-72fcc5d78e0f
- Length
- Length
- false
- 0
-
1250
1309
38
27
-
1269
1323
- Curve domain
- 24fe4cb8-26e0-493c-8dc6-52b4e901dd5e
- Domain
- Domain
- false
- 0
-
1250
1336
38
27
-
1269
1349.667
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 98c6d8a0-685b-4bbf-a8ff-19a05dce99a8
- Number Slider
- Number Slider
- false
- 0
-
794
1446
198
20
-
794.8589
1446.434
- 0
- 1
- 0
- 100
- 0
- 0
- 100
- 2b2a4145-3dff-41d4-a8de-1ea9d29eef33
- Interpolate
- Create an interpolated curve through a set of points.
- true
- 9520571f-01ef-4f72-932e-7a249475dade
- Interpolate
- Interpolate
-
1204
73
113
84
-
1265
115
- 1
- Interpolation points
- 217888fe-0c52-4452-9bab-1426ab7c49e5
- Vertices
- Vertices
- false
- 8c6309b7-19ef-4990-a24c-6a9cd29aedde
- 1
-
1206
75
47
20
-
1229.5
85
- Curve degree
- 3b917543-6fe1-47c6-bc69-2d991e5390a3
- Degree
- Degree
- false
- 0
-
1206
95
47
20
-
1229.5
105
- 1
- 1
- {0}
- 3
- Periodic curve
- b52c74d6-38ec-44a3-862c-f5f263503985
- Periodic
- Periodic
- false
- 0
-
1206
115
47
20
-
1229.5
125
- 1
- 1
- {0}
- false
- Knot spacing (0=uniform, 1=chord, 2=sqrtchord)
- de774591-6f3d-4cd3-82cb-cf0ecb9d1230
- KnotStyle
- KnotStyle
- false
- 0
-
1206
135
47
20
-
1229.5
145
- 1
- 1
- {0}
- 0
- Resulting nurbs curve
- 3910b2ce-825d-4581-ba63-0d4761cdc4e4
- Curve
- Curve
- false
- 0
-
1277
75
38
26
-
1296
88.33334
- Curve length
- ee447920-0734-47ec-9576-112b090bbd89
- Length
- Length
- false
- 0
-
1277
101
38
27
-
1296
115
- Curve domain
- d778f5da-fb7d-4fe4-9d08-2ac9cb4f2993
- Domain
- Domain
- false
- 0
-
1277
128
38
27
-
1296
141.6667
- 33bcf975-a0b2-4b54-99fd-585c893b9e88
- Digit Scroller
- Numeric scroller for single numbers
- 36b3ca44-627e-48b4-82b9-b92c6729a0a2
- Digit Scroller
- Digit Scroller
- false
- 0
- 12
- Digit Scroller
- 3
- 120.000000000
-
2011
327
250
20
-
2011.323
327.6967
- 7376fe41-74ec-497e-b367-1ffe5072608b
- Curvature Graph
- Draws Rhino Curvature Graphs.
- f0ac3d20-d232-4529-9797-fe98cce3b115
- Curvature Graph
- Curvature Graph
-
2424
280
65
64
-
2475
312
- Curve for Curvature graph display
- true
- 37ec4b3b-e6e5-4c8f-94c4-bdedcee0f713
- Curve
- Curve
- false
- f6b4926e-e21e-4172-8955-63568a7bca58
- 1
-
2426
282
37
20
-
2444.5
292
- Sampling density of the Graph
- 8f9e5a1f-527e-4aee-804d-c934086261d2
- Density
- Density
- false
- 0
-
2426
302
37
20
-
2444.5
312
- 1
- 1
- {0}
- 1
- Scale of graph
- cbf4822a-6079-46d0-afd9-6e6b242efbd5
- Scale
- Scale
- false
- 36b3ca44-627e-48b4-82b9-b92c6729a0a2
- 1
-
2426
322
37
20
-
2444.5
332
- 1
- 1
- {0}
- 105
- 33bcf975-a0b2-4b54-99fd-585c893b9e88
- Digit Scroller
- Numeric scroller for single numbers
- 9d319f42-3b16-4111-b365-43eb0f17b2cb
- Digit Scroller
- Digit Scroller
- false
- 0
- 12
- Digit Scroller
- 1
- 0.02197265625
-
166
507
250
20
-
166.1918
507.1666
- f12daa2f-4fd5-48c1-8ac3-5dea476912ca
- Mirror
- Mirror an object.
- true
- 4c7664dd-79cf-4108-bf60-1480bb27ab37
- Mirror
- Mirror
-
1604
1314
126
44
-
1666
1336
- Base geometry
- ba101e5c-7a96-47d7-ba45-081620a16ecc
- Geometry
- Geometry
- true
- 8223275d-d569-4e35-9a98-2c397f54615c
- 1
-
1606
1316
48
20
-
1630
1326
- Mirror plane
- 9e0ef643-8160-45db-acac-594641eb7cc7
- Plane
- Plane
- false
- a8a2329e-f841-4f4b-8d41-b027368bf4e0
- 1
-
1606
1336
48
20
-
1630
1346
- 1
- 1
- {0}
-
0
0
0
0
1
0
0
0
1
- Mirrored geometry
- 608609df-983c-4196-b298-8809024de305
- Geometry
- Geometry
- false
- 0
-
1678
1316
50
20
-
1703
1326
- Transformation data
- c3ddcda0-6db2-47f6-b30a-67ac7b7e0fdb
- Transform
- Transform
- false
- 0
-
1678
1336
50
20
-
1703
1346
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 54a8751f-10a4-4c07-9a6c-97aba7fa52f9
- Relay
- false
- 30e62d14-2c62-4f0d-aa1f-ca9d032a2be1
- 1
-
1459
1376
40
16
-
1479
1384
- fad344bc-09b1-4855-a2e6-437ef5715fe3
- YZ Plane
- World YZ plane.
- true
- de5cfa61-2934-4ee9-965e-9cbcdb5afe74
- YZ Plane
- YZ Plane
-
1450
1332
86
28
-
1494
1346
- Origin of plane
- 83ea6edd-ceeb-4752-b1eb-318ee183a4a9
- Origin
- Origin
- false
- 54a8751f-10a4-4c07-9a6c-97aba7fa52f9
- 1
-
1452
1334
30
24
-
1467
1346
- 1
- 1
- {0}
-
0
0
0
- World YZ plane
- a8a2329e-f841-4f4b-8d41-b027368bf4e0
- Plane
- Plane
- false
- 0
-
1506
1334
28
24
-
1520
1346
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 3ea3d903-f586-4647-8194-a5066d8553a6
- Evaluate Length
- Evaluate Length
-
1383
1411
132
64
-
1451
1443
- Curve to evaluate
- 5b09a39a-9378-4a53-a9e3-2e9768415b22
- Curve
- Curve
- false
- 3eb795c1-f2e8-4462-8d75-43548abc5c7a
- 1
-
1385
1413
54
20
-
1412
1423
- Length factor for curve evaluation
- c2fb1bf5-d4a5-4512-a474-8a2166288fe1
- Length
- Length
- false
- 0
-
1385
1433
54
20
-
1412
1443
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 3c1e4896-be34-427e-bf9b-4bb7aec11f6d
- Normalized
- Normalized
- false
- 0
-
1385
1453
54
20
-
1412
1463
- 1
- 1
- {0}
- true
- Point at the specified length
- 30e62d14-2c62-4f0d-aa1f-ca9d032a2be1
- Point
- Point
- false
- 0
-
1463
1413
50
20
-
1488
1423
- Tangent vector at the specified length
- 4bd9ddb4-8c80-4537-a43e-29d4d8afff77
- Tangent
- Tangent
- false
- 0
-
1463
1433
50
20
-
1488
1443
- Curve parameter at the specified length
- a45066ba-aec1-499c-92c8-36fee03f5053
- Parameter
- Parameter
- false
- 0
-
1463
1453
50
20
-
1488
1463
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 8223275d-d569-4e35-9a98-2c397f54615c
- Relay
- false
- 3eb795c1-f2e8-4462-8d75-43548abc5c7a
- 1
-
1521
1238
40
16
-
1541
1246
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 57a03910-740a-4e10-b728-b7318c148ddd
- Join Curves
- Join Curves
-
1682
1227
106
44
-
1739
1249
- 1
- Curves to join
- 223d00f2-9b6c-4b05-aab9-6a1ef389c375
- Curves
- Curves
- false
- 8223275d-d569-4e35-9a98-2c397f54615c
- 608609df-983c-4196-b298-8809024de305
- 2
-
1684
1229
43
20
-
1705.5
1239
- Preserve direction of input curves
- 6775000b-3f54-47c4-b231-57ff58fcbd42
- Preserve
- Preserve
- false
- 0
-
1684
1249
43
20
-
1705.5
1259
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- 27a8458c-44f3-4d7e-abbe-a725b3a3114e
- Curves
- Curves
- false
- 0
-
1751
1229
35
40
-
1768.5
1249
- b7798b74-037e-4f0c-8ac7-dc1043d093e0
- Rotate
- Rotate an object in a plane.
- true
- a4f63ae0-7907-4030-9c61-e1efbad6d3d0
- Rotate
- Rotate
-
1815
1320
126
64
-
1877
1352
- Base geometry
- 6fcf2f5b-3e7e-4d48-a00e-dc24f2035851
- Geometry
- Geometry
- true
- 27a8458c-44f3-4d7e-abbe-a725b3a3114e
- 1
-
1817
1322
48
20
-
1841
1332
- Rotation angle in radians
- d1315872-3c45-4a71-907d-8085157f9c39
- Angle
- Angle
- false
- 0
- false
-
1817
1342
48
20
-
1841
1352
- 1
- 1
- {0}
- 3.1415926535897931
- Rotation plane
- 5ad65274-eb9e-4108-896e-9ef8f81cf109
- Plane
- Plane
- false
- e65ba836-8727-4e6c-bba1-cc044b5d6f10
- 1
-
1817
1362
48
20
-
1841
1372
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Rotated geometry
- a921e035-6c80-4e76-bbc4-5f033ec2fee4
- Geometry
- Geometry
- false
- 0
-
1889
1322
50
30
-
1914
1337
- Transformation data
- 437701f5-445e-40bb-a2e7-fc03290ba412
- Transform
- Transform
- false
- 0
-
1889
1352
50
30
-
1914
1367
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- cd9e5a3f-a487-4b5a-8167-5ddc906483af
- Evaluate Length
- Evaluate Length
-
1814
1255
132
64
-
1882
1287
- Curve to evaluate
- 393c1250-41b1-4cd1-83ff-aefb006c0121
- Curve
- Curve
- false
- 27a8458c-44f3-4d7e-abbe-a725b3a3114e
- 1
-
1816
1257
54
20
-
1843
1267
- Length factor for curve evaluation
- e2ccb088-e147-4ecc-9ce7-2df4a44720aa
- Length
- Length
- false
- 0
-
1816
1277
54
20
-
1843
1287
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 0fd8daaf-8d9e-4be9-9c6f-9c7563d2fd35
- Normalized
- Normalized
- false
- 0
-
1816
1297
54
20
-
1843
1307
- 1
- 1
- {0}
- true
- Point at the specified length
- e65ba836-8727-4e6c-bba1-cc044b5d6f10
- Point
- Point
- false
- 0
-
1894
1257
50
20
-
1919
1267
- Tangent vector at the specified length
- b315d7d5-4233-466a-9a01-55bd815acb69
- Tangent
- Tangent
- false
- 0
-
1894
1277
50
20
-
1919
1287
- Curve parameter at the specified length
- f4f08a0e-0096-4b57-976b-4dc020bbcb87
- Parameter
- Parameter
- false
- 0
-
1894
1297
50
20
-
1919
1307
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- d3e2c804-c42b-4a01-a8f1-f8263a859c2d
- Join Curves
- Join Curves
-
2041
1252
106
44
-
2098
1274
- 1
- Curves to join
- 42f91a4e-0e7e-4170-88de-a1b7db1adcb1
- Curves
- Curves
- false
- a921e035-6c80-4e76-bbc4-5f033ec2fee4
- 27a8458c-44f3-4d7e-abbe-a725b3a3114e
- 2
-
2043
1254
43
20
-
2064.5
1264
- Preserve direction of input curves
- 8abae89e-bd89-4daf-98cf-8544d127db72
- Preserve
- Preserve
- false
- 0
-
2043
1274
43
20
-
2064.5
1284
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- af2c7be7-889b-4714-94e6-a45e621955b9
- Curves
- Curves
- false
- 0
-
2110
1254
35
40
-
2127.5
1274
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- e94bbc2e-02c4-4591-b0ef-963c6b1d47a7
- Evaluate Length
- Evaluate Length
-
1972
1414
132
64
-
2040
1446
- Curve to evaluate
- c09723ab-4605-48f3-98f8-abfb349d1ee0
- Curve
- Curve
- false
- af2c7be7-889b-4714-94e6-a45e621955b9
- 1
-
1974
1416
54
20
-
2001
1426
- Length factor for curve evaluation
- e7e5f835-9ae1-49b7-b6d2-95769d9ce529
- Length
- Length
- false
- 0
-
1974
1436
54
20
-
2001
1446
- 1
- 1
- {0}
- 0
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 790c95f1-d6fd-43d2-bf82-a78a51a4b19a
- Normalized
- Normalized
- false
- 0
-
1974
1456
54
20
-
2001
1466
- 1
- 1
- {0}
- true
- Point at the specified length
- f013e5d9-e877-4748-844b-c6f9e5326801
- Point
- Point
- false
- 0
-
2052
1416
50
20
-
2077
1426
- Tangent vector at the specified length
- 50dbf9ad-9e38-447c-8825-60e10a1f189e
- Tangent
- Tangent
- false
- 0
-
2052
1436
50
20
-
2077
1446
- Curve parameter at the specified length
- 29b09be3-8897-4dcb-874a-7fc1b80ee146
- Parameter
- Parameter
- false
- 0
-
2052
1456
50
20
-
2077
1466
- f12daa2f-4fd5-48c1-8ac3-5dea476912ca
- Mirror
- Mirror an object.
- true
- a5ca4fbb-4ef7-4126-856e-c523b6a394bc
- Mirror
- Mirror
-
2279
1311
126
44
-
2341
1333
- Base geometry
- c067ab93-9d13-47cd-abd9-549d7de55b3f
- Geometry
- Geometry
- true
- af2c7be7-889b-4714-94e6-a45e621955b9
- 1
-
2281
1313
48
20
-
2305
1323
- Mirror plane
- 76432d46-7289-4e22-870a-f83b080f6c2e
- Plane
- Plane
- false
- 06097883-f6e3-4579-853a-27abc769cdb2
- 1
-
2281
1333
48
20
-
2305
1343
- 1
- 1
- {0}
-
0
0
0
0
1
0
0
0
1
- Mirrored geometry
- 117a9813-3afb-4dff-9f1e-31cda3b10532
- Geometry
- Geometry
- false
- 0
-
2353
1313
50
20
-
2378
1323
- Transformation data
- c15a0242-1056-4f0c-827f-2337662756c0
- Transform
- Transform
- false
- 0
-
2353
1333
50
20
-
2378
1343
- fad344bc-09b1-4855-a2e6-437ef5715fe3
- YZ Plane
- World YZ plane.
- true
- 888d2e72-6ebc-4640-8e2f-c9818b8f9161
- YZ Plane
- YZ Plane
-
2177
1363
86
28
-
2221
1377
- Origin of plane
- 8acf04aa-d500-4f01-b2c8-f80a8e1cf29c
- Origin
- Origin
- false
- f013e5d9-e877-4748-844b-c6f9e5326801
- 1
-
2179
1365
30
24
-
2194
1377
- 1
- 1
- {0}
-
0
0
0
- World YZ plane
- 06097883-f6e3-4579-853a-27abc769cdb2
- Plane
- Plane
- false
- 0
-
2233
1365
28
24
-
2247
1377
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 9251c404-9e4f-4f27-a59c-404afc7dac70
- Relay
- -
- false
- 827ed593-a53c-4a06-8c7f-23980c226d78
- 1
-
932
652
40
16
-
952
660
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 6cd55ebe-f40c-4106-8cb3-cd54a6e9b376
- Relay
- false
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- 1
-
878
773
40
16
-
898
781
- d1a28e95-cf96-4936-bf34-8bf142d731bf
- Construct Domain
- Create a numeric domain from two numeric extremes.
- true
- 4ddd2a07-322f-4795-a172-3b99993aa595
- Construct Domain
- Construct Domain
-
1089
702
128
44
-
1165
724
- Start value of numeric domain
- 7c9f75dd-f162-441e-a2c6-464b69dda4e8
- Domain start
- Domain start
- false
- 0
-
1091
704
62
20
-
1122
714
- 1
- 1
- {0}
- 0
- End value of numeric domain
- 4f619c7b-f5b1-46f9-8502-45b329b63d7b
- Domain end
- Domain end
- false
- 0
-
1091
724
62
20
-
1122
734
- 1
- 1
- {0}
- 1
- Numeric domain between {A} and {B}
- 2e6ab3d8-3571-4002-bbfd-b1c139ddd81b
- Domain
- Domain
- false
- 0
-
1177
704
38
40
-
1196
724
- d1a28e95-cf96-4936-bf34-8bf142d731bf
- Construct Domain
- Create a numeric domain from two numeric extremes.
- true
- dc5ebd3a-4367-4d34-82c1-34da869b75d6
- Construct Domain
- Construct Domain
-
1095
779
128
44
-
1171
801
- Start value of numeric domain
- 3a84a281-5b6f-4f72-9fda-494b6ee7988c
- Domain start
- Domain start
- false
- d4a33504-c20c-4eca-9a33-0f0b8663558e
- 1
-
1097
781
62
20
-
1128
791
- 1
- 1
- {0}
- 0
- End value of numeric domain
- bb855e32-85cc-41c6-82ab-128ac13e4cc3
- Domain end
- Domain end
- false
- 3f465dc2-8c6e-4d81-a437-46c362b1654d
- 1
-
1097
801
62
20
-
1128
811
- 1
- 1
- {0}
- 1
- Numeric domain between {A} and {B}
- 77f0ecec-7fa3-446d-a550-22710e20ed01
- Domain
- Domain
- false
- 0
-
1183
781
38
40
-
1202
801
- ce46b74e-00c9-43c4-805a-193b69ea4a11
- Multiplication
- Mathematical multiplication
- true
- f7161f8c-7ea3-4eb0-8cf5-e03f44271ea2
- Multiplication
- Multiplication
-
947
694
70
44
-
972
716
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for multiplication
- 01cf03e8-5ff4-4fa9-802a-f18bfd0713e8
- A
- A
- true
- 9251c404-9e4f-4f27-a59c-404afc7dac70
- 1
-
949
696
11
20
-
954.5
706
- Second item for multiplication
- 333109a6-af4a-414f-9502-6624d49c125a
- B
- B
- true
- 1e93766d-5fbd-4ea8-b21a-84b4233dbcd0
- 1
-
949
716
11
20
-
954.5
726
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Number
- 2
- Result of multiplication
- d4a33504-c20c-4eca-9a33-0f0b8663558e
- Result
- Result
- false
- 0
-
984
696
31
40
-
999.5
716
- ce46b74e-00c9-43c4-805a-193b69ea4a11
- Multiplication
- Mathematical multiplication
- true
- 32ac75d1-06c3-4d1f-84dd-af9441ace308
- Multiplication
- Multiplication
-
970
769
70
44
-
995
791
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for multiplication
- ee26c72f-7560-49f3-b521-778e0d1ec329
- A
- A
- true
- 6cd55ebe-f40c-4106-8cb3-cd54a6e9b376
- 1
-
972
771
11
20
-
977.5
781
- Second item for multiplication
- c270798f-a465-4dcf-bb14-e027051d4846
- B
- B
- true
- 97c2f0bc-79e5-4949-afcc-2234c87c7f9a
- 1
-
972
791
11
20
-
977.5
801
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 2
- Result of multiplication
- 3f465dc2-8c6e-4d81-a437-46c362b1654d
- Result
- Result
- false
- 0
-
1007
771
31
40
-
1022.5
791
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 97c2f0bc-79e5-4949-afcc-2234c87c7f9a
- Number Slider
- Number Slider
- false
- 0
-
705
731
198
20
-
705.4757
731.9849
- 0
- 1
- 0
- 256
- 0
- 0
- 2
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 4530d729-33e9-4496-a160-30e40cd38469
- Panel
- Panel
- false
- 0
- 17b8f919-7cf9-4e9d-a977-4975ac259f79
- 1
- Double click to edit panel content…
-
1087
536
160
100
- 0
- 0
- 0
-
1087.559
536.23
-
255;255;255;255
- true
- true
- true
- false
- false
- true
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 3e3d229d-1f64-445a-b137-750064653cc2
- Join Curves
- Join Curves
-
1295
1143
106
44
-
1352
1165
- 1
- Curves to join
- 19e0b6c0-eedd-400e-a0a4-6ba87f2b030d
- Curves
- Curves
- false
- af2c7be7-889b-4714-94e6-a45e621955b9
- 117a9813-3afb-4dff-9f1e-31cda3b10532
- 2
-
1297
1145
43
20
-
1318.5
1155
- Preserve direction of input curves
- ab163eaa-6931-44b6-a041-24560850d172
- Preserve
- Preserve
- false
- 0
-
1297
1165
43
20
-
1318.5
1175
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- a4db035a-a834-48b6-a951-08f0da775207
- Curves
- Curves
- false
- 0
-
1364
1145
35
40
-
1381.5
1165
- 57da07bd-ecab-415d-9d86-af36d7073abc
- Number Slider
- Numeric slider for single values
- 1e93766d-5fbd-4ea8-b21a-84b4233dbcd0
- Number Slider
- Number Slider
- false
- 0
-
702
699
198
20
-
702.5972
699.9152
- 0
- 1
- 0
- 256
- 0
- 0
- 2
- 2fcc2743-8339-4cdf-a046-a1f17439191d
- Remap Numbers
- Remap numbers into a new numeric domain
- true
- e5f087fc-39ec-47fc-b736-f0b479cadb58
- Remap Numbers
- Remap Numbers
-
1333
848
103
64
-
1382
880
- Value to remap
- f1f0bd0d-1666-4896-9030-749d448121ff
- Value
- Value
- false
- 17b8f919-7cf9-4e9d-a977-4975ac259f79
- 1
-
1335
850
35
20
-
1352.5
860
- Source domain
- d5599cf9-0a99-42bf-a2ad-d55b57a7ba90
- Source
- Source
- false
- 0a1a85d4-b6a4-4792-b637-010b92a8e34e
- 1
-
1335
870
35
20
-
1352.5
880
- 1
- 1
- {0}
-
0
1
- Target domain
- df85e593-31a2-406f-a5d8-601eff1d1928
- Target
- Target
- false
- 57009759-103d-4310-9871-260e6031175d
- 1
-
1335
890
35
20
-
1352.5
900
- 1
- 1
- {0}
-
-0.125
0.125
- Remapped number
- 1cc0dda1-74ca-4602-8b4b-73916761ecda
- Mapped
- Mapped
- false
- 0
-
1394
850
40
30
-
1414
865
- Remapped and clipped number
- 1772a741-19ca-4c78-be80-9050696a77f5
- Clipped
- Clipped
- false
- 0
-
1394
880
40
30
-
1414
895
- f44b92b0-3b5b-493a-86f4-fd7408c3daf3
- Bounds
- Create a numeric domain which encompasses a list of numbers.
- true
- d54416a5-0296-4193-a9bc-920885868eff
- Bounds
- Bounds
-
1135
872
110
28
-
1193
886
- 1
- Numbers to include in Bounds
- 47275834-a719-4b7b-9518-a202c3d1ec71
- Numbers
- Numbers
- false
- 17b8f919-7cf9-4e9d-a977-4975ac259f79
- 1
-
1137
874
44
24
-
1159
886
- Numeric Domain between the lowest and highest numbers in {N}
- 0a1a85d4-b6a4-4792-b637-010b92a8e34e
- Domain
- Domain
- false
- 0
-
1205
874
38
24
-
1224
886
- 825ea536-aebb-41e9-af32-8baeb2ecb590
- Deconstruct Domain
- Deconstruct a numeric domain into its component parts.
- true
- 7a173028-66d6-4096-bb7d-0d6dffbc72e5
- Deconstruct Domain
- Deconstruct Domain
-
1249
914
92
44
-
1301
936
- Base domain
- f4c6ee4b-64cc-4147-944c-37cdb8c0fae0
- Domain
- Domain
- false
- 0a1a85d4-b6a4-4792-b637-010b92a8e34e
- 1
-
1251
916
38
40
-
1270
936
- Start of domain
- e659963d-3369-4bfe-8042-98b4d774b39a
- Start
- Start
- false
- 0
-
1313
916
26
20
-
1326
926
- End of domain
- d07ff3ad-3088-4bfd-a2b9-b0288b3b2d00
- End
- End
- false
- 0
-
1313
936
26
20
-
1326
946
- d1a28e95-cf96-4936-bf34-8bf142d731bf
- Construct Domain
- Create a numeric domain from two numeric extremes.
- true
- 0bbaee54-4ac0-4701-98cd-5d4830124e0f
- Construct Domain
- Construct Domain
-
1360
978
128
44
-
1436
1000
- Start value of numeric domain
- 7b77b955-d618-49d8-9945-692378e6a951
- Domain start
- Domain start
- false
- 55ecab52-3e82-4133-9387-f10eee9138a3
- 1
-
1362
980
62
20
-
1393
990
- 1
- 1
- {0}
- 0
- End value of numeric domain
- 3f99bfe1-037a-421b-8923-06e97aadb1c6
- Domain end
- Domain end
- false
- 5c019ffe-18bb-4230-805b-b001e32f2032
- 1
-
1362
1000
62
20
-
1393
1010
- 1
- 1
- {0}
- 1
- Numeric domain between {A} and {B}
- 57009759-103d-4310-9871-260e6031175d
- Domain
- Domain
- false
- 0
-
1448
980
38
40
-
1467
1000
- a3371040-e552-4bc8-b0ff-10a840258e88
- Negative
- Compute the negative of a value.
- true
- 6403ee20-4b1f-4e93-ae14-016db73e7e65
- Negative
- Negative
-
1263
995
88
28
-
1306
1009
- Input value
- 4e54c9db-afcf-4865-ba16-df040ab25b46
- Value
- Value
- false
- 5c019ffe-18bb-4230-805b-b001e32f2032
- 1
-
1265
997
29
24
-
1279.5
1009
- Output value
- 55ecab52-3e82-4133-9387-f10eee9138a3
- Result
- Result
- false
- 0
-
1318
997
31
24
-
1333.5
1009
- 9c85271f-89fa-4e9f-9f4a-d75802120ccc
- Division
- Mathematical division
- true
- 601ec625-4080-4a00-b9ff-b1365ab9bf1e
- Division
- Division
-
1217
1002
70
44
-
1242
1024
- Item to divide (dividend)
- 6aac3a1e-532b-410a-aa2a-609615228be9
- A
- A
- false
- d07ff3ad-3088-4bfd-a2b9-b0288b3b2d00
- 1
-
1219
1004
11
20
-
1224.5
1014
- Item to divide with (divisor)
- ea7cd678-af99-449d-98f2-aa52d095784c
- B
- B
- false
- 0
-
1219
1024
11
20
-
1224.5
1034
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 2
- The result of the Division
- 5c019ffe-18bb-4230-805b-b001e32f2032
- Result
- Result
- false
- 0
-
1254
1004
31
40
-
1269.5
1024
- 33bcf975-a0b2-4b54-99fd-585c893b9e88
- Digit Scroller
- Numeric scroller for single numbers
- 630931cb-4306-4152-885a-368a745f72a2
- Digit Scroller
- Digit Scroller
- false
- 0
- 12
- Digit Scroller
- 11
- 9.0
-
-75
186
250
20
-
-74.80819
186.532
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 04e635c7-893f-4a17-b68d-073394ad75d4
- Evaluate Length
- Evaluate Length
-
1344
37
132
64
-
1412
69
- Curve to evaluate
- 49732acd-b5a2-4c18-8b2c-4ac5d6a42f0a
- Curve
- Curve
- false
- 3910b2ce-825d-4581-ba63-0d4761cdc4e4
- 1
-
1346
39
54
20
-
1373
49
- Length factor for curve evaluation
- 44ed20d2-bed7-4174-b019-8b950c7a60ca
- Length
- Length
- false
- 0
-
1346
59
54
20
-
1373
69
- 1
- 1
- {0}
- 0.75
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 666836d5-90e9-45dc-888c-cd7fda5d1741
- Normalized
- Normalized
- false
- 0
-
1346
79
54
20
-
1373
89
- 1
- 1
- {0}
- true
- Point at the specified length
- fd7d459a-61ec-4c29-bce8-89f5389ae2ef
- Point
- Point
- false
- 0
-
1424
39
50
20
-
1449
49
- Tangent vector at the specified length
- cb88cd15-164e-4c99-b984-886295fad576
- Tangent
- Tangent
- false
- 0
-
1424
59
50
20
-
1449
69
- Curve parameter at the specified length
- 3f14ac00-2735-4b30-b58f-f6009f2d3725
- Parameter
- Parameter
- false
- 0
-
1424
79
50
20
-
1449
89
- b464fccb-50e7-41bd-9789-8438db9bea9f
- Angle
- Compute the angle between two vectors.
- true
- 548ba4e7-1094-4f18-8d2c-ed9350d74134
- Angle
- Angle
-
1523
26
103
64
-
1581
58
- First vector
- cde0c54d-257c-47dd-a75c-93831604dfeb
- Vector A
- Vector A
- false
- 0
-
1525
28
44
20
-
1547
38
- 1
- 1
- {0}
-
30.0625
0
0
- Second vector
- 7fd43add-9420-4d8d-a6d1-2e01130d43ea
- Vector B
- Vector B
- false
- cb88cd15-164e-4c99-b984-886295fad576
- 1
-
1525
48
44
20
-
1547
58
- Optional plane for 2D angle
- caf6d80b-4d54-4c6b-946f-f161314d6b79
- Plane
- Plane
- true
- 0
-
1525
68
44
20
-
1547
78
- Angle (in radians) between vectors
- c4db3d67-5cd2-4e5c-971b-abc7d2047fb7
- Angle
- Angle
- false
- 0
-
1593
28
31
30
-
1608.5
43
- Reflex angle (in radians) between vectors
- 5b49b5c0-0dd6-46aa-b4d5-3d37d0bebde9
- Reflex
- Reflex
- false
- 0
-
1593
58
31
30
-
1608.5
73
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 29793b43-3c78-40d1-82d3-36ef567d8578
- Panel
- Panel
- false
- 0
- 41244f95-85c4-47bf-9fed-b1232d1657c8
- 1
- Double click to edit panel content…
-
138
-56
160
100
- 0
- 0
- 0
-
255;255;255;255
- true
- true
- true
- false
- false
- true
- 0d77c51e-584f-44e8-aed2-c2ddf4803888
- Degrees
- Convert an angle specified in radians to degrees
- true
- e0f162c2-c67f-4cbf-b177-9615c93a8543
- Degrees
- Degrees
-
1673
71
108
28
-
1726
85
- Angle in radians
- 31a31548-a7e3-4ab0-bf66-93c1acb557a6
- Radians
- Radians
- false
- c4db3d67-5cd2-4e5c-971b-abc7d2047fb7
- 1
-
1675
73
39
24
-
1694.5
85
- Angle in degrees
- 95fb2e68-16eb-412a-96d3-aa5cad0a1ade
- Degrees
- Degrees
- false
- 0
-
1738
73
41
24
-
1758.5
85
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 41244f95-85c4-47bf-9fed-b1232d1657c8
- Relay
- false
- 95fb2e68-16eb-412a-96d3-aa5cad0a1ade
- 1
-
2019
14
40
16
-
2039
22
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 3efcf628-bc42-4274-8af9-de2b19540957
- Relay
- false
- a4db035a-a834-48b6-a951-08f0da775207
- 1
-
1617
974
40
16
-
1637
982
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 332dde95-ad78-4c2f-8f95-7ea47795be9c
- Relay
- false
- 0c3d97eb-e01e-4cd0-bcc9-899b5e8bd773
- 1
-
1507
781
40
16
-
1527
789
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 3540c5a6-ed00-4088-8256-5cc9330d7c01
- Relay
- false
- 1cc0dda1-74ca-4602-8b4b-73916761ecda
- 1
-
1470
851
40
16
-
1490
859
- d1a28e95-cf96-4936-bf34-8bf142d731bf
- Construct Domain
- Create a numeric domain from two numeric extremes.
- true
- 2bce439f-ae63-4755-8a11-f68a91e530d2
- Construct Domain
- Construct Domain
-
1271
1047
128
44
-
1347
1069
- Start value of numeric domain
- 25efca59-d3bb-4917-b0ba-84391e993cb0
- Domain start
- Domain start
- false
- e659963d-3369-4bfe-8042-98b4d774b39a
- 1
-
1273
1049
62
20
-
1304
1059
- 1
- 1
- {0}
- 0
- End value of numeric domain
- e570691e-e484-47c1-a052-c9b7145cb788
- Domain end
- Domain end
- false
- 5c019ffe-18bb-4230-805b-b001e32f2032
- 1
-
1273
1069
62
20
-
1304
1079
- 1
- 1
- {0}
- 1
- Numeric domain between {A} and {B}
- ae23b4da-3771-4312-9a4d-a3be2fa6330a
- Domain
- Domain
- false
- 0
-
1359
1049
38
40
-
1378
1069
- 9c007a04-d0d9-48e4-9da3-9ba142bc4d46
- Subtraction
- Mathematical subtraction
- true
- 678b40b3-501b-4110-ac8c-a0f22e64efa2
- Subtraction
- Subtraction
-
198
120
70
44
-
223
142
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First operand for subtraction
- c72eac78-6276-4d76-9119-f95db5b67e4d
- A
- A
- true
- 30510cbc-939e-47f4-a157-892edbb7b2ec
- 1
-
200
122
11
20
-
205.5
132
- Second operand for subtraction
- 14c0eb18-b3cb-4f98-aa58-d1dbf04f3fa6
- B
- B
- true
- 0
-
200
142
11
20
-
205.5
152
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 1
- Result of subtraction
- 0e94a1ab-3131-4c59-b8f2-e8748666b639
- Result
- Result
- false
- 0
-
235
122
31
40
-
250.5
142
- 33bcf975-a0b2-4b54-99fd-585c893b9e88
- Digit Scroller
- Numeric scroller for single numbers
- 96b27b16-bb55-4b29-9114-d293f15cbbbe
- Digit Scroller
- Digit Scroller
- false
- 0
- 12
- Digit Scroller
- 11
- 512.0
-
-81
252
250
20
-
-80.80819
252.532
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 30510cbc-939e-47f4-a157-892edbb7b2ec
- Relay
- false
- 2265bbff-c475-4520-9fbf-9b5deac52a81
- 1
-
217
196
40
16
-
237
204
- a0d62394-a118-422d-abb3-6af115c75b25
- Addition
- Mathematical addition
- true
- 88ceaea4-997e-4385-a209-d26a25e6cad7
- Addition
- Addition
-
196
265
70
44
-
221
287
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for addition
- 7eecbe49-527d-4e4a-b96e-0fb2ecc52c92
- A
- A
- true
- 96b27b16-bb55-4b29-9114-d293f15cbbbe
- 1
-
198
267
11
20
-
203.5
277
- Second item for addition
- cd98cff3-4ef8-4f8b-9fab-0ac59bec7927
- B
- B
- true
- 0
-
198
287
11
20
-
203.5
297
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 1
- Result of addition
- 2265bbff-c475-4520-9fbf-9b5deac52a81
- Result
- Result
- false
- 0
-
233
267
31
40
-
248.5
287
- 797d922f-3a1d-46fe-9155-358b009b5997
- One Over X
- Compute one over x.
- true
- 716a01a9-92c7-4e1a-b870-d137b96a88f1
- One Over X
- One Over X
-
16
495
88
28
-
59
509
- Input value
- f5b98d25-7f9b-4ade-bafc-8533008e312d
- Value
- Value
- false
- 96b27b16-bb55-4b29-9114-d293f15cbbbe
- 1
-
18
497
29
24
-
32.5
509
- Output value
- 9abd597a-a15f-4099-b74a-28d83b683784
- Result
- Result
- false
- 0
-
71
497
31
24
-
86.5
509
- 9c85271f-89fa-4e9f-9f4a-d75802120ccc
- Division
- Mathematical division
- true
- 11c3d988-287e-42f8-ab4f-8a985f570719
- Division
- Division
-
155
536
70
44
-
180
558
- Item to divide (dividend)
- b5f1c9c2-6040-4c0f-87d6-badcd27e5f81
- A
- A
- false
- 9abd597a-a15f-4099-b74a-28d83b683784
- 1
-
157
538
11
20
-
162.5
548
- Item to divide with (divisor)
- 8942af83-4043-4c79-b9bc-32498bb5cc19
- B
- B
- false
- 0
-
157
558
11
20
-
162.5
568
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 4
- The result of the Division
- 96d11fc8-f4ab-41f0-a789-1a983f81b85b
- Result
- Result
- false
- 0
-
192
538
31
40
-
207.5
558
- 9c85271f-89fa-4e9f-9f4a-d75802120ccc
- Division
- Mathematical division
- true
- ed6492eb-acc2-4a60-bc00-eda6a9990969
- Division
- Division
-
27
536
70
44
-
52
558
- Item to divide (dividend)
- cc13665f-4d33-4ee9-aa36-6d7531e8ca14
- A
- A
- false
- 0
-
29
538
11
20
-
34.5
548
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Number
- 22.5
- Item to divide with (divisor)
- b1021a89-0e55-4303-acac-8dd976f652d3
- B
- B
- false
- 96b27b16-bb55-4b29-9114-d293f15cbbbe
- 1
-
29
558
11
20
-
34.5
568
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 64
- The result of the Division
- e9b21352-6201-4ce0-8627-b334312d19ac
- Result
- Result
- false
- 0
-
64
538
31
40
-
79.5
558
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 95e54ab1-d9fe-4240-9ceb-e7de21dc8681
- Panel
- false
- 0
- 0
- 360/256/4/4/4/4
-
312
542
169
27
- 0
- 0
- 0
-
312.0504
542.0521
-
255;255;250;90
- true
- true
- true
- false
- false
- true
- 2162e72e-72fc-4bf8-9459-d4d82fa8aa14
- Divide Curve
- Divide a curve into equal length segments
- true
- 98cf7c44-7caf-4bc2-9983-255f53356402
- Divide Curve
- Divide Curve
-
1451
1140
113
64
-
1495
1172
- Curve to divide
- fd8612eb-d457-440b-8f4e-311c04abaaa5
- Curve
- Curve
- false
- a4db035a-a834-48b6-a951-08f0da775207
- 1
-
1453
1142
30
20
-
1468
1152
- Number of segments
- 3a023116-8a4c-4151-b517-0c5ca51ad239
- Count
- Count
- false
- 0
-
1453
1162
30
20
-
1468
1172
- 1
- 1
- {0}
- 16
- Split segments at kinks
- aaa9c033-0aa7-4e1c-ab07-0c251f0f7e53
- Kinks
- Kinks
- false
- 0
-
1453
1182
30
20
-
1468
1192
- 1
- 1
- {0}
- false
- 1
- Division points
- 60286ff9-4bdd-49d5-9a09-78b8ed865edd
- Points
- Points
- false
- 0
-
1507
1142
55
20
-
1534.5
1152
- 1
- Tangent vectors at division points
- 8382f3f4-d743-4a2c-94e1-f1a01a8c11db
- Tangents
- Tangents
- false
- 0
-
1507
1162
55
20
-
1534.5
1172
- 1
- Parameter values at division points
- 6919b5e5-8ccd-4451-a52c-aef7f1c08629
- Parameters
- Parameters
- false
- 0
-
1507
1182
55
20
-
1534.5
1192
- 71b5b089-500a-4ea6-81c5-2f960441a0e8
- PolyLine
- Create a polyline connecting a number of points.
- true
- 0d6c5562-1514-4a06-8d1d-ef13dc497cfc
- PolyLine
- PolyLine
-
1583
1140
106
44
-
1637
1162
- 1
- Polyline vertex points
- 6d443295-1228-442f-8b28-121c91f2d172
- Vertices
- Vertices
- false
- 60286ff9-4bdd-49d5-9a09-78b8ed865edd
- 1
-
1585
1142
40
20
-
1605
1152
- Close polyline
- cf23932a-887d-4765-b887-3f226ce76ece
- Closed
- Closed
- false
- 0
-
1585
1162
40
20
-
1605
1172
- 1
- 1
- {0}
- false
- Resulting polyline
- 379a3424-e130-4321-8792-bddd2920cd65
- Polyline
- Polyline
- false
- 0
-
1649
1142
38
40
-
1668
1162
- cae9fe53-6d63-44ed-9d6d-13180fbf6f89
- 1c9de8a1-315f-4c56-af06-8f69fee80a7a
- Curve Graph Mapper
- Remap values with a custom graph using input curves.
- true
- 19dee33a-96f3-4395-b4cc-340b05bbaae3
- Curve Graph Mapper
- Curve Graph Mapper
-
1814
1027
148
224
-
1876
1139
- 1
- One or multiple graph curves to graph map values with
- e5b32d81-2d78-4e62-9766-c08226ec6195
- Curves
- Curves
- false
- 379a3424-e130-4321-8792-bddd2920cd65
- 1
-
1816
1029
48
27
-
1840
1042.75
- Rectangle which defines the boundary of the graph, graph curves should be atleast partially inside this boundary
- 715e5d41-041e-42c4-b0bf-cf14e2d1a01b
- Rectangle
- Rectangle
- false
- 332dde95-ad78-4c2f-8f95-7ea47795be9c
- 1
-
1816
1056
48
28
-
1840
1070.25
- 1
- Values to graph map. Values are plotted along the X Axis, intersected with the graph curves, then mapped to the Y Axis
- ee9c92a7-74d0-4a26-8674-07b012424d24
- Values
- Values
- false
- 3540c5a6-ed00-4088-8256-5cc9330d7c01
- 1
-
1816
1084
48
27
-
1840
1097.75
- Domain of the graphs X Axis, where the values get plotted (if omitted the input value lists domain bounds is used)
- e6b0c8aa-099c-4454-ab37-178f9e3d0b9a
- X Axis
- X Axis
- true
- 0
-
1816
1111
48
28
-
1840
1125.25
- Domain of the graphs Y Axis, where the values get mapped to (if omitted the input value lists domain bounds is used)
- 8e912506-4bde-4f49-b662-c55f1bdddb22
- Y Axis
- Y Axis
- true
- 0
-
1816
1139
48
27
-
1840
1152.75
- Flip the graphs X Axis from the bottom of the graph to the top of the graph
- 44397376-90b1-4a96-b63f-b5fe6a694f76
- Flip
- Flip
- false
- 0
-
1816
1166
48
28
-
1840
1180.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
- 3fdd56ab-a1ae-4d62-bf89-e76d45e50fc5
- Snap
- Snap
- false
- 0
-
1816
1194
48
27
-
1840
1207.75
- 1
- 1
- {0}
- true
- Size of the graph labels
- 65d6365a-ea25-4b47-ace8-092dab096b0f
- Text Size
- Text Size
- false
- 0
-
1816
1221
48
28
-
1840
1235.25
- 1
- 1
- {0}
- 0.0625
- 1
- Resulting graph mapped values, mapped on the Y Axis
- e1059b3d-dbbd-4de7-9d6a-bd28ca6f88a7
- Mapped
- Mapped
- false
- 0
-
1888
1029
72
20
-
1924
1039
- 1
- The graph curves inside the boundary of the graph
- 15b1822a-f87b-4609-bab1-a22facf27926
- Graph Curves
- Graph Curves
- false
- 0
-
1888
1049
72
20
-
1924
1059
- 1
- The points on the graph curves where the X Axis input values intersected
- true
- 71ddae23-0978-4dc1-bf5b-659ae35ed51d
- Graph Points
- Graph Points
- false
- 0
-
1888
1069
72
20
-
1924
1079
- 1
- The lines from the X Axis input values to the graph curves
- true
- bd5a1acd-f7b1-43d7-a991-25b78b36bae8
- Value Lines
- Value Lines
- false
- 0
-
1888
1089
72
20
-
1924
1099
- 1
- The points plotted on the X Axis which represent the input values
- true
- d0951905-6710-4463-8a50-821b59535093
- Value Points
- Value Points
- false
- 0
-
1888
1109
72
20
-
1924
1119
- 1
- The lines from the graph curves to the Y Axis graph mapped values
- true
- 262f3790-ce8e-41b5-9b6e-a3b083021b20
- Mapped Lines
- Mapped Lines
- false
- 0
-
1888
1129
72
20
-
1924
1139
- 1
- The points mapped on the Y Axis which represent the graph mapped values
- true
- 855e6d4b-38f7-48b5-9c30-06ae558eb45e
- Mapped Points
- Mapped Points
- false
- 0
-
1888
1149
72
20
-
1924
1159
- The graph boundary background as a surface
- 0bd875b3-ae76-486d-855a-fadb44606f68
- Boundary
- Boundary
- false
- 0
-
1888
1169
72
20
-
1924
1179
- 1
- The graph labels as curve outlines
- 14550080-0419-4e9f-a4cb-4e6e0762909d
- Labels
- Labels
- false
- 0
-
1888
1189
72
20
-
1924
1199
- 1
- True for input values outside of the X Axis domain bounds
False for input values inside of the X Axis domain bounds
- 861d3523-67af-4e9b-9ac5-e785109b0d68
- Out Of Bounds
- Out Of Bounds
- false
- 0
-
1888
1209
72
20
-
1924
1219
- 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
- 2652c610-ffe6-496b-8bc0-4d24210d8f99
- Intersected
- Intersected
- false
- 0
-
1888
1229
72
20
-
1924
1239
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 13e397fd-afb5-45c3-b3dc-d7322eb9e745
- Relay
- false
- e1059b3d-dbbd-4de7-9d6a-bd28ca6f88a7
- 1
-
2024
1067
40
16
-
2044
1075
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 0eec3f9a-1b4d-44c9-895a-1c960ed166b1
- Evaluate Length
- Evaluate Length
-
1371
134
132
64
-
1439
166
- Curve to evaluate
- c371efec-bf41-452d-8d89-50a61ce228d7
- Curve
- Curve
- false
- 3910b2ce-825d-4581-ba63-0d4761cdc4e4
- 1
-
1373
136
54
20
-
1400
146
- Length factor for curve evaluation
- 4ca11071-91a4-46fc-b1d2-3968f409fa55
- Length
- Length
- false
- 0
-
1373
156
54
20
-
1400
166
- 1
- 1
- {0}
- 0.25
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 37195dab-735c-4cbb-9c39-51624dda2b22
- Normalized
- Normalized
- false
- 0
-
1373
176
54
20
-
1400
186
- 1
- 1
- {0}
- true
- Point at the specified length
- 4645f2f4-218e-4807-a3fb-955086a9e962
- Point
- Point
- false
- 0
-
1451
136
50
20
-
1476
146
- Tangent vector at the specified length
- 2e9b7528-a9e9-4f70-b414-078c9e047841
- Tangent
- Tangent
- false
- 0
-
1451
156
50
20
-
1476
166
- Curve parameter at the specified length
- 78a5033d-7a52-4041-b19c-0629b3916502
- Parameter
- Parameter
- false
- 0
-
1451
176
50
20
-
1476
186
- 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
- true
- A VB.NET scriptable component
-
98
86
- true
- 26fe933d-1698-4d29-8acd-71f478537911
- VB Script
- VB
- 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
- Imports System.IO
Imports System.Linq
Imports System.Data
Imports System.Drawing
Imports System.Reflection
Imports System.Windows.Forms
Imports System.Xml
Imports System.Xml.Linq
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Imports Rhino.DocObjects
Imports Rhino.Collections
Imports GH_IO
Imports GH_IO.Serialization
-
1273
273
69
184
-
1309
365
- 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
- 379a664a-9630-476f-8c20-256ddf3e943d
- PtA
- PtA
- true
- 0
- true
- 5de5b792-8962-4638-be4a-86c646282e68
- 1
- e1937b56-b1da-4c12-8bd8-e34ee81746ef
-
1275
275
22
20
-
1286
285
- true
- Script Variable PtB
- b01c7d92-c595-4d7a-99a3-957cf497c826
- PtB
- PtB
- true
- 0
- true
- 16fb0b71-416e-432e-a77f-b9e8590e307f
- 1
- e1937b56-b1da-4c12-8bd8-e34ee81746ef
-
1275
295
22
20
-
1286
305
- true
- Script Variable Pln
- 2e167bf2-eb59-4ca7-9464-7bde7df029f3
- Pln
- Pln
- true
- 0
- true
- 3d941ab3-84a6-460a-ac4c-e5c4efca8e47
- 1
- 3897522d-58e9-4d60-b38c-978ddacfedd8
-
1275
315
22
20
-
1286
325
- true
- Script Variable Len
- 61596bb3-a4f5-40b6-92e6-92d9ae8bc194
- Len
- Len
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1275
335
22
20
-
1286
345
- true
- Script Variable Wid
- d1851653-5fa8-44b5-a695-13eabdf10a15
- Wid
- Wid
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1275
355
22
20
-
1286
365
- true
- Script Variable Ht
- 64fd744a-673e-41f1-988e-91bebdb8a308
- Ht
- Ht
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1275
375
22
20
-
1286
385
- true
- Script Variable Ang
- 8dfb957f-e4c5-4592-9f98-049164a4e9a7
- Ang
- Ang
- true
- 0
- true
- 3d353983-c48d-4967-baae-8b74c2abee7e
- 1
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1275
395
22
20
-
1286
405
- true
- Script Variable E
- f831c67e-99d4-413a-8d4a-c8cde2dd88f6
- E
- E
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1275
415
22
20
-
1286
425
- true
- Script Variable I
- b198e951-41a9-4c89-a1c4-5edcc7b4b0de
- I
- I
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1275
435
22
20
-
1286
445
- 1
- Print, Reflect and Error streams
- d7c128dd-a6ec-4944-8ea9-c4460afa58f8
- out
- out
- false
- 0
-
1321
275
19
22
-
1330.5
286.25
- Output parameter Pts
- b23dc398-765b-468f-907e-9b7e6781486a
- Pts
- Pts
- false
- 0
-
1321
297
19
23
-
1330.5
308.75
- Output parameter Crv
- 7ef4522e-b915-4f20-98c0-46077f0157f6
- Crv
- Crv
- false
- 0
-
1321
320
19
22
-
1330.5
331.25
- Output parameter L
- 7090fadb-2ca9-4c0c-be28-893ad204d749
- L
- L
- false
- 0
-
1321
342
19
23
-
1330.5
353.75
- Output parameter W
- 5b43b5d2-f91d-4aff-ae44-e894e1bb5cd2
- W
- W
- false
- 0
-
1321
365
19
22
-
1330.5
376.25
- Output parameter H
- e490d0a3-dbd6-438f-924f-befb23b428f3
- H
- H
- false
- 0
-
1321
387
19
23
-
1330.5
398.75
- Output parameter A
- 1d23bbf4-3a2b-4814-839c-52ef5c2fafa3
- A
- A
- false
- 0
-
1321
410
19
22
-
1330.5
421.25
- Output parameter F
- e06badbd-c5a8-40aa-920f-caf043a47c5a
- F
- F
- false
- 0
-
1321
432
19
23
-
1330.5
443.75
- 17b7152b-d30d-4d50-b9ef-c9fe25576fc2
- XY Plane
- World XY plane.
- true
- 8a3dca1a-0507-466f-99a7-b036ba423ccc
- XY Plane
- XY
-
1184
363
49
28
-
1209
377
- Origin of plane
- 3fa3af50-5459-4ea8-b4a5-fd9587ebbb82
- Origin
- O
- false
- 0
-
1186
365
11
24
-
1191.5
377
- 1
- 1
- {0}
-
0
0
0
- World XY plane
- 3d941ab3-84a6-460a-ac4c-e5c4efca8e47
- Plane
- P
- false
- 0
-
1221
365
10
24
-
1226
377
- 9abae6b7-fa1d-448c-9209-4a8155345841
- Deconstruct
- Deconstruct a point into its component parts.
- true
- ee3a95a3-a762-4ed2-8187-9839f68150b8
- Deconstruct
- Deconstruct
-
975
281
120
64
-
1016
313
- Input point
- 4c3fad4c-7689-41c9-adce-9bb8b7987dad
- Point
- Point
- false
- 4645f2f4-218e-4807-a3fb-955086a9e962
- 1
-
977
283
27
60
-
990.5
313
- Point {x} component
- 0e5c88e5-c9b5-4ca4-8171-2b24be76b2d7
- X component
- X component
- false
- 0
-
1028
283
65
20
-
1060.5
293
- Point {y} component
- 798aeadd-978c-45e4-8c94-72f0051b4754
- Y component
- Y component
- false
- 0
-
1028
303
65
20
-
1060.5
313
- Point {z} component
- 8f6e69d6-5406-463b-b91e-97143bc992ad
- Z component
- Z component
- false
- 0
-
1028
323
65
20
-
1060.5
333
- 3581f42a-9592-4549-bd6b-1c0fc39d067b
- Construct Point
- Construct a point from {xyz} coordinates.
- true
- a7788758-befc-49c7-99aa-854487086770
- Construct Point
- Construct Point
-
1109
389
117
64
-
1185
421
- {x} coordinate
- d513bf44-ae47-4ec2-9ed7-845b21353729
- X coordinate
- X coordinate
- false
- 0
-
1111
391
62
20
-
1142
401
- 1
- 1
- {0}
- 0
- {y} coordinate
- a0ce9b42-1eca-49d0-b9a3-83cec0e1edca
- Y coordinate
- Y coordinate
- false
- 798aeadd-978c-45e4-8c94-72f0051b4754
- 1
-
1111
411
62
20
-
1142
421
- 1
- 1
- {0}
- 0
- {z} coordinate
- 11d47961-0dd1-42e7-b0cb-7ea241126426
- Z coordinate
- Z coordinate
- false
- 8f6e69d6-5406-463b-b91e-97143bc992ad
- 1
-
1111
431
62
20
-
1142
441
- 1
- 1
- {0}
- 0
- Point coordinate
- 5de5b792-8962-4638-be4a-86c646282e68
- Point
- Point
- false
- 0
-
1197
391
27
60
-
1210.5
421
- 3581f42a-9592-4549-bd6b-1c0fc39d067b
- Construct Point
- Construct a point from {xyz} coordinates.
- true
- 172c0aa2-9bcc-4796-a6b5-a28528c2d9cb
- Construct Point
- Construct Point
-
1126
298
117
64
-
1202
330
- {x} coordinate
- 2705197f-8db2-404a-95a3-fb9517b9bcea
- X coordinate
- X coordinate
- false
- 2fcdaa53-203a-4fe5-861d-d5a592274133
- 1
-
1128
300
62
20
-
1159
310
- 1
- 1
- {0}
- 0
- {y} coordinate
- 59785051-089e-4aaf-a937-f2b3b3ad32eb
- Y coordinate
- Y coordinate
- false
- 798aeadd-978c-45e4-8c94-72f0051b4754
- 1
-
1128
320
62
20
-
1159
330
- 1
- 1
- {0}
- 0
- {z} coordinate
- ae605f9e-59df-4be9-b687-af5f1bab4bcc
- Z coordinate
- Z coordinate
- false
- 8f6e69d6-5406-463b-b91e-97143bc992ad
- 1
-
1128
340
62
20
-
1159
350
- 1
- 1
- {0}
- 0
- Point coordinate
- 16fb0b71-416e-432e-a77f-b9e8590e307f
- Point
- Point
- false
- 0
-
1214
300
27
60
-
1227.5
330
- ce46b74e-00c9-43c4-805a-193b69ea4a11
- Multiplication
- Mathematical multiplication
- true
- dd24aaf1-38d4-4d9e-b55a-b0d22176a7e6
- Multiplication
- Multiplication
-
995
418
70
44
-
1020
440
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for multiplication
- 1d01b093-ae53-40ac-a04e-d84419c40fed
- A
- A
- true
- afc911a9-b572-4d05-b576-201cb0b133cb
- 1
-
997
420
11
20
-
1002.5
430
- Second item for multiplication
- 1528904c-20de-4ba2-a5be-f3e26b788389
- B
- B
- true
- 0
-
997
440
11
20
-
1002.5
450
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Number
- 1.4142135623730951
- Result of multiplication
- 2fcdaa53-203a-4fe5-861d-d5a592274133
- Result
- Result
- false
- 0
-
1032
420
31
40
-
1047.5
440
- e9eb1dcf-92f6-4d4d-84ae-96222d60f56b
- Move
- Translate (move) an object along a vector.
- true
- dad503e9-2aa5-4d17-b40c-8cadfc34cb66
- Move
- Move
-
1372
319
126
44
-
1434
341
- Base geometry
- d8f7c11f-4936-462b-bc6f-c5580367d5d5
- Geometry
- Geometry
- true
- 7ef4522e-b915-4f20-98c0-46077f0157f6
- 1
-
1374
321
48
20
-
1398
331
- Translation vector
- 8cf6bbcd-2483-40dc-8378-b776decfda45
- Motion
- Motion
- false
- 4afaa80c-c707-4e66-9a7a-919bf318c524
- 1
-
1374
341
48
20
-
1398
351
- 1
- 1
- {0}
-
0
0
10
- Translated geometry
- ef023e0a-b0bf-4784-a7db-fcd46bf5ae51
- Geometry
- Geometry
- false
- 0
-
1446
321
50
20
-
1471
331
- Transformation data
- ddf92800-9656-4a85-bc8c-c30ac86f6b5a
- Transform
- Transform
- false
- 0
-
1446
341
50
20
-
1471
351
- 56b92eab-d121-43f7-94d3-6cd8f0ddead8
- Vector XYZ
- Create a vector from {xyz} components.
- true
- 3240bff2-3352-49bf-b549-18862f2d5145
- Vector XYZ
- Vector XYZ
-
1381
457
127
64
-
1460
489
- Vector {x} component
- a8ee4b63-dcd4-4cee-b987-99b040df54b1
- X component
- X component
- false
- 0
-
1383
459
65
20
-
1415.5
469
- 1
- 1
- {0}
- 0
- Vector {y} component
- 70c85474-9c16-4604-a77b-6e9cd4677b38
- Y component
- Y component
- false
- 734e1fd9-346e-41f5-9eed-fe2757a0d729
- 1
-
1383
479
65
20
-
1415.5
489
- 1
- 1
- {0}
- 0
- Vector {z} component
- 33bb6ff2-95f0-44dd-bf3f-a21ee656c2d1
- Z component
- Z component
- false
- 0
-
1383
499
65
20
-
1415.5
509
- 1
- 1
- {0}
- 0
- Vector construct
- 4afaa80c-c707-4e66-9a7a-919bf318c524
- Vector
- Vector
- false
- 0
-
1472
459
34
30
-
1489
474
- Vector length
- 91177497-889b-4a3f-9bb3-9b85a12212fc
- Length
- Length
- false
- 0
-
1472
489
34
30
-
1489
504
- a3371040-e552-4bc8-b0ff-10a840258e88
- Negative
- Compute the negative of a value.
- true
- 06b1da93-07f0-4365-86d0-473544cba624
- Negative
- Negative
-
1269
482
88
28
-
1312
496
- Input value
- 2465e63a-da05-49b8-bd94-f842c265c6c4
- Value
- Value
- false
- 798aeadd-978c-45e4-8c94-72f0051b4754
- 1
-
1271
484
29
24
-
1285.5
496
- Output value
- 734e1fd9-346e-41f5-9eed-fe2757a0d729
- Result
- Result
- false
- 0
-
1324
484
31
24
-
1339.5
496
- a4cd2751-414d-42ec-8916-476ebf62d7fe
- Radians
- Convert an angle specified in degrees to radians
- true
- e4147dfe-ec4d-4264-82fc-cb45905f5587
- Radians
- Radians
-
1082
489
108
28
-
1137
503
- Angle in degrees
- a2b4ecd1-cde8-449f-bf45-730f4a7b3846
- Degrees
- Degrees
- false
- 0
-
1084
491
41
24
-
1104.5
503
- 1
- 1
- {0}
- -45
- Angle in radians
- 3d353983-c48d-4967-baae-8b74c2abee7e
- Radians
- Radians
- false
- 0
-
1149
491
39
24
-
1168.5
503
- b7798b74-037e-4f0c-8ac7-dc1043d093e0
- Rotate
- Rotate an object in a plane.
- true
- b61aa121-0767-4ebd-b8fd-53718081faa8
- Rotate
- Rotate
-
1525
314
126
64
-
1587
346
- Base geometry
- 8237ba14-0829-45d8-9502-46c5a4d4c1bc
- Geometry
- Geometry
- true
- ef023e0a-b0bf-4784-a7db-fcd46bf5ae51
- 1
-
1527
316
48
20
-
1551
326
- Rotation angle in radians
- fc95ddb1-f33b-4c0b-8ae8-ac612ce7de42
- Angle
- Angle
- false
- 0
- false
-
1527
336
48
20
-
1551
346
- 1
- 1
- {0}
- 0.78539816339744828
- Rotation plane
- 00ce870c-2207-4dca-8ea1-8876c9e153e8
- Plane
- Plane
- false
- 0
-
1527
356
48
20
-
1551
366
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Rotated geometry
- a2b626bf-b4aa-4acb-92af-37de03d77db9
- Geometry
- Geometry
- false
- 0
-
1599
316
50
30
-
1624
331
- Transformation data
- d1dab41c-61ac-4dff-80c2-c8433c4def13
- Transform
- Transform
- false
- 0
-
1599
346
50
30
-
1624
361
- f12daa2f-4fd5-48c1-8ac3-5dea476912ca
- Mirror
- Mirror an object.
- true
- e894278d-82bd-40c5-a275-a61555953fb6
- Mirror
- Mirror
-
1675
319
126
44
-
1737
341
- Base geometry
- 79d5488f-43eb-4f73-b0c5-7d48c286d4bf
- Geometry
- Geometry
- true
- a2b626bf-b4aa-4acb-92af-37de03d77db9
- 1
-
1677
321
48
20
-
1701
331
- Mirror plane
- c8809857-080f-4c66-b21e-169a65473fc0
- Plane
- Plane
- false
- 0
-
1677
341
48
20
-
1701
351
- 1
- 1
- {0}
-
0
0
0
0
1
0
0
0
1
- Mirrored geometry
- 8819056c-162d-40f9-a9d9-ee6a27452e63
- Geometry
- Geometry
- false
- 0
-
1749
321
50
20
-
1774
331
- Transformation data
- 1379e426-0cee-4599-843b-b79de4f9d8aa
- Transform
- Transform
- false
- 0
-
1749
341
50
20
-
1774
351
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 9128e5ae-cbd8-4175-b785-5c24bc75bdc8
- Relay
- false
- 3910b2ce-825d-4581-ba63-0d4761cdc4e4
- 1
-
1927
152
40
16
-
1947
160
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- daeee5b5-7139-45f8-823e-7a3077f6f1d2
- Relay
- false
- d97ee3a1-106d-4979-9f94-3443ed748b4a
- 1
-
1940
240
40
16
-
1960
248
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 158ea5f7-2e21-4ab7-9cd9-399feeab65b7
- Evaluate Length
- Evaluate Length
-
1546
397
132
64
-
1614
429
- Curve to evaluate
- 5510b295-8fb3-45e0-99f2-ad71b5afd133
- Curve
- Curve
- false
- 8819056c-162d-40f9-a9d9-ee6a27452e63
- 1
-
1548
399
54
20
-
1575
409
- Length factor for curve evaluation
- ee69b266-5919-4c2c-96a6-4108d679ece5
- Length
- Length
- false
- 0
-
1548
419
54
20
-
1575
429
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 62c84e02-571d-4091-b864-b4934e4c6f5c
- Normalized
- Normalized
- false
- 0
-
1548
439
54
20
-
1575
449
- 1
- 1
- {0}
- true
- Point at the specified length
- 57e93cb5-fbd5-4f9a-a850-9e7cd3753ad4
- Point
- Point
- false
- 0
-
1626
399
50
20
-
1651
409
- Tangent vector at the specified length
- 81eaaf50-2869-443b-8154-69d92a7b1237
- Tangent
- Tangent
- false
- 0
-
1626
419
50
20
-
1651
429
- Curve parameter at the specified length
- 20f5892b-fd5d-4b37-8f37-7f3be7c0a043
- Parameter
- Parameter
- false
- 0
-
1626
439
50
20
-
1651
449
- b7798b74-037e-4f0c-8ac7-dc1043d093e0
- Rotate
- Rotate an object in a plane.
- true
- 31c0ff4b-b459-4cda-8b90-eb863d9e1447
- Rotate
- Rotate
-
1565
473
126
64
-
1627
505
- Base geometry
- cb888253-f048-4ef3-b393-57feaeabce39
- Geometry
- Geometry
- true
- 8819056c-162d-40f9-a9d9-ee6a27452e63
- 1
-
1567
475
48
20
-
1591
485
- Rotation angle in radians
- d317aa18-3196-400a-b512-24833ecc67f1
- Angle
- Angle
- false
- 0
- false
-
1567
495
48
20
-
1591
505
- 1
- 1
- {0}
- 3.1415926535897931
- Rotation plane
- c182743a-ac43-4714-b4dd-3f9561deacb1
- Plane
- Plane
- false
- 57e93cb5-fbd5-4f9a-a850-9e7cd3753ad4
- 1
-
1567
515
48
20
-
1591
525
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Rotated geometry
- f34a5f32-1279-45da-9153-aac6da750806
- Geometry
- Geometry
- false
- 0
-
1639
475
50
30
-
1664
490
- Transformation data
- 4104fd19-0c1d-4a67-8dfa-8713f85f6182
- Transform
- Transform
- false
- 0
-
1639
505
50
30
-
1664
520
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 91273030-6075-498c-bb33-a0dbf126ec1e
- Join Curves
- Join Curves
-
1723
391
106
44
-
1780
413
- 1
- Curves to join
- 94f8852e-e7b4-451d-bda6-eecd47d979f8
- Curves
- Curves
- false
- 8819056c-162d-40f9-a9d9-ee6a27452e63
- f34a5f32-1279-45da-9153-aac6da750806
- 2
-
1725
393
43
20
-
1746.5
403
- Preserve direction of input curves
- c71abe07-5940-4e75-9bc4-d1ab3aef8997
- Preserve
- Preserve
- false
- 0
-
1725
413
43
20
-
1746.5
423
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- ad1f6230-8167-472c-a692-ac116140f066
- Curves
- Curves
- false
- 0
-
1792
393
35
40
-
1809.5
413
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 3d2c8c61-81b0-47b5-b5eb-1fa939cd67b2
- Evaluate Length
- Evaluate Length
-
1722
461
132
64
-
1790
493
- Curve to evaluate
- 08d2309b-46be-4e35-a9b7-48eec1741a93
- Curve
- Curve
- false
- ad1f6230-8167-472c-a692-ac116140f066
- 1
-
1724
463
54
20
-
1751
473
- Length factor for curve evaluation
- 976c092b-6ba8-421d-a6f5-52451ce4eb54
- Length
- Length
- false
- 0
-
1724
483
54
20
-
1751
493
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 0ea0bd86-f332-4543-82b8-ab984c994ca7
- Normalized
- Normalized
- false
- 0
-
1724
503
54
20
-
1751
513
- 1
- 1
- {0}
- true
- Point at the specified length
- d3acfa6c-57e2-407a-812b-6a146194b90d
- Point
- Point
- false
- 0
-
1802
463
50
20
-
1827
473
- Tangent vector at the specified length
- 40cebb1e-ba2f-4321-8c6e-f1430224e12a
- Tangent
- Tangent
- false
- 0
-
1802
483
50
20
-
1827
493
- Curve parameter at the specified length
- 7c16449c-a1e0-4044-97d0-c309b0e42b3c
- Parameter
- Parameter
- false
- 0
-
1802
503
50
20
-
1827
513
- f12daa2f-4fd5-48c1-8ac3-5dea476912ca
- Mirror
- Mirror an object.
- true
- 5620f828-861f-4d94-a918-8b4846cb2e1b
- Mirror
- Mirror
-
1874
329
126
44
-
1936
351
- Base geometry
- 284974e7-46b5-4abc-9698-4aa4aa31683c
- Geometry
- Geometry
- true
- ad1f6230-8167-472c-a692-ac116140f066
- 1
-
1876
331
48
20
-
1900
341
- Mirror plane
- 32269fb1-5495-43f7-a189-c53f033c8858
- Plane
- Plane
- false
- aef258f0-7010-4305-9231-ed26f7a5ca4e
- 1
-
1876
351
48
20
-
1900
361
- 1
- 1
- {0}
-
0
0
0
0
1
0
0
0
1
- Mirrored geometry
- 0c23697a-8b9a-48d6-861a-4f0e163b3067
- Geometry
- Geometry
- false
- 0
-
1948
331
50
20
-
1973
341
- Transformation data
- 31e189fd-7833-4faf-82f0-aaf16828de2c
- Transform
- Transform
- false
- 0
-
1948
351
50
20
-
1973
361
- fad344bc-09b1-4855-a2e6-437ef5715fe3
- YZ Plane
- World YZ plane.
- true
- dad07a8f-5ec9-4e43-b497-4bdcaea09b3f
- YZ Plane
- YZ Plane
-
1753
547
86
28
-
1797
561
- Origin of plane
- 7cc92c1f-1e23-4e0c-8752-01c5ebc671d9
- Origin
- Origin
- false
- d3acfa6c-57e2-407a-812b-6a146194b90d
- 1
-
1755
549
30
24
-
1770
561
- 1
- 1
- {0}
-
0
0
0
- World YZ plane
- aef258f0-7010-4305-9231-ed26f7a5ca4e
- Plane
- Plane
- false
- 0
-
1809
549
28
24
-
1823
561
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 8549ba81-3ed7-45f2-994f-cf12b6947545
- Join Curves
- Join Curves
-
1854
268
106
44
-
1911
290
- 1
- Curves to join
- ce7aa9ac-8c4b-4465-8cc1-c61cdacc76c8
- Curves
- Curves
- false
- ad1f6230-8167-472c-a692-ac116140f066
- 0c23697a-8b9a-48d6-861a-4f0e163b3067
- 2
-
1856
270
43
20
-
1877.5
280
- Preserve direction of input curves
- fe16bd92-a738-4610-bc2a-963fa62f06d8
- Preserve
- Preserve
- false
- 0
-
1856
290
43
20
-
1877.5
300
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- d97ee3a1-106d-4979-9f94-3443ed748b4a
- Curves
- Curves
- false
- 0
-
1923
270
35
40
-
1940.5
290
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- df0418dd-a55b-486c-ae4e-503d8eecb9d9
- Curve
- Curve
- false
- daeee5b5-7139-45f8-823e-7a3077f6f1d2
- 1
-
2017
270
50
24
-
2042.867
282.2641
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- cbf9f624-2889-4204-a15c-684de1a8f909
- Curve
- Curve
- false
- 9128e5ae-cbd8-4175-b785-5c24bc75bdc8
- 1
-
1994
122
50
24
-
2019.229
134.756
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- fbe5705e-f40b-400f-be34-a6f8a3d5193e
- Join Curves
- Join Curves
-
1874
288
106
44
-
1931
310
- 1
- Curves to join
- b67f8f04-7e14-4168-9c72-1ca42132f794
- Curves
- Curves
- false
- ad1f6230-8167-472c-a692-ac116140f066
- 0c23697a-8b9a-48d6-861a-4f0e163b3067
- 2
-
1876
290
43
20
-
1897.5
300
- Preserve direction of input curves
- 31393064-763a-4251-b762-395582f202e6
- Preserve
- Preserve
- false
- 0
-
1876
310
43
20
-
1897.5
320
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- b24c2f48-f2f9-4706-81a1-be033f700737
- Curves
- Curves
- false
- 0
-
1943
290
35
40
-
1960.5
310
- 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef
- Quick Graph
- 1
- Display a set of y-values as a graph
- bc5e130c-54f1-4c04-81bb-4d92302ecb8d
- Quick Graph
- Quick Graph
- false
- 0
- e1059b3d-dbbd-4de7-9d6a-bd28ca6f88a7
- 1
-
2032
365
150
150
-
2032.449
365.2196
- -1
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- c9c2f2b5-da7f-4019-92fd-92c4735b71d5
- Curve
- Curve
- false
- a4db035a-a834-48b6-a951-08f0da775207
- 1
-
2249
581
50
24
-
2274.459
593.863
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- 9be7f0ca-0536-4ac3-9443-57702e190b2a
- Curve
- Curve
- false
- 379a3424-e130-4321-8792-bddd2920cd65
- 1
-
2216
657
50
24
-
2241.101
669.9352
- f12daa2f-4fd5-48c1-8ac3-5dea476912ca
- Mirror
- Mirror an object.
- true
- 7d01e58d-8a54-4ae4-a9b6-7ab06f1e2d1c
- Mirror
- Mirror
-
2293
650
126
44
-
2355
672
- Base geometry
- 17d1d407-3a21-4b09-a617-d9801ef30b7f
- Geometry
- Geometry
- true
- 9be7f0ca-0536-4ac3-9443-57702e190b2a
- 1
-
2295
652
48
20
-
2319
662
- Mirror plane
- d3cdf2a5-d9da-4b8c-83c5-5a98280a79a9
- Plane
- Plane
- false
- 0
-
2295
672
48
20
-
2319
682
- 1
- 1
- {0}
-
0
0
0
0
1
0
0
0
1
- Mirrored geometry
- 2cb202b3-0c04-4689-b060-c0262920972e
- Geometry
- Geometry
- false
- 0
-
2367
652
50
20
-
2392
662
- Transformation data
- c86e32d1-3919-465c-b583-3e1b693a9d4d
- Transform
- Transform
- false
- 0
-
2367
672
50
20
-
2392
682
- 4d2a06bd-4b0f-4c65-9ee0-4220e4c01703
- Scale
- Scale an object uniformly in all directions.
- true
- 94fb524e-94b2-4634-8c18-46c169e9b368
- Scale
- Scale
-
2550
632
126
64
-
2612
664
- Base geometry
- ac4ed61e-526e-44fc-b2a9-5b20284488d9
- Geometry
- Geometry
- true
- 809779a6-b26b-4d70-bfcd-b7a899aeb48f
- 1
-
2552
634
48
20
-
2576
644
- Center of scaling
- 05743bfe-326e-47f8-9002-e6c022240175
- Center
- Center
- false
- 0
-
2552
654
48
20
-
2576
664
- 1
- 1
- {0}
-
0
0
0
- Scaling factor
- 3307b6e3-1c83-4f43-8544-66c303d485aa
- Factor
- Factor
- false
- 4e8a50ea-22b0-4939-80dc-45b497a32eab
- 1
-
2552
674
48
20
-
2576
684
- 1
- 1
- {0}
- 0.5
- Scaled geometry
- c9dcbe00-45c0-4fe7-a486-d2ce9715f868
- Geometry
- Geometry
- false
- 0
-
2624
634
50
30
-
2649
649
- Transformation data
- 91f714e7-2082-4acb-b073-055162c4f4da
- Transform
- Transform
- false
- 0
-
2624
664
50
30
-
2649
679
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 007c0597-08be-4501-a9ff-305dd497d52d
- Join Curves
- Join Curves
-
2421
539
106
44
-
2478
561
- 1
- Curves to join
- efb808e7-362e-4e2e-a590-aab781acc664
- Curves
- Curves
- false
- c9c2f2b5-da7f-4019-92fd-92c4735b71d5
- 2cb202b3-0c04-4689-b060-c0262920972e
- 2690fc68-80e3-45ed-ba28-a73d0acf282d
- 3
-
2423
541
43
20
-
2444.5
551
- Preserve direction of input curves
- b149447e-b95c-4926-9ed4-6c054a4ad5c6
- Preserve
- Preserve
- false
- 0
-
2423
561
43
20
-
2444.5
571
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- 809779a6-b26b-4d70-bfcd-b7a899aeb48f
- Curves
- Curves
- false
- 0
-
2490
541
35
40
-
2507.5
561
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- afc911a9-b572-4d05-b576-201cb0b133cb
- Relay
- false
- 0e5c88e5-c9b5-4ca4-8171-2b24be76b2d7
- 1
-
954
378
40
16
-
974
386
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 925090fd-6bda-42c5-a188-e3df2f2b78d6
- Relay
- false
- 0e5c88e5-c9b5-4ca4-8171-2b24be76b2d7
- 1
-
2333
757
40
16
-
2353
765
- ce46b74e-00c9-43c4-805a-193b69ea4a11
- Multiplication
- Mathematical multiplication
- true
- 19b0ef7f-1603-43f5-9ee4-ca186263610d
- Multiplication
- Multiplication
-
2410
744
70
44
-
2435
766
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for multiplication
- cdfdf008-c520-4081-9620-890a26d2b1bc
- A
- A
- true
- 925090fd-6bda-42c5-a188-e3df2f2b78d6
- 1
-
2412
746
11
20
-
2417.5
756
- Second item for multiplication
- bb6a3815-9e09-4b1e-aaa5-5ab6d89792e9
- B
- B
- true
- 0
-
2412
766
11
20
-
2417.5
776
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Integer
- 4
- Result of multiplication
- 4e8a50ea-22b0-4939-80dc-45b497a32eab
- Result
- Result
- false
- 0
-
2447
746
31
40
-
2462.5
766
- e9eb1dcf-92f6-4d4d-84ae-96222d60f56b
- Move
- Translate (move) an object along a vector.
- true
- d499b50a-c53c-49f9-9d01-5b56e75a4bbd
- Move
- Move
-
2728
687
126
44
-
2790
709
- Base geometry
- 64d21ff8-2044-4e3b-8908-4ef94124d62c
- Geometry
- Geometry
- true
- c9dcbe00-45c0-4fe7-a486-d2ce9715f868
- 1
-
2730
689
48
20
-
2754
699
- Translation vector
- c90ac9c9-3874-4614-bf46-11fc8130f210
- Motion
- Motion
- false
- e9836bbc-725d-43e4-995c-88750a096ed8
- 1
-
2730
709
48
20
-
2754
719
- 1
- 1
- {0}
-
0
0
10
- Translated geometry
- 56d0947c-ad68-4cfb-86d1-8fcf7a48e4ce
- Geometry
- Geometry
- false
- 0
-
2802
689
50
20
-
2827
699
- Transformation data
- 649b5a1e-6cd1-4543-b0c1-4ec600d272e4
- Transform
- Transform
- false
- 0
-
2802
709
50
20
-
2827
719
- 56b92eab-d121-43f7-94d3-6cd8f0ddead8
- Vector XYZ
- Create a vector from {xyz} components.
- true
- 62796c89-f427-4b0f-8aba-bb5ef7101ed1
- Vector XYZ
- Vector XYZ
-
2534
764
127
64
-
2613
796
- Vector {x} component
- c20181ab-31a4-4123-9605-9add7bc12152
- X component
- X component
- false
- 0
-
2536
766
65
20
-
2568.5
776
- 1
- 1
- {0}
- 0
- Vector {y} component
- b9ad5853-4918-4dbf-a9ff-34cc13797115
- Y component
- Y component
- false
- 8b4140c8-1224-4101-94a9-fae63182a9ae
- 1
-
2536
786
65
20
-
2568.5
796
- 1
- 1
- {0}
- 0
- Vector {z} component
- 7d1408d5-06d8-44cd-987e-88bb20447a66
- Z component
- Z component
- false
- 0
-
2536
806
65
20
-
2568.5
816
- 1
- 1
- {0}
- 0
- Vector construct
- e9836bbc-725d-43e4-995c-88750a096ed8
- Vector
- Vector
- false
- 0
-
2625
766
34
30
-
2642
781
- Vector length
- 47530c73-29b3-4ac8-95d8-980308a8d808
- Length
- Length
- false
- 0
-
2625
796
34
30
-
2642
811
- a3371040-e552-4bc8-b0ff-10a840258e88
- Negative
- Compute the negative of a value.
- true
- 7729c066-169e-4154-a09e-6bf484a1ec9a
- Negative
- Negative
-
2414
830
88
28
-
2457
844
- Input value
- 1dafb6fb-718b-4fc9-b7ba-a90b5652fbb7
- Value
- Value
- false
- 798aeadd-978c-45e4-8c94-72f0051b4754
- 1
-
2416
832
29
24
-
2430.5
844
- Output value
- 689d1d65-22a2-4661-96a9-fd62a95298a3
- Result
- Result
- false
- 0
-
2469
832
31
24
-
2484.5
844
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- d2805e3d-0af8-46a9-9b8d-435dcee01b14
- Relay
- false
- 56d0947c-ad68-4cfb-86d1-8fcf7a48e4ce
- 1
-
2620
480
40
16
-
2640
488
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- f6fb8d8c-5ae8-445b-9af0-a6460ebc9cf5
- Curve
- Curve
- false
- d2805e3d-0af8-46a9-9b8d-435dcee01b14
- 1
-
2708
450
50
24
-
2733.128
462.3543
- 3cadddef-1e2b-4c09-9390-0e8f78f7609f
- Merge
- Merge a bunch of data streams
- fdce27e9-9fb5-40a4-8982-966ac16712e5
- Merge
- Merge
-
2204
206
75
84
-
2234
248
- 4
- 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
- 2
- Data stream 1
- 45e1e0f3-e8d8-4a54-afbd-010a9bae52dd
- false
- Data 1
- D1
- true
- cbf9f624-2889-4204-a15c-684de1a8f909
- 1
-
2206
208
16
20
-
2214
218
- 2
- Data stream 2
- 9d7f5dc9-4b6c-44ac-8475-32d4b894ea03
- false
- Data 2
- D2
- true
- df0418dd-a55b-486c-ae4e-503d8eecb9d9
- 1
-
2206
228
16
20
-
2214
238
- 2
- Data stream 3
- 1c052ee6-bb60-402d-b5c1-cd322713adce
- false
- Data 3
- D3
- true
- 1c315543-a675-4e2e-bf6c-0699d34576cd
- 1
-
2206
248
16
20
-
2214
258
- 2
- Data stream 4
- 57c9f55e-f939-4b7d-9b49-b754231ff8ab
- false
- Data 4
- D4
- true
- 0
-
2206
268
16
20
-
2214
278
- 2
- Result of merge
- f6b4926e-e21e-4172-8955-63568a7bca58
- Result
- Result
- false
- 0
-
2246
208
31
80
-
2261.5
248
- 7376fe41-74ec-497e-b367-1ffe5072608b
- Curvature Graph
- Draws Rhino Curvature Graphs.
- 1a228e5c-f086-4ddc-a8fb-57d064579fa4
- Curvature Graph
- Curvature Graph
-
2766
280
65
64
-
2817
312
- Curve for Curvature graph display
- true
- 49509b30-1b7a-4cc4-aa52-1fee8f857b9b
- Curve
- Curve
- false
- f6fb8d8c-5ae8-445b-9af0-a6460ebc9cf5
- 1
-
2768
282
37
20
-
2786.5
292
- Sampling density of the Graph
- 96f0b975-d527-4bda-b77d-d0c1fa5546cd
- Density
- Density
- false
- 0
-
2768
302
37
20
-
2786.5
312
- 1
- 1
- {0}
- 1
- Scale of graph
- 956cbc42-1bb9-42ef-914c-7c1628d6ba77
- Scale
- Scale
- false
- bb18bf88-1def-4c7b-bd6d-58ed6f898c06
- 1
-
2768
322
37
20
-
2786.5
332
- 1
- 1
- {0}
- 105
- ce46b74e-00c9-43c4-805a-193b69ea4a11
- Multiplication
- Mathematical multiplication
- true
- de04c0f2-702f-4a22-ae2a-1d79429531be
- Multiplication
- Multiplication
-
2455
881
70
44
-
2480
903
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for multiplication
- 66c1bee3-0c45-48e1-8042-f8fbe1b5f81c
- A
- A
- true
- 689d1d65-22a2-4661-96a9-fd62a95298a3
- 1
-
2457
883
11
20
-
2462.5
893
- Second item for multiplication
- b7468600-8a20-4edd-92fd-7dc28cfa8cd8
- B
- B
- true
- 0
-
2457
903
11
20
-
2462.5
913
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Number
- 1.25
- Result of multiplication
- 8b4140c8-1224-4101-94a9-fae63182a9ae
- Result
- Result
- false
- 0
-
2492
883
31
40
-
2507.5
903
- 33bcf975-a0b2-4b54-99fd-585c893b9e88
- Digit Scroller
- Numeric scroller for single numbers
- bb18bf88-1def-4c7b-bd6d-58ed6f898c06
- Digit Scroller
- Digit Scroller
- false
- 0
- 12
- Digit Scroller
- 3
- 112.000000000
-
2493
382
250
20
-
2493.76
382.3707
- 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
- b1551a80-522e-48bd-909f-f47901a99aa7
- VB Script
- VB
- 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
-
384
1568
69
184
-
420
1660
- 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
- 2657fe56-ecae-410b-aa7d-d0815171db0a
- PtA
- PtA
- true
- 0
- true
- 0
- e1937b56-b1da-4c12-8bd8-e34ee81746ef
-
386
1570
22
20
-
397
1580
- 1
- 1
- {0}
-
0
0
0
- Grasshopper.Kernel.Types.GH_Point
- true
- Script Variable PtB
- ef4da902-5cc6-4ea5-81ed-b1b1cca57a12
- PtB
- PtB
- true
- 0
- true
- 96e6e7f5-7a75-4c54-916e-18b10a7340f2
- 1
- e1937b56-b1da-4c12-8bd8-e34ee81746ef
-
386
1590
22
20
-
397
1600
- 1
- 1
- {0}
-
0.0625
0.0625
0
- Grasshopper.Kernel.Types.GH_Point
- true
- Script Variable Pln
- 25a1946a-7351-4d93-9c7d-3fa4ac19078c
- Pln
- Pln
- true
- 0
- true
- 0
- 3897522d-58e9-4d60-b38c-978ddacfedd8
-
386
1610
22
20
-
397
1620
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Plane
-
0
0
0
1
0
0
0
1
0
- true
- Script Variable Len
- bbe98993-e009-4e52-8774-f139cc9ad344
- Len
- Len
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
386
1630
22
20
-
397
1640
- true
- Script Variable Wid
- 318f6c25-142a-4cef-8d1b-56b349a56ae9
- Wid
- Wid
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
386
1650
22
20
-
397
1660
- true
- Script Variable Ht
- f065abd9-8c03-4b9a-ac26-8c0e09668b17
- Ht
- Ht
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
386
1670
22
20
-
397
1680
- true
- Script Variable Ang
- 5d5e434e-9221-484f-93a2-bdc1e197c273
- Ang
- Ang
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
386
1690
22
20
-
397
1700
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Number
- -0.78539816339744828
- true
- Script Variable E
- 36d9b8b0-7c38-498f-8a97-0403b70adef6
- E
- E
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
386
1710
22
20
-
397
1720
- true
- Script Variable I
- a6b52055-8ebf-49f0-a429-b8b8185391ac
- I
- I
- true
- 0
- true
- 0
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
386
1730
22
20
-
397
1740
- 1
- Print, Reflect and Error streams
- 562038bb-d4ef-4dda-8f24-19118cb2a92c
- out
- out
- false
- 0
-
432
1570
19
22
-
441.5
1581.25
- Output parameter Pts
- f2abc1ef-f616-42de-9c3e-2fc55c013c47
- Pts
- Pts
- false
- 0
-
432
1592
19
23
-
441.5
1603.75
- Output parameter Crv
- d956c518-8143-4003-b468-0922d9b5d819
- Crv
- Crv
- false
- 0
-
432
1615
19
22
-
441.5
1626.25
- Output parameter L
- 5f1ba0d6-87b3-4d7a-b620-493c780b9781
- L
- L
- false
- 0
-
432
1637
19
23
-
441.5
1648.75
- Output parameter W
- a3aba44a-4ad7-4dc6-a6dd-95eb9c56bf10
- W
- W
- false
- 0
-
432
1660
19
22
-
441.5
1671.25
- Output parameter H
- fcbbe834-84c4-4680-ae56-76b50b45b590
- H
- H
- false
- 0
-
432
1682
19
23
-
441.5
1693.75
- Output parameter A
- 383ff64c-4b9f-4bdd-a03a-aabb8673ab4e
- A
- A
- false
- 0
-
432
1705
19
22
-
441.5
1716.25
- Output parameter F
- 30690ce7-61b8-414e-9f41-260072b75cd7
- F
- F
- false
- 0
-
432
1727
19
23
-
441.5
1738.75
- 3581f42a-9592-4549-bd6b-1c0fc39d067b
- Construct Point
- Construct a point from {xyz} coordinates.
- true
- d4601b93-4450-4b6e-862a-bf2609a4735e
- Construct Point
- Pt
-
292
1580
52
64
-
317
1612
- {x} coordinate
- 8c217294-5520-4b18-bff5-1088b16dcbd8
- X coordinate
- X
- false
- 284c1cc9-3635-4b27-8730-cabd5b035623
- 1
-
294
1582
11
20
-
299.5
1592
- 1
- 1
- {0}
- -0.0625
- {y} coordinate
- 680a29ab-0a44-4ec5-bbe2-6f7bd03f85af
- Y coordinate
- Y
- false
- 0
-
294
1602
11
20
-
299.5
1612
- 1
- 1
- {0}
- 0
- {z} coordinate
- 770e91e4-6a46-49bb-b353-8041b845ba5c
- Z coordinate
- Z
- false
- 0
-
294
1622
11
20
-
299.5
1632
- 1
- 1
- {0}
- 0
- Point coordinate
- 96e6e7f5-7a75-4c54-916e-18b10a7340f2
- Point
- Pt
- false
- 0
-
329
1582
13
60
-
335.5
1612
- ce46b74e-00c9-43c4-805a-193b69ea4a11
- Multiplication
- Mathematical multiplication
- true
- 6c0bcf58-fe20-41f9-aeb5-ec035bad475c
- Multiplication
- Multiplication
-
192
1571
70
44
-
217
1593
- 2
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- 1
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- First item for multiplication
- a13d9bf8-6a4e-4bd6-9e37-5a941a62f027
- A
- A
- true
- 3da56e93-b503-4aaa-913f-b21fb00a75a9
- 1
-
194
1573
11
20
-
199.5
1583
- Second item for multiplication
- 108d8193-48f3-4738-80b0-adcd33e96b39
- B
- B
- true
- 0
-
194
1593
11
20
-
199.5
1603
- 1
- 1
- {0}
- Grasshopper.Kernel.Types.GH_Number
- 1.4142135623730951
- Result of multiplication
- 284c1cc9-3635-4b27-8730-cabd5b035623
- Result
- Result
- false
- 0
-
229
1573
31
40
-
244.5
1593
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- a19f272a-e1fd-44df-ae7c-8aa5f34795ff
- Curve
- Curve
- false
- d956c518-8143-4003-b468-0922d9b5d819
- 1
-
490
1614
50
24
-
515.5077
1626.262
- b7798b74-037e-4f0c-8ac7-dc1043d093e0
- Rotate
- Rotate an object in a plane.
- true
- 37565348-5591-43d8-b0b4-7c4d6a5d3272
- Rotate
- Rotate
-
561
1609
126
64
-
623
1641
- Base geometry
- 259efa71-e7ec-440a-b208-e84cfb9f4ea3
- Geometry
- Geometry
- true
- a19f272a-e1fd-44df-ae7c-8aa5f34795ff
- 1
-
563
1611
48
20
-
587
1621
- Rotation angle in radians
- d4487b82-f667-4419-8094-99afe2efbde1
- Angle
- Angle
- false
- 0
- false
-
563
1631
48
20
-
587
1641
- 1
- 1
- {0}
- 0.78539816339744828
- Rotation plane
- e598a938-d369-4e45-a0b1-1a8adedbff76
- Plane
- Plane
- false
- 0
-
563
1651
48
20
-
587
1661
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Rotated geometry
- b70405fe-a731-405a-91c4-82f1f5c6a102
- Geometry
- Geometry
- false
- 0
-
635
1611
50
30
-
660
1626
- Transformation data
- 1b130843-22d6-4d58-92b1-c74715beb4b6
- Transform
- Transform
- false
- 0
-
635
1641
50
30
-
660
1656
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 72bb9a2e-d60d-4c72-a5f4-5fce99d4fe50
- Evaluate Length
- Evaluate Length
-
548
1701
132
64
-
616
1733
- Curve to evaluate
- 1418df23-8a93-4340-9f30-b08147ea0364
- Curve
- Curve
- false
- b70405fe-a731-405a-91c4-82f1f5c6a102
- 1
-
550
1703
54
20
-
577
1713
- Length factor for curve evaluation
- 6bfe7688-10dc-468b-ad61-d2b018b47a13
- Length
- Length
- false
- 0
-
550
1723
54
20
-
577
1733
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 18440d2d-fe72-4dbc-9004-3116d6794b37
- Normalized
- Normalized
- false
- 0
-
550
1743
54
20
-
577
1753
- 1
- 1
- {0}
- true
- Point at the specified length
- 05d4d0bf-2b53-45a4-ad4f-b5c43cc8c6a2
- Point
- Point
- false
- 0
-
628
1703
50
20
-
653
1713
- Tangent vector at the specified length
- d3070cd7-941c-44f0-9ce6-61badd20a46c
- Tangent
- Tangent
- false
- 0
-
628
1723
50
20
-
653
1733
- Curve parameter at the specified length
- f5413efc-3b2e-4407-93d2-35720cd637f1
- Parameter
- Parameter
- false
- 0
-
628
1743
50
20
-
653
1753
- b7798b74-037e-4f0c-8ac7-dc1043d093e0
- Rotate
- Rotate an object in a plane.
- true
- 9adf2dba-5752-42e7-87e3-7871cd7470f3
- Rotate
- Rotate
-
560
1778
126
64
-
622
1810
- Base geometry
- 6725f6c6-0b9d-49d3-8348-51e56dbb75dd
- Geometry
- Geometry
- true
- b70405fe-a731-405a-91c4-82f1f5c6a102
- 1
-
562
1780
48
20
-
586
1790
- Rotation angle in radians
- 3d98a8db-0a5a-42da-9bda-670dff10b82a
- Angle
- Angle
- false
- 0
- false
-
562
1800
48
20
-
586
1810
- 1
- 1
- {0}
- 3.1415926535897931
- Rotation plane
- 9be2bae3-ab72-42e3-a7b1-cf9c1265c35b
- Plane
- Plane
- false
- 05d4d0bf-2b53-45a4-ad4f-b5c43cc8c6a2
- 1
-
562
1820
48
20
-
586
1830
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Rotated geometry
- 98aef519-9b49-4a89-b2a3-b806fa206e19
- Geometry
- Geometry
- false
- 0
-
634
1780
50
30
-
659
1795
- Transformation data
- 7499b0d3-1824-4208-a5c8-13bc1e8101d6
- Transform
- Transform
- false
- 0
-
634
1810
50
30
-
659
1825
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 7c7852a9-4249-47e5-9031-e2ef29f4fd3b
- Evaluate Length
- Evaluate Length
-
550
1860
132
64
-
618
1892
- Curve to evaluate
- a5fbf7c4-460f-43ee-857b-f36ef883c6cc
- Curve
- Curve
- false
- 98aef519-9b49-4a89-b2a3-b806fa206e19
- 1
-
552
1862
54
20
-
579
1872
- Length factor for curve evaluation
- 7c42813a-76b8-4438-a17e-063612817650
- Length
- Length
- false
- 0
-
552
1882
54
20
-
579
1892
- 1
- 1
- {0}
- 0
- If True, the Length factor is normalized (0.0 ~ 1.0)
- b9fe3425-bdb4-41a6-9ecb-13ee3a231d72
- Normalized
- Normalized
- false
- 0
-
552
1902
54
20
-
579
1912
- 1
- 1
- {0}
- true
- Point at the specified length
- 52f025f7-8b51-47c5-8bf1-9caa31e9ca1f
- Point
- Point
- false
- 0
-
630
1862
50
20
-
655
1872
- Tangent vector at the specified length
- 32390238-8395-452b-aeda-d19d39ee6226
- Tangent
- Tangent
- false
- 0
-
630
1882
50
20
-
655
1892
- Curve parameter at the specified length
- 3f11ce29-ffbe-49c8-b111-c2c71140c932
- Parameter
- Parameter
- false
- 0
-
630
1902
50
20
-
655
1912
- f12daa2f-4fd5-48c1-8ac3-5dea476912ca
- Mirror
- Mirror an object.
- true
- 0eb85a42-2c70-44b8-9e00-5aba582dde85
- Mirror
- Mirror
-
744
1777
126
44
-
806
1799
- Base geometry
- 69c72ba0-8b4c-4b38-8e6e-5cf06f33db82
- Geometry
- Geometry
- true
- 30220ef9-bb40-4cba-ac3f-1600a89d47dc
- 1
-
746
1779
48
20
-
770
1789
- Mirror plane
- 210842dd-fdfe-40bf-871b-cdaea375371b
- Plane
- Plane
- false
- 17bf68cb-da62-49f6-bf6c-38b55fe70dff
- 1
-
746
1799
48
20
-
770
1809
- 1
- 1
- {0}
-
0
0
0
0
1
0
0
0
1
- Mirrored geometry
- e24f69ea-53e4-4879-b764-4df48610d16e
- Geometry
- Geometry
- false
- 0
-
818
1779
50
20
-
843
1789
- Transformation data
- 65deb174-4ccd-45ba-8617-7cf0a9be87f2
- Transform
- Transform
- false
- 0
-
818
1799
50
20
-
843
1809
- fad344bc-09b1-4855-a2e6-437ef5715fe3
- YZ Plane
- World YZ plane.
- true
- 5cc342e9-7dc6-471d-bf07-6b9be8fa3cb8
- YZ Plane
- YZ Plane
-
715
1858
86
28
-
759
1872
- Origin of plane
- e546afd3-de01-4729-a756-f417f4d66715
- Origin
- Origin
- false
- 52f025f7-8b51-47c5-8bf1-9caa31e9ca1f
- 1
-
717
1860
30
24
-
732
1872
- 1
- 1
- {0}
-
0
0
0
- World YZ plane
- 17bf68cb-da62-49f6-bf6c-38b55fe70dff
- Plane
- Plane
- false
- 0
-
771
1860
28
24
-
785
1872
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- f85ed1ff-db4b-44e5-af3c-ac525dbc121c
- Join Curves
- Join Curves
-
768
1719
106
44
-
825
1741
- 1
- Curves to join
- 7c24a930-35a2-4288-a5c2-6e9239d79329
- Curves
- Curves
- false
- b70405fe-a731-405a-91c4-82f1f5c6a102
- 98aef519-9b49-4a89-b2a3-b806fa206e19
- 2
-
770
1721
43
20
-
791.5
1731
- Preserve direction of input curves
- a129b4c0-59f2-4cf2-9552-5218e46fbe5b
- Preserve
- Preserve
- false
- 0
-
770
1741
43
20
-
791.5
1751
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- 30220ef9-bb40-4cba-ac3f-1600a89d47dc
- Curves
- Curves
- false
- 0
-
837
1721
35
40
-
854.5
1741
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 0d6c8645-0575-436c-a18d-fa91c129b309
- Join Curves
- Join Curves
-
902
1723
106
44
-
959
1745
- 1
- Curves to join
- 8e6b7a90-ac98-4d09-937b-9d2e177dce42
- Curves
- Curves
- false
- 30220ef9-bb40-4cba-ac3f-1600a89d47dc
- e24f69ea-53e4-4879-b764-4df48610d16e
- 2
-
904
1725
43
20
-
925.5
1735
- Preserve direction of input curves
- 430532e6-9b1f-408c-8063-b76b1a787d20
- Preserve
- Preserve
- false
- 0
-
904
1745
43
20
-
925.5
1755
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- 33d0f02d-c918-4cea-ae8e-2ad6ad5d1a82
- Curves
- Curves
- false
- 0
-
971
1725
35
40
-
988.5
1745
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 7967ace9-058d-48fa-8e01-396bbe9ba969
- Evaluate Length
- Evaluate Length
-
877
1875
132
64
-
945
1907
- Curve to evaluate
- 092e6ac9-2339-445d-80b7-391f2bdf20d8
- Curve
- Curve
- false
- 33d0f02d-c918-4cea-ae8e-2ad6ad5d1a82
- 1
-
879
1877
54
20
-
906
1887
- Length factor for curve evaluation
- 2bdcdcff-9fc0-4b57-a354-a5352682cc5a
- Length
- Length
- false
- 0
-
879
1897
54
20
-
906
1907
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- f10a8673-0505-42f4-b3ca-56624dc57284
- Normalized
- Normalized
- false
- 0
-
879
1917
54
20
-
906
1927
- 1
- 1
- {0}
- true
- Point at the specified length
- 1fcebe2c-ce7a-4b50-9499-435ea7a966f4
- Point
- Point
- false
- 0
-
957
1877
50
20
-
982
1887
- Tangent vector at the specified length
- 2c7b3cbf-0c12-4405-91b7-e365c658f50c
- Tangent
- Tangent
- false
- 0
-
957
1897
50
20
-
982
1907
- Curve parameter at the specified length
- 2d33f33e-6467-4c51-b790-11c51e6d526c
- Parameter
- Parameter
- false
- 0
-
957
1917
50
20
-
982
1927
- b7798b74-037e-4f0c-8ac7-dc1043d093e0
- Rotate
- Rotate an object in a plane.
- true
- 03f06df8-436b-47d9-83ff-80eedbfab6d5
- Rotate
- Rotate
-
887
1794
126
64
-
949
1826
- Base geometry
- 762b903e-0b5d-42ab-8cbb-bec1cc7001f1
- Geometry
- Geometry
- true
- 33d0f02d-c918-4cea-ae8e-2ad6ad5d1a82
- 1
-
889
1796
48
20
-
913
1806
- Rotation angle in radians
- 5da141fd-f50f-49ac-b1f4-e7cf0ef48884
- Angle
- Angle
- false
- 0
- false
-
889
1816
48
20
-
913
1826
- 1
- 1
- {0}
- 3.1415926535897931
- Rotation plane
- e878b21d-2ddd-4b1d-82e0-c63a3c11abbf
- Plane
- Plane
- false
- 1fcebe2c-ce7a-4b50-9499-435ea7a966f4
- 1
-
889
1836
48
20
-
913
1846
- 1
- 1
- {0}
-
0
0
0
1
0
0
0
1
0
- Rotated geometry
- cb5e832c-db39-4a89-81e5-0d68a77a32c5
- Geometry
- Geometry
- false
- 0
-
961
1796
50
30
-
986
1811
- Transformation data
- b0798e16-d60a-4935-a904-db0a4f498080
- Transform
- Transform
- false
- 0
-
961
1826
50
30
-
986
1841
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 5f8035b4-950d-4f8c-8c6c-02a7eb12a4d9
- Join Curves
- Join Curves
-
1050
1716
106
44
-
1107
1738
- 1
- Curves to join
- 264b7cf1-87ec-411f-8f1e-f682b4e450a9
- Curves
- Curves
- false
- 33d0f02d-c918-4cea-ae8e-2ad6ad5d1a82
- cb5e832c-db39-4a89-81e5-0d68a77a32c5
- 2
-
1052
1718
43
20
-
1073.5
1728
- Preserve direction of input curves
- efda4bb5-9478-41e2-88b2-52024ebb0a81
- Preserve
- Preserve
- false
- 0
-
1052
1738
43
20
-
1073.5
1748
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- 6a4e1df2-35b0-40d8-b9e5-d84972b9f3d5
- Curves
- Curves
- false
- 0
-
1119
1718
35
40
-
1136.5
1738
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- 2aef12dd-0bad-4fd2-b757-593417c6c2de
- Evaluate Length
- Evaluate Length
-
1039
1784
132
64
-
1107
1816
- Curve to evaluate
- da5c4498-30ff-4374-a5ad-5547644420a5
- Curve
- Curve
- false
- 6a4e1df2-35b0-40d8-b9e5-d84972b9f3d5
- 1
-
1041
1786
54
20
-
1068
1796
- Length factor for curve evaluation
- f3ecb642-6bcb-43bf-9794-4d9e549a7e56
- Length
- Length
- false
- 0
-
1041
1806
54
20
-
1068
1816
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 09d5895a-4b92-4909-a097-06fab632261d
- Normalized
- Normalized
- false
- 0
-
1041
1826
54
20
-
1068
1836
- 1
- 1
- {0}
- true
- Point at the specified length
- 36832804-60c7-430e-b5bd-47dbdea47f0f
- Point
- Point
- false
- 0
-
1119
1786
50
20
-
1144
1796
- Tangent vector at the specified length
- af8d2f93-da07-48bf-b6f7-a8db45db017e
- Tangent
- Tangent
- false
- 0
-
1119
1806
50
20
-
1144
1816
- Curve parameter at the specified length
- 267fd9f7-80ca-463b-816e-5f71d5e5caad
- Parameter
- Parameter
- false
- 0
-
1119
1826
50
20
-
1144
1836
- f12daa2f-4fd5-48c1-8ac3-5dea476912ca
- Mirror
- Mirror an object.
- true
- 08f036d3-8f87-4cbb-a203-67a5a3ff6b4e
- Mirror
- Mirror
-
1048
1868
126
44
-
1110
1890
- Base geometry
- 2303a03f-1da9-419d-b38b-05bdd04786fa
- Geometry
- Geometry
- true
- 6a4e1df2-35b0-40d8-b9e5-d84972b9f3d5
- 1
-
1050
1870
48
20
-
1074
1880
- Mirror plane
- 88630c96-da83-4922-b310-a02a28f694fc
- Plane
- Plane
- false
- d78c4aa2-4094-4f95-ade4-3b9c254fcaa4
- 1
-
1050
1890
48
20
-
1074
1900
- 1
- 1
- {0}
-
0
0
0
0
1
0
0
0
1
- Mirrored geometry
- 937b5876-9cac-4d48-bffc-fce17e6e4ff8
- Geometry
- Geometry
- false
- 0
-
1122
1870
50
20
-
1147
1880
- Transformation data
- bc36d610-bb23-4b96-9a32-a1264d3d64ea
- Transform
- Transform
- false
- 0
-
1122
1890
50
20
-
1147
1900
- fad344bc-09b1-4855-a2e6-437ef5715fe3
- YZ Plane
- World YZ plane.
- true
- ab07ed93-ce99-4922-bb37-cd9ff41738ae
- YZ Plane
- YZ Plane
-
1076
1930
86
28
-
1120
1944
- Origin of plane
- 96d5c33e-0598-4694-acdd-28288abbeb4a
- Origin
- Origin
- false
- 36832804-60c7-430e-b5bd-47dbdea47f0f
- 1
-
1078
1932
30
24
-
1093
1944
- 1
- 1
- {0}
-
0
0
0
- World YZ plane
- d78c4aa2-4094-4f95-ade4-3b9c254fcaa4
- Plane
- Plane
- false
- 0
-
1132
1932
28
24
-
1146
1944
- 8073a420-6bec-49e3-9b18-367f6fd76ac3
- Join Curves
- Join as many curves as possible
- true
- 3e8760c9-0187-407f-89bf-d454f8933d8b
- Join Curves
- Join Curves
-
1239
1726
106
44
-
1296
1748
- 1
- Curves to join
- 12062507-2fa9-4376-a91a-ac58bab67fff
- Curves
- Curves
- false
- 6a4e1df2-35b0-40d8-b9e5-d84972b9f3d5
- 937b5876-9cac-4d48-bffc-fce17e6e4ff8
- 2
-
1241
1728
43
20
-
1262.5
1738
- Preserve direction of input curves
- 937c266e-69e5-4213-b761-903b918c57ac
- Preserve
- Preserve
- false
- 0
-
1241
1748
43
20
-
1262.5
1758
- 1
- 1
- {0}
- false
- 1
- Joined curves and individual curves that could not be joined.
- 74fee499-31ac-4fd7-8d88-534b634cdc5e
- Curves
- Curves
- false
- 0
-
1308
1728
35
40
-
1325.5
1748
- cae9fe53-6d63-44ed-9d6d-13180fbf6f89
- 1c9de8a1-315f-4c56-af06-8f69fee80a7a
- Curve Graph Mapper
- Remap values with a custom graph using input curves.
- true
- f59ee16b-43ad-4c37-89b3-b47cb98709b7
- Curve Graph Mapper
- Curve Graph Mapper
-
1829
1693
148
224
-
1891
1805
- 1
- One or multiple graph curves to graph map values with
- ae3612a4-4d92-4d09-b584-827006c2de11
- Curves
- Curves
- false
- 8e03a14f-eb65-4608-906c-918b0d1923ff
- 1
-
1831
1695
48
27
-
1855
1708.75
- Rectangle which defines the boundary of the graph, graph curves should be atleast partially inside this boundary
- 67b21d23-7fd3-4ba9-a7fb-e378039978d6
- Rectangle
- Rectangle
- false
- 332dde95-ad78-4c2f-8f95-7ea47795be9c
- 1
-
1831
1722
48
28
-
1855
1736.25
- 1
- Values to graph map. Values are plotted along the X Axis, intersected with the graph curves, then mapped to the Y Axis
- 249e75c2-f6ac-4990-8c56-f25daf2e7a54
- Values
- Values
- false
- 3540c5a6-ed00-4088-8256-5cc9330d7c01
- 1
-
1831
1750
48
27
-
1855
1763.75
- Domain of the graphs X Axis, where the values get plotted (if omitted the input value lists domain bounds is used)
- a2fb0cfb-ef0c-4796-bc33-0a7e1e127c61
- X Axis
- X Axis
- true
- 0
-
1831
1777
48
28
-
1855
1791.25
- Domain of the graphs Y Axis, where the values get mapped to (if omitted the input value lists domain bounds is used)
- b97d978a-ea56-46ad-98f4-65db6bc3e49a
- Y Axis
- Y Axis
- true
- 0
-
1831
1805
48
27
-
1855
1818.75
- Flip the graphs X Axis from the bottom of the graph to the top of the graph
- aa6d554b-ddda-4a22-b958-9db708daecc6
- Flip
- Flip
- false
- 0
-
1831
1832
48
28
-
1855
1846.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
- d70d6bc4-0b2f-4177-8f08-493bee472250
- Snap
- Snap
- false
- 0
-
1831
1860
48
27
-
1855
1873.75
- 1
- 1
- {0}
- true
- Size of the graph labels
- b9efbc3b-9acf-4b34-b879-a210afc26a69
- Text Size
- Text Size
- false
- 0
-
1831
1887
48
28
-
1855
1901.25
- 1
- 1
- {0}
- 0.0625
- 1
- Resulting graph mapped values, mapped on the Y Axis
- 71bc6904-175f-469f-b566-4dbe32d835bb
- Mapped
- Mapped
- false
- 0
-
1903
1695
72
20
-
1939
1705
- 1
- The graph curves inside the boundary of the graph
- a19be86e-3fe3-4691-8fd2-6cb3e162fb6a
- Graph Curves
- Graph Curves
- false
- 0
-
1903
1715
72
20
-
1939
1725
- 1
- The points on the graph curves where the X Axis input values intersected
- true
- 642a1ea5-ea0c-4d1e-b21d-55bfa91afc3e
- Graph Points
- Graph Points
- false
- 0
-
1903
1735
72
20
-
1939
1745
- 1
- The lines from the X Axis input values to the graph curves
- true
- c2cc14a6-bdbc-42c4-80ac-f04fc25244d7
- Value Lines
- Value Lines
- false
- 0
-
1903
1755
72
20
-
1939
1765
- 1
- The points plotted on the X Axis which represent the input values
- true
- 6d4906b1-c07e-43fa-bab1-8b6651d8cf70
- Value Points
- Value Points
- false
- 0
-
1903
1775
72
20
-
1939
1785
- 1
- The lines from the graph curves to the Y Axis graph mapped values
- true
- f2e9fd13-480a-409c-9224-37b31d1b5e8a
- Mapped Lines
- Mapped Lines
- false
- 0
-
1903
1795
72
20
-
1939
1805
- 1
- The points mapped on the Y Axis which represent the graph mapped values
- true
- d90ada3e-b283-496e-80c6-7e33e9e834dd
- Mapped Points
- Mapped Points
- false
- 0
-
1903
1815
72
20
-
1939
1825
- The graph boundary background as a surface
- c77ce4ed-f82a-485e-861b-56e4af6cd670
- Boundary
- Boundary
- false
- 0
-
1903
1835
72
20
-
1939
1845
- 1
- The graph labels as curve outlines
- 1304912b-9e82-4215-9b9b-472899f3a3e0
- Labels
- Labels
- false
- 0
-
1903
1855
72
20
-
1939
1865
- 1
- True for input values outside of the X Axis domain bounds
False for input values inside of the X Axis domain bounds
- 0d520714-1f87-47f8-8e49-acc1bb50d032
- Out Of Bounds
- Out Of Bounds
- false
- 0
-
1903
1875
72
20
-
1939
1885
- 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
- dc75d0fb-7ad1-4ff6-be3f-405bd74925af
- Intersected
- Intersected
- false
- 0
-
1903
1895
72
20
-
1939
1905
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- fba4a0b5-d761-41e8-98e6-857040e4a72f
- Relay
- false
- 71bc6904-175f-469f-b566-4dbe32d835bb
- 1
-
2013
1734
40
16
-
2033
1742
- fb6aba99-fead-4e42-b5d8-c6de5ff90ea6
- DotNET VB Script (LEGACY)
- A VB.NET scriptable component
- true
- 04f46bd6-5820-4e23-9fee-ec36f36a7db0
- 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
-
1020
-255
100
44
-
1075
-233
- 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
- b9abac3d-84f3-4379-9571-795d737e787f
- Forward
- Forward
- true
- 1
- true
- 95ec1350-0cf8-4bd1-9939-9141bb7e8d4d
- 1
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1022
-253
41
20
-
1042.5
-243
- 1
- false
- Script Variable Left
- 98523591-64d9-4d0d-a564-60db2b1e8141
- Left
- Left
- true
- 1
- true
- 8cdcaada-fc0f-4e1c-b945-c54515a10ec8
- 1
- 8e991e99-5fb8-41e1-928d-1bba8fb9f7d7
-
1022
-233
41
20
-
1042.5
-223
- Print, Reflect and Error streams
- 188742fd-d016-4251-a6dc-6efaa5ec6c59
- Output
- out
- false
- 0
-
1087
-253
31
20
-
1102.5
-243
- Output parameter Points
- 680426bb-44d6-4f74-84ea-a30424576deb
- Points
- Points
- false
- 0
-
1087
-233
31
20
-
1102.5
-223
- fbac3e32-f100-4292-8692-77240a42fd1a
- Point
- Contains a collection of three-dimensional points
- true
- 5c482871-7ff7-4118-b23e-94ef7f946ae1
- Point
- Point
- false
- 680426bb-44d6-4f74-84ea-a30424576deb
- 1
-
1126
-138
50
24
-
1151.687
-126.2506
- 2b2a4145-3dff-41d4-a8de-1ea9d29eef33
- Interpolate
- Create an interpolated curve through a set of points.
- true
- 121b5465-f85c-478a-b735-9582ea845c5c
- Interpolate
- Interpolate
-
1198
-264
113
84
-
1259
-222
- 1
- Interpolation points
- c6b2e27d-97b5-44cd-9de5-b75b7e8abb26
- Vertices
- Vertices
- false
- 680426bb-44d6-4f74-84ea-a30424576deb
- 1
-
1200
-262
47
20
-
1223.5
-252
- Curve degree
- 0df378ae-f53a-4733-bad7-21aa3e61b2be
- Degree
- Degree
- false
- 0
-
1200
-242
47
20
-
1223.5
-232
- 1
- 1
- {0}
- 3
- Periodic curve
- d251596e-3b9b-4ed0-b4a3-bcebf2ce6ee0
- Periodic
- Periodic
- false
- 0
-
1200
-222
47
20
-
1223.5
-212
- 1
- 1
- {0}
- false
- Knot spacing (0=uniform, 1=chord, 2=sqrtchord)
- 26eaf4b5-55ed-4edc-a365-9970c1e3aa28
- KnotStyle
- KnotStyle
- false
- 0
-
1200
-202
47
20
-
1223.5
-192
- 1
- 1
- {0}
- 0
- Resulting nurbs curve
- d226da90-0265-4fbe-a4f0-5b199a80033c
- Curve
- Curve
- false
- 0
-
1271
-262
38
26
-
1290
-248.6667
- Curve length
- 371505c7-3a2a-4440-aa3b-d62a0fc8d786
- Length
- Length
- false
- 0
-
1271
-236
38
27
-
1290
-222
- Curve domain
- abfd30af-d005-4221-b835-a2c9c01655ef
- Domain
- Domain
- false
- 0
-
1271
-209
38
27
-
1290
-195.3333
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 8cdcaada-fc0f-4e1c-b945-c54515a10ec8
- Relay
- false
- fba4a0b5-d761-41e8-98e6-857040e4a72f
- 1
-
926
-162
40
16
-
946
-154
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- f3423c70-2b05-418e-ae35-dc0185716a28
- Relay
- false
- 1079207c-c500-47d1-8f4a-d01b58dbaef6
- 1
-
1818
-210
40
16
-
1838
-202
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- 1c315543-a675-4e2e-bf6c-0699d34576cd
- Curve
- Curve
- false
- f3423c70-2b05-418e-ae35-dc0185716a28
- 1
-
1974
-182
50
24
-
1999.795
-170.9949
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- a66f475b-e0e2-49b0-8dfb-e80e2169bb7f
- Evaluate Length
- Evaluate Length
-
1397
-114
132
64
-
1465
-82
- Curve to evaluate
- bb37b8df-92d0-42f0-b738-97d78f16e156
- Curve
- Curve
- false
- 3910b2ce-825d-4581-ba63-0d4761cdc4e4
- 1
-
1399
-112
54
20
-
1426
-102
- Length factor for curve evaluation
- 6e80d472-fac2-4187-8281-60c0e364a768
- Length
- Length
- false
- 0
-
1399
-92
54
20
-
1426
-82
- 1
- 1
- {0}
- 1
- If True, the Length factor is normalized (0.0 ~ 1.0)
- c446b02e-7b0e-4d23-8f02-df32e0f43f41
- Normalized
- Normalized
- false
- 0
-
1399
-72
54
20
-
1426
-62
- 1
- 1
- {0}
- true
- Point at the specified length
- 1578a0e1-8a38-496d-b60a-c23f1a475084
- Point
- Point
- false
- 0
-
1477
-112
50
20
-
1502
-102
- Tangent vector at the specified length
- dab4bf04-7e37-41b8-9cba-f99d414e99fb
- Tangent
- Tangent
- false
- 0
-
1477
-92
50
20
-
1502
-82
- Curve parameter at the specified length
- 489c1968-382a-40eb-9a6b-ea22dfee0882
- Parameter
- Parameter
- false
- 0
-
1477
-72
50
20
-
1502
-62
- 9abae6b7-fa1d-448c-9209-4a8155345841
- Deconstruct
- Deconstruct a point into its component parts.
- true
- 1dbcd44b-9bbb-4655-8876-3648a699fa31
- Deconstruct
- Deconstruct
-
1553
-94
120
64
-
1594
-62
- Input point
- a8801748-6a68-47fe-a0ba-d6c1883f559e
- Point
- Point
- false
- 1578a0e1-8a38-496d-b60a-c23f1a475084
- 1
-
1555
-92
27
60
-
1568.5
-62
- Point {x} component
- 89dce222-a000-4356-b64c-c9d83cf76ba3
- X component
- X component
- false
- 0
-
1606
-92
65
20
-
1638.5
-82
- Point {y} component
- df435129-f632-41d3-87f6-6ae7ae0971ac
- Y component
- Y component
- false
- 0
-
1606
-72
65
20
-
1638.5
-62
- Point {z} component
- 1c4e507e-f239-4786-9994-f54b197d62ab
- Z component
- Z component
- false
- 0
-
1606
-52
65
20
-
1638.5
-42
- 56b92eab-d121-43f7-94d3-6cd8f0ddead8
- Vector XYZ
- Create a vector from {xyz} components.
- true
- e739b100-829b-4164-987b-c8d3d18692ba
- Vector XYZ
- Vector XYZ
-
1692
-87
127
64
-
1771
-55
- Vector {x} component
- 38551287-4ac2-4820-83e6-ca880161804a
- X component
- X component
- false
- 89dce222-a000-4356-b64c-c9d83cf76ba3
- 1
-
1694
-85
65
20
-
1726.5
-75
- 1
- 1
- {0}
- 0
- Vector {y} component
- 06c3dee2-5cb8-49c9-8b35-e88c0a7d3b28
- Y component
- Y component
- false
- 0
-
1694
-65
65
20
-
1726.5
-55
- 1
- 1
- {0}
- 0
- Vector {z} component
- 7d865c89-91a2-461c-a09a-d71707ad27bb
- Z component
- Z component
- false
- 0
-
1694
-45
65
20
-
1726.5
-35
- 1
- 1
- {0}
- 0
- Vector construct
- 66487a28-7cef-45bb-8348-cf3098878562
- Vector
- Vector
- false
- 0
-
1783
-85
34
30
-
1800
-70
- Vector length
- 9b4f2434-0a76-4765-b7fd-87684717c27a
- Length
- Length
- false
- 0
-
1783
-55
34
30
-
1800
-40
- e9eb1dcf-92f6-4d4d-84ae-96222d60f56b
- Move
- Translate (move) an object along a vector.
- true
- 8cef3aa1-7554-4876-99b9-b6d74e40e6d1
- Move
- Move
-
1614
-193
126
44
-
1676
-171
- Base geometry
- 3242288f-3099-4f7d-8df0-a0c7e225393a
- Geometry
- Geometry
- true
- d226da90-0265-4fbe-a4f0-5b199a80033c
- 1
-
1616
-191
48
20
-
1640
-181
- Translation vector
- a41ec363-f4ef-4127-96ac-b0c276de30e2
- Motion
- Motion
- false
- 66487a28-7cef-45bb-8348-cf3098878562
- 1
-
1616
-171
48
20
-
1640
-161
- 1
- 1
- {0}
-
0
0
10
- Translated geometry
- 1079207c-c500-47d1-8f4a-d01b58dbaef6
- Geometry
- Geometry
- false
- 0
-
1688
-191
50
20
-
1713
-181
- Transformation data
- c95cc97a-25a2-43b1-8593-46e184b0a79d
- Transform
- Transform
- false
- 0
-
1688
-171
50
20
-
1713
-161
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- edcd7d3d-fd27-48be-8d4f-709654e17fe5
- Relay
- false
- 74fee499-31ac-4fd7-8d88-534b634cdc5e
- 1
-
1539
1654
40
16
-
1559
1662
- 6b021f56-b194-4210-b9a1-6cef3b7d0848
- Evaluate Length
- Evaluate a curve at a certain factor along its length. Length factors can be supplied both in curve units and normalized units. Change the [N] parameter to toggle between the two modes.
- true
- e19d3738-99bd-4bcb-947c-0920388de262
- Evaluate Length
- Evaluate Length
-
2102
1825
132
64
-
2170
1857
- Curve to evaluate
- f6884525-1cf6-4b8f-b230-b10b6f5f48fa
- Curve
- Curve
- false
- a4db035a-a834-48b6-a951-08f0da775207
- 1
-
2104
1827
54
20
-
2131
1837
- Length factor for curve evaluation
- 2962c737-2d04-4217-84d5-3de1371cac33
- Length
- Length
- false
- 0
-
2104
1847
54
20
-
2131
1857
- 1
- 1
- {0}
- 0
- If True, the Length factor is normalized (0.0 ~ 1.0)
- 1503caad-f703-4dfa-8bac-bd18d5b91495
- Normalized
- Normalized
- false
- 0
-
2104
1867
54
20
-
2131
1877
- 1
- 1
- {0}
- true
- Point at the specified length
- a73884d2-c0eb-4817-89db-47f5f7987257
- Point
- Point
- false
- 0
-
2182
1827
50
20
-
2207
1837
- Tangent vector at the specified length
- 9583a04f-de23-4125-87f1-3be9c4d285c5
- Tangent
- Tangent
- false
- 0
-
2182
1847
50
20
-
2207
1857
- Curve parameter at the specified length
- 47a6c421-3857-49ee-b595-9d906e010653
- Parameter
- Parameter
- false
- 0
-
2182
1867
50
20
-
2207
1877
- 9abae6b7-fa1d-448c-9209-4a8155345841
- Deconstruct
- Deconstruct a point into its component parts.
- true
- f079ab90-1a27-49ac-a297-a36c22d38c8a
- Deconstruct
- Deconstruct
-
2280
1827
120
64
-
2321
1859
- Input point
- f40746ca-4677-4eb5-b17f-18cd2492ce5d
- Point
- Point
- false
- a73884d2-c0eb-4817-89db-47f5f7987257
- 1
-
2282
1829
27
60
-
2295.5
1859
- Point {x} component
- 54294e75-31f0-4519-96c7-67914c56f51a
- X component
- X component
- false
- 0
-
2333
1829
65
20
-
2365.5
1839
- Point {y} component
- dba9a3a6-c2ec-413c-bb9c-b47fc3f6cb1a
- Y component
- Y component
- false
- 0
-
2333
1849
65
20
-
2365.5
1859
- Point {z} component
- 1f9de893-ec37-416d-838b-8ae4e69fa9ee
- Z component
- Z component
- false
- 0
-
2333
1869
65
20
-
2365.5
1879
- 56b92eab-d121-43f7-94d3-6cd8f0ddead8
- Vector XYZ
- Create a vector from {xyz} components.
- true
- 37e04157-9996-437d-b7ae-9bba4482d65d
- Vector XYZ
- Vector XYZ
-
2447
1827
127
64
-
2526
1859
- Vector {x} component
- f01dfad2-f90c-4db0-b3c4-8152090d0e21
- X component
- X component
- false
- 54294e75-31f0-4519-96c7-67914c56f51a
- 1
-
2449
1829
65
20
-
2481.5
1839
- 1
- 1
- {0}
- 0
- Vector {y} component
- d7e31f5b-481c-41cb-92b4-f77070a4dec2
- Y component
- Y component
- false
- 0
-
2449
1849
65
20
-
2481.5
1859
- 1
- 1
- {0}
- 0
- Vector {z} component
- 761c62aa-9f75-4f1b-92e2-780a812979c3
- Z component
- Z component
- false
- 0
-
2449
1869
65
20
-
2481.5
1879
- 1
- 1
- {0}
- 0
- Vector construct
- 98261cb3-7be1-4611-8b0e-c2014b70e2e2
- Vector
- Vector
- false
- 0
-
2538
1829
34
30
-
2555
1844
- Vector length
- cbdf42e3-e56c-44da-95cc-4c05243fc13e
- Length
- Length
- false
- 0
-
2538
1859
34
30
-
2555
1874
- e9eb1dcf-92f6-4d4d-84ae-96222d60f56b
- Move
- Translate (move) an object along a vector.
- true
- 3e5fdf21-8234-4ea8-bed1-b5fc9fc39731
- Move
- Move
-
2559
1752
126
44
-
2621
1774
- Base geometry
- e94146d8-4946-40aa-9fbf-c2e7747953d2
- Geometry
- Geometry
- true
- edcd7d3d-fd27-48be-8d4f-709654e17fe5
- 1
-
2561
1754
48
20
-
2585
1764
- Translation vector
- f4dc9c01-d9fc-46fc-87fe-b035a2ee7632
- Motion
- Motion
- false
- 98261cb3-7be1-4611-8b0e-c2014b70e2e2
- 1
-
2561
1774
48
20
-
2585
1784
- 1
- 1
- {0}
-
0
0
10
- Translated geometry
- 864dfd4b-0ca3-4c95-866b-54a326e689ff
- Geometry
- Geometry
- false
- 0
-
2633
1754
50
20
-
2658
1764
- Transformation data
- fd3b0384-9e97-4c55-981c-11adf855dd38
- Transform
- Transform
- false
- 0
-
2633
1774
50
20
-
2658
1784
- d5967b9f-e8ee-436b-a8ad-29fdcecf32d5
- Curve
- Contains a collection of generic curves
- true
- 2690fc68-80e3-45ed-ba28-a73d0acf282d
- Curve
- Curve
- false
- 864dfd4b-0ca3-4c95-866b-54a326e689ff
- 1
-
2369
712
50
24
-
2394.259
724.0868
- b6236720-8d88-4289-93c3-ac4c99f9b97b
- Relay
- 2
- A wire relay object
- 8e03a14f-eb65-4608-906c-918b0d1923ff
- Relay
- false
- 74fee499-31ac-4fd7-8d88-534b634cdc5e
- 1
-
1543
1785
40
16
-
1563
1793
- 2b69bf71-4e69-43aa-b7be-4f6ce7e45bef
- Quick Graph
- 1
- Display a set of y-values as a graph
- 5132cd81-5c64-42b0-8064-da142e41889e
- Quick Graph
- Quick Graph
- false
- 0
- fba4a0b5-d761-41e8-98e6-857040e4a72f
- 1
-
2359
365
150
150
-
2359.421
365.632
- -1
-
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