Cameo Systems Modeler:如何用图例自动为状态机转换按信号着色
在Cameo Systems Modeler中按触发信号为状态机转换着色的方案
方案一:用Legend的「Elements by Condition」结合OCL筛选
这是你尝试的方向,核心是用OCL表达式精准匹配触发特定SignalEvent的Transition:
- 打开Legend面板,点击「Add Legend Item」
- 在「Apply To」区域选择「Elements by Condition」,目标元素类型选「Transition」
- 在「Condition」输入框中输入对应信号的OCL表达式:
- 匹配触发Top信号的Transition:
self.trigger->exists(t | t.event.oclIsKindOf(SignalEvent) and t.event.name = 'Top') - 匹配Middle信号:把表达式里的
'Top'换成'Middle' - 匹配Bottom信号:换成
'Bottom'
- 匹配触发Top信号的Transition:
- 给每个图例项设置专属颜色(比如Top用橙色、Middle用蓝色、Bottom用绿色)
- 重复上述步骤,为三个信号分别创建图例项
注:OCL表达式的逻辑是检查当前Transition的触发集合中,是否存在关联目标SignalEvent的触发项。如果你的Transition只有单个触发信号,这个表达式完全适用;如果有多个触发,可调整为
self.trigger->forAll(t | t.event.name = 'Top')来匹配所有触发都是Top信号的情况。
方案二:自定义属性+简化条件筛选
如果觉得OCL太繁琐,可以用自定义属性简化筛选:
- 打开「Settings > Project Settings > Stereotypes」,创建一个名为
SignalTriggered的构造型,添加字符串属性signalName,并将构造型应用到Transition元类 - 给每个Transition应用
SignalTriggered构造型,在属性栏设置signalName为对应的信号名(Top/Middle/Bottom) - 在Legend中设置条件为:
self.signalName = 'Top' - 同样为三个信号分别配置颜色即可
方案三:直接样式批量应用(快速直观)
如果不需要自动动态匹配,手动批量设置样式更直接:
- 按住Ctrl选中所有触发Top信号的Transition,右键选择「Format > Line」设置颜色
- 点击「Style > Save as Style Template」,将这个样式保存为「TopSignalTransition」,之后遇到同类型Transition直接右键应用模板即可
内容的提问来源于stack exchange,提问作者Phil Hoff
相关产品推荐
相关产品推荐

