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

如何在MagicDraw中不依赖MATLAB绘制3D散点图?

解决方案:MagicDraw 不透明语言绘制3D散点图(非MATLAB方案)

一、原代码报错原因分析

你遇到的unable to resolve class Plot3DPanel错误主要来自三个问题:

  1. Jar包未被正确加载:MagicDraw仅在启动时加载lib目录下的Jar包,放入jmathplot.jar后未重启软件,导致类无法被识别。
  2. 依赖缺失:jmathplot依赖jfreechart.jar和jcommon.jar,仅放入单个Jar包无法满足类加载要求。
  3. 脚本写法不符合MagicDraw执行逻辑:不透明行为中的Groovy是直接执行脚本内容,无需包裹类和main方法,原代码的类结构会导致核心逻辑未被触发。

二、修复jmathplot方案步骤

1. 准备完整依赖包

将以下Jar包放入MagicDraw安装目录的lib文件夹:

  • jmathplot.jar
  • jfreechart.jar
  • jcommon.jar

2. 重启MagicDraw

确保Jar包被加载到类路径中。

3. 修改Groovy脚本(直接执行版)

删除类和main方法,直接编写执行代码,同时替换窗口关闭逻辑避免误关MagicDraw:

import org.math.plot.Plot3DPanel
import javax.swing.JFrame

// 替换为活动图中获取的实际数据
double[] x = [1, 2, 3, 4, 5] as double[]
double[] y = [5, 4, 3, 2, 1] as double[]
double[] z = [10, 20, 30, 40, 50] as double[]

Plot3DPanel plot = new Plot3DPanel()
plot.addScatterPlot("3D Scatter Plot", x, y, z)
plot.setAxisLabel(0, "X Axis")
plot.setAxisLabel(1, "Y Axis")
plot.setAxisLabel(2, "Z Axis")

JFrame frame = new JFrame("3D Scatter Plot Example")
frame.setContentPane(plot)
frame.setSize(600, 600)
frame.setVisible(true)
// 使用DISPOSE_ON_CLOSE,关闭图表时不终止MagicDraw进程
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)

三、更稳定的内置Jar方案(利用MagicDraw自带jide-charts)

你发现的jide-charts-3.7.12.jar是MagicDraw内置的图表库,无需额外导入Jar包,兼容性更好,直接使用以下代码:

import com.jidesoft.chart.Chart3D
import com.jidesoft.chart.ChartPanel
import com.jidesoft.chart.model.DefaultChartModel
import com.jidesoft.chart.render.ScatterRenderer3D
import javax.swing.JFrame

// 从活动图输入引脚获取数据的话,可直接替换此处的示例数据
def scatterData = [
    [1, 5, 10],
    [2, 4, 20],
    [3, 3, 30],
    [4, 2, 40],
    [5, 1, 50]
]

// 创建3D图表模型
DefaultChartModel model = new DefaultChartModel()
scatterData.each { point ->
    model.addPoint(point[0], point[1], point[2])
}

// 配置3D散点图渲染器
Chart3D chart = new Chart3D(model)
chart.setRenderer(new ScatterRenderer3D())
chart.setXAxisLabel("X Axis")
chart.setYAxisLabel("Y Axis")
chart.setZAxisLabel("Z Axis")
chart.setTitle("SysML 3D Scatter Result")

// 窗口显示设置
ChartPanel panel = new ChartPanel(chart)
JFrame frame = new JFrame("Built-in 3D Scatter Plot")
frame.setContentPane(panel)
frame.setSize(600, 600)
frame.setVisible(true)
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)

四、活动图数据对接提示

若要将活动图中其他行为的结果传入图表:

  1. 在不透明行为的输入引脚定义变量(如xData、yData、zData,类型匹配数据结构)
  2. 在Groovy脚本中直接使用这些变量,替换示例中的硬编码数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:23:21