首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建的模块的可视化

动态创建的模块的可视化
EN

Stack Overflow用户
提问于 2021-04-13 18:56:54
回答 1查看 89关注 0票数 0

我正在用OMNeT构建一个动态的多智能体模拟,为此,我必须在运行时创建新的模块。模块创建工作正常,但是,在运行时创建的模块不会显示在3D可视化中。

module "node" is created sucessfully

有谁知道如何让模块出现在可视化中吗?我必须更新可视化模块吗?

omnet.ini:

代码语言:javascript
复制
[General]
network = AgentNetwork

*.visualizer.osgVisualizer.typename = "IntegratedOsgVisualizer"
*.visualizer.*.mobilityVisualizer.animationSpeed = 1
*.visualizer.osgVisualizer.sceneVisualizer.typename = "SceneOsgEarthVisualizer"
*.visualizer.osgVisualizer.sceneVisualizer.mapFile = "hamburg.earth"

AgentSpawner:

代码语言:javascript
复制
void AgentSpawner::initialize()
{
    cMessage *timer = new cMessage("timer");
    scheduleAt(1.0, timer);
}

void AgentSpawner::handleMessage(cMessage *msg)
{
        cModuleType *moduleType = cModuleType::get("simulations.Agent");
        cModule *module = moduleType->create("node", getParentModule());

        // set up parameters and gate sizes before we set up its submodules
        module->par("osgModel") = "3d/glider.osgb.(20).scale.0,0,180.rot";
        module->getDisplayString().parse("p=200,100;i=misc/aircraft");
        module->finalizeParameters();

        // create internals, and schedule it
        module->buildInside();
        module->callInitialize();
        module->scheduleStart(simTime()+5.0);
}
EN

回答 1

Stack Overflow用户

发布于 2021-04-22 16:51:40

OSG可视化信息与实际的模拟模型模块对象完全分开维护(这是因为可视化在模拟中必须始终是可选的,因此请确保在完全关闭OSG的情况下很好地构建模拟)。这意味着在初始化时期间将构建与现有网络节点完全不同的数据结构。由于这只在初始化期间执行一次,因此动态创建的模块将不具有其可视化副本数据结构。

创建相应对象的代码是here

解决方案是在AgentSpawner代码中查找NetworkNodeOsgVisualizer模块,然后创建并添加相应的数据结构(NetworkNodeOsgVisualization对象)。所需的方法(create和add)是there,但遗憾的是它们是受保护的,因此您可能需要修改INET代码并使它们成为公共的,以便能够调用它们。

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

https://stackoverflow.com/questions/67073533

复制
相关文章

相似问题

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