首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scilab 6网关功能中修改Scilab/Xcos块

在Scilab 6网关功能中修改Scilab/Xcos块
EN

Stack Overflow用户
提问于 2020-11-24 14:39:34
回答 1查看 200关注 0票数 0

我想使用新的(非遗留的) Scilab API从网关函数中修改Xcos块,例如,用新的模型结构替换该块的模型属性。换句话说,执行与Scilab命令相同的操作:

代码语言:javascript
复制
m = scicos_model()
block.model = m

但是,我没有通过Scilab6API中的函数来实现这种行为:standard_define()创建的一个块被正确地传递给我的网关函数,在这里,这个参数可以作为scilabVar类型的128使用。另一方面,Scilab声称一个块是一个"scilab tlist类型的“块”字段:图形,模型,gui和文档“。

尝试

假设scilabVar block取自网关函数参数,字符串常量为wchar_t[]scilabVar model保存scicos_model()的结果

函数

  1. Application of scilab_setTListField (env, block, "model", model)返回错误状态(作为MListList do的等效值),在知道属性.model位于索引3的情况下,通过scilab_call ("setfield", ...)调用的setfield (3, model, block)也会失败。这并不奇怪:当直接从Scilab命令行调用时,它以possible.

结束。然而,

  • 可以工作,因此至少读取对块的数据字段的访问是

  1. 一个外部辅助函数函数块= blockSetModel (块,模型) block.model =模型端点函数

此外,通过scilab_call("blockSetModel", ...)调用的代码实际上返回一个模型已更改的块,但传递给该函数的原始块保持不变。虽然很难看,但这至少给出了一种构建需要作为copy.返回的单个块结构的方法。

摘要

  • ,那么,API中是否缺少一个函数,它返回类型128指针变量后面的TList (或其他什么)?
  • ,还是有其他方法解决这个问题?

背景

背后的目标是将块定义任务从通常的接口"gui“函数(例如Scilab脚本MyBlock.sci)移到自己的C代码中。为此,接口函数简化为C网关的包装器,例如,C网关使用scilab_call ("standard_define",...)在使用参数job=="define"调用时创建一个新块。通过Scilab修改包含的modelgraphics对象很好,因为这些都是标准的列表类型。但是,如前所述,获取或将这些对象设置为原始块的属性.model.graphics失败。

EN

回答 1

Stack Overflow用户

发布于 2020-11-27 08:41:05

从Scilab/Xcos 6.0.0开始,块后面的数据结构不再是MList (或TList),因此不能将模型升级到自己的MList。后面的所有数据都是在C++编码的Block.hxx中使用经典的MVC存储的。

每次尝试时,序列化/反序列化都会将块模型字段重构为Scilab值。

您能描述一下您想要添加/编辑的关于块结构的哪种字段吗?一些预定义的字段可能足以传递额外的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64988755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档