{
  "Uuid": "041a68eb-3564-4d3f-a3e5-48f27546a299",
  "IsCustomNode": false,
  "Description": "",
  "Name": "SCF SCF Connection filled region",
  "ElementResolver": {
    "ResolutionMap": {}
  },
  "Inputs": [],
  "Outputs": [],
  "Nodes": [
    {
      "ConcreteType": "DSRevitNodesUI.FilledRegionTypes, DSRevitNodesUI",
      "SelectedIndex": -1,
      "SelectedString": "",
      "Id": "03439a039e7d444d9981bfe301474078",
      "NodeType": "ExtensionNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "2a3867e3d5274e5e8bb616ffc6fc1fca",
          "Name": "FilledRegionType",
          "Description": "The selected FilledRegionType",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Select an existing Filled Region Type from the active document."
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "9ce223cd32ec45b6a3d7f6ff785fc1ec",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "1cbc236c41834d049e7bc12fe3cbe8ca",
          "Name": "view",
          "Description": "View to place filled region on\n\nView",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "9257c3c44654455a8a33c6c338418e31",
          "Name": "boundary",
          "Description": "Boundary curves\n\nCurve[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "094c2edcfde64010a803b961aee23958",
          "Name": "regionType",
          "Description": "Region Type\n\nFilledRegionType",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "639d9d80530344fd8fd8226a0c5c02a3",
          "Name": "FilledRegion",
          "Description": "FilledRegion",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Revit.Elements.FilledRegion.ByCurves@Revit.Elements.Views.View,Autodesk.DesignScript.Geometry.Curve[],Revit.Elements.FilledRegionType",
      "Replication": "Auto",
      "Description": "Construct a Revit FilledRegion element by Curves\n\nFilledRegion.ByCurves (view: View, boundary: Curve[], regionType: FilledRegionType): FilledRegion"
    },
    {
      "ConcreteType": "DSRevitNodesUI.Categories, DSRevitNodesUI",
      "SelectedIndex": 245,
      "SelectedString": "OST_Floors",
      "Id": "ebd92956fe7c44fda98ff178720080a7",
      "NodeType": "ExtensionNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "2830e66e44484462947606356cf49b1a",
          "Name": "Category",
          "Description": "The selected Category.",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "All built-in categories."
    },
    {
      "ConcreteType": "DSRevitNodesUI.ElementsOfCategoryInView, DSRevitNodesUI",
      "Id": "f347a4bb0b32402aa47aea41eb589770",
      "NodeType": "ExtensionNode",
      "Inputs": [
        {
          "Id": "63eca5a27557406fb90d1e887a230f9c",
          "Name": "Category",
          "Description": "The Category",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "5246061fe6a449c0b2819ca5a8913118",
          "Name": "View",
          "Description": "The View",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "2250f7c671bf4cdfaabfc8dc1aa6b0f8",
          "Name": "Elements",
          "Description": "An element class.",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Get all elements of the specified category in the specified view from the model."
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "2b868768ef2140bc886bfdbb2a32d0e0",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "4ce34d659f724bc59ba2812449115f65",
          "Name": "Document",
          "Description": "The document from which to retrieve the active view. If null, the current document is used.\n\nvar\nDefault value : SynthesizeToolkit.Revit.Document.GetActiveDocument()",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "c96241f22f16477898a6ca1998529bad",
          "Name": "Element",
          "Description": "The active view element.",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "SynthesizeToolkit.Revit.Views.GetActiveView@var",
      "Replication": "Auto",
      "Description": "Retrieves the active view from the specified or current Revit document.\n\nViews.GetActiveView (Document: var = SynthesizeToolkit.Revit.Document.GetActiveDocument()): Element"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "fc15dc24971d4af58b8dc7ef1b93a50f",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "f1a69f85c016473fb3b5fc68080fc5b2",
          "Name": "element",
          "Description": "Revit.Elements.Element",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "a8674519bab94dc0b724e3172851c12c",
          "Name": "parameterName",
          "Description": "The name of the parameter whose value you want to obtain.\n\nstring",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "505fadfef2894d70a7fbe705e7c996c6",
          "Name": "var[]..[]",
          "Description": "var[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Revit.Elements.Element.GetParameterValueByName@string",
      "Replication": "Auto",
      "Description": "Get the value of one of the element's parameters.\n\nElement.GetParameterValueByName (parameterName: string): var[]..[]"
    },
    {
      "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels",
      "Id": "4ac64efafd88486b82be33eb5104c724",
      "NodeType": "StringInputNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "6e7ef8b0f4ad4418a95156af35b74c71",
          "Name": "",
          "Description": "String",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Creates a string",
      "InputValue": "GP_ElementFamily"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.CustomNodes.Function, DynamoCore",
      "FunctionSignature": "3325a597-4c74-4292-9152-66b7177b27f1",
      "FunctionType": "Graph",
      "Id": "2e7860ab005149dc8de37b88de4ec352",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "b954b53509654e96bddf0052e49ba580",
          "Name": "surfaces",
          "Description": "Surface[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "f2753e3d07a547a59713afb212404180",
          "Name": "vertical",
          "Description": "return value",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "f03cc41df65c4fcd8b185589ea0f105d",
          "Name": "isVertical",
          "Description": "return value",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "a24150e5b09d46019a613dabc5a348d8",
          "Name": "horizontalUp",
          "Description": "return value",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "2a1b9e195f144bd3ace0754d94251235",
          "Name": "isHorizontalUp",
          "Description": "return value",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "9461c6c878b64018aec4064d4f04277a",
          "Name": "horizontalDown",
          "Description": "return value",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "953850def109430cbfa6167ab54e7ee1",
          "Name": "isHorizontalDown",
          "Description": "return value",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Auto",
      "Description": "Sorts surfaces in three lists based on their orientation (vertical, horizontal up & horizontal down) and also returns three corresponding lists of booleans."
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "27eb740c644449e3b222e6055293a119",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "91a2315ed8dc4cacb1d181147d96b00c",
          "Name": "element",
          "Description": "Revit.Elements.Element",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "ede2d11dea824b4e8d3265936b0720b0",
          "Name": "Surface[]",
          "Description": "Surface[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Revit.Elements.Element.Faces",
      "Replication": "Auto",
      "Description": "The Faces in this Element\n\nElement.Faces: Surface[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "17ae0846cefd4bacb88a1018f6d7d388",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "ba3a326402ee4f3e878154f1c4cbc633",
          "Name": "list",
          "Description": "List to flatten.\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "fa4cd7cabcf74ca9898435cdde313fe3",
          "Name": "amount",
          "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "853e465a92314af6a7a7c95aefc547d4",
          "Name": "list",
          "Description": "Flattened list by amount",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.Flatten@var[]..[],int",
      "Replication": "Auto",
      "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "cc65d2eb22754a5d94b322cce34f9abe",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "0b77f62110424688b1980a4b1c650725",
          "Name": "document",
          "Description": "Revit.Application.Document",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "efb38e3834134fbfa0ad870e214d8dce",
          "Name": "View",
          "Description": "View",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Revit.Application.Document.ActiveView",
      "Replication": "Auto",
      "Description": "Get the active view for the document\n\nDocument.ActiveView: View"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "62834ba794cd4321906d7bde521c82d1",
      "NodeType": "FunctionNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "f3293b08fdf84ab9b19775302faef84d",
          "Name": "Document",
          "Description": "Document",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Revit.Application.Document.Current",
      "Replication": "Auto",
      "Description": "Get the current document\n\nDocument.Current: Document"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "6f1ef5bdafda4047b38de6bd210b7c5f",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "ea9d025dab794423936cc4c325123d8d",
          "Name": "curves",
          "Description": "Curves to join into polycurve\n\nCurve[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "b71521d222214d37a6a0629d76b29f10",
          "Name": "joinTolerance",
          "Description": "Tolerance to determine size of gap allowed between curves to be joined\n\ndouble\nDefault value : 0.001",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "abfb870914734baf83efccca2f95e790",
          "Name": "trimCurves",
          "Description": "bool\nDefault value : false",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "fc730d96ad8843738e0d24484cc2adf5",
          "Name": "trimLength",
          "Description": "double\nDefault value : 0",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "1bf75eab6b0a406d9bc038085efbc9d4",
          "Name": "PolyCurve",
          "Description": "Polycurve created by joined curves",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves@Autodesk.DesignScript.Geometry.Curve[],double,bool,double",
      "Replication": "Auto",
      "Description": "Make PolyCurve by joining curves. Flips curve as needed for connectivity. Choose a preferred join tolerance between 1e-6 and 1e-3 units.\n\nPolyCurve.ByJoinedCurves (curves: Curve[], joinTolerance: double = 0.001, trimCurves: bool = false, trimLength: double = 0): PolyCurve"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "629be67f20e4463892e287409e21f6b4",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "2238615305d74011a5c4ef030f8eee8e",
          "Name": "polyCurve",
          "Description": "Autodesk.DesignScript.Geometry.PolyCurve",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "0fdfaa3038e544dc8ed5e60b00956bc5",
          "Name": "signedDistance",
          "Description": "A positive offset distance applies in the direction of the cross product between the polycurve's tangent and the plane's normal vector, while a negative offset applies in the opposite direction.\n\ndouble",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "18d80b7633b64f729335de0816871c75",
          "Name": "extendCircular",
          "Description": "If there are gaps between the offset component curves then, depending on the gap closure settings, they may be filled either by circular arcs (true value) to give smooth corners, or by extending (false value) the offset curves.\n\nbool",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "ce3957af29a5492ba4bc64da0dad1131",
          "Name": "planeNormal",
          "Description": "The curve's plane normal. Defaults to the input curve's plane normal\n\nVector\nDefault value : null",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "89454d8f467141acad92691cc9321e9d",
          "Name": "Curve[]..[]",
          "Description": "One or more offset polycurves",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.OffsetMany@double,bool,Autodesk.DesignScript.Geometry.Vector",
      "Replication": "Auto",
      "Description": "Create one or more Polycurves by offsetting a planar polycurve by the given distance in a plane defined by the plane normal. The \"planeNormal\" input argument defaults to the normal of the plane containing the curve but an explicit normal parallel to the original curve normal can be provided to better control the direction of the offset. For example, if a consistent offset direction is required for multiple curves sharing the same plane, the \"planeNormal\" can be used to override individual curve normals and force all curves to be offset in the same direction. Reversing the normal reverses the direction of the offset.\n\nPolyCurve.OffsetMany (signedDistance: double, extendCircular: bool, planeNormal: Vector = null): Curve[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
      "Id": "76f1282db77f44078a9b661a0299f6da",
      "NodeType": "CodeBlockNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "680f55de748144bd9f3faa1cdd07d1d5",
          "Name": "",
          "Description": "Value of expression at line 1",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Allows for DesignScript code to be authored directly",
      "Code": "50;"
    },
    {
      "ConcreteType": "PythonNodeModels.PythonNode, PythonNodeModels",
      "Code": "# Copyright(c) 2020, Dimitar Venkov\r\n# @5devene, dimitar.ven@gmail.com\r\n# www.badmonkeys.net\r\n\r\nimport clr\r\nclr.AddReference('ProtoGeometry')\r\nimport Autodesk.DesignScript.Geometry as DS\r\n\r\ndef tolist(x):\r\n    if hasattr(x,'__iter__'): return x\r\n    return [x]\r\n\r\nsurfaces = tolist(IN[0])\r\n\r\ndef dropSurfaceOpenings(srf):\r\n\tface = srf.Faces[0]\r\n\textLoop = [lp for lp in srf.Faces[0].Loops if lp.IsExternal][0]\r\n\treturn [ce.Edge.CurveGeometry for ce in extLoop.CoEdges]\r\n\r\nOUT = map(dropSurfaceOpenings, surfaces)",
      "Engine": "CPython3",
      "VariableInputPorts": true,
      "Id": "d92babf3a89f4913aaefb7d8212148eb",
      "NodeType": "PythonScriptNode",
      "Inputs": [
        {
          "Id": "edaa9351da7644faa764f97c2d0241e4",
          "Name": "IN[0]",
          "Description": "Input #0",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "35c13e47a41745699a2c7c704b1089da",
          "Name": "OUT",
          "Description": "Result of the python script",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Runs an embedded Python script."
    },
    {
      "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels",
      "Id": "e47d39e01dfb49c1b437112c6f5dcad1",
      "NodeType": "BooleanInputNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "700f95f838d84793a3eb081b9b7dd81d",
          "Name": "",
          "Description": "Boolean",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Enables selection between True and False",
      "InputValue": false
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "4e69011f4f2d412785acaf64d0b8a07e",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "0a4cebbadbb544abbb0adbb55b7a6e69",
          "Name": "closedCurve",
          "Description": "Closed curve used as surface boundary\n\nCurve",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "c22085ae5da5432583e5532e44854a30",
          "Name": "Surface",
          "Description": "Surface created by patch",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ByPatch@Autodesk.DesignScript.Geometry.Curve",
      "Replication": "Auto",
      "Description": "Create a Surface by filling in the interior of a closed boundary defined by input Curves.\n\nSurface.ByPatch (closedCurve: Curve): Surface"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "6ac0ae086d2d4d6986c8ed5086a28698",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "8b00f536c6cf462080dd0f28fbe22605",
          "Name": "geometry",
          "Description": "Autodesk.DesignScript.Geometry.Geometry",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "8e77905e8ff049d5b2f2170c15e6fa98",
          "Name": "other",
          "Description": "Geometry",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "5bdac43fd5054b2c945ebcd3fcbdd498",
          "Name": "Geometry[]",
          "Description": "Geometry[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Intersect@Autodesk.DesignScript.Geometry.Geometry",
      "Replication": "Auto",
      "Description": "Get the intersection Geometry for this object and another\n\nGeometry.Intersect (other: Geometry): Geometry[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "442c393c55534143b9b1f3ded5d8ae39",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "16751ffc4bc847db85d749de7dbbec28",
          "Name": "list",
          "Description": "List to generate combinations of\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "404ace2c0a344251ad7400d950550707",
          "Name": "length",
          "Description": "Length of each combination\n\nint",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "689a4b806bc0427fa06b27fa5533e1ba",
          "Name": "replace",
          "Description": "Whether or not items are removed once selected for combination, defaults to false.\n\nbool\nDefault value : false",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "482ae947e787454490c16981f7c5e2bb",
          "Name": "lists",
          "Description": "Combinations of the list of the given length",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.Combinations@var[]..[],int,bool",
      "Replication": "Auto",
      "Description": "Produces all combinations of the given length of a given list.\n\nList.Combinations (list: var[]..[], length: int, replace: bool = false): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
      "Id": "9d9b111bf89c46108bfbaa3f593b82be",
      "NodeType": "CodeBlockNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "90314ca8359c4d6f8a5cbaf7d5387028",
          "Name": "",
          "Description": "Value of expression at line 1",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Allows for DesignScript code to be authored directly",
      "Code": "2;"
    },
    {
      "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels",
      "Id": "dd3b17f961c74be3aae5b0510960ecb1",
      "NodeType": "BooleanInputNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "0b943dc7ad50448aafd1d4ff8303a621",
          "Name": "",
          "Description": "Boolean",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Enables selection between True and False",
      "InputValue": false
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "17b4a644c96f480bb73ab63831704a3d",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "208f2d426dfe4ad899dadc2c00565683",
          "Name": "list",
          "Description": "List to fetch an item from.\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": true,
          "KeepListStructure": false
        },
        {
          "Id": "c2c12c5279054b49bfe4446d427009e6",
          "Name": "index",
          "Description": "Index of the item to be fetched.\n\nint",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "61a75590177c4d4a9530fa425a034b45",
          "Name": "item",
          "Description": "Item in the list at the given index.",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.GetItemAtIndex@var[]..[],int",
      "Replication": "Auto",
      "Description": "Returns an item from the given list that's located at the specified index.\n\nList.GetItemAtIndex (list: var[]..[], index: int): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
      "Id": "42798ce76b0a4b9395cac1e9dfd732bf",
      "NodeType": "CodeBlockNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "f1bf104eecd8474eb1398113ec10ad6e",
          "Name": "",
          "Description": "Value of expression at line 1",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "63707891263142e0983b0e14612ab8f9",
          "Name": "",
          "Description": "Value of expression at line 2",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Allows for DesignScript code to be authored directly",
      "Code": "0;\n1;"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "23007347ecd64407be309abe1cdcf789",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "eef416dacd9d4d879d52c77a95f5bbf9",
          "Name": "list",
          "Description": "List to fetch an item from.\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": true,
          "KeepListStructure": false
        },
        {
          "Id": "0f89fdd51f54487eb65cf3827f0f3aff",
          "Name": "index",
          "Description": "Index of the item to be fetched.\n\nint",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "767c617a29824b24826f092fca1f04a7",
          "Name": "item",
          "Description": "Item in the list at the given index.",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.GetItemAtIndex@var[]..[],int",
      "Replication": "Auto",
      "Description": "Returns an item from the given list that's located at the specified index.\n\nList.GetItemAtIndex (list: var[]..[], index: int): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "135a894cc3a847f4b58e907635d00eac",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "a5380b340a5845afb2f1303cd55090d6",
          "Name": "list",
          "Description": "List to flatten.\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "6e08924ffef7467ebbb338a821fafc3c",
          "Name": "amount",
          "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "2d052a3e5ff242af829425d37cbdf757",
          "Name": "list",
          "Description": "Flattened list by amount",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.Flatten@var[]..[],int",
      "Replication": "Auto",
      "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "792fd694923441b89884cd56c6f852d7",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "a80616f20bd045638de9ab9a8854277f",
          "Name": "list",
          "Description": "List to flatten.\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "c3eff204394c4181ad036d9f98de534b",
          "Name": "amount",
          "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "31471a7dc5bf433894dbc3de8f4be132",
          "Name": "list",
          "Description": "Flattened list by amount",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.Flatten@var[]..[],int",
      "Replication": "Auto",
      "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "a436bccfdd32477c81be98dc3d98cfdd",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "eec586730406454f8bc9a1760d7d3a70",
          "Name": "list",
          "Description": "List to flatten.\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "0c1b0d2c38844cb78366f3cc83c3a827",
          "Name": "amount",
          "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "5c17961f6e5a455290772f7f78dc97d9",
          "Name": "list",
          "Description": "Flattened list by amount",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.Flatten@var[]..[],int",
      "Replication": "Auto",
      "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "44c3be7f314d4e7fb4ddaba6ef4c1ed8",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "b610754eea704106957ec036eb2ed2e2",
          "Name": "element",
          "Description": "Revit.Elements.Element",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "60a3f2278b34459880bf49298c5950b1",
          "Name": "parameterName",
          "Description": "The name of the parameter to set.\n\nstring",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "31494a4a0deb46e2b607ab278f6cad9a",
          "Name": "value",
          "Description": "The value.\n\nvar",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "6b4840e5b6444a84ab55b78af258b61b",
          "Name": "Element",
          "Description": "Element",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Revit.Elements.Element.SetParameterByName@string,var",
      "Replication": "Auto",
      "Description": "Set one of the element's parameters.\n\nElement.SetParameterByName (parameterName: string, value: var): Element"
    },
    {
      "ConcreteType": "CoreNodeModels.Input.StringInput, CoreNodeModels",
      "Id": "fe37474a1b23461ebfe535079918ddb6",
      "NodeType": "StringInputNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "c4b7861417f14a93969ad98f44210ce4",
          "Name": "",
          "Description": "String",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Creates a string",
      "InputValue": "Set 0010 Visibility"
    },
    {
      "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels",
      "Id": "15ed3b581d3d4e6c8e6f9faa38100279",
      "NodeType": "BooleanInputNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "e358ab2a77974e00b40125ce120ee565",
          "Name": "",
          "Description": "Boolean",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Enables selection between True and False",
      "InputValue": true
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "445e1ebce2154313a24207010b6ccb00",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "05e5539cc1594decba0aebf9b14c2a01",
          "Name": "surface",
          "Description": "Autodesk.DesignScript.Geometry.Surface",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "e6cca157a579495486f24c14e3e8170a",
          "Name": "Curve[]",
          "Description": "Curve[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.PerimeterCurves",
      "Replication": "Auto",
      "Description": "Return all the boundary Curves of the Surface.\n\nSurface.PerimeterCurves ( ): Curve[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "c94431684d70425a967b74ced13596fc",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "ac6a29f40f764b668c94f472aa6a224a",
          "Name": "curves",
          "Description": "Curves to join into polycurve\n\nCurve[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "891fa9de73f04658b92eb5f8b8adabc7",
          "Name": "joinTolerance",
          "Description": "Tolerance to determine size of gap allowed between curves to be joined\n\ndouble\nDefault value : 0.001",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "6fcbaaa50eb44341a9b2c9601831d2e6",
          "Name": "trimCurves",
          "Description": "bool\nDefault value : false",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "737b0637c2b9434587d313727b39e1aa",
          "Name": "trimLength",
          "Description": "double\nDefault value : 0",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "c60e69897b7b4e6bbadc4c7a1bca1419",
          "Name": "PolyCurve",
          "Description": "Polycurve created by joined curves",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.ByJoinedCurves@Autodesk.DesignScript.Geometry.Curve[],double,bool,double",
      "Replication": "Auto",
      "Description": "Make PolyCurve by joining curves. Flips curve as needed for connectivity. Choose a preferred join tolerance between 1e-6 and 1e-3 units.\n\nPolyCurve.ByJoinedCurves (curves: Curve[], joinTolerance: double = 0.001, trimCurves: bool = false, trimLength: double = 0): PolyCurve"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "cf3acfb02f2d472397daa13020702018",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "7ac94826653d4b9884e7050521a607df",
          "Name": "polyCurve",
          "Description": "Autodesk.DesignScript.Geometry.PolyCurve",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "6a72c9b6772244038cd4624cfd669a5b",
          "Name": "signedDistance",
          "Description": "A positive offset distance applies in the direction of the cross product between the polycurve's tangent and the plane's normal vector, while a negative offset applies in the opposite direction.\n\ndouble",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "a1b05a288f57475cba3dc28c6bed601d",
          "Name": "extendCircular",
          "Description": "If there are gaps between the offset component curves then, depending on the gap closure settings, they may be filled either by circular arcs (true value) to give smooth corners, or by extending (false value) the offset curves.\n\nbool",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "5e78b8b510484811b2c9d48c346d611f",
          "Name": "planeNormal",
          "Description": "The curve's plane normal. Defaults to the input curve's plane normal\n\nVector\nDefault value : null",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "552ac32772154a7b97f53dd4be16bfaf",
          "Name": "Curve[]..[]",
          "Description": "One or more offset polycurves",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.OffsetMany@double,bool,Autodesk.DesignScript.Geometry.Vector",
      "Replication": "Auto",
      "Description": "Create one or more Polycurves by offsetting a planar polycurve by the given distance in a plane defined by the plane normal. The \"planeNormal\" input argument defaults to the normal of the plane containing the curve but an explicit normal parallel to the original curve normal can be provided to better control the direction of the offset. For example, if a consistent offset direction is required for multiple curves sharing the same plane, the \"planeNormal\" can be used to override individual curve normals and force all curves to be offset in the same direction. Reversing the normal reverses the direction of the offset.\n\nPolyCurve.OffsetMany (signedDistance: double, extendCircular: bool, planeNormal: Vector = null): Curve[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
      "Id": "bcefdb93977b4802af84a213eee39460",
      "NodeType": "CodeBlockNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "99833c74019b478aa79c46ee59a2449e",
          "Name": "",
          "Description": "Value of expression at line 1",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Allows for DesignScript code to be authored directly",
      "Code": "-50;"
    },
    {
      "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels",
      "Id": "05c129791e364a3f8ba6084b97854683",
      "NodeType": "BooleanInputNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "a03e487ef40f4cd0b1c58eff851cf5b9",
          "Name": "",
          "Description": "Boolean",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Enables selection between True and False",
      "InputValue": false
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "5dbdf69512c34588afb3aad2613d939b",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "02a896e8b82f4cd0ab8811bbd378d63c",
          "Name": "closedCurve",
          "Description": "Closed curve used as surface boundary\n\nCurve",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "c70924f4c92f4421a0fcbe7feef6b0cf",
          "Name": "Surface",
          "Description": "Surface created by patch",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ByPatch@Autodesk.DesignScript.Geometry.Curve",
      "Replication": "Auto",
      "Description": "Create a Surface by filling in the interior of a closed boundary defined by input Curves.\n\nSurface.ByPatch (closedCurve: Curve): Surface"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "302fdd3536c943d998d4fd64ba348901",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "adaf2584fd204a0f92e9443ecd849089",
          "Name": "geometry",
          "Description": "Autodesk.DesignScript.Geometry.Geometry",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "c3a4a46084df4c8495819418eb546c13",
          "Name": "other",
          "Description": "Geometry",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "8887295980cf49dabeb85334abcb7137",
          "Name": "Geometry[]",
          "Description": "Geometry[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.Geometry.Intersect@Autodesk.DesignScript.Geometry.Geometry",
      "Replication": "Auto",
      "Description": "Get the intersection Geometry for this object and another\n\nGeometry.Intersect (other: Geometry): Geometry[]"
    },
    {
      "ConcreteType": "CoreNodeModels.Input.BoolSelector, CoreNodeModels",
      "Id": "c25c455929da42a78a4ac29546e57281",
      "NodeType": "BooleanInputNode",
      "Inputs": [],
      "Outputs": [
        {
          "Id": "eb082273160742059b5da0c42531a2b1",
          "Name": "",
          "Description": "Boolean",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Enables selection between True and False",
      "InputValue": false
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "790ff3c94710464aadac9e64dbf3b878",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "e6bd93bce8564d0291569e307bf0f185",
          "Name": "polyCurve",
          "Description": "Autodesk.DesignScript.Geometry.PolyCurve",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "ee358f67096f44de84e646ea1bfc2e0a",
          "Name": "signedDistance",
          "Description": "A positive offset distance applies in the direction of the cross product between the polycurve's tangent and the plane's normal vector, while a negative offset applies in the opposite direction.\n\ndouble",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "00ce03bcea684670af083e84bf99b20d",
          "Name": "extendCircular",
          "Description": "If there are gaps between the offset component curves then, depending on the gap closure settings, they may be filled either by circular arcs (true value) to give smooth corners, or by extending (false value) the offset curves.\n\nbool",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "3985b90601ff45ca824642302b629108",
          "Name": "planeNormal",
          "Description": "The curve's plane normal. Defaults to the input curve's plane normal\n\nVector\nDefault value : null",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "04eed5da87884c71aebc8434ab285185",
          "Name": "Curve[]..[]",
          "Description": "One or more offset polycurves",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.PolyCurve.OffsetMany@double,bool,Autodesk.DesignScript.Geometry.Vector",
      "Replication": "Auto",
      "Description": "Create one or more Polycurves by offsetting a planar polycurve by the given distance in a plane defined by the plane normal. The \"planeNormal\" input argument defaults to the normal of the plane containing the curve but an explicit normal parallel to the original curve normal can be provided to better control the direction of the offset. For example, if a consistent offset direction is required for multiple curves sharing the same plane, the \"planeNormal\" can be used to override individual curve normals and force all curves to be offset in the same direction. Reversing the normal reverses the direction of the offset.\n\nPolyCurve.OffsetMany (signedDistance: double, extendCircular: bool, planeNormal: Vector = null): Curve[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "9d62dce4b2574667919229d9f25301ed",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "2660c54d21034c3ab5520d5ab54b0c3e",
          "Name": "closedCurve",
          "Description": "Closed curve used as surface boundary\n\nCurve",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "3adeadc0266b409fa3574fef68016d92",
          "Name": "Surface",
          "Description": "Surface created by patch",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.ByPatch@Autodesk.DesignScript.Geometry.Curve",
      "Replication": "Auto",
      "Description": "Create a Surface by filling in the interior of a closed boundary defined by input Curves.\n\nSurface.ByPatch (closedCurve: Curve): Surface"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
      "Id": "3e0d453e9f5941a6a40a10ce5aed4333",
      "NodeType": "CodeBlockNode",
      "Inputs": [
        {
          "Id": "a4f8441dce4e414fabdcadd15b62bfa7",
          "Name": "a",
          "Description": "a",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "e597083d04034bd788ace9b0ad7d7b10",
          "Name": "",
          "Description": "Value of expression at line 1",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Allows for DesignScript code to be authored directly",
      "Code": "a[0];"
    },
    {
      "ConcreteType": "PythonNodeModels.PythonNode, PythonNodeModels",
      "Code": "import clr\r\n\r\nclr.AddReference('ProtoGeometry')\r\nfrom Autodesk.DesignScript.Geometry import *\r\n\r\n# ============================================================\r\n# INPUTS\r\n# ============================================================\r\n\r\nsurfaces_input = IN[0]\r\n\r\ntry:\r\n    tolerance = IN[1]\r\n    if tolerance is None:\r\n        tolerance = 0.001\r\nexcept:\r\n    tolerance = 0.001\r\n\r\n\r\n# ============================================================\r\n# BASIC HELPERS\r\n# ============================================================\r\n\r\ndef flatten(data):\r\n    result = []\r\n\r\n    if data is None:\r\n        return result\r\n\r\n    if isinstance(data, list):\r\n        for item in data:\r\n            result.extend(flatten(item))\r\n    else:\r\n        result.append(data)\r\n\r\n    return result\r\n\r\n\r\ndef get_type_name(obj):\r\n    try:\r\n        return obj.GetType().Name\r\n    except:\r\n        return str(type(obj))\r\n\r\n\r\ndef is_surface(obj):\r\n    return get_type_name(obj) == \"Surface\"\r\n\r\n\r\ndef is_polysurface(obj):\r\n    return get_type_name(obj) == \"PolySurface\"\r\n\r\n\r\ndef round_value(value, tol):\r\n    if tol == 0:\r\n        tol = 0.000001\r\n    return int(round(value / tol))\r\n\r\n\r\ndef point_key(pt, tol):\r\n    return (\r\n        round_value(pt.X, tol),\r\n        round_value(pt.Y, tol),\r\n        round_value(pt.Z, tol)\r\n    )\r\n\r\n\r\ndef curve_key(crv, tol):\r\n    try:\r\n        sp = crv.StartPoint\r\n        ep = crv.EndPoint\r\n\r\n        k1 = point_key(sp, tol)\r\n        k2 = point_key(ep, tol)\r\n\r\n        if k1 <= k2:\r\n            return (k1, k2)\r\n        else:\r\n            return (k2, k1)\r\n    except:\r\n        return None\r\n\r\n\r\n# ============================================================\r\n# GEOMETRY HELPERS\r\n# ============================================================\r\n\r\ndef get_surfaces_from_geometry(geom):\r\n    \"\"\"\r\n    Converts Surface / PolySurface / list into flat surfaces.\r\n    \"\"\"\r\n\r\n    result = []\r\n\r\n    if geom is None:\r\n        return result\r\n\r\n    if isinstance(geom, list):\r\n        for item in geom:\r\n            result.extend(get_surfaces_from_geometry(item))\r\n        return result\r\n\r\n    type_name = get_type_name(geom)\r\n\r\n    if type_name == \"Surface\":\r\n        result.append(geom)\r\n        return result\r\n\r\n    if type_name == \"PolySurface\":\r\n        try:\r\n            faces = geom.Surfaces()\r\n            result.extend(flatten(faces))\r\n            return result\r\n        except:\r\n            result.append(geom)\r\n            return result\r\n\r\n    try:\r\n        faces = geom.Surfaces()\r\n        result.extend(flatten(faces))\r\n        return result\r\n    except:\r\n        result.append(geom)\r\n        return result\r\n\r\n\r\ndef get_perimeter_curves(geom):\r\n    \"\"\"\r\n    Gets perimeter curves from Surface or PolySurface.\r\n    \"\"\"\r\n\r\n    curves = []\r\n\r\n    if geom is None:\r\n        return curves\r\n\r\n    type_name = get_type_name(geom)\r\n\r\n    if type_name == \"Surface\":\r\n        try:\r\n            curves.extend(flatten(geom.PerimeterCurves()))\r\n        except:\r\n            pass\r\n\r\n    elif type_name == \"PolySurface\":\r\n        try:\r\n            faces = geom.Surfaces()\r\n            faces = flatten(faces)\r\n\r\n            for face in faces:\r\n                try:\r\n                    curves.extend(flatten(face.PerimeterCurves()))\r\n                except:\r\n                    pass\r\n        except:\r\n            try:\r\n                curves.extend(flatten(geom.PerimeterCurves()))\r\n            except:\r\n                pass\r\n\r\n    else:\r\n        try:\r\n            curves.extend(flatten(geom.PerimeterCurves()))\r\n        except:\r\n            pass\r\n\r\n    return curves\r\n\r\n\r\ndef remove_duplicate_internal_edges(curves, tol):\r\n    \"\"\"\r\n    Removes internal duplicate edges.\r\n    If an edge appears twice, it is probably an internal/shared edge.\r\n    Outer boundary edges normally appear once.\r\n    \"\"\"\r\n\r\n    edge_dict = {}\r\n\r\n    for crv in curves:\r\n        k = curve_key(crv, tol)\r\n\r\n        if k is None:\r\n            continue\r\n\r\n        if k not in edge_dict:\r\n            edge_dict[k] = []\r\n\r\n        edge_dict[k].append(crv)\r\n\r\n    outer_curves = []\r\n\r\n    for k, crv_list in edge_dict.items():\r\n        if len(crv_list) == 1:\r\n            outer_curves.append(crv_list[0])\r\n\r\n    return outer_curves\r\n\r\n\r\ndef group_curves_by_connectivity(curves, tol):\r\n    \"\"\"\r\n    Groups curves into connected boundary loops based on endpoints.\r\n    \"\"\"\r\n\r\n    curves = [c for c in curves if c is not None]\r\n\r\n    if len(curves) == 0:\r\n        return []\r\n\r\n    used = set()\r\n    groups = []\r\n\r\n    endpoint_map = {}\r\n\r\n    for i, crv in enumerate(curves):\r\n        try:\r\n            sp_key = point_key(crv.StartPoint, tol)\r\n            ep_key = point_key(crv.EndPoint, tol)\r\n\r\n            if sp_key not in endpoint_map:\r\n                endpoint_map[sp_key] = []\r\n\r\n            if ep_key not in endpoint_map:\r\n                endpoint_map[ep_key] = []\r\n\r\n            endpoint_map[sp_key].append(i)\r\n            endpoint_map[ep_key].append(i)\r\n        except:\r\n            pass\r\n\r\n    for i in range(len(curves)):\r\n        if i in used:\r\n            continue\r\n\r\n        group_indices = []\r\n        stack = [i]\r\n        used.add(i)\r\n\r\n        while stack:\r\n            current = stack.pop()\r\n            group_indices.append(current)\r\n\r\n            try:\r\n                crv = curves[current]\r\n                sp_key = point_key(crv.StartPoint, tol)\r\n                ep_key = point_key(crv.EndPoint, tol)\r\n\r\n                connected = []\r\n                connected.extend(endpoint_map.get(sp_key, []))\r\n                connected.extend(endpoint_map.get(ep_key, []))\r\n\r\n                for j in connected:\r\n                    if j not in used:\r\n                        used.add(j)\r\n                        stack.append(j)\r\n            except:\r\n                pass\r\n\r\n        groups.append([curves[index] for index in group_indices])\r\n\r\n    return groups\r\n\r\n\r\ndef join_curve_groups(curve_groups):\r\n    \"\"\"\r\n    Tries to create PolyCurves from connected curve groups.\r\n    \"\"\"\r\n\r\n    joined = []\r\n\r\n    for group in curve_groups:\r\n        if len(group) == 0:\r\n            continue\r\n\r\n        if len(group) == 1:\r\n            joined.append(group[0])\r\n            continue\r\n\r\n        try:\r\n            pc = PolyCurve.ByJoinedCurves(group)\r\n            joined.append(pc)\r\n        except:\r\n            joined.append(group)\r\n\r\n    return joined\r\n\r\n\r\ndef are_surfaces_connected(srf_a, srf_b, tol):\r\n    \"\"\"\r\n    Checks if two surfaces intersect, overlap, touch, or are within tolerance.\r\n    \"\"\"\r\n\r\n    if srf_a is None or srf_b is None:\r\n        return False\r\n\r\n    try:\r\n        if srf_a.DoesIntersect(srf_b):\r\n            return True\r\n    except:\r\n        pass\r\n\r\n    try:\r\n        d = srf_a.DistanceTo(srf_b)\r\n        if d <= tol:\r\n            return True\r\n    except:\r\n        pass\r\n\r\n    try:\r\n        curves_a = get_perimeter_curves(srf_a)\r\n        curves_b = get_perimeter_curves(srf_b)\r\n\r\n        for ca in curves_a:\r\n            for cb in curves_b:\r\n                try:\r\n                    d = ca.DistanceTo(cb)\r\n                    if d <= tol:\r\n                        return True\r\n                except:\r\n                    pass\r\n    except:\r\n        pass\r\n\r\n    return False\r\n\r\n\r\ndef group_connected_surfaces(surfaces, tol):\r\n    \"\"\"\r\n    Groups surfaces into connected islands.\r\n    Similar idea to Region Union connected regions.\r\n    \"\"\"\r\n\r\n    used = set()\r\n    groups = []\r\n\r\n    for i in range(len(surfaces)):\r\n        if i in used:\r\n            continue\r\n\r\n        group = []\r\n        stack = [i]\r\n        used.add(i)\r\n\r\n        while stack:\r\n            current_index = stack.pop()\r\n            current_surface = surfaces[current_index]\r\n            group.append(current_surface)\r\n\r\n            for j in range(len(surfaces)):\r\n                if j in used:\r\n                    continue\r\n\r\n                if are_surfaces_connected(current_surface, surfaces[j], tol):\r\n                    used.add(j)\r\n                    stack.append(j)\r\n\r\n        groups.append(group)\r\n\r\n    return groups\r\n\r\n\r\ndef union_group(surface_group):\r\n    \"\"\"\r\n    Tries to union one connected surface group.\r\n    \"\"\"\r\n\r\n    if len(surface_group) == 0:\r\n        return None\r\n\r\n    if len(surface_group) == 1:\r\n        return surface_group[0]\r\n\r\n    try:\r\n        unioned = Surface.ByUnion(surface_group)\r\n        return unioned\r\n    except:\r\n        pass\r\n\r\n    try:\r\n        joined = PolySurface.ByJoinedSurfaces(surface_group)\r\n        return joined\r\n    except:\r\n        pass\r\n\r\n    return surface_group\r\n\r\n\r\n# ============================================================\r\n# MAIN\r\n# ============================================================\r\n\r\ndebug = []\r\n\r\nsurfaces = flatten(surfaces_input)\r\nsurfaces = [s for s in surfaces if s is not None]\r\n\r\ndebug.append(\"Input surface count: \" + str(len(surfaces)))\r\ndebug.append(\"Tolerance: \" + str(tolerance))\r\n\r\nif len(surfaces) == 0:\r\n    OUT = [[], [], [], debug]\r\nelse:\r\n\r\n    # 1. Group touching / overlapping surfaces\r\n    connected_groups = group_connected_surfaces(surfaces, tolerance)\r\n\r\n    debug.append(\"Connected groups found: \" + str(len(connected_groups)))\r\n\r\n    # 2. Union each connected group separately\r\n    unioned_regions = []\r\n\r\n    for group in connected_groups:\r\n        u = union_group(group)\r\n        unioned_regions.append(u)\r\n\r\n    # 3. Extract outer boundary curves from every unioned region\r\n    outer_curve_groups = []\r\n    joined_outer_loops = []\r\n\r\n    for region in unioned_regions:\r\n\r\n        raw_curves = get_perimeter_curves(region)\r\n\r\n        # remove duplicate internal edges\r\n        outer_curves = remove_duplicate_internal_edges(raw_curves, tolerance)\r\n\r\n        # group curves into closed loops\r\n        curve_groups = group_curves_by_connectivity(outer_curves, tolerance)\r\n\r\n        # join each loop\r\n        joined_loops = join_curve_groups(curve_groups)\r\n\r\n        outer_curve_groups.append(outer_curves)\r\n        joined_outer_loops.append(joined_loops)\r\n\r\n    OUT = [\r\n        unioned_regions,\r\n        connected_groups,\r\n        joined_outer_loops,\r\n        debug\r\n    ]",
      "Engine": "CPython3",
      "VariableInputPorts": true,
      "Id": "0406f04854364114b5d989820ba86d93",
      "NodeType": "PythonScriptNode",
      "Inputs": [
        {
          "Id": "9237bb0a66fa457f9e68a6893c753ef1",
          "Name": "IN[0]",
          "Description": "Input #0",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "273c702452be45c1a3e5b09b88b5c927",
          "Name": "OUT",
          "Description": "Result of the python script",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Replication": "Disabled",
      "Description": "Runs an embedded Python script."
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "bfa46a017f964bcda6aaebd26c1bb0c3",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "854981d089404d7dbc4ca3f63dbfc4ba",
          "Name": "surface",
          "Description": "Autodesk.DesignScript.Geometry.Surface",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "18af722934b84deeac1852183fb07a31",
          "Name": "Curve[]",
          "Description": "Curve[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.Surface.PerimeterCurves",
      "Replication": "Auto",
      "Description": "Return all the boundary Curves of the Surface.\n\nSurface.PerimeterCurves ( ): Curve[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "0d72fc3cad174840b75517a89b1e0f47",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "ee8e541409da489f9479cb7aa1ec4ea7",
          "Name": "list",
          "Description": "List to flatten.\n\nvar[]..[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        },
        {
          "Id": "54280e2967ab4c1480573c852f2ea20a",
          "Name": "amount",
          "Description": "Layers of list nesting to remove (-1 will remove all list nestings)\n\nint\nDefault value : -1",
          "UsingDefaultValue": true,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "30dd19a0ef274862abc04a6a593cced4",
          "Name": "list",
          "Description": "Flattened list by amount",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "DSCore.List.Flatten@var[]..[],int",
      "Replication": "Auto",
      "Description": "Flattens a nested list of lists by a certain amount.\n\nList.Flatten (list: var[]..[], amount: int = -1): var[]..[]"
    },
    {
      "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
      "Id": "8e00bf5191774e618bae918f94caa0d8",
      "NodeType": "FunctionNode",
      "Inputs": [
        {
          "Id": "84f9f5cf5e234c47b5ce290cbc55eaf7",
          "Name": "surfaces",
          "Description": "Surfaces to join into polysurface\n\nSurface[]",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "Outputs": [
        {
          "Id": "73fd2a31f83d49d7a49020c35d4f601c",
          "Name": "PolySurface",
          "Description": "PolySurface",
          "UsingDefaultValue": false,
          "Level": 2,
          "UseLevels": false,
          "KeepListStructure": false
        }
      ],
      "FunctionSignature": "Autodesk.DesignScript.Geometry.PolySurface.ByJoinedSurfaces@Autodesk.DesignScript.Geometry.Surface[]",
      "Replication": "Auto",
      "Description": "Make Polysurface by joining surfaces.\n\nPolySurface.ByJoinedSurfaces (surfaces: Surface[]): PolySurface"
    }
  ],
  "Connectors": [
    {
      "Start": "2a3867e3d5274e5e8bb616ffc6fc1fca",
      "End": "094c2edcfde64010a803b961aee23958",
      "Id": "8c0b8cd83ae5452b8eb32124e218a074",
      "IsHidden": "False"
    },
    {
      "Start": "639d9d80530344fd8fd8226a0c5c02a3",
      "End": "b610754eea704106957ec036eb2ed2e2",
      "Id": "5c874bc29d7745279d7cf4d24f6d0db6",
      "IsHidden": "False"
    },
    {
      "Start": "2830e66e44484462947606356cf49b1a",
      "End": "63eca5a27557406fb90d1e887a230f9c",
      "Id": "72fc0c9978924c7cad4e6c9f6b48e854",
      "IsHidden": "False"
    },
    {
      "Start": "2250f7c671bf4cdfaabfc8dc1aa6b0f8",
      "End": "f1a69f85c016473fb3b5fc68080fc5b2",
      "Id": "5d9f528152a54d968645c049e108e37e",
      "IsHidden": "False"
    },
    {
      "Start": "2250f7c671bf4cdfaabfc8dc1aa6b0f8",
      "End": "91a2315ed8dc4cacb1d181147d96b00c",
      "Id": "0b68f144058e453e859aba25ded4752a",
      "IsHidden": "False"
    },
    {
      "Start": "6e7ef8b0f4ad4418a95156af35b74c71",
      "End": "a8674519bab94dc0b724e3172851c12c",
      "Id": "61bb40880b1c4152ab66795975d2e1e9",
      "IsHidden": "False"
    },
    {
      "Start": "a24150e5b09d46019a613dabc5a348d8",
      "End": "ba3a326402ee4f3e878154f1c4cbc633",
      "Id": "5a8a5ddc6b5241aa9273e27e6c157f50",
      "IsHidden": "False"
    },
    {
      "Start": "ede2d11dea824b4e8d3265936b0720b0",
      "End": "b954b53509654e96bddf0052e49ba580",
      "Id": "23a58876cbb04f6eaab1ae38754d35cb",
      "IsHidden": "False"
    },
    {
      "Start": "853e465a92314af6a7a7c95aefc547d4",
      "End": "edaa9351da7644faa764f97c2d0241e4",
      "Id": "38577fa04d044411bad50aa202e1f503",
      "IsHidden": "False"
    },
    {
      "Start": "efb38e3834134fbfa0ad870e214d8dce",
      "End": "5246061fe6a449c0b2819ca5a8913118",
      "Id": "666004cf2e5448d0ad523945eeba69fc",
      "IsHidden": "False"
    },
    {
      "Start": "efb38e3834134fbfa0ad870e214d8dce",
      "End": "1cbc236c41834d049e7bc12fe3cbe8ca",
      "Id": "a02953417e3e48ec93d8230e5806d69c",
      "IsHidden": "False"
    },
    {
      "Start": "f3293b08fdf84ab9b19775302faef84d",
      "End": "0b77f62110424688b1980a4b1c650725",
      "Id": "f8e7402c0a7c468b8c90b150df6a9361",
      "IsHidden": "False"
    },
    {
      "Start": "1bf75eab6b0a406d9bc038085efbc9d4",
      "End": "2238615305d74011a5c4ef030f8eee8e",
      "Id": "e8de54dd3ae54db98d8f18f44f50f674",
      "IsHidden": "False"
    },
    {
      "Start": "1bf75eab6b0a406d9bc038085efbc9d4",
      "End": "e6bd93bce8564d0291569e307bf0f185",
      "Id": "976bbbb264b14c1eb7686e36fa3fd72c",
      "IsHidden": "False"
    },
    {
      "Start": "89454d8f467141acad92691cc9321e9d",
      "End": "0a4cebbadbb544abbb0adbb55b7a6e69",
      "Id": "d7888e946e6443498997dfe1a33f6ea8",
      "IsHidden": "False"
    },
    {
      "Start": "680f55de748144bd9f3faa1cdd07d1d5",
      "End": "0fdfaa3038e544dc8ed5e60b00956bc5",
      "Id": "f79c32750b1a4d46b1c2677b5213a06f",
      "IsHidden": "False"
    },
    {
      "Start": "680f55de748144bd9f3faa1cdd07d1d5",
      "End": "ee358f67096f44de84e646ea1bfc2e0a",
      "Id": "81b6bb63819b4e849d2b81bf1c7fe11e",
      "IsHidden": "False"
    },
    {
      "Start": "35c13e47a41745699a2c7c704b1089da",
      "End": "ea9d025dab794423936cc4c325123d8d",
      "Id": "1f570d49157d48e8b4833f32ad1cadad",
      "IsHidden": "False"
    },
    {
      "Start": "700f95f838d84793a3eb081b9b7dd81d",
      "End": "18d80b7633b64f729335de0816871c75",
      "Id": "d934cddfbaa647a2906d7a7bd9ec3a23",
      "IsHidden": "False"
    },
    {
      "Start": "c22085ae5da5432583e5532e44854a30",
      "End": "9237bb0a66fa457f9e68a6893c753ef1",
      "Id": "d6ae20ec07b24481a3a4c55ea0e6dd10",
      "IsHidden": "False"
    },
    {
      "Start": "c22085ae5da5432583e5532e44854a30",
      "End": "16751ffc4bc847db85d749de7dbbec28",
      "Id": "182a76d62e69485f81b9a91653a74a9f",
      "IsHidden": "False"
    },
    {
      "Start": "5bdac43fd5054b2c945ebcd3fcbdd498",
      "End": "eec586730406454f8bc9a1760d7d3a70",
      "Id": "97a1b84074a04a3aad0380966c3808b4",
      "IsHidden": "False"
    },
    {
      "Start": "482ae947e787454490c16981f7c5e2bb",
      "End": "208f2d426dfe4ad899dadc2c00565683",
      "Id": "2119989694a049d1940433249fe3c882",
      "IsHidden": "False"
    },
    {
      "Start": "482ae947e787454490c16981f7c5e2bb",
      "End": "eef416dacd9d4d879d52c77a95f5bbf9",
      "Id": "0dc1dd990a0343e4aeba7ca0c2f8f63d",
      "IsHidden": "False"
    },
    {
      "Start": "90314ca8359c4d6f8a5cbaf7d5387028",
      "End": "404ace2c0a344251ad7400d950550707",
      "Id": "8d17a17aaced4be9a046ad8fae25e75a",
      "IsHidden": "False"
    },
    {
      "Start": "0b943dc7ad50448aafd1d4ff8303a621",
      "End": "689a4b806bc0427fa06b27fa5533e1ba",
      "Id": "a4586e0a455e4a89813e989c33015329",
      "IsHidden": "False"
    },
    {
      "Start": "61a75590177c4d4a9530fa425a034b45",
      "End": "a5380b340a5845afb2f1303cd55090d6",
      "Id": "7f5a822bd4c84830be9f124937ec9bea",
      "IsHidden": "False"
    },
    {
      "Start": "f1bf104eecd8474eb1398113ec10ad6e",
      "End": "c2c12c5279054b49bfe4446d427009e6",
      "Id": "0e46952244f94198a143eebe6eb36f69",
      "IsHidden": "False"
    },
    {
      "Start": "63707891263142e0983b0e14612ab8f9",
      "End": "0f89fdd51f54487eb65cf3827f0f3aff",
      "Id": "c7a2ff47b6f648c89574cf7cfcacc703",
      "IsHidden": "False"
    },
    {
      "Start": "767c617a29824b24826f092fca1f04a7",
      "End": "a80616f20bd045638de9ab9a8854277f",
      "Id": "ca24ff77cd114312930318007329088c",
      "IsHidden": "False"
    },
    {
      "Start": "2d052a3e5ff242af829425d37cbdf757",
      "End": "8b00f536c6cf462080dd0f28fbe22605",
      "Id": "06149ab54f7546139b64f63512939bbf",
      "IsHidden": "False"
    },
    {
      "Start": "31471a7dc5bf433894dbc3de8f4be132",
      "End": "8e77905e8ff049d5b2f2170c15e6fa98",
      "Id": "fb071003075c43439b6622e6a90b8202",
      "IsHidden": "False"
    },
    {
      "Start": "5c17961f6e5a455290772f7f78dc97d9",
      "End": "c3a4a46084df4c8495819418eb546c13",
      "Id": "89aaa07cdff74d1abe30d95fcaed18f7",
      "IsHidden": "False"
    },
    {
      "Start": "c4b7861417f14a93969ad98f44210ce4",
      "End": "60a3f2278b34459880bf49298c5950b1",
      "Id": "edbe3996b18b4390ac15e04045af991f",
      "IsHidden": "False"
    },
    {
      "Start": "e358ab2a77974e00b40125ce120ee565",
      "End": "31494a4a0deb46e2b607ab278f6cad9a",
      "Id": "f282183784ec46738d9c0383688a8899",
      "IsHidden": "False"
    },
    {
      "Start": "e6cca157a579495486f24c14e3e8170a",
      "End": "9257c3c44654455a8a33c6c338418e31",
      "Id": "857ccbc931a5431db0a3a1dbf4fe1d3a",
      "IsHidden": "False"
    },
    {
      "Start": "c60e69897b7b4e6bbadc4c7a1bca1419",
      "End": "7ac94826653d4b9884e7050521a607df",
      "Id": "76efddd1b62b4531a2f37ee3df228725",
      "IsHidden": "False"
    },
    {
      "Start": "552ac32772154a7b97f53dd4be16bfaf",
      "End": "02a896e8b82f4cd0ab8811bbd378d63c",
      "Id": "5a9e13a205e841f7a591123f9972508a",
      "IsHidden": "False"
    },
    {
      "Start": "99833c74019b478aa79c46ee59a2449e",
      "End": "6a72c9b6772244038cd4624cfd669a5b",
      "Id": "58c1a2548d71465c91d621cd1beb3a34",
      "IsHidden": "False"
    },
    {
      "Start": "a03e487ef40f4cd0b1c58eff851cf5b9",
      "End": "a1b05a288f57475cba3dc28c6bed601d",
      "Id": "c470af097cee465ab64cf76f448ed5e7",
      "IsHidden": "False"
    },
    {
      "Start": "c70924f4c92f4421a0fcbe7feef6b0cf",
      "End": "84f9f5cf5e234c47b5ce290cbc55eaf7",
      "Id": "35918dbcd4f743aca8f1131c0154c79c",
      "IsHidden": "False"
    },
    {
      "Start": "8887295980cf49dabeb85334abcb7137",
      "End": "ee8e541409da489f9479cb7aa1ec4ea7",
      "Id": "bbbd358fa2364c18a7749243a53680e5",
      "IsHidden": "False"
    },
    {
      "Start": "eb082273160742059b5da0c42531a2b1",
      "End": "00ce03bcea684670af083e84bf99b20d",
      "Id": "150d25030eca4fc19bf4ec37461a5495",
      "IsHidden": "False"
    },
    {
      "Start": "04eed5da87884c71aebc8434ab285185",
      "End": "2660c54d21034c3ab5520d5ab54b0c3e",
      "Id": "330c881f44b64ed88c3b4942fe5971ae",
      "IsHidden": "False"
    },
    {
      "Start": "e597083d04034bd788ace9b0ad7d7b10",
      "End": "854981d089404d7dbc4ca3f63dbfc4ba",
      "Id": "7c2395f815704839a0d99a667cb042c1",
      "IsHidden": "False"
    },
    {
      "Start": "273c702452be45c1a3e5b09b88b5c927",
      "End": "a4f8441dce4e414fabdcadd15b62bfa7",
      "Id": "afef2cb794524563b7ce8d2bab22dc7f",
      "IsHidden": "False"
    },
    {
      "Start": "18af722934b84deeac1852183fb07a31",
      "End": "ac6a29f40f764b668c94f472aa6a224a",
      "Id": "54fc0e88da474b3da45705f7ad283cdf",
      "IsHidden": "False"
    },
    {
      "Start": "30dd19a0ef274862abc04a6a593cced4",
      "End": "05e5539cc1594decba0aebf9b14c2a01",
      "Id": "48dc889c30b047d095b1b68ef488bc0f",
      "IsHidden": "False"
    },
    {
      "Start": "73fd2a31f83d49d7a49020c35d4f601c",
      "End": "adaf2584fd204a0f92e9443ecd849089",
      "Id": "5cf21a7f9a594acd907244e6cbd51409",
      "IsHidden": "False"
    }
  ],
  "Dependencies": [
    "3325a597-4c74-4292-9152-66b7177b27f1"
  ],
  "NodeLibraryDependencies": [
    {
      "Name": "Synthesize toolkit",
      "Version": "26.2.2501",
      "ReferenceType": "Package",
      "Nodes": [
        "2b868768ef2140bc886bfdbb2a32d0e0"
      ]
    },
    {
      "Name": "Clockwork for Dynamo 1.x",
      "Version": "1.31.1",
      "ReferenceType": "Package",
      "Nodes": [
        "2e7860ab005149dc8de37b88de4ec352"
      ]
    }
  ],
  "EnableLegacyPolyCurveBehavior": true,
  "Thumbnail": "",
  "GraphDocumentationURL": null,
  "ExtensionWorkspaceData": [
    {
      "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670",
      "Name": "Properties",
      "Version": "2.16",
      "Data": {}
    },
    {
      "ExtensionGuid": "DFBD9CC0-DB40-457A-939E-8C8555555A9D",
      "Name": "Generative Design",
      "Version": "3.0",
      "Data": {}
    }
  ],
  "Author": "",
  "Linting": {
    "activeLinter": "None",
    "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a",
    "warningCount": 0,
    "errorCount": 0
  },
  "Bindings": [
    {
      "NodeId": "9ce223cd-32ec-45b6-a3d7-f6ff785fc1ec",
      "Binding": {
        "ByCurves_InClassDecl-1_InFunctionScope-1_Instance0_9ce223cd-32ec-45b6-a3d7-f6ff785fc1ec": "H4sIAAAAAAAACq3avXIcNxBF4XeZWFsFoPGrWIlih1oFMwO0ywkDmxmL725YVrY3PAxYTHg32fMh6R8fx9v6533Nb+f7eXz98XHMX38cH8/jj/e//3r78/u35/H1edho5rGVR44jPXKe56NXC484W+o+PI1gj5B8pfs6n8eX5/H97f3X/5aQYgqpfh6fX4j5O4p5M2y+i/kcsHlX842an1XMl4zNTzFfIzW/sprv2Pwl5luh5j2J+Z6w+aHmBzQ/QxDzg6p2hvY6HwNV7QxLzEeq2hmLmqeqnfEW84mqdiYT80ZVO5PwPhpV7TThfcxUtdOE97FQ1U4T3seCVZuF97Fi1WbhfWxYtUV4HztWbRHex/5/tcwnVEF+HFi4VZCfAhZuE+TvJwWbF+Tv7z42L8jfP9R8F+SnhIXbBfnJsHCHID9lLNwhyE8FC/cU5KeCPbenID9VrNpTkJ8aVu0lyE8Nq/YS5KeOVXsL8tPAqr0F+Wlg1U7hvQWs2im8t4hVu4T3lrBql/DeElbtEt6bYdW68N4yVq0L7y1T1a4gvLdCVbuC8N4qVe2KwnurVLUrCu+tUdWuKLy3TlW7kvDeBlXt/mqqearaZcL7HKhqlwnvc6SqXVl4nyNWbRbe54RVW4T32bBqi/A+G1ZtEd7njFVbhfe5YNVW4X2uWLVNeJ8rVm0T3ueGVduF97lj1Xbhfe5YtV14nwdW7RDe71/YvPC+BKzaU3hfIlbtKbwvCav2Et4Xw6q9hPfFsGpv4X3JWLW38L4UrNpbeF8KVu0U3peKVTuF96Vh1S7hfWlYtUt4XzpWrQvvy8CqdeF9DVi1LryvgarWg/C+RqpaD8L7mqhqPQrva6Kq9Si8r0ZV60l4XzNV7f5TzVPVugnva6GqdRPe10pV6ya8r42q1rPwvjas2iy8rx2rtgjv68CqLcL7OrBqq/C+BazaKrxvEau2Cu9bxKptwvuGnUd5E9437DzKu/C+YedR3oX3DTuP8iG8b9h5lA/hfcPOo/wU3jfsPMpP4X3DzqP8FN633+dRzCdcgvyGXUj5Jchv2IWU34L8jl1I+S3I79iFlE9BfscupHwK8jt2IeVTkN+xCylfgvyOXUj5EuR37ELKXZDfsQspd0F+py6kLARBfqcupPa8IL9TF1IWoiC/UxdSe16Q339fSBHzgvxOnUdZSML7QZ1H7Xnh/aDOo2yfrIt56jxqzwvvB3UeZSEL7wd1HrXnhfeDOo/a88L7QZ1HWSjC+0GdR+154f2gzqP2OYvwflDnUXteeD+o8ygLTXg/qPOoPS+8H9R5lIUuvB/UedSeF94P6jxqz796v19IrNrx6v1+Y7Bqx6v3+xHAqj1fvd/zWLXnq/f7EcCqvV69/+8R2PM/P3/+Cz77W/lGNgAA"
      }
    }
  ],
  "View": {
    "Dynamo": {
      "ScaleFactor": 1.0,
      "HasRunWithoutCrash": true,
      "IsVisibleInDynamoLibrary": true,
      "Version": "3.3.0.6316",
      "RunType": "Manual",
      "RunPeriod": "1000"
    },
    "Camera": {
      "Name": "_Background Preview",
      "EyeX": 160784.5,
      "EyeY": 41186.5390625,
      "EyeZ": 25463.1708984375,
      "LookX": 6050.84375,
      "LookY": -35466.4375,
      "LookZ": -9501.6005859375,
      "UpX": 0.511941134929657,
      "UpY": 0.30271315574645996,
      "UpZ": -0.8039161562919617
    },
    "ConnectorPins": [],
    "NodeViews": [
      {
        "Id": "03439a039e7d444d9981bfe301474078",
        "Name": "Select Filled Region Type",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 6798.408890925426,
        "Y": 233.10115093062296
      },
      {
        "Id": "9ce223cd32ec45b6a3d7f6ff785fc1ec",
        "Name": "FilledRegion.ByCurves",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": true,
        "ShowGeometry": true,
        "X": 7290.74403327474,
        "Y": 19.662632626164623
      },
      {
        "Id": "ebd92956fe7c44fda98ff178720080a7",
        "Name": "Categories",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 150.0863797256327,
        "Y": 517.3249278783836
      },
      {
        "Id": "f347a4bb0b32402aa47aea41eb589770",
        "Name": "All Elements of Category in View",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 505.03965450348574,
        "Y": 601.046432305398
      },
      {
        "Id": "2b868768ef2140bc886bfdbb2a32d0e0",
        "Name": "ˢᵀᵒᵒˡˢViews.GetActiveView",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 251.57198466699754,
        "Y": 1052.1395138450446
      },
      {
        "Id": "fc15dc24971d4af58b8dc7ef1b93a50f",
        "Name": "Element.GetParameterValueByName",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 1213.6552468323187,
        "Y": 424.49018347816434
      },
      {
        "Id": "4ac64efafd88486b82be33eb5104c724",
        "Name": "String",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 984.3405169085477,
        "Y": 576.2142662697419
      },
      {
        "Id": "2e7860ab005149dc8de37b88de4ec352",
        "Name": "Surface.FilterByOrientation",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 1802.5766720956483,
        "Y": 780.9272191500692
      },
      {
        "Id": "27eb740c644449e3b222e6055293a119",
        "Name": "Element.Faces",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 1511.4304100557913,
        "Y": 780.1206614547415
      },
      {
        "Id": "17ae0846cefd4bacb88a1018f6d7d388",
        "Name": "List.Flatten",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 2160.083799669006,
        "Y": 847.2269512520561
      },
      {
        "Id": "cc65d2eb22754a5d94b322cce34f9abe",
        "Name": "Document.ActiveView",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 149.8371517567744,
        "Y": 670.0874241224557
      },
      {
        "Id": "62834ba794cd4321906d7bde521c82d1",
        "Name": "Document.Current",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": -103.09033345173441,
        "Y": 673.57773615719
      },
      {
        "Id": "6f1ef5bdafda4047b38de6bd210b7c5f",
        "Name": "PolyCurve.ByJoinedCurves",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 2656.053966888049,
        "Y": 844.0771378026942
      },
      {
        "Id": "629be67f20e4463892e287409e21f6b4",
        "Name": "PolyCurve.OffsetMany",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 3146.2548045381473,
        "Y": 246.58880818225379
      },
      {
        "Id": "76f1282db77f44078a9b661a0299f6da",
        "Name": "Code Block",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 2900.0868708572107,
        "Y": 229.2668610465463
      },
      {
        "Id": "d92babf3a89f4913aaefb7d8212148eb",
        "Name": "Get outer curves only",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 2385.647363552484,
        "Y": 846.1897617351684
      },
      {
        "Id": "e47d39e01dfb49c1b437112c6f5dcad1",
        "Name": "Boolean",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 2869.605681635111,
        "Y": 395.5453037771712
      },
      {
        "Id": "4e69011f4f2d412785acaf64d0b8a07e",
        "Name": "Surface.ByPatch",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 3468.9123046683285,
        "Y": 249.26942874074587
      },
      {
        "Id": "6ac0ae086d2d4d6986c8ed5086a28698",
        "Name": "Geometry.Intersect",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 5566.083035132456,
        "Y": 756.6738057838136
      },
      {
        "Id": "442c393c55534143b9b1f3ded5d8ae39",
        "Name": "List.Combinations",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4427.582874334393,
        "Y": 784.5027457594828
      },
      {
        "Id": "9d9b111bf89c46108bfbaa3f593b82be",
        "Name": "Code Block",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 4167.048327866512,
        "Y": 818.8108751282433
      },
      {
        "Id": "dd3b17f961c74be3aae5b0510960ecb1",
        "Name": "Boolean",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 4163.5787433647565,
        "Y": 951.1311043581259
      },
      {
        "Id": "17b4a644c96f480bb73ab63831704a3d",
        "Name": "List.GetItemAtIndex",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4903.012899069013,
        "Y": 680.2616791529643
      },
      {
        "Id": "42798ce76b0a4b9395cac1e9dfd732bf",
        "Name": "Code Block",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4643.9278176130865,
        "Y": 1007.4164660047749
      },
      {
        "Id": "23007347ecd64407be309abe1cdcf789",
        "Name": "List.GetItemAtIndex",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4915.749273165541,
        "Y": 873.6376553612744
      },
      {
        "Id": "135a894cc3a847f4b58e907635d00eac",
        "Name": "List.Flatten",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 5271.737601454567,
        "Y": 681.8058518453321
      },
      {
        "Id": "792fd694923441b89884cd56c6f852d7",
        "Name": "List.Flatten",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 5275.93369676307,
        "Y": 871.5262709495286
      },
      {
        "Id": "a436bccfdd32477c81be98dc3d98cfdd",
        "Name": "List.Flatten",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 5864.23136792773,
        "Y": 757.0535709668658
      },
      {
        "Id": "44c3be7f314d4e7fb4ddaba6ef4c1ed8",
        "Name": "Element.SetParameterByName",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 7994.735550659378,
        "Y": 14.42976317889827
      },
      {
        "Id": "fe37474a1b23461ebfe535079918ddb6",
        "Name": "String",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 7713.374724213409,
        "Y": 140.95751998357048
      },
      {
        "Id": "15ed3b581d3d4e6c8e6f9faa38100279",
        "Name": "Boolean",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 7725.445341616845,
        "Y": 284.3358101279979
      },
      {
        "Id": "445e1ebce2154313a24207010b6ccb00",
        "Name": "Surface.PerimeterCurves",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 6898.217736249731,
        "Y": -124.89974382712387
      },
      {
        "Id": "c94431684d70425a967b74ced13596fc",
        "Name": "PolyCurve.ByJoinedCurves",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4589.743997002069,
        "Y": 254.6417773868328
      },
      {
        "Id": "cf3acfb02f2d472397daa13020702018",
        "Name": "PolyCurve.OffsetMany",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 5192.171066169853,
        "Y": -133.61987031639217
      },
      {
        "Id": "bcefdb93977b4802af84a213eee39460",
        "Name": "Code Block",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 2896.36549395923,
        "Y": 84.66800177981007
      },
      {
        "Id": "05c129791e364a3f8ba6084b97854683",
        "Name": "Boolean",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 4926.838533987901,
        "Y": 167.83065734449696
      },
      {
        "Id": "5dbdf69512c34588afb3aad2613d939b",
        "Name": "Surface.ByPatch",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 5514.083622147788,
        "Y": -130.88415204674925
      },
      {
        "Id": "302fdd3536c943d998d4fd64ba348901",
        "Name": "Geometry.Intersect",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 6322.071850050336,
        "Y": -126.09375677094403
      },
      {
        "Id": "c25c455929da42a78a4ac29546e57281",
        "Name": "Boolean",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 3437.720180671326,
        "Y": 1268.5485970312752
      },
      {
        "Id": "790ff3c94710464aadac9e64dbf3b878",
        "Name": "PolyCurve.OffsetMany",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 3736.16688150475,
        "Y": 1167.2989874962666
      },
      {
        "Id": "9d62dce4b2574667919229d9f25301ed",
        "Name": "Surface.ByPatch",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4072.345180316834,
        "Y": 1166.700054474743
      },
      {
        "Id": "3e0d453e9f5941a6a40a10ce5aed4333",
        "Name": "Code Block",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4113.882267275877,
        "Y": 247.12346423808782
      },
      {
        "Id": "0406f04854364114b5d989820ba86d93",
        "Name": "Surface union into groups",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 3815.7884025050835,
        "Y": 248.08536675584168
      },
      {
        "Id": "bfa46a017f964bcda6aaebd26c1bb0c3",
        "Name": "Surface.PerimeterCurves",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": false,
        "X": 4303.005421432905,
        "Y": 250.33437541571442
      },
      {
        "Id": "0d72fc3cad174840b75517a89b1e0f47",
        "Name": "List.Flatten",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 6648.336471006492,
        "Y": -130.10017680824785
      },
      {
        "Id": "8e00bf5191774e618bae918f94caa0d8",
        "Name": "PolySurface.ByJoinedSurfaces",
        "IsSetAsInput": false,
        "IsSetAsOutput": false,
        "Excluded": false,
        "ShowGeometry": true,
        "X": 5822.938983961535,
        "Y": -123.20068041564025
      }
    ],
    "Annotations": [
      {
        "Id": "3ed3b3a366be4c658832fd594f82b059",
        "Title": "input",
        "DescriptionText": "Description <Double click here to edit group description>",
        "IsExpanded": true,
        "WidthAdjustment": 0.0,
        "HeightAdjustment": 0.0,
        "Nodes": [
          "76f1282db77f44078a9b661a0299f6da",
          "bcefdb93977b4802af84a213eee39460"
        ],
        "HasNestedGroups": false,
        "Left": 2886.36549395923,
        "Top": -11.731998220189936,
        "Width": 178.12137689798055,
        "Height": 372.79885926673626,
        "FontSize": 36.0,
        "GroupStyleId": "883066aa-1fe2-44a4-9bd1-c3df86bfe9f6",
        "InitialTop": 84.66800177981007,
        "InitialHeight": 306.3988592667362,
        "TextblockHeight": 86.4,
        "Background": "#FFFFB8D8"
      }
    ],
    "X": -2163.399880623002,
    "Y": 512.6695451986932,
    "Zoom": 0.4832275263623828
  }
}