You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OMNeT++序列图轴上显示文本与颜色?

在OMNeT++序列图轴上添加文本与颜色(参考INET MAC状态效果)

核心实现逻辑

OMNeT++序列图的轴文本/颜色标注,依赖模块状态变化时触发的标注事件,INET中MAC层的状态显示就是基于这个机制实现的——在状态切换时调用可视化API,向序列图轴添加带颜色的状态文本。

具体步骤

1. 在模块代码中触发状态标注

在目标模块(比如自定义MAC模块)的状态切换函数中,调用OMNeT++环境API添加序列图标注:

#include <omnetpp.h>
#include <inet/common/INETDefs.h>

using namespace omnetpp;
using namespace inet;

class YourMacModule : public cSimpleModule {
private:
    enum MacState { MAC_IDLE, MAC_TRANSMITTING, MAC_RECEIVING } currentState;

public:
    virtual void initialize() override;
    void changeMacState(MacState newState);
};

void YourMacModule::changeMacState(MacState newState) {
    currentState = newState;
    // 映射状态到文本和颜色
    std::string stateText;
    cFigure::Color stateColor;

    switch(newState) {
        case MAC_IDLE:
            stateText = "Idle";
            stateColor = cFigure::Color("limegreen");
            break;
        case MAC_TRANSMITTING:
            stateText = "Transmitting";
            stateColor = cFigure::Color("royalblue");
            break;
        case MAC_RECEIVING:
            stateText = "Receiving";
            stateColor = cFigure::Color("darkorange");
            break;
    }

    // 向序列图轴添加标注
    getEnvir()->addSequenceChartAnnotation(this, stateText.c_str(), stateColor);
}
  • addSequenceChartAnnotation()参数说明:
    • 第一个参数:当前模块指针(this),指定标注绑定的轴
    • 第二个参数:状态文本内容
    • 第三个参数:轴背景颜色(支持颜色名、RGB值等)

2. 仿真配置.ini文件设置

确保启用事件日志记录(序列图依赖事件日志),并配置默认显示选项:

[General]
network = YourCustomNetwork
record-eventlog = true
eventlog-file = ${resultdir}/${configname}-${runnumber}.elog

# 序列图默认显示配置(也可在仿真后手动调整)
seqchart-defaults = "showAxisAnnotations=true; axisAnnotationHeight=22; axisAnnotationFont=Arial,10"

3. 查看效果

启动仿真后,打开Sequence Chart窗口(菜单栏:Window > Sequence Chart),选中目标模块的轴,即可看到状态文本与对应颜色的背景条,和INET示例的MAC状态效果一致。

进阶:自定义标注样式

如果需要更精细的样式控制(比如字体加粗、文本对齐),可以使用带Display String的重载API:

std::string displayStr = fmt::format(
    "text={}; bgColor={}; font=Arial,10,bold; textAlign=center",
    stateText, stateColor.str()
);
getEnvir()->addSequenceChartAnnotation(this, displayStr.c_str());

内容的提问来源于stack exchange,提问作者AMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:57:30