@bottobot/td-mcp
Version:
TouchDesigner Documentation MCP Server v2.3 - Pure MCP server for VS Code/Codium with comprehensive operator documentation for 629 operators + 7 tutorials across all categories (TOP, CHOP, SOP, DAT, MAT, COMP, POP). Features experimental POP operators wit
1,839 lines • 118 kB
JSON
{
"id": "lsystem",
"name": "LSystem",
"displayName": "LSystem",
"category": "SOP",
"subcategory": "Generators",
"version": "",
"lastUpdated": "2025-08-08T00:37:46.564Z",
"sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\LSystem_SOP.htm",
"url": "",
"description": "The Lsystem SOP implements L-systems (Lindenmayer-systems, named after Aristid Lindenmayer (1925-1989)), allow definition of complex shapes through the use of iteration. They use a mathematical language in which an initial string of characters is evaluated repeatedly, and the results are used to generate geometry. The result of each evaluation becomes the basis for the next iteration of geometry, giving the illusion of growth.",
"summary": "The Lsystem SOP implements L-systems (Lindenmayer-systems, named after Aristid Lindenmayer (1925-1989)), allow definition of complex shapes through the use of iteration. They use a mathematical langua",
"details": "",
"usage": "",
"tips": [],
"warnings": [],
"parameters": [
{
"id": null,
"name": "Type",
"label": "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": "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 Lsystem implements L-systems (Lindenmayer-systems, named after Aristid Lindenmayer (1925-1989)), allow definition of complex shapes through the use of iteration. They use a mathematical language in which an initial string of characters is evaluated repeatedly, and the results are used to generate geometry. The result of each evaluation becomes the basis for the next iteration of geometry, giving the illusion of growth.\t\t\nYou begin building an L-system by defining a sequence of rules which are evaluated to produce a new string of characters. Each character of the new string represents one command which affects an imaginary stylus, or \"turtle\". Repeating this process will grow your geometry.\t\t\t\nYou can use L-systems to create things such as:\t\t\t\n\nCreate organic objects such as trees, plants, flowers over time.\nCreate animated branching objects such as lightning and snowflakes.The file can be read in from disk or from the web. Use http:// when specifying a URL.\t\t\t\n\n\nThe descriptions located here should be enough to get you started in writing your own L-system rules, however, if you have any serious interests in creating L-systems, you should obtain the book:\t\t\t\n\nThe Algorithmic Beauty of Plants\t\t\t\nPrzemyslaw Prusinkiewicz & Aristid Lindenmayer\t\t\t\nSpringer-Verlag, New York, Phone: 212.460.1500\t\t\t\nISBN: 0-387-94676-4, 1996.\t\t\t\n\nwhich is the definitive reference on the subject. It contains a multitude of L-systems examples complete with descriptions of the ideas and theories behind modelling realistic plant growth.\nlsystemSOP_Class\n\nContents\n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n\n\n\n\n type - - Provides two options for output geometry:\n\n skel - Creates wire frame geometry. This option is ideal for geometry that is stiff and jagged like lightning or snowflakes. It is also useful to reduce cooking time. tube - Creates tube geometry. This option can be used with solid geometry that would need smooth curves, like trees or shrubs. Parameters on the Tube Page are only enabled when this Type is selected.\n\t\t\n generations - Determines the number of times to apply the rules to the initial string. This value controls the growth of the L-system. Place a time-based function here to animate the L-system growth.\n\n\n\t\t\n randscale - Random Scale as a percentage. This will apply a random scale to the changing geometry's lengths, angles and thickness.\n\n\n\t\t\n randseed - Random Seed for the . This value can be used to select different sequences of random values.\n\n\n\t\t\n contangl - Calculates the incremental angles of branches, if a non-integer generational value is used. If the Generations field is animating, this should be set to ensure smooth growth.\n\n\n\t\t\n contlength - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.\n\n\n\t\t\n contwidth - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.\n\n\n\t\t\n docolor - Use a to apply color to the L-system as it grows.\n\n\n\t\t\n colormap - Defines a to use when the Apply Color button is selected. Also see the ` and # turtle operators.\n\n\n\t\t\n inc - - Defines the default color U, V index increments when the turtle symbols ` or # are used.\n\nincu -incv -\n\t\t\n pointwidth - Adds a point width attribute to each point in the geometry. This width is effected by the Thickness and Thickness Scale parameters on the Tube Page.\n\n\n\n\n\nThe parameters on this page are active only if Geometry Page > Type has been set to the Tube type.\n\n rows - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.\n\n\n\t\t\n cols - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.\n\n\n\t\t\n tension - Tension defines the smoothness of branching corners.\n\n\n\t\t\n smooth - Enabling this option allows a child branch to be continuously joined to its parent branch.\n\n\n\t\t\n thickinit - This number defines the default tube thickness.\n\n\n\t\t\n thickscale - This number is the scale factor used with the ! or ? operator.\n\n\n\t\t\n dotexture - When enabled, UV texture coordinates are applied to the tube segments, such that the texture wraps smoothly and continuously over branches.\n\n\n\t\t\n vertinc - Defines the vertical spacing of texture coordinates over tube geometry when tube texture is applied.\n\n\n\n\n\n stepinit - Step Size allows you to define the default length of the edges when new geometry is generated.\n\n\n\t\t\n stepscale - Step Size Scale defines the scale by which the geometry will be modified by the \" or _ (double quote, or underscore) turtle operators.\n\n\n\t\t\n angleinit - Angle defines the default turning angle for turns, rolls and pitches.\n\n\n\t\t\n anglescale - Angle Scale allows you to enter the scaling factor to be employed when the ; or @ operators are used.\n\n\n\t\t\n varb - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n varc - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n vard - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n gravity - This parameter determines the amount of gravity applied to the geometry via the T (tropism vector) turtle operator. Tropism is when a plant bends or curves in response to an external stimulus. L-systems employ a tropism vector to simulate this behaviour. The bending is characterised by the fact that the thicker or shorter parts bend less than the longer or thinner parts.\n\n\n\n\n\nThe parameters on this page allow you to stamp your leaf geometry (each copy can be different) as opposed to simply copying them. See the example in Example - Stamping L-system Leaves.\n\n pictop - This is the which the pic() function uses. See #Expressions L-system Specific Expression Functions below.\n\n\n\t\t\n grpprefix - If the production g(n) is encountered, all subsequent geometry is included in a primitive group prefixed with this label and ending with the ascii value of n. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n chanprefix - If the expression chan(n) is encountered, it is replaced with the local channel prefixed with this label and ending with the ascii value of n.\n\n\n\t\t\n stampa - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n stampb - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n stampc - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n rules - to the defining the rules for the LSystem. \t\nContext Ignore context_ignore: - Defining this in the Rules specifies all characters which are to be skipped when testing context sensitivity in the rules below.\nPremise premise: - Define an initial string of characters to which the substitution rules are applied.\nRules - This is where the turtle substitution rules are defined.\n\n\n\n\nYou create the highly structured organic and branching objects using L-systems grammar. An L-system is a process in which a sequence of rules are applied to an initial string of characters to create a new string. To build the geometry, each character of the final string represents one command which affects an imaginary stylus, or \"turtle\".\nThe process begins by examining the first character of the premise string. All sixteen rules are searched sequentially until an applicable rule is found. The current character is then replaced with one or more characters as defined by the rule. The remaining characters in the premise string are replaced in a similar fashion. The entire process is repeated once for each generation.\n\n\n {} and branch [] operators can be nested 30 levels deep\nRules can be 256 characters in length\nVariables can have up to 5 parameters\nUp to 25 rules can be defined\n\nF Move forward (creating geometry)\nH Move forward half the length (creating geometry)\nG Move forward but don't record a vertex\nf Move forward (no geometry created)\nh Move forward a half length (no geometry created)\nJ K M Copy geometry source J, K or M at the turtle's position after rescaling and reorienting the geometry.\nT Apply tropism vector\n+ Turn right\n- Turn left (minus sign)\n& Pitch up\n^ Pitch down\n\\ Roll clockwise\n/ Roll counter-clockwise\n| Turn 180 degrees\n* Roll 180 degrees\n~ Pitch / Roll / Turn random amount\n\" Multiply current length\n! Multiply current thickness\n; Multiply current angle\n_ Divide current length (underscore)\n? Divides current width\n@ Divide current angle\n' Increment color index U (single quote)\n# Increment color index V\n% Cut off remainder of branch\n$ Rotate `up' towards the sun about heading\n[ Push turtle state (start a branch)\n] Pop turtle state (end a branch)\n{ Start a polygon\n. Make a polygon vertex\n} End a polygon\ng Create a new primitive group to which subsequent geometry is added\n\n\nA Touch L-system rule is specified as:\n[lc<] pred [>rc] [:cond]=succ [:prob]\nwhere:\n\nlc - Optional left context\npred - predecessor symbol to be replaced\nrc - Optional right context\ncond - Condition expression (optional)\nsucc - Replacement string\nprob - Probability of rule execution (optional)\nThe most basic type of rule is:\npred = succ \nIn this case, a character is replaced with the characters of succ if, and only if, it matches pred.\nFor example:\nPremise: ABCRule 1: B=DOG\nwill result in ADOGC\npred can only specify one letter, but left and right context symbols can be specified. The general syntax is [lc<] pred [>rc] = succ.\nFor example:\nPremise: ABC Rule 1: A<B=DOG\nagain results in ADOGC because B is preceded by A. If the rule were: Z<B=DOG or B>A=DOG the rule would not be applied.\n\n\nEach symbol can have up to five user-defined variables associated with it which can be referenced or assigned in expressions. Variables in the predecessor are instanced while variables in the successor are assigned.\nFor example:\nThe rule A(i, j) = A(i+1, j-1), will replace each A with a new A in which the first parameter has been incremented and the second parameter decremented.\nNote that the variables in the predecessor can also be referenced by the condition or probability portions of the rule.\nFor example:\nThe rule A(i):i<5 = A(i+1) A(i+1), will double each A a maximum of five times (assuming a of A(0)).Parameters assigned to geometric symbols (e.g. F, +, or !) are interpreted geometrically.\nFor example:\nThe rule F(i, j) = F(0.5*i, 2*j), will again replace each F with a new F containing modified parameters. In addition to this, the new F will now be drawn at half the length and twice the width.\n\n\nNormally turtle symbols use the current length/angle/thickness etc. to determine their effect. By providing a turtle operator with an explicit parameter, it will override the value normally used by the turtle operator.\nOverride parameters for F, f, G, h, H take the form of:\n\n\nF(i,j,k,l,m)\n\n\ni - Override Length.\nj - Override Thickness.\nk - Override # Tube Segments.\nl - Override # Tube Rows.\nm - User parameter.The k and l override parameters allow dynamic resolution of tube segments.\n\n\nF - Moves forward current length creating geometry.\n H - Moves forward half current length creating geometry.\nF(i, j) - Moves forward a distance of i, creating geometry of thickness j.\n H(i, j) - Move forward half the distance of i, creating geometry of thickness half of j.\n+ - Turn by current angle amount. ~ - Rotate by random angle.\n+(i) - Turn by i degrees. ~(i) - Override random angle with value of i.\n$(x0,y0,z0) - Points the turtle to location (x0,y0,z0).\nGiven the above, the : \n\nF(1) +(90) F(1) +(90) F(1) +(90) F(1)\ngenerates a unit box regardless of the default or settings.\n\n\nThe following list describes the geometric interpretation of parameters assigned to certain turtle symbols:\n\n\n\n\n\nIn The Algorithmic Beauty of Plants, many examples use a technique called Edge Rewriting which involve left and right subscripts. A typical example might look like:\n1090F(l)F(l) = F(l)+F(r)+ F(r) = -F(l)-F(r)\nHowever, Touch doesn't know what F(l) and F(r) are. In this case, we can modify the rules to use parameter passing. For the F turtle symbol, the first four parameters are length, width, tubesides, and tubesegs, leaving the last parameter user-definable. We can define this last parameter such that 0 is left, and 1 is right:\n1090F(1,1,3,3,0)\nAfter two generations this produces: Fl+Fr+-Fl-Fr. There should not be any difference between this final string and F+F+-F-F.\nAnother approach is to use two new variables, and use a conditional statement on the final step to convert them to F: \nch(\"generations\")ll:t<b=l+r+ r:t<b=-l-r l=F r=FOutput lFF+F+F+F++-F-F+\n\n\nIn the earlier example, the expressions 0.5*i and 2*j are used. In fact, expressions can be used anywhere a numeric field is expected. Currently the following symbols can be used in expressions:\n( ) - brackets for nesting priority\n^ + - * / % - arithmetic operators\nmin() max() sin() cos() asin() acos() pic() in() - supported functions\n== != = < <= > >= - logical operators\n& | ! - logical operators: and, or, not\nb c d - b, c, d parameters after expansion\nx y z - current turtle position\ng - age of symbol\nt - time (generations) of L-system\na - angle parameter\nT - tropism (gravity) parameter\nThe pre-defined variables above should not be used in the arguments of the predecessor.\nFor example: A(a,b) = B(a*2,b*2) is wrong (a is the Angle parameter). a<b (A,B) = b(A+1,B) is right.\nThe last statement is correct because a and b are used as symbols and not variable names. A and B are correct because variable names are case sensitive.\n\n\npic(u, v, c) - Using the image specified with , this function returns a normalized value (between 0 and 1) of the pixel at the normalized coordinates (u,v); c selects one of four channels to examine:0123\nin(q, r, s) - Given a MetaTest input source containing a metaball geometry, this function returns a 1 if the point (q, r, s) is contained within the metaball, and 0 if not. Use in(x, y, z) (the letters x, y, and z are special and contain the X, Y, and Z location of the turtle) to test whether or not the turtle is currently inside the metaball to create pruned outputs.\n\nEach rule may have an optional condition specified. The syntax is:\n[lc<] pred [>rc]:cond = succ\nFor example:\nThe A:y>2=J includes source J at all A's above the height of 2.\n\n\nEach rule can specify the probability that it is used (provided it is otherwise applicable). The syntax is:\n[lc<] pred [>rc]:cond=succ=prob\nFor example:\nA=B:0.5A=C:0.5 \nwill replace A with either B or C with equal probability.\n\n\nThere is a group operator 'g' which lumps all geometry currently being built into group g.\nFor example: g[F] lumps geometry from F into a group called lsys0. You can set the lsys prefix from the Funcs page.\n\n\ng takes an optional parameter as well.\nFor example: g(1)[F] lumps geometry from f into a group called lsys1. If no parameter is given, the default index is bumped up appropriately.\nThe current group container is pushed/popped with the turtle state so you can do things like:\n\ngF [ gFF] F - The first and last F's are put into group 0, and the middle FF's are put into group 1. \ngF [ FF] F - The geometry from all four F's are put into group 0, (pushing the turtle adopts the parent's group).\nTo exclude the middle FF from the parent's group type: gF [ g(-1)FF ] F\n\n\nTo create an L-system which goes forward X percent less for each iteration, you need to start your with a value, and then within a rule, multiply that value by the percentage you want to remain:\nA(1)A(i) = F(i)A(i*0.5)\nThis way \"i\" is scaled before A is again evaluated. The important part is the . You need to start with a value to be able to scale that value.\n\n\nStep 1) Place a Circle SOP, and set the Number of Divisions to: param(\"lsys\", 3)\nIt then displays a triangle (3 is default value).\nStep 2) this into the J input of a L-System . If the L-system is:\nJ AJ(,,4) AJ(,,5) A\nThis way, you can customize each leaf before it gets copied.\nStep 3) Change the Premise and Rule to:\nA(0)A(i)=FJ(,,i+3)A(i+1)\nThis creates a line of increasing-order polygons.\nStep 4) Finally, we will want to create 20 leaves, and put them all into a Switch SOP. Do this by entering the following expression into the Switch 's Select Input: param(\"lsys\",0)Step 5) Then in your L-system, J(,,0) gives you the first , J(,,1) gives you the second, and so on. This solves the problem of a limited number of leaves using only JKM.\nAlso note that these examples use only the first stamp parameter, you can use up to three parameters: e.g. J(,,1,2,3)\nThe first two parameters of J, K, M are used to override length and width, like symbol F.\n\n\n -\n -\n -\n -\n\nExtra Information for the LSystem 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 that creates, composites and modifies images, and reads/writes images and movies to/from files and the network. TOPs run on the graphics card's GPU.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nA polygon is a type of Primitive that is formed from a set of Vertices in 3D that are implicitly connected together to form a multi-edge shape.\n\n\n\nA text string that contains data (string, float, list, boolean, etc.) and operators (+ * < etc) that are evaluated by the node's language (python or Tscript) and returns a string, float list or boolean, etc. Expressions are used in parameters, DATs and in scripts.\n\n\n\nA way of moving data from one TouchDesigner process to another. Images are moved via Touch Out / In TOPs, channels are moved via Touch Out / In CHOPs and Pipe Out / In CHOPs. Data moves via TCP/IP or UDP.\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=LSystem_SOP&oldid=24204\"\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-08T00:37:46.554Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Type",
"label": "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": "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 Lsystem implements L-systems (Lindenmayer-systems, named after Aristid Lindenmayer (1925-1989)), allow definition of complex shapes through the use of iteration. They use a mathematical language in which an initial string of characters is evaluated repeatedly, and the results are used to generate geometry. The result of each evaluation becomes the basis for the next iteration of geometry, giving the illusion of growth.\t\t\nYou begin building an L-system by defining a sequence of rules which are evaluated to produce a new string of characters. Each character of the new string represents one command which affects an imaginary stylus, or \"turtle\". Repeating this process will grow your geometry.\t\t\t\nYou can use L-systems to create things such as:\t\t\t\n\nCreate organic objects such as trees, plants, flowers over time.\nCreate animated branching objects such as lightning and snowflakes.The file can be read in from disk or from the web. Use http:// when specifying a URL.\t\t\t\n\n\nThe descriptions located here should be enough to get you started in writing your own L-system rules, however, if you have any serious interests in creating L-systems, you should obtain the book:\t\t\t\n\nThe Algorithmic Beauty of Plants\t\t\t\nPrzemyslaw Prusinkiewicz & Aristid Lindenmayer\t\t\t\nSpringer-Verlag, New York, Phone: 212.460.1500\t\t\t\nISBN: 0-387-94676-4, 1996.\t\t\t\n\nwhich is the definitive reference on the subject. It contains a multitude of L-systems examples complete with descriptions of the ideas and theories behind modelling realistic plant growth.\nlsystemSOP_Class\n\nContents\n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n\n\n\n\n type - - Provides two options for output geometry:\n\n skel - Creates wire frame geometry. This option is ideal for geometry that is stiff and jagged like lightning or snowflakes. It is also useful to reduce cooking time. tube - Creates tube geometry. This option can be used with solid geometry that would need smooth curves, like trees or shrubs. Parameters on the Tube Page are only enabled when this Type is selected.\n\t\t\n generations - Determines the number of times to apply the rules to the initial string. This value controls the growth of the L-system. Place a time-based function here to animate the L-system growth.\n\n\n\t\t\n randscale - Random Scale as a percentage. This will apply a random scale to the changing geometry's lengths, angles and thickness.\n\n\n\t\t\n randseed - Random Seed for the . This value can be used to select different sequences of random values.\n\n\n\t\t\n contangl - Calculates the incremental angles of branches, if a non-integer generational value is used. If the Generations field is animating, this should be set to ensure smooth growth.\n\n\n\t\t\n contlength - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.\n\n\n\t\t\n contwidth - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.\n\n\n\t\t\n docolor - Use a to apply color to the L-system as it grows.\n\n\n\t\t\n colormap - Defines a to use when the Apply Color button is selected. Also see the ` and # turtle operators.\n\n\n\t\t\n inc - - Defines the default color U, V index increments when the turtle symbols ` or # are used.\n\nincu -incv -\n\t\t\n pointwidth - Adds a point width attribute to each point in the geometry. This width is effected by the Thickness and Thickness Scale parameters on the Tube Page.\n\n\n\n\n\nThe parameters on this page are active only if Geometry Page > Type has been set to the Tube type.\n\n rows - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.\n\n\n\t\t\n cols - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.\n\n\n\t\t\n tension - Tension defines the smoothness of branching corners.\n\n\n\t\t\n smooth - Enabling this option allows a child branch to be continuously joined to its parent branch.\n\n\n\t\t\n thickinit - This number defines the default tube thickness.\n\n\n\t\t\n thickscale - This number is the scale factor used with the ! or ? operator.\n\n\n\t\t\n dotexture - When enabled, UV texture coordinates are applied to the tube segments, such that the texture wraps smoothly and continuously over branches.\n\n\n\t\t\n vertinc - Defines the vertical spacing of texture coordinates over tube geometry when tube texture is applied.\n\n\n\n\n\n stepinit - Step Size allows you to define the default length of the edges when new geometry is generated.\n\n\n\t\t\n stepscale - Step Size Scale defines the scale by which the geometry will be modified by the \" or _ (double quote, or underscore) turtle operators.\n\n\n\t\t\n angleinit - Angle defines the default turning angle for turns, rolls and pitches.\n\n\n\t\t\n anglescale - Angle Scale allows you to enter the scaling factor to be employed when the ; or @ operators are used.\n\n\n\t\t\n varb - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n varc - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n vard - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n gravity - This parameter determines the amount of gravity applied to the geometry via the T (tropism vector) turtle operator. Tropism is when a plant bends or curves in response to an external stimulus. L-systems employ a tropism vector to simulate this behaviour. The bending is characterised by the fact that the thicker or shorter parts bend less than the longer or thinner parts.\n\n\n\n\n\nThe parameters on this page allow you to stamp your leaf geometry (each copy can be different) as opposed to simply copying them. See the example in Example - Stamping L-system Leaves.\n\n pictop - This is the which the pic() function uses. See #Expressions L-system Specific Expression Functions below.\n\n\n\t\t\n grpprefix - If the production g(n) is encountered, all subsequent geometry is included in a primitive group prefixed with this label and ending with the ascii value of n. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n chanprefix - If the expression chan(n) is encountered, it is replaced with the local channel prefixed with this label and ending with the ascii value of n.\n\n\n\t\t\n stampa - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n stampb - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n stampc - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n rules - to the defining the rules for the LSystem. \t\nContext Ignore context_ignore: - Defining this in the Rules specifies all characters which are to be skipped when testing context sensitivity in the rules below.\nPremise premise: - Define an initial string of characters to which the substitution rules are applied.\nRules - This is where the turtle substitution rules are defined.\n\n\n\n\nYou create the highly structured organic and branching objects using L-systems grammar. An L-system is a process in which a sequence of rules are applied to an initial string of characters to create a new string. To build the geometry, each character of the final string represents one command which affects an imaginary stylus, or \"turtle\".\nThe process begins by examining the first character of the premise string. All sixteen rules are searched sequentially until an applicable rule is found. The current character is then replaced with one or more characters as defined by the rule. The remaining characters in the premise string are replaced in a similar fashion. The entire process is repeated once for each generation.\n\n\n {} and branch [] operators can be nested 30 levels deep\nRules can be 256 characters in length\nVariables can have up to 5 parameters\nUp to 25 rules can be defined\n\nF Move forward (creating geometry)\nH Move forward half the length (creating geometry)\nG Move forward but don't record a vertex\nf Move forward (no geometry created)\nh Move forward a half length (no geometry created)\nJ K M Copy geometry source J, K or M at the turtle's position after rescaling and reorienting the geometry.\nT Apply tropism vector\n+ Turn right\n- Turn left (minus sign)\n& Pitch up\n^ Pitch down\n\\ Roll clockwise\n/ Roll counter-clockwise\n| Turn 180 degrees\n* Roll 180 degrees\n~ Pitch / Roll / Turn random amount\n\" Multiply current length\n! Multiply current thickness\n; Multiply current angle\n_ Divide current length (underscore)\n? Divides current width\n@ Divide current angle\n' Increment color index U (single quote)\n# Increment color index V\n% Cut off remainder of branch\n$ Rotate `up' towards the sun about heading\n[ Push turtle state (start a branch)\n] Pop turtle state (end a branch)\n{ Start a polygon\n. Make a polygon vertex\n} End a polygon\ng Create a new primitive group to which subsequent geometry is added\n\n\nA Touch L-system rule is specified as:\n[lc<] pred [>rc] [:cond]=succ [:prob]\nwhere:\n\nlc - Optional left context\npred - predecessor symbol to be replaced\nrc - Optional right context\ncond - Condition expression (optional)\nsucc - Replacement string\nprob - Probability of rule execution (optional)\nThe most basic type of rule is:\npred = succ \nIn this case, a character is replaced with the characters of succ if, and only if, it matches pred.\nFor example:\nPremise: ABCRule 1: B=DOG\nwill result in ADOGC\npred can only specify one letter, but left and right context symbols can be specified. The general syntax is [lc<] pred [>rc] = succ.\nFor example:\nPremise: ABC Rule 1: A<B=DOG\nagain results in ADOGC because B is preceded by A. If the rule were: Z<B=DOG or B>A=DOG the rule would not be applied.\n\n\nEach symbol can have up to five user-defined variables associated with it which can be referenced or assigned in expressions. Variables in the predecessor are instanced while variables in the successor are assigned.\nFor example:\nThe rule A(i, j) = A(i+1, j-1), will replace each A with a new A in which the first parameter has been incremented and the second parameter decremented.\nNote that the variables in the predecessor can also be referenced by the condition or probability portions of the rule.\nFor example:\nThe rule A(i):i<5 = A(i+1) A(i+1), will double each A a maximum of five times (assuming a of A(0)).Parameters assigned to geometric symbols (e.g. F, +, or !) are interpreted geometrically.\nFor example:\nThe rule F(i, j) = F(0.5*i, 2*j), will again replace each F with a new F containing modified parameters. In addition to this, the new F will now be drawn at half the length and twice the width.\n\n\nNormally turtle symbols use the current length/angle/thickness etc. to determine their effect. By providing a turtle operator with an explicit parameter, it will override the value normally used by the turtle operator.\nOverride parameters for F, f, G, h, H take the form of:\n\n\nF(i,j,k,l,m)\n\n\ni - Override Length.\nj - Override Thickness.\nk - Override # Tube Segments.\nl - Override # Tube Rows.\nm - User parameter.The k and l override parameters allow dynamic resolution of tube segments.\n\n\nF - Moves forward current length creating geometry.\n H - Moves forward half current length creating geometry.\nF(i, j) - Moves forward a distance of i, creating geometry of thickness j.\n H(i, j) - Move forward half the distance of i, creating geometry of thickness half of j.\n+ - Turn by current angle amount. ~ - Rotate by random angle.\n+(i) - Turn by i degrees. ~(i) - Override random angle with value of i.\n$(x0,y0,z0) - Points the turtle to location (x0,y0,z0).\nGiven the above, the : \n\nF(1) +(90) F(1) +(90) F(1) +(90) F(1)\ngenerates a unit box regardless of the default or settings.\n\n\nThe following list describes the geometric interpretation of parameters assigned to certain turtle symbols:\n\n\n\n\n\nIn The Algorithmic Beauty of Plants, many examples use a technique called Edge Rewriting which involve left and right subscripts. A typical example might look like:\n1090F(l)F(l) = F(l)+F(r)+ F(r) = -F(l)-F(r)\nHowever, Touch doesn't know what F(l) and F(r) are. In this case, we can modify the rules to use parameter passing. For the F turtle symbol, the first four parameters are length, width, tubesides, and tubesegs, leaving the last parameter user-definable. We can define this last parameter such that 0 is left, and 1 is right:\n1090F(1,1,3,3,0)\nAfter two generations this produces: Fl+Fr+-Fl-Fr. There should not be any difference between this final string and F+F+-F-F.\nAnother approach is to use two new variables, and use a conditional statement on the final step to convert them to F: \nch(\"generations\")ll:t<b=l+r+ r:t<b=-l-r l=F r=FOutput lFF+F+F+F++-F-F+\n\n\nIn the earlier example, the expressions 0.5*i and 2*j are used. In fact, expressions can be used anywhere a numeric field is expected. Currently the following symbols can be used in expressions:\n( ) - brackets for nesting priority\n^ + - * / % - arithmetic operators\nmin() max() sin() cos() asin() acos() pic() in() - supported functions\n== != = < <= > >= - logical operators\n& | ! - logical operators: and, or, not\nb c d - b, c, d parameters after expansion\nx y z - current turtle position\ng - age of symbol\nt - time (generations) of L-system\na - angle parameter\nT - tropism (gravity) parameter\nThe pre-defined variables above should not be used in the arguments of the predecessor.\nFor example: A(a,b) = B(a*2,b*2) is wrong (a is the Angle parameter). a<b (A,B) = b(A+1,B) is right.\nThe last statement is correct because a and b are used as symbols and not variable names. A and B are correct because variable names are case sensitive.\n\n\npic(u, v, c) - Using the image specified with , this function returns a normalized value (between 0 and 1) of the pixel at the normalized coordinates (u,v); c selects one of four channels to examine:0123\nin(q, r, s) - Given a MetaTest input source containing a metaball geometry, this function returns a 1 if the point (q, r, s) is contained within the metaball, and 0 if not. Use in(x, y, z) (the letters x, y, and z are special and contain the X, Y, and Z location of the turtle) to test whether or not the turtle is currently inside the metaball to create pruned outputs.\n\nEach rule may have an optional condition specified. The syntax is:\n[lc<] pred [>rc]:cond = succ\nFor example:\nThe A:y>2=J includes source J at all A's above the height of 2.\n\n\nEach rule can specify the probability that it is used (provided it is otherwise applicable). The syntax is:\n[lc<] pred [>rc]:cond=succ=prob\nFor example:\nA=B:0.5A=C:0.5 \nwill replace A with either B or C with equal probability.\n\n\nThere is a group operator 'g' which lumps all geometry currently being built into group g.\nFor example: g[F] lumps geometry from F into a group called lsys0. You can set the lsys prefix from the Funcs page.\n\n\ng takes an optional parameter as well.\nFor example: g(1)[F] lumps geometry from f into a group called lsys1. If no parameter is given, the default index is bumped up appropriately.\nThe current group container is pushed/popped with the turtle state so you can do things like:\n\ngF [ gFF] F - The first and last F's are put into group 0, and the middle FF's are put into group 1. \ngF [ FF] F - The geometry from all four F's are put into group 0, (pushing the turtle adopts the parent's group).\nTo exclude the middle FF from the parent's group type: gF [ g(-1)FF ] F\n\n\nTo create an L-system which goes forward X percent less for each iteration, you need to start your with a value, and then within a rule, multiply that value by the percentage you want to remain:\nA(1)A(i) = F(i)A(i*0.5)\nThis way \"i\" is scaled before A is again evaluated. The important part is the . You need to start with a value to be able to scale that value.\n\n\nStep 1) Place a Circle SOP, and set the Number of Divisions to: param(\"lsys\", 3)\nIt then displays a triangle (3 is default value).\nStep 2) this into the J input of a L-System . If the L-system is:\nJ AJ(,,4) AJ(,,5) A\nThis way, you can customize each leaf before it gets copied.\nStep 3) Change the Premise and Rule to:\nA(0)A(i)=FJ(,,i+3)A(i+1)\nThis creates a line of increasing-order polygons.\nStep 4) Finally, we will want to create 20 leaves, and put them all into a Switch SOP. Do this by entering the following expression into the Switch 's Select Input: param(\"lsys\",0)Step 5) Then in your L-system, J(,,0) gives you the first , J(,,1) gives you the second, and so on. This solves the problem of a limited number of leaves using only JKM.\nAlso note that these examples use only the first stamp parameter, you can use up to three parameters: e.g. J(,,1,2,3)\nThe first two parameters of J, K, M are used to override length and width, like symbol F.\n\n\n -\n -\n -\n -\n\nExtra Information for the LSystem 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 that creates, composites and modifies images, and reads/writes images and movies to/from files and the network. TOPs run on the graphics card's GPU.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nA polygon is a type of Primitive that is formed from a set of Vertices in 3D that are implicitly connected together to form a multi-edge shape.\n\n\n\nA text string that contains data (string, float, list, boolean, etc.) and operators (+ * < etc) that are evaluated by the node's language (python or Tscript) and returns a string, float list or boolean, etc. Expressions are used in parameters, DATs and in scripts.\n\n\n\nA way of moving data from one TouchDesigner process to another. Images are moved via Touch Out / In TOPs, channels are moved via Touch Out / In CHOPs and Pipe Out / In CHOPs. Data moves via TCP/IP or UDP.\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=LSystem_SOP&oldid=24204\"\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-08T00:37:46.558Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Type",
"label": "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": "The Lsystem implements L-systems (Lindenmayer-systems, named after Aristid Lindenmayer (1925-1989)), allow definition of complex shapes through the use of iteration. They use a mathematical language in which an initial string of characters is evaluated repeatedly, and the results are used to generate geometry. The result of each evaluation becomes the basis for the next iteration of geometry, giving the illusion of growth.\t\t\nYou begin building an L-system by defining a sequence of rules which are evaluated to produce a new string of characters. Each character of the new string represents one command which affects an imaginary stylus, or \"turtle\". Repeating this process will grow your geometry.\t\t\t\nYou can use L-systems to create things such as:\t\t\t\n\nCreate organic objects such as trees, plants, flowers over time.\nCreate animated branching objects such as lightning and snowflakes.The file can be read in from disk or from the web. Use http:// when specifying a URL.\t\t\t\n\n\nThe descriptions located here should be enough to get you started in writing your own L-system rules, however, if you have any serious interests in creating L-systems, you should obtain the book:\t\t\t\n\nThe Algorithmic Beauty of Plants\t\t\t\nPrzemyslaw Prusinkiewicz & Aristid Lindenmayer\t\t\t\nSpringer-Verlag, New York, Phone: 212.460.1500\t\t\t\nISBN: 0-387-94676-4, 1996.\t\t\t\n\nwhich is the definitive reference on the subject. It contains a multitude of L-systems examples complete with descriptions of the ideas and theories behind modelling realistic plant growth.\nlsystemSOP_Class\n\nContents\n \n \n\n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n\n\n\n\n\n type - - Provides two options for output geometry:\n\n skel - Creates wire frame geometry. This option is ideal for geometry that is stiff and jagged like lightning or snowflakes. It is also useful to reduce cooking time. tube - Creates tube geometry. This option can be used with solid geometry that would need smooth curves, like trees or shrubs. Parameters on the Tube Page are only enabled when this Type is selected.\n\t\t\n generations - Determines the number of times to apply the rules to the initial string. This value controls the growth of the L-system. Place a time-based function here to animate the L-system growth.\n\n\n\t\t\n randscale - Random Scale as a percentage. This will apply a random scale to the changing geometry's lengths, angles and thickness.\n\n\n\t\t\n randseed - Random Seed for the . This value can be used to select different sequences of random values.\n\n\n\t\t\n contangl - Calculates the incremental angles of branches, if a non-integer generational value is used. If the Generations field is animating, this should be set to ensure smooth growth.\n\n\n\t\t\n contlength - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.\n\n\n\t\t\n contwidth - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.\n\n\n\t\t\n docolor - Use a to apply color to the L-system as it grows.\n\n\n\t\t\n colormap - Defines a to use when the Apply Color button is selected. Also see the ` and # turtle operators.\n\n\n\t\t\n inc - - Defines the default color U, V index increments when the turtle symbols ` or # are used.\n\nincu -incv -\n\t\t\n pointwidth - Adds a point width attribute to each point in the geometry. This width is effected by the Thickness and Thickness Scale parameters on the Tube Page.\n\n\n\n\n\nThe parameters on this page are active only if Geometry Page > Type has been set to the Tube type.\n\n rows - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.\n\n\n\t\t\n cols - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.\n\n\n\t\t\n tension - Tension defines the smoothness of branching corners.\n\n\n\t\t\n smooth - Enabling this option allows a child branch to be continuously joined to its parent branch.\n\n\n\t\t\n thickinit - This number defines the default tube thickness.\n\n\n\t\t\n thickscale - This number is the scale factor used with the ! or ? operator.\n\n\n\t\t\n dotexture - When enabled, UV texture coordinates are applied to the tube segments, such that the texture wraps smoothly and continuously over branches.\n\n\n\t\t\n vertinc - Defines the vertical spacing of texture coordinates over tube geometry when tube texture is applied.\n\n\n\n\n\n stepinit - Step Size allows you to define the default length of the edges when new geometry is generated.\n\n\n\t\t\n stepscale - Step Size Scale defines the scale by which the geometry will be modified by the \" or _ (double quote, or underscore) turtle operators.\n\n\n\t\t\n angleinit - Angle defines the default turning angle for turns, rolls and pitches.\n\n\n\t\t\n anglescale - Angle Scale allows you to enter the scaling factor to be employed when the ; or @ operators are used.\n\n\n\t\t\n varb - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n varc - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n vard - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.\n\n\n\t\t\n gravity - This parameter determines the amount of gravity applied to the geometry via the T (tropism vector) turtle operator. Tropism is when a plant bends or curves in response to an external stimulus. L-systems employ a tropism vector to simulate this behaviour. The bending is characterised by the fact that the thicker or shorter parts bend less than the longer or thinner parts.\n\n\n\n\n\nThe parameters on this page allow you to stamp your leaf geometry (each copy can be different) as opposed to simply copying them. See the example in Example - Stamping L-system Leaves.\n\n pictop - This is the which the pic() function uses. See #Expressions L-system Specific Expression Functions below.\n\n\n\t\t\n grpprefix - If the production g(n) is encountered, all subsequent geometry is included in a primitive group prefixed with this label and ending with the ascii value of n. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n chanprefix - If the expression chan(n) is encountered, it is replaced with the local channel prefixed with this label and ending with the ascii value of n.\n\n\n\t\t\n stampa - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n stampb - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n stampc - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.\n\n\n\t\t\n rules - to the defining the rules for the LSystem. \t\nContext Ignore context_ignore: - Defining this in the Rules specifies all characters which are to be skipped when testing context sensitivity in the rules below.\nPremise premise: - Define an initial string of characters to which the substitution rules are applied.\nRules - This is where the turtle substitution rules are defined.\n\n\n\n\nYou create the highly structured organic and branching objects using L-systems grammar. An L-system is a process in which a sequence of rules are applied to an initial string of characters to create a new string. To build the geometry, each character of the final string represents one command which affects an imaginary stylus, or \"turtle\".\nThe process begins by examining the first character of the premise string. All sixteen rules are searched sequentially until an applicable rule is found. The current character is then replaced with one or more characters as defined by the rule. The remaining characters in the premise string are replaced in a similar fashion. The entire process is repeated once for each generation.\n\n\n {} and branch [] operators can be nested 30 levels deep\nRules can be 256 characters in length\nVariables can have up to 5 parameters\nUp to 25 rules can be defined\n\nF Move forward (creating geometry)\nH Move forward half the length (creating geometry)\nG Move forward but don't record a vertex\nf Move forward (no geometry created)\nh Move forward a half length (no geometry created)\nJ K M Copy geometry source J, K or M at the turtle's position after rescaling and reorienting the geometry.\nT Apply tropism vector\n+ Turn right\n- Turn left (minus sign)\n& Pitch up\n^ Pitch down\n\\ Roll clockwise\n/ Roll counter-clockwise\n| Turn 180 degrees\n* Roll 180 degrees\n~ Pitch / Roll / Turn random amount\n\" Multiply current length\n! Multiply current thickness\n; Multiply current angle\n_ Divide current length (underscore)\n? Divides current width\n@ Divide current angle\n' Increment color index U (single quote)\n# Increment color index V\n% Cut off remainder of branch\n$ Rotate `up' towards the sun about heading\n[ Push turtle state (start a branch)\n] Pop turtle state (end a branch)\n{ Start a polygon\n. Make a polygon vertex\n} End a polygon\ng Create a new primitive group to which subsequent geometry is added\n\n\nA Touch L-system rule is specified as:\n[lc<] pred [>rc] [:cond]=succ [:prob]\nwhere:\n\nlc - Optional left context\npred - predecessor symbol to be replaced\nrc - Optional right context\ncond - Condition expression (optional)\nsucc - Replacement string\nprob - Probability of rule execution (optional)\nThe most basic type of rule is:\npred = succ \nIn this case, a character is replaced with the characters of succ if, and only if, it matches pred.\nFor example:\nPremise: ABCRule 1: B=DOG\nwill result in ADOGC\npred can only specify one letter, but left and right context symbols can be specified. The general syntax is [lc<] pred [>rc] = succ.\nFor example:\nPremise: ABC Rule 1: A<B=DOG\nagain results in ADOGC because B is preceded by A. If the rule were: Z<B=DOG or B>A=DOG the rule would not be applied.\n\n\nEach symbol can have up to five user-defined variables associated with it which can be referenced or assigned in expressions. Variables in the predecessor are instanced while variables in the successor are assigned.\nFor example:\nThe rule A(i, j) = A(i+1, j-1), will replace each A with a new A in which the first parameter has been incremented and the second parameter decremented.\nNote that the variables in the predecessor can also be referenced by the condition or probability portions of the rule.\nFor example:\nThe rule A(i):i<5 = A(i+1) A(i+1), will double each A a maximum of five times (assuming a of A(0)).Parameters assigned to geometric symbols (e.g. F, +, or !) are interpreted geometrically.\nFor example:\nThe rule F(i, j) = F(0.5*i, 2*j), will again replace each F with a new F containing modified parameters. In addition to this, the new F will now be drawn at half the length and twice the width.\n\n\nNormally turtle symbols use the current length/angle/thickness etc. to determine their effect. By providing a turtle operator with an explicit parameter, it will override the value normally used by the turtle operator.\nOverride parameters for F, f, G, h, H take the form of:\n\n\nF(i,j,k,l,m)\n\n\ni - Override Length.\nj - Override Thickness.\nk - Override # Tube Segments.\nl - Override # Tube Rows.\nm - User parameter.The k and l override parameters allow dynamic resolution of tube segments.\n\n\nF - Moves forward current length creating geometry.\n H - Moves forward half current length creating geometry.\nF(i, j) - Moves forward a distance of i, creating geometry of thickness j.\n H(i, j) - Move forward half the distance of i, creating geometry of thickness half of j.\n+ - Turn by current angle amount. ~ - Rotate by random angle.\n+(i) - Turn by i degrees. ~(i) - Override random angle with value of i.\n$(x0,y0,z0) - Points the turtle to location (x0,y0,z0).\nGiven the above, the : \n\nF(1) +(90) F(1) +(90) F(1) +(90) F(1)\ngenerates a unit box regardless of the default or settings.\n\n\nThe following list describes the geometric interpretation of parameters assigned to certain turtle symbols:\n\n\n\n\n\nIn The Algorithmic Beauty of Plants, many examples use a technique called Edge Rewriting which involve left and right subscripts. A typical example might look like:\n1090F(l)F(l) = F(l)+F(r)+ F(r) = -F(l)-F(r)\nHowever, Touch doesn't know what F(l) and F(r) are. In this case, we can modify the rules to use parameter passing. For the F turtle symbol, the first four parameters are length, width, tubesides, and tubesegs, leaving the last parameter user-definable. We can define this last parameter such that 0 is left, and 1 is right:\n1090F(1,1,3,3,0)\nAfter two generations this produces: Fl+Fr+-Fl-Fr. There should not be any difference between this final string and F+F+-F-F.\nAnother approach is to use two new variables, and use a conditional statement on the final step to convert them to F: \nch(\"generations\")ll:t<b=l+r+ r:t<b=-l-r l=F r=FOutput lFF+F+F+F++-F-F+\n\n\nIn the earlier example, the expressions 0.5*i and 2*j are used. In fact, expressions can be used anywhere a numeric field is expected. Currently the following symbols can be used in expressions:\n( ) - brackets for nesting priority\n^ + - * / % - arithmetic operators\nmin() max() sin() cos() asin() acos() pic() in() - supported functions\n== != = < <= > >= - logical operators\n& | ! - logical operators: and, or, not\nb c d - b, c, d parameters after expansion\nx y z - current turtle position\ng - age of symbol\nt - time (generations) of L-system\na - angle parameter\nT - tropism (gravity) parameter\nThe pre-defined variables above should not be used in the arguments of the predecessor.\nFor example: A(a,b) = B(a*2,b*2) is wrong (a is the Angle parameter). a<b (A,B) = b(A+1,B) is right.\nThe last statement is correct because a and b are used as symbols and not variable names. A and B are correct because variable names are case sensitive.\n\n\npic(u, v, c) - Using the image specified with , this function returns a normalized value (between 0 and 1) of the pixel at the normalized coordinates (u,v); c selects one of four channels to examine:0123\nin(q, r, s) - Given a MetaTest input source containing a metaball geometry, this function returns a 1 if the point (q, r, s) is contained within the metaball, and 0 if not. Use in(x, y, z) (the letters x, y, and z are special and contain the X, Y, and Z location of the turtle) to test whether or not the turtle is currently inside the metaball to create pruned outputs.\n\nEach rule may have an optional condition specified. The syntax is:\n[lc<] pred [>rc]:cond = succ\nFor example:\nThe A:y>2=J includes source J at all A's above the height of 2.\n\n\nEach rule can specify the probability that it is used (provided it is otherwise applicable). The syntax is:\n[lc<] pred [>rc]:cond=succ=prob\nFor example:\nA=B:0.5A=C:0.5 \nwill replace A with either B or C with equal probability.\n\n\nThere is a group operator 'g' which lumps all geometry currently being built into group g.\nFor example: g[F] lumps geometry from F into a group called lsys0. You can set the lsys prefix from the Funcs page.\n\n\ng takes an optional parameter as well.\nFor example: g(1)[F] lumps geometry from f into a group called lsys1. If no parameter is given, the default index is bumped up appropriately.\nThe current group container is pushed/popped with the turtle state so you can do things like:\n\ngF [ gFF] F - The first and last F's are put into group 0, and the middle FF's are put into group 1. \ngF [ FF] F - The geometry from all four F's are put into group 0, (pushing the turtle adopts the parent's group).\nTo exclude the middle FF from the parent's group type: gF [ g(-1)FF ] F\n\n\nTo create an L-system which goes forward X percent less for each iteration, you need to start your with a value, and then within a rule, multiply that value by the percentage you want to remain:\nA(1)A(i) = F(i)A(i*0.5)\nThis way \"i\" is scaled before A is again evaluated. The important part is the . You need to start with a value to be able to scale that value.\n\n\nStep 1) Place a Circle SOP, and set the Number of Divisions to: param(\"lsys\", 3)\nIt then displays a triangle (3 is default value).\nStep 2) this into the J input of a L-System . If the L-system is:\nJ AJ(,,4) AJ(,,5) A\nThis way, you can customize each leaf before it gets copied.\nStep 3) Change the Premise and Rule to:\nA(0)A(i)=FJ(,,i+3)A(i+1)\nThis creates a line of increasing-order polygons.\nStep 4) Finally, we will want to create 20 leaves, and put them all into a Switch SOP. Do this by entering the following expression into the Switch 's Select Input: param(\"lsys\",0)Step 5) Then in your L-system, J(,,0) gives you the first , J(,,1) gives you the second, and so on. This solves the problem of a limited number of leaves using only JKM.\nAlso note that these examples use only the first stamp parameter, you can use up to three parameters: e.g. J(,,1,2,3)\nThe first two parameters of J, K, M are used to override length and width, like symbol F.\n\n\n -\n -\n -\n -\n\nExtra Information for the LSystem 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 that creates, composites and modifies images, and reads/writes images and movies to/from files and the network. TOPs run on the graphics card's GPU.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nA polygon is a type of Primitive that is formed from a set of Vertices in 3D that are implicitly connected together to form a multi-edge shape.\n\n\n\nA text string that contains data (string, float, list, boolean, etc.) and operators (+ * < etc) that are evaluated by the node's language (python or Tscript) and returns a string, float list or boolean, etc. Expressions are used in parameters, DATs and in scripts.\n\n\n\nA way of moving data from one TouchDesigner process to another. Images are moved via Touch Out / In TOPs, channels are moved via Touch Out / In CHOPs and Pipe Out / In CHOPs. Data moves via TCP/IP or UDP.\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=LSystem_SOP&oldid=24204\"",
"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-08T00:37:46.561Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Type",
"label": "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": "type - - Provides two options for output geometry:\n\n skel - Creates wire frame geometry. This option is ideal for geometry that is stiff and jagged like lightning or snowflakes. It is also useful to reduce cooking time. tube - Creates tube geometry. This option can be used with solid geometry that would need smooth curves, like trees or shrubs. Parameters on the Tube Page are only enabled when this Type is selected.",
"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-08T00:37:46.561Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Skeleton",
"label": "Skeleton",
"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": "skel - Creates wire frame geometry. This option is ideal for geometry that is stiff and jagged like lightning or snowflakes. It is also useful to reduce cooking time. tube - Creates tube geometry. This option can be used with solid geometry that would need smooth curves, like trees or shrubs. Parameters on the Tube Page are only enabled when this Type is selected.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Generations",
"label": "Generations",
"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": "generations - Determines the number of times to apply the rules to the initial string. This value controls the growth of the L-system. Place a time-based function here to animate the L-system growth.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Random Scale",
"label": "Random Scale",
"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": "randscale - Random Scale as a percentage. This will apply a random scale to the changing geometry's lengths, angles and thickness.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Random Seed",
"label": "Random Seed",
"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": "randseed - Random Seed for the . This value can be used to select different sequences of random values.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Continuous Angles",
"label": "Continuous Angles",
"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": "contangl - Calculates the incremental angles of branches, if a non-integer generational value is used. If the Generations field is animating, this should be set to ensure smooth growth.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Continuous Length",
"label": "Continuous 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": "contlength - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Continuous Width",
"label": "Continuous Width",
"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": "contwidth - Calculates the incremental lengths of the geometry points if a non-integer generational value is used. As with Continuous Angles, if the Generations field is animating, this should be set to ensure smooth, continuous growth. The Continuous Width field applies to tube thickness.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Apply Color",
"label": "Apply Color",
"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": "docolor - Use a to apply color to the L-system as it grows.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Image File",
"label": "Image File",
"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": "colormap - Defines a to use when the Apply Color button is selected. Also see the ` and # turtle operators.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "UV Increment",
"label": "UV Increment",
"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": "inc - - Defines the default color U, V index increments when the turtle symbols ` or # are used.\n\nincu -incv -",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Point Width Attribute",
"label": "Point Width Attribute",
"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": "pointwidth - Adds a point width attribute to each point in the geometry. This width is effected by the Thickness and Thickness Scale parameters on the Tube Page.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Rows",
"label": "Rows",
"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": "rows - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Columns",
"label": "Columns",
"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": "cols - The first option sets the number of tube sides and the second sets the number of divisions per step length if tube geometry is selected.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Tension",
"label": "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 - Tension defines the smoothness of branching corners.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Branch Blend",
"label": "Branch Blend",
"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": "smooth - Enabling this option allows a child branch to be continuously joined to its parent branch.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Thickness",
"label": "Thickness",
"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": "thickinit - This number defines the default tube thickness.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Thickness Scale",
"label": "Thickness Scale",
"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": "thickscale - This number is the scale factor used with the ! or ? operator.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Apply Tube Texture Coordinates",
"label": "Apply Tube Texture Coordinates",
"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": "dotexture - When enabled, UV texture coordinates are applied to the tube segments, such that the texture wraps smoothly and continuously over branches.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Vertical Increment",
"label": "Vertical Increment",
"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": "vertinc - Defines the vertical spacing of texture coordinates over tube geometry when tube texture is applied.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Step Size",
"label": "Step Size",
"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": "stepinit - Step Size allows you to define the default length of the edges when new geometry is generated.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Step Size Scale",
"label": "Step Size Scale",
"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": "stepscale - Step Size Scale defines the scale by which the geometry will be modified by the \" or _ (double quote, or underscore) turtle operators.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Angle",
"label": "Angle",
"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": "angleinit - Angle defines the default turning angle for turns, rolls and pitches.",
"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-08T00:37:46.562Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Angle Scale",
"label": "Angle Scale",
"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": "anglescale - Angle Scale allows you to enter the scaling factor to be employed when the ; or @ operators are used.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Variable b",
"label": "Variable b",
"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": "varb - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Variable c",
"label": "Variable c",
"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": "varc - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Variable d",
"label": "Variable d",
"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": "vard - Substitutes user-defined b, c and d variables in rules or premise. These variables are expanded and so may include system variables such as $F and $T.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Gravity",
"label": "Gravity",
"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": "gravity - This parameter determines the amount of gravity applied to the geometry via the T (tropism vector) turtle operator. Tropism is when a plant bends or curves in response to an external stimulus. L-systems employ a tropism vector to simulate this behaviour. The bending is characterised by the fact that the thicker or shorter parts bend less than the longer or thinner parts.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Pic Image TOP",
"label": "Pic Image TOP",
"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": "pictop - This is the which the pic() function uses. See #Expressions L-system Specific Expression Functions below.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Group Prefix",
"label": "Group Prefix",
"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": "grpprefix - If the production g(n) is encountered, all subsequent geometry is included in a primitive group prefixed with this label and ending with the ascii value of n. See #CreateGroup Creating Groups within L-systems below for an example.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Channel Prefix",
"label": "Channel Prefix",
"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": "chanprefix - If the expression chan(n) is encountered, it is replaced with the local channel prefixed with this label and ending with the ascii value of n.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Leaf Param A",
"label": "Leaf Param A",
"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": "stampa - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Leaf Param B",
"label": "Leaf Param B",
"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": "stampb - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Leaf Param C",
"label": "Leaf Param C",
"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": "stampc - You can determine which parameters are used by leaves. See #CreateGroup Creating Groups within L-systems below for an example.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Rules DAT",
"label": "Rules DAT",
"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": "rules - to the defining the rules for the LSystem. \t\nContext Ignore context_ignore: - Defining this in the Rules specifies all characters which are to be skipped when testing context sensitivity in the rules below.\nPremise premise: - Define an initial string of characters to which the substitution rules are applied.\nRules - This is where the turtle substitution rules are defined.",
"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-08T00:37:46.563Z",
"rawData": {},
"sourceElement": null
}
],
"parameterGroups": {},
"codeExamples": [],
"pythonExamples": [],
"expressions": [],
"commonInputs": [],
"commonOutputs": [],
"relatedOperators": [],
"workflowPatterns": [],
"images": [],
"videos": [],
"assets": [],
"keywords": [
"lsystem",
"implements",
"l-systems",
"(lindenmayer-systems,",
"named",
"after",
"aristid",
"lindenmayer",
"(1925-1989)),",
"allow"
],
"tags": [
"SOP",
"TouchDesigner",
"LSystem"
],
"searchWeight": 1,
"contentHash": "",
"processingDate": "2025-08-08T00:37:46.564Z",
"processingVersion": "1.0.0",
"isValid": true,
"validationErrors": []
}