首页/文章/ 详情

STAR-CCM+二次开发:将Java宏与按钮绑定的常见方式

1年前浏览5526

本文主要演示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();
       }
   }

StarScript

首先看这个类的构造方法:

//第一种构造方法,通过指定文件来运行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

同样,先看这个类的构造方法:

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+的用户界面中,用户体验非常棒,推荐使用。

 

总结

StarScriptMacroPlaySpecifiedFileAction两个类都可以实现GUI界面按钮调用相应Java宏文件的功能,但二者的使用场景不同,StarScript适合后台脚本运行的场景,而MacroPlaySpecifiedFileAction更适合通过GUI界面调用Java宏的场景,运行流畅,显示信息丰富,用户体验更好。

你平时进行二次开发过程中调用Java宏都是用什么方法呢?欢迎找我交流。

希望以上内容能给你带来帮助,你的鼓励始终是我最大的动力!


来源:CFD日志
二次开发
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-04-04
最近编辑:1年前
CFD日志
硕士 | CFD工程师 CFD仿真、风机设计、二次开发
获赞 240粉丝 2117文章 39课程 8
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈