我想使用新的(非旧版)Scilab API 从网关函数中修改Xcos 块,例如,用新的模型结构替换块的模型属性。换句话说,执行与 Scilab 命令相同的操作:
m = scicos_model()
block.model = m
但是,我没有设法使用 Scilab 6 API 中的函数实现此行为:由创建的块standard_define()
正确传递给我的网关函数,其中此参数可用作scilabVar
type 128
。另一方面,Scilab 帮助声称块是“类型为“块”的scilab tlist,具有以下字段:图形、模型、gui 和 doc ”。
尝试
假设scilabVar block
取自网关函数参数,类型为 的字符串常量wchar_t[]
,scilabVar model
其结果为scicos_model()
:
- 函数的应用
scilab_setTListField (env, block, "model", model)
返回错误状态(作为MList
和List
do 的等价物) - 知道该属性
.model
位于索引 3 处,通过setfield (3, model, block)
调用scilab_call ("setfield", ...)
也会失败。- 这并不奇怪:当直接从 Scilab 命令行调用时,它以
setfield: Wrong type for input argument #3: List expected.
. - 但是,a
getfield (3, block)
有效,因此至少可以读取块的数据字段。
- 这并不奇怪:当直接从 Scilab 命令行调用时,它以
- 外部辅助函数
也调用 throughfunction block = blockSetModel (block, model) block.model = model endfunction
scilab_call("blockSetModel", ...)
实际上返回一个具有更改模型的块,但传递给此函数的原始块保持不变。虽然丑陋,但这至少提供了一种构建需要作为副本返回的单独块结构的方法。
概括
- 那么,API 中是否缺少一个函数,它返回类型指针变量
TList
后面的(或其他) ?128
- 或者有没有其他方法可以解决我无法发现的这个问题?
背景
背后的目标是将块定义任务从通常的接口“gui”函数(例如 Scilab 脚本MyBlock.sci
)转移到自己的 C 代码中。为此,接口函数被简化为 C 网关的包装器,例如,scilab_call ("standard_define",...)
当使用参数调用时,它用于创建新块job=="define"
。通过 Scilab API修改包含对象model
和graphics
对象可以正常工作,因为这些是标准列表类型。但是,如上所述,将这些对象获取或设置为属性.model
和原始块的失败。.graphics