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

Cameo 2021x插件开发:通过OpenAPI设置依赖矩阵行/列范围

解决Cameo Systems Modeler 2021x Refresh2依赖矩阵行/列范围设置问题

1. 标准稳定的OpenAPI实现方式

在CSM 2021x Refresh2中,官方公开API推荐通过DependencyMatrixDiagram类结合范围相关API设置行/列范围,避免依赖FilterSettings这类未公开内部类。若该API受限,也可通过操作矩阵图的构造型标记值实现,这是兼容性更强的 fallback 方案。

2. 实现方案选择

  • 优先使用DependencyMatrixDiagram公开API,这是官方推荐的稳定方式;
  • 若API无法访问,可通过StereotypesHelper手动设置构造型标记值,该方式不依赖内部类,适配性更好。

代码片段1:使用公开API设置范围

import com.nomagic.magicdraw.core.Application;
import com.nomagic.magicdraw.core.Project;
import com.nomagic.magicdraw.dependencymatrix.DependencyMatrixDiagram;
import com.nomagic.magicdraw.dependencymatrix.scope.Scope;
import com.nomagic.magicdraw.dependencymatrix.scope.ScopeFactory;
import com.nomagic.magicdraw.diagrams.DiagramPresentationElement;
import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Package;

public class DependencyMatrixScopeSetter {
    public static void setMatrixScope(DiagramPresentationElement matrixDiagram, Package rowScopePackage, Package columnScopePackage) {
        Project project = Application.getInstance().getProject();
        if (!(matrixDiagram instanceof DependencyMatrixDiagram)) {
            throw new IllegalArgumentException("传入的图不是依赖矩阵图");
        }

        DependencyMatrixDiagram dmDiagram = (DependencyMatrixDiagram) matrixDiagram;

        // 创建行范围:指定目标Package作为范围根元素
        Scope rowScope = ScopeFactory.createScope(project, rowScopePackage);
        // 创建列范围:指定目标Package作为范围根元素
        Scope columnScope = ScopeFactory.createScope(project, columnScopePackage);

        // 为矩阵设置行/列范围
        dmDiagram.setRowScope(rowScope);
        dmDiagram.setColumnScope(columnScope);

        // 触发矩阵刷新计算
        dmDiagram.update();
    }
}

代码片段2:手动设置构造型标记值(兼容方案)

如果DependencyMatrixDiagram相关API无法访问,可直接操作依赖矩阵图的构造型属性:

import com.nomagic.magicdraw.core.Application;
import com.nomagic.magicdraw.core.Project;
import com.nomagic.magicdraw.diagrams.DiagramPresentationElement;
import com.nomagic.uml2.ext.jmi.helpers.StereotypesHelper;
import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Package;
import com.nomagic.uml2.ext.magicdraw.mdprofiles.Stereotype;

import java.util.Collections;

public class DMMarkedValueScopeSetter {
    public static void setMatrixScopeViaMarkedValue(DiagramPresentationElement matrixDiagram, Package rowScopePackage, Package columnScopePackage) {
        Project project = Application.getInstance().getProject();
        // 获取Cameo内置的DependencyMatrix构造型
        Stereotype dmStereotype = StereotypesHelper.getStereotype(project, "DependencyMatrix", "DependencyMatrixProfile");
        if (dmStereotype == null) {
            throw new IllegalStateException("无法找到DependencyMatrix构造型");
        }

        // 设置行范围:传入目标元素列表
        StereotypesHelper.setStereotypePropertyValue(matrixDiagram, dmStereotype, "rowScope", Collections.singletonList(rowScopePackage));
        // 设置列范围:传入目标元素列表
        StereotypesHelper.setStereotypePropertyValue(matrixDiagram, dmStereotype, "columnScope", Collections.singletonList(columnScopePackage));

        // 刷新矩阵图
        matrixDiagram.getDiagram().refresh();
    }
}

注意事项

  • 插件需在plugin.xml中声明依赖com.nomagic.magicdraw.dependencymatrix模块;
  • 标记值方案中,DependencyMatrixProfile是Cameo内置配置文件,构造型及属性名称在2021x版本中保持稳定;
  • 设置范围后必须调用update()或refresh()触发矩阵重新计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 23:12:43