{
  "id": "polyspline_sop",
  "name": "Polyspline SOP",
  "displayName": "Polyspline SOP",
  "category": "SOP",
  "subcategory": "Generators",
  "version": "",
  "lastUpdated": "2025-08-07T07:50:07.814Z",
  "sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\Polyspline_SOP.htm",
  "url": "",
  "description": "The Polyspline SOP fits a spline curve to a polygon or hull and outputs a polygonal approximation of that spline. You can choose either to create divisions between the original points, or to ignore the position of the original points and divide the shape into segments of equal lengths.",
  "summary": "The Polyspline SOP fits a spline curve to a polygon or hull and outputs a polygonal approximation of that spline. You can choose either to create divisions between the original points, or to ignore th",
  "details": "",
  "usage": "",
  "tips": [],
  "warnings": [],
  "parameters": [
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Polyspline  fits a spline curve to a polygon or hull and outputs a polygonal approximation of that spline. You can choose either to create divisions between the original points, or to ignore the position of the original points and divide the shape into segments of equal lengths.\t\nPolyspline can optionally resample the output curve, providing control over the length and number of its segments.\t\t\nTip: When using this , it is useful to enable Points display in the Viewport options dialog. This way you can see exactly what effect the  is having.\npolysplineSOP_Class\n\nContents\n \n \n \n \n \n \n\n\n\n\n\n  group - Subset of faces to use. Accepts patterns, as described in Pattern Matching.\n\n\n\t\t\n  basis -  - Spline type to use. There are seven choices:\n\n bezier - Typical Bezier spline. sbezier - Variation on Bezier. c1bezier - Variation on Bezier. degree2 - Variation on Bezier. bspline - Softer curve does not pass through the original points of the Source. cardinal - The curve passes through the original points of the Source. linear - Straight line segments.\n\t\t\n  closure -  - Determines if the output spline is open or closed.\n\n cnone - Output spline open. calways - Output spline closed. cifpoly - Use the closure of the input face. In other words, Closed splines are created if the Source polygons are closed, open splines are created if the Source polygons are open.\n\t\t\n  divide -  - Settings for refining the spline by adding extra divisions.\n\n standard - Do not resample curve. evenlen - Ensure equal segment lengths. evenx - Ensure segments have equal length in X. eveny - Ensure segments have equal length in Y. evenz - Ensure segments have equal length in Z.\n\t\t\n  segsize - The length of the segments in the resampled curve.\t\n\t\t\nIf  are selected,  sets the length of output segments. The number of output segments is determined by .\t\t\nIf  is zero, the number of output segments is calculated using the  parameter, and is determined by how many segments of this size will fit into the overall shape.\t\t\nIf  is selected, along with zero  and  of zero, an error message is generated, saying \"Invalid number of divisions or segment size\".\n\n\n\t\t\n  polydivs - Number of segments in the resampled curve.\t\nIf  =  is selected, this has no effect. If  is selected, this parameter sets the number of edges that is created. The length of the segments is determined by . If  is 0, the length of the output segments is determined by dividing the over all shape into this number of segments.\t\t\nIf the  parameter is set to zero, the value of the  parameter is used to calculate the number of .\n\n\n\t\t\n  edgedivs - Number of spline divisions before resampling.\t\nIf  =  is selected, this is the number of subdivisions for every edge. If  is chosen, it has the subtle effect of determining the accuracy with which the segment lengths can be calculated.\n\n\n\t\t\n  first - Number of times to repeat the first control vertex, determining its multiplicity. This determines the number of times to replicate the first vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the beginning of the line will force the curve to extend to the beginning of the line. For example a value of two will force a  curve to extend to its first vertex and a value of three will force a  to start at is first vertex.\n\n\n\t\t\n  last - This determines the number of times to repeat the last control vertex, determining its multiplicity. This determines the number of times to replicate the last vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the end of the line will force the curve to extend to the end of the line.\n\n\n\t\t\n  tension - The tension exerted by the points from the Source polygons. The greater the tension, the closer the resulting shape will be to the original shape.\n\n\n\n\n\n -\n\nExtra Information for the Polyspline  can be accessed via an Info CHOP.\n\n\n\n - Number of points in this . - Number of primitives in this . - Number of particles in this . - Time spent in another thread updating geometry data on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time. - Time spent in another thread updating meta surface geometry data (such as metaballs or nurbs) on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2021.100002018.28070before 2018.28070\nSOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nThe Graphics Processing Unit. This is the high-speed, many-core processor of the graphics card/chip that takes geometry, images and data from the CPU and creates images and processed data.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Polyspline_SOP&oldid=24219\"\n\t\tCategory: SOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.810Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Polyspline  fits a spline curve to a polygon or hull and outputs a polygonal approximation of that spline. You can choose either to create divisions between the original points, or to ignore the position of the original points and divide the shape into segments of equal lengths.\t\nPolyspline can optionally resample the output curve, providing control over the length and number of its segments.\t\t\nTip: When using this , it is useful to enable Points display in the Viewport options dialog. This way you can see exactly what effect the  is having.\npolysplineSOP_Class\n\nContents\n \n \n \n \n \n \n\n\n\n\n\n  group - Subset of faces to use. Accepts patterns, as described in Pattern Matching.\n\n\n\t\t\n  basis -  - Spline type to use. There are seven choices:\n\n bezier - Typical Bezier spline. sbezier - Variation on Bezier. c1bezier - Variation on Bezier. degree2 - Variation on Bezier. bspline - Softer curve does not pass through the original points of the Source. cardinal - The curve passes through the original points of the Source. linear - Straight line segments.\n\t\t\n  closure -  - Determines if the output spline is open or closed.\n\n cnone - Output spline open. calways - Output spline closed. cifpoly - Use the closure of the input face. In other words, Closed splines are created if the Source polygons are closed, open splines are created if the Source polygons are open.\n\t\t\n  divide -  - Settings for refining the spline by adding extra divisions.\n\n standard - Do not resample curve. evenlen - Ensure equal segment lengths. evenx - Ensure segments have equal length in X. eveny - Ensure segments have equal length in Y. evenz - Ensure segments have equal length in Z.\n\t\t\n  segsize - The length of the segments in the resampled curve.\t\n\t\t\nIf  are selected,  sets the length of output segments. The number of output segments is determined by .\t\t\nIf  is zero, the number of output segments is calculated using the  parameter, and is determined by how many segments of this size will fit into the overall shape.\t\t\nIf  is selected, along with zero  and  of zero, an error message is generated, saying \"Invalid number of divisions or segment size\".\n\n\n\t\t\n  polydivs - Number of segments in the resampled curve.\t\nIf  =  is selected, this has no effect. If  is selected, this parameter sets the number of edges that is created. The length of the segments is determined by . If  is 0, the length of the output segments is determined by dividing the over all shape into this number of segments.\t\t\nIf the  parameter is set to zero, the value of the  parameter is used to calculate the number of .\n\n\n\t\t\n  edgedivs - Number of spline divisions before resampling.\t\nIf  =  is selected, this is the number of subdivisions for every edge. If  is chosen, it has the subtle effect of determining the accuracy with which the segment lengths can be calculated.\n\n\n\t\t\n  first - Number of times to repeat the first control vertex, determining its multiplicity. This determines the number of times to replicate the first vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the beginning of the line will force the curve to extend to the beginning of the line. For example a value of two will force a  curve to extend to its first vertex and a value of three will force a  to start at is first vertex.\n\n\n\t\t\n  last - This determines the number of times to repeat the last control vertex, determining its multiplicity. This determines the number of times to replicate the last vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the end of the line will force the curve to extend to the end of the line.\n\n\n\t\t\n  tension - The tension exerted by the points from the Source polygons. The greater the tension, the closer the resulting shape will be to the original shape.\n\n\n\n\n\n -\n\nExtra Information for the Polyspline  can be accessed via an Info CHOP.\n\n\n\n - Number of points in this . - Number of primitives in this . - Number of particles in this . - Time spent in another thread updating geometry data on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time. - Time spent in another thread updating meta surface geometry data (such as metaballs or nurbs) on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2021.100002018.28070before 2018.28070\nSOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nThe Graphics Processing Unit. This is the high-speed, many-core processor of the graphics card/chip that takes geometry, images and data from the CPU and creates images and processed data.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Polyspline_SOP&oldid=24219\"\n\t\tCategory: SOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.812Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "The Polyspline  fits a spline curve to a polygon or hull and outputs a polygonal approximation of that spline. You can choose either to create divisions between the original points, or to ignore the position of the original points and divide the shape into segments of equal lengths.\t\nPolyspline can optionally resample the output curve, providing control over the length and number of its segments.\t\t\nTip: When using this , it is useful to enable Points display in the Viewport options dialog. This way you can see exactly what effect the  is having.\npolysplineSOP_Class\n\nContents\n \n \n \n \n \n \n\n\n\n\n\n  group - Subset of faces to use. Accepts patterns, as described in Pattern Matching.\n\n\n\t\t\n  basis -  - Spline type to use. There are seven choices:\n\n bezier - Typical Bezier spline. sbezier - Variation on Bezier. c1bezier - Variation on Bezier. degree2 - Variation on Bezier. bspline - Softer curve does not pass through the original points of the Source. cardinal - The curve passes through the original points of the Source. linear - Straight line segments.\n\t\t\n  closure -  - Determines if the output spline is open or closed.\n\n cnone - Output spline open. calways - Output spline closed. cifpoly - Use the closure of the input face. In other words, Closed splines are created if the Source polygons are closed, open splines are created if the Source polygons are open.\n\t\t\n  divide -  - Settings for refining the spline by adding extra divisions.\n\n standard - Do not resample curve. evenlen - Ensure equal segment lengths. evenx - Ensure segments have equal length in X. eveny - Ensure segments have equal length in Y. evenz - Ensure segments have equal length in Z.\n\t\t\n  segsize - The length of the segments in the resampled curve.\t\n\t\t\nIf  are selected,  sets the length of output segments. The number of output segments is determined by .\t\t\nIf  is zero, the number of output segments is calculated using the  parameter, and is determined by how many segments of this size will fit into the overall shape.\t\t\nIf  is selected, along with zero  and  of zero, an error message is generated, saying \"Invalid number of divisions or segment size\".\n\n\n\t\t\n  polydivs - Number of segments in the resampled curve.\t\nIf  =  is selected, this has no effect. If  is selected, this parameter sets the number of edges that is created. The length of the segments is determined by . If  is 0, the length of the output segments is determined by dividing the over all shape into this number of segments.\t\t\nIf the  parameter is set to zero, the value of the  parameter is used to calculate the number of .\n\n\n\t\t\n  edgedivs - Number of spline divisions before resampling.\t\nIf  =  is selected, this is the number of subdivisions for every edge. If  is chosen, it has the subtle effect of determining the accuracy with which the segment lengths can be calculated.\n\n\n\t\t\n  first - Number of times to repeat the first control vertex, determining its multiplicity. This determines the number of times to replicate the first vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the beginning of the line will force the curve to extend to the beginning of the line. For example a value of two will force a  curve to extend to its first vertex and a value of three will force a  to start at is first vertex.\n\n\n\t\t\n  last - This determines the number of times to repeat the last control vertex, determining its multiplicity. This determines the number of times to replicate the last vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the end of the line will force the curve to extend to the end of the line.\n\n\n\t\t\n  tension - The tension exerted by the points from the Source polygons. The greater the tension, the closer the resulting shape will be to the original shape.\n\n\n\n\n\n -\n\nExtra Information for the Polyspline  can be accessed via an Info CHOP.\n\n\n\n - Number of points in this . - Number of primitives in this . - Number of particles in this . - Time spent in another thread updating geometry data on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time. - Time spent in another thread updating meta surface geometry data (such as metaballs or nurbs) on the  from the 's CPU data. As it is part of another thread, this time is not part of the usual frame time.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\n2021.100002018.28070before 2018.28070\nSOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nThe Graphics Processing Unit. This is the high-speed, many-core processor of the graphics card/chip that takes geometry, images and data from the CPU and creates images and processed data.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Polyspline_SOP&oldid=24219\"",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.813Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Group",
      "label": "Group",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "group - Subset of faces to use. Accepts patterns, as described in Pattern Matching.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.813Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Spline Type",
      "label": "Spline Type",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "basis -  - Spline type to use. There are seven choices:\n\n bezier - Typical Bezier spline. sbezier - Variation on Bezier. c1bezier - Variation on Bezier. degree2 - Variation on Bezier. bspline - Softer curve does not pass through the original points of the Source. cardinal - The curve passes through the original points of the Source. linear - Straight line segments.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.813Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Bezier",
      "label": "Bezier",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "bezier - Typical Bezier spline. sbezier - Variation on Bezier. c1bezier - Variation on Bezier. degree2 - Variation on Bezier. bspline - Softer curve does not pass through the original points of the Source. cardinal - The curve passes through the original points of the Source. linear - Straight line segments.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.813Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Close",
      "label": "Close",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "closure -  - Determines if the output spline is open or closed.\n\n cnone - Output spline open. calways - Output spline closed. cifpoly - Use the closure of the input face. In other words, Closed splines are created if the Source polygons are closed, open splines are created if the Source polygons are open.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.813Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cnone - Output spline open. calways - Output spline closed. cifpoly - Use the closure of the input face. In other words, Closed splines are created if the Source polygons are closed, open splines are created if the Source polygons are open.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Division Method",
      "label": "Division Method",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "divide -  - Settings for refining the spline by adding extra divisions.\n\n standard - Do not resample curve. evenlen - Ensure equal segment lengths. evenx - Ensure segments have equal length in X. eveny - Ensure segments have equal length in Y. evenz - Ensure segments have equal length in Z.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Standard",
      "label": "Standard",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "standard - Do not resample curve. evenlen - Ensure equal segment lengths. evenx - Ensure segments have equal length in X. eveny - Ensure segments have equal length in Y. evenz - Ensure segments have equal length in Z.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segment Length",
      "label": "Segment Length",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "segsize - The length of the segments in the resampled curve.\t\n\t\t\nIf  are selected,  sets the length of output segments. The number of output segments is determined by .\t\t\nIf  is zero, the number of output segments is calculated using the  parameter, and is determined by how many segments of this size will fit into the overall shape.\t\t\nIf  is selected, along with zero  and  of zero, an error message is generated, saying \"Invalid number of divisions or segment size\".",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Output Divisions",
      "label": "Output Divisions",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "polydivs - Number of segments in the resampled curve.\t\nIf  =  is selected, this has no effect. If  is selected, this parameter sets the number of edges that is created. The length of the segments is determined by . If  is 0, the length of the output segments is determined by dividing the over all shape into this number of segments.\t\t\nIf the  parameter is set to zero, the value of the  parameter is used to calculate the number of .",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sample Divisions",
      "label": "Sample Divisions",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "edgedivs - Number of spline divisions before resampling.\t\nIf  =  is selected, this is the number of subdivisions for every edge. If  is chosen, it has the subtle effect of determining the accuracy with which the segment lengths can be calculated.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "First CV Count",
      "label": "First CV Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "first - Number of times to repeat the first control vertex, determining its multiplicity. This determines the number of times to replicate the first vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the beginning of the line will force the curve to extend to the beginning of the line. For example a value of two will force a  curve to extend to its first vertex and a value of three will force a  to start at is first vertex.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Last CV Count",
      "label": "Last CV Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "last - This determines the number of times to repeat the last control vertex, determining its multiplicity. This determines the number of times to replicate the last vertex of the Source polygon(s). This is most useful when the Source consists of open polygons; extra vertices at the end of the line will force the curve to extend to the end of the line.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "CV Tension",
      "label": "CV Tension",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "tension - The tension exerted by the points from the Source polygons. The greater the tension, the closer the resulting shape will be to the original shape.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:07.814Z",
      "rawData": {},
      "sourceElement": null
    }
  ],
  "parameterGroups": {},
  "codeExamples": [],
  "pythonExamples": [],
  "expressions": [],
  "commonInputs": [],
  "commonOutputs": [],
  "relatedOperators": [],
  "workflowPatterns": [],
  "images": [],
  "videos": [],
  "assets": [],
  "keywords": [
    "polyspline",
    "sop",
    "fits",
    "spline",
    "curve",
    "polygon",
    "hull",
    "outputs",
    "polygonal",
    "approximation",
    "spline."
  ],
  "tags": [
    "SOP",
    "TouchDesigner",
    "Polyspline SOP"
  ],
  "searchWeight": 1,
  "contentHash": "",
  "processingDate": "2025-08-07T07:50:07.814Z",
  "processingVersion": "1.0.0",
  "isValid": true,
  "validationErrors": []
}