我想使用新的(非遗留的) Scilab API从网关函数中修改Xcos块,例如,用新的模型结构替换该块的模型属性。换句话说,执行与Scilab命令相同的操作:
m = scicos_model()
block.model = m但是,我没有通过Scilab6API中的函数来实现这种行为:standard_define()创建的一个块被正确地传递给我的网关函数,在这里,这个参数可以作为scilabVar类型的128使用。另一方面,Scilab声称一个块是一个"scilab tlist类型的“块”字段:图形,模型,gui和文档“。
尝试
假设scilabVar block取自网关函数参数,字符串常量为wchar_t[],scilabVar model保存scicos_model()的结果
函数
scilab_setTListField (env, block, "model", model)返回错误状态(作为MList和List do的等效值),在知道属性.model位于索引3的情况下,通过scilab_call ("setfield", ...)调用的setfield (3, model, block)也会失败。这并不奇怪:当直接从Scilab命令行调用时,它以possible.结束。然而,
此外,通过scilab_call("blockSetModel", ...)调用的代码实际上返回一个模型已更改的块,但传递给该函数的原始块保持不变。虽然很难看,但这至少给出了一种构建需要作为copy.返回的单个块结构的方法。
摘要
128指针变量后面的TList (或其他什么)?。
背景
背后的目标是将块定义任务从通常的接口"gui“函数(例如Scilab脚本MyBlock.sci)移到自己的C代码中。为此,接口函数简化为C网关的包装器,例如,C网关使用scilab_call ("standard_define",...)在使用参数job=="define"调用时创建一个新块。通过Scilab修改包含的model和graphics对象很好,因为这些都是标准的列表类型。但是,如前所述,获取或将这些对象设置为原始块的属性.model和.graphics失败。
发布于 2020-11-27 08:41:05
从Scilab/Xcos 6.0.0开始,块后面的数据结构不再是MList (或TList),因此不能将模型升级到自己的MList。后面的所有数据都是在C++编码的Block.hxx中使用经典的MVC存储的。
每次尝试时,序列化/反序列化都会将块模型字段重构为Scilab值。
您能描述一下您想要添加/编辑的关于块结构的哪种字段吗?一些预定义的字段可能足以传递额外的信息。
https://stackoverflow.com/questions/64988755
复制相似问题