ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TiXL 教程:使用 SetStringVar 在算子图中写入与传递字符串上下文变量

TiXL 教程:使用 SetStringVar 在算子图中写入与传递字符串上下文变量 音视频图形学桌面应用【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址https://gitcode.com/GitHub_Trending/t3/t3点击查看免费下载本文围绕 TiXL实时动态图形创作软件Lib.flow.context命名空间下的SetStringVar算子展开讲解如何将字符串值写入求值上下文EvaluationContext的变量字典并配合 GetStringVar 在算子图的后续节点读取该值实现跨算子的数据传递与状态共享。读完本文你将掌握 SetStringVar 全部输入参数含 SubGraph 临时作用域与 ClearAfterExecution 清理语义的用法、底层实现原理以及它与循环、示例工程配合的实战模式。算子定位上下文变量机制在 TiXL 中context求值上下文是单帧求值期间随算子图流动的数据载体。Lib.flow.context命名空间专门提供一组「读写上下文变量」的算子覆盖字符串、浮点、整型、布尔、矩阵、向量与对象等类型全部集中在 .help/docs/operators/lib/flow/context/README.md 的算子清单中写入侧SetStringVar、SetFloatVar、SetIntVar、SetBoolVar、SetMatrixVar、SetObjectVar、SetVec3Var读取侧GetStringVar、GetFloatVar、GetIntVar、GetBoolVar、GetMatrixVar、GetObjectVar、GetVec3Var其他GetForegroundColor获取前景色、GetPosition获取世界坐标/旋转/缩放、ExecuteRawBufferUpdate、SetRequestedResolutionCmdSetStringVar 的角色非常明确把给定的字符串值写入当前求值上下文的字符串变量字典供图中位于其下游更靠右的 GetStringVar 读取。官方文档同时指出配套的完整示例位于SetContextVariableExample其工程实现可见 Operators/examples/Symbols/lib/flow/context/SetContextVariableExample.cs对应的 .t3 / .t3ui 定义在同目录下适合直接打开 TiXL 观察变量如何在图中流动。输入参数详解SetStringVar 的全部输入参数如下表与官方文档一致并补充取值说明参数名类型说明StringValueString要写入变量的字符串值即变量将被赋予的新内容VariableNameString变量的名称。该名称将作为后续在图中引用的键读取侧必须使用完全一致的名称才能命中SubGraphCommand可选的子图输入。当该算子需要被接入 Execute 等命令算子之间、参与命令链执行时使用同时会引入「临时变量作用域」语义见下文源码解析ClearAfterExecutionBoolean布尔开关仅在接入 SubGraph 时生效用于控制子图执行完毕后是否保留所写入的变量见下文输出输出名类型OutputT3.Core.DataTypes.CommandOutput 类型为Command意味着 SetStringVar 本身是一个命令类算子它既可以独立放置在图中写入变量输出可不接仅利用副作用也可以串联进 Execute / 子图等命令链中作为流程中的一环执行写入动作。源码级实现解析SetStringVar 的实现位于 Operators/Lib/Symbols/flow/context/SetStringVar.cs算子通过InstanceSetStringVar基类注册携带两个 Guid算子9c9274c1-3f85-4f57-9eb5-1e0a0b1cce00输出d45a4915-fdd4-4adc-8083-fcd3d7466215。核心逻辑在输出插槽的Update回调中可以概括为几个关键行为1. 无效名称校验var name VariableName.GetValue(context); var newValue StringValue.GetValue(context); var clearAfterExecution ClearAfterExecution.GetValue(context); if (string.IsNullOrEmpty(name)) { Log.Warning($Cant set variable with invalid name {name}, this); return; }如果VariableName为空字符串或null算子会通过Log.Warning发出警告并直接返回不执行任何写入。这提醒使用者变量名是后续读取的唯一钥匙应保证其非空且拼写稳定。2. 无 SubGraph直接写入else { context.StringVariables[name] newValue; }当 SubGraph 未连接任何输入时行为最简单直接把name → newValue写入上下文字符串变量字典。写入后图中任何后续求值的 GetStringVar 都可以读到该值。3. 接入 SubGraph临时作用域语义if (SubGraph.HasInputConnections) { var hadPreviousValue context.StringVariables.TryGetValue(name, out var previous); context.StringVariables[name] newValue; SubGraph.GetValue(context); if (hadPreviousValue) { context.StringVariables[name] previous; } else if (!clearAfterExecution) { context.StringVariables.Remove(name); } }这是 SetStringVar 最值得注意的机制写入变量后立即执行 SubGraph 中的命令SubGraph.GetValue(context)使得该变量只在子图执行期间可见若写入前上下文中已存在同名变量hadPreviousValue true子图执行完毕后恢复原值相当于压栈/出栈若此前不存在该变量且ClearAfterExecution为假则子图执行完直接移除该变量避免污染后续求值若此前不存在且ClearAfterExecution为真变量则会被保留在上下文中继续生效。由此可以推断ClearAfterExecution的语义是「子图执行结束后是否保留本次写入的变量」它只有在 SetStringVar 作为命令链Execute 等一环、接入了 SubGraph 时才有实际意义。4. 变量存储位置与生命周期字符串变量最终存放在求值上下文的核心数据结构中。在 Core/Operator/EvaluationContext.cs 可以看到/// summary /// Used to store string vars /// /summary public Dictionarystring, string StringVariables { get; } new();且该上下文在每次求值开始时会被重置清空同文件约 L51-L55 处可见StringVariables.Clear()与 Float/Bool/Int/Object 各变量字典一同清理。也就是说上下文变量的生命周期是一帧每一帧重新求值时都会清空重来SetStringVar 与 GetStringVar 的配合始终在「同一帧内、写入侧位于读取侧左侧更早求值」的前提下成立。与 GetStringVar 配对使用SetStringVar 的文档明确要求要读取写入的值请在图中更下游的位置使用 GetStringVar。对应的读取算子实现在 Operators/Lib/Symbols/flow/context/GetStringVar.cs其读取逻辑为var variableName VariableName.GetValue(context); if (variableName ! null context.StringVariables.TryGetValue(variableName, out var value)) { Result.Value value; } else { Result.Value FallbackDefault.GetValue(context); }GetStringVar 的输入参数完整说明见 GetStringVar.md参数名类型说明VariableNameString要读取的变量名必须与 SetStringVar 写入时一致FallbackDefaultString当上下文中不存在该变量时的回退默认值实现中默认初始化为空字符串两个实用的配对细节变量名动态下拉GetStringVar 实现了ICustomDropdownHolder源码中 GetOptionsForInput 返回context.StringVariables.Keys在界面上点开 VariableName 输入时会列出当前上下文中已有的字符串变量名供选择降低手输拼写错误的风险。与 Loop 配合的注意事项GetStringVar 的官方文档特别强调——如果与 Loop 一起使用别忘了使用s作为归一化进度变量。这是因为 TiXL 的 Loop 算子约定用s传递归一化进度0~1在循环体内通过上下文变量交换数据时必须沿用该约定名才能正确读写。实战建议与同族算子使用顺序即求值顺序TiXL 算子图从左到右求值SetStringVar 必须位于读取它的 GetStringVar 左侧上游同时注意上下文变量每帧重置跨帧保存数据请改用其他持久化机制。善用 SubGraph 隔离当写入只是为某个局部流程服务的临时值时接入 SubGraph 并让ClearAfterExecution保持关闭可以让变量自动清理、不影响图中的其他分支。先看示例工程打开SetContextVariableExample工程定义观察官方推荐的接线方式再按需替换为字符串内容。如果需要传递其他类型的上下文变量可参考同目录下的 SetFloatVar、SetIntVar、SetBoolVar、SetMatrixVar、SetObjectVar、SetVec3Var 等算子见 Lib.flow.context 目录它们在读写模式、SubGraph 作用域与每帧重置语义上保持一致掌握了 SetStringVar 即掌握了整套上下文变量机制的使用套路。赞分享音视频图形学桌面应用【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址https://gitcode.com/GitHub_Trending/t3/t3点击查看免费下载相关推荐TiXL 中的 GetStringVar 算子通过 EvaluationContext 在节点图间传递字符串变量TiXL 中的 GetStringVar 算子通过 EvaluationContext 在节点图间传递字符串变量 GetStringVar 是 TiXL 的音视频图形学桌面应用TiXL SetBoolVar 算子详解通过上下文变量在节点图间传递布尔状态TiXL SetBoolVar 算子详解通过上下文变量在节点图间传递布尔状态 导读 SetBoolVar 是 TiXL 中 Lib.flow.context音视频图形学桌面应用TiXL Lib.flow.context 上下文变量操作符完全指南在节点图中传递数据与渲染状态TiXL Lib.flow.context 上下文变量操作符完全指南在节点图中传递数据与渲染状态 TiXLt3是一套用于实时动态图形创作的节点式操作符系统音视频图形学桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表