首页/文章/ 详情

STAR CCM+二次开发|04 基于IDEA开发

1年前浏览3303

利用前文所述的方式录制Java代码。下文描述在IDEA中构建GUI窗体并集成流程代码的基本过程。

IDEA的友好度比NetBean强多了。

1 创建项目

  • 启动IDEA,在启动界面点击按钮New Project
  • 设置工程名为MarcoDemo,其他参数如下图所示点击Create按钮创建新的Project

2 创建GUI界面

最近版本的IDEA中内置了GUI创建功能,可以利用此功能创建GUI界面。

 

注:内置GUI设计器制作常规的工作界面较为方便,但用于STAR CCM+开发不是很方便。建议使用JFormDesign插件进行GUI开发。

  • 鼠标右键选择模型树节点src,点击菜单项New → Swing UI Desinger → GUI Form
  • 在弹出的对话框中指定名称为MacorWindow,点击按钮OK完成创建
  • 利用控件构建如图所示的GUI界面。这里可以根据自己的喜好随意创建界面。
  • 修改窗体变量名称为JMacroWindow,相同方式设置管道长度后的文本框变量名称为JTextField_PipeLength,设置管道半径文本框名称为JTextField_PipeRadius,设置创建几何按钮的变量名称为JButton_CreateGeometry
  • 鼠标右键点击按钮创建几何,选择弹出菜单Create Listener
  • 选择ActionListener
  • 弹出的对话框中选择默认参数,如下图所示,点击OK按钮

3 添加库

  • 点击菜单File → Project Structure...打开设置对话框
  • 打开Global Libraries,右键选择STAR CCM2302,点击菜单项Add to Modules...
  • 选择将库添加到模块中
  • 进入Modules设置,如下图所示,勾选STAR CCM2302前面的复选框添加库
  • 添加完毕后,STAR CCM302会自动添加到树形菜单中

4 编写代码

1、自动生成UI代码

  • 右键点击代码区的空白位置,选择弹出菜单项Generate...
  • 弹出的对话框中选择Form main(),自动生成main函数
  • 在代码区空白位置点击右键,选择菜单项Run 'MacroWindow.main()'

此时软件会自动生成与界面相关的代码,其名称为$$$setupUI$$$。这里可以修改其名称,不过每次运行时都会自动生成相同的名称。

  • 删除main函数。main函数在案例中是多余的,生成main函数的目的仅为产生setupUI函数。

2、添加成员变量及构造函数

  • 双击创建几何按钮进入代码编辑,如下图所示,添加引用及代码:

import star.common.Simulation;
private Simulation sim = null;

public MacroWindows(Simulation Simlocal){
    $$$setupUI$$$();
    this.sim = Simlocal;
    ...
}

这里在构造函数中添加了一个成员变量。添加完毕后如下图所示。

3、封装函数

下面回到MacroWindows类中添加功能。录制的宏文件很长而且没有参数化,这里需要将其封装成一个函数,包含两个参数:管道的长度及管道的半径。

  • 在MacroWindows类中创建函数createPipe,将录制的java文件内容粘贴进去,注意修改代码中管道半径及长度的位置

    • 将代码中的所有simulation_0替换为this.sim

    • 注释掉或直接删除Simulation this.sim = getActiveSimulation();

privite void createPipe(double radius, double length){
     ...
   //创建半径为radius的圆
   RadiusDimension radiusDimension_0 =
     sketch_0.createRadiusDimension(circleSketchPrimitive_0, radius, units_0);
     ...
   //设置拉伸长度为length
  extrusionMerge_0.getDistance().setValue(length,units_0);
   ...
}
  • 修改类中的actionPerformed函数
JButton_CreateGeometry.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent e) {
       double radius = 0.01;
       double length = 1.0;
       try{
           radius = Double.valueOf(JTextField_PipeRadius.getText());
       }catch (NumberFormatException ex){
           radius = 0.01;
       }

       try {
           length = Double.valueOf(JTextField_PipeLength.getText());
       } catch (NumberFormatException ex) {
           length = 0.1;
       }
       createPipe(radius, length);
   }
});

下面创建一个启动类(启动类可以直接使用录制的java代码,也可以新建一个类)。

  • 创建Macro类RunMacro。右键选择树形节点Macro,选择菜单New > Java Class...
  • 如下图所示,创建新的类命名为RunMacro
  • RunMacro类的内容如下:
import javax.swing.JFrame;
import star.common.Simulation;
import star.common.StarMacro;

public class RunMacro extends StarMacro{
   @Override
   public void execute() {
       Simulation sim = this.getActiveSimulation();
       JFrame frame = new JFrame("MacroWindow");
       frame.setContentPane(new MacroWindow(sim).JMacroWindow);
       frame.pack();
       frame.setVisible(true);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   }

}

5 流程测试

  • 启动STAR CCM+,新建一个工程文件

  • 选择菜单Tool> Options,选择Environment,设置User Macro ClassPath为前面创建工程的路径,如下图所示,点击Close按钮关闭对话框

 
  • 选择启动宏按钮,选择宏文件RunMacro.java,运行结果如图所示。
 
  • 点击按钮创建几何,程序自动生成几何模型
 

这种开发方式比较简单,但最大的缺点是所有的源文件都是公开的。

6 开发总结

IDEA的GUI代码并不是实时更新的,其必须在有main函数存在的情况下,运行时才会自动更新生成的GUI代码,也就是说,当界面被改变时,需要利用main函数运行一次程序才能更新GUI代码,好奇怪的操作逻辑。另外IDEA开发的界面中若存在中文字符,在STAR CCM+中运行时可能会出现乱码。

也可以在IDEA中安装插件JFormDesigner来开发GUI界面,不过这插件是收费的,网络上倒是提供了不少的解决方式,可自行搜索。下一篇文章再讲怎么使用JFormDesinger进行开发。


(完)


来源:CFD之道
Marc二次开发
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-05-29
最近编辑:1年前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2578粉丝 11415文章 744课程 27
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈