本文主要演示STAR-CCM+二次开发中将Java宏与按钮绑定的常见方式。
具体讲,就是通过自主编写的GUI界面中的按钮点击来触发相应Java宏脚本的运行。
在STAR-CCM+二次开发中,将Java宏与按钮绑定的常见方式有两种:一种是通过StarScript类完成;另一种是通过MacroPlaySpecifiedFileAction类来完成。
本文将用最简单的管道流案例,通过上述两种方式来运行迭代计算
的脚本文件。
//执行迭代计算的Java宏命令
public static class Run extends StarMacro{
@Override
public void execute() {
Simulation sim = getActiveSimulation();
//执行迭代计算
sim.getSimulationIterator().run();
}
}
首先看这个类的构造方法:
//第一种构造方法,通过指定文件来运行Java脚本
StarScript(RootObject root, File javaFile)
//第二种构造方法,这个没有看懂是什么意思,有懂的同学可以私信我
StarScript(RootObject root, File javaFile, ClassLoader aClassLoader)
//第三种构造方法,通过制定RootMacro实例对象来运行Java脚本
StarScript(RootObject root, RootMacro m)
再来看这个类最常用的实例方法:
//play方法,用于编译和执行Java宏
public void play()
最后看利用StarScript类来绑定Java宏和按钮的完整代码:
package my;
import star.common.Simulation;
import star.common.StarMacro;
import star.common.StarScript;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class StarScriptTest extends StarMacro {
//创建一个JFrame窗口
JFrame jf = new JFrame("运行计算");
//创建一个面板容器
JPanel jp = new JPanel();
//实现抽象方法execute
@Override
public void execute() {
init();
}
//创建GUI界面
public void init() {
//获取当前操作进程中的sim实例对象
Simulation sim = getActiveSimulation();
//设置JFrame窗口的关闭操作方式
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//新建一个JButton实例
JButton jb = new JButton("运行");
//设置窗口的最小尺寸
jf.setMinimumSize(new Dimension(200,200 ));
//设置按钮的最小尺寸
jb.setMinimumSize(new Dimension(100,100));
//将按钮jb添加到面板jp中
jp.add(jb);
//将面板jp添加到JFrame窗口jf中
jf.add(jp);
//设置按钮的显示文本
jb.setText("运行");
//给按钮添加监 听 器
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new StarScript(sim,new MacroRun()).play();
}
});
//调用pack方法,窗口将根据组件内容自动调整其框架的大小
jf.pack();
jf.setVisible(true);
}
public static class MacroRun extends StarMacro{
@Override
public void execute() {
Simulation sim = getActiveSimulation();
sim.getSimulationIterator().run();
}
}
}
下面,启动STAR-CCM+软件,点击工具栏中的宏播放按钮,选择上面的代码文件,可以得到如下图所示的执行效果,我们点击运行按钮,就可以执行迭代计算,但是执行过程中STAR-CCM+就像卡死了一样,完全没有反应,甚至多点几次窗口,还会出现整个STAR-CCM+窗口黑掉的现象,体验很差,不推荐使用。
同样,先看这个类的构造方法:
MacroPlaySpecifiedFileAction()
再看它的两个实例方法:
//动作执行方法
performAction()
//指定Java宏文件的方法
setFile(File file)
最后看利用MacroPlaySpecifiedFileAction来绑定Java宏和按钮的完整代码:
package my;
import star.common.StarMacro;
import star.coremodule.actions.MacroPlaySpecifiedFileAction;
import star.locale.annotation.StarAction;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.File;
public class runTest extends StarMacro {
//创建一个JFrame窗口
JFrame jf = new JFrame("运行计算");
//创建一个面板容器
JPanel jp = new JPanel();
@Override
public void execute() {
init();
}
public void init() {
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JButton jb = new JButton("运行");
jf.setMinimumSize(new Dimension(200, 200));
jb.setMinimumSize(new Dimension(100,100));
jp.add(jb);
jf.add(jp);
MyMacroPlaySpecificFileAction macroRun = new MyMacroPlaySpecificFileAction("替换成加载java宏文件的绝对路径");
jb.setAction(macroRun);
jb.setText("运行");
jf.pack();
jf.setVisible(true);
}
//注解类StarAction,写一些提示信息
@StarAction(display = "hello", hint = "Runs an element of the Sloshing Wizard")
//创建一个MyMacroPlaySpecificFileAction类,继承MacroPlaySpecificFileAction
public static class MyMacroPlaySpecificFileAction extends MacroPlaySpecifiedFileAction {
public static String path;
public MyMacroPlaySpecificFileAction(String path) {
this.path = path;
}
@Override
public void actionPerformed(ActionEvent ev) {
setFile(new File(path));
super.actionPerformed(ev);
}
}
}
下面,启动STAR-CCM+软件,加载上述代码,执行的界面效果和第一种方式相同,但这个方式的优点是迭代计算的进度会实时显示在STAR-CCM+的用户界面中,用户体验非常棒,推荐使用。
StarScript和MacroPlaySpecifiedFileAction两个类都可以实现GUI界面按钮调用相应Java宏文件的功能,但二者的使用场景不同,StarScript适合后台脚本运行的场景,而MacroPlaySpecifiedFileAction更适合通过GUI界面调用Java宏的场景,运行流畅,显示信息丰富,用户体验更好。
你平时进行二次开发过程中调用Java宏都是用什么方法呢?欢迎找我交流。
希望以上内容能给你带来帮助,你的鼓励始终是我最大的动力!