要真正学会STAR-CCM+二次开发,就得从API接口学起,需要下点苦功夫,一步一步来,“慢就是快”!
本文通过创建一个U形管道来演示STAR-CCM+中常见几何创建类的用法。
在进行三维几何模型创建过程中主要使用的类是CadModel,类的两大成员就是属性和方法,其中属性在二次开发中很少用到,需要重点关注常用的方法,这里列举了CadModel中两个常用的方法:getFeature和getFeatureManager,因为使用getFeatureManager方法可以返回FeatureManage的实例对象,所以这里一并列举了FeatureManager的常用方法,帮助我们快速掌握创建草图及特征的方法。
本文利用IDEA编写了创建U形管的Java代码,具体如下,每一句都有比较详细的注释,如果有不懂的可以后台私信我,只要看见的并且我也会的都会回答,如果你没有等到回复,也可以尝试问问ChatGPT,我遇到不懂的也会问它,真的很方便。
import star.base.neo.DoubleVector;
import star.cadmodeler.*;
import star.common.Simulation;
import star.common.StarMacro;
import star.vis.CurrentView;
import star.vis.Scene;
public class UPipeGenerate extends StarMacro {
@Override
public void execute() {
execute0();
}
public void execute0(){
//定义U形管的几何尺寸
double l = 0.26;//直段长度
double x = 0.24;//进出口圆心距离
double r = 0.02;//圆管半径
//获取当前的sim文件
Simulation sim = getActiveSimulation();
//创建一个视图用于显示三维模型的创建过程
Scene scene = sim.getSceneManager().createScene("3D-CAD veiw");
//初始化视图并等待
scene.initializeAndWait();
scene.openInteractive();
//新建一个“3D-CAD Model”
CadModel model = sim.get(SolidModelManager.class).createSolidModel(scene);
//创建一个草图
//先获取草图基准面:YZ平面
CanonicalSketchPlane planeYZ = (CanonicalSketchPlane) model.getFeature("YZ");
Sketch sketch = model.getFeatureManager().createSketch(planeYZ);
//启动草图编辑
model.getFeatureManager().startSketchEdit(sketch);
//创建直线段1
LineSketchPrimitive line1 =
sketch.createLine(new DoubleVector(new double[] {-x/2, l}), new DoubleVector(new double[] {-x/2, 0}));
//创建直线段2
LineSketchPrimitive line2 =
sketch.createLine(new DoubleVector(new double[]{x/2,l}),new DoubleVector(new double[]{x/2,0}));
//创建半圆
CircularArcSketchPrimitive arc =
sketch.createCircularArc(new DoubleVector(new double[]{0,0}),line1.getEndPoint(),line2.getEndPoint());
//结束草图绘制
model.getFeatureManager().stopSketchEdit(sketch);
//创建草图平面
UserSketchPlane plane1 = model.getFeatureManager().createPlaneByDefinition();
//获取参考坐标系
CanonicalReferenceCoordinateSystem coordinateSystem =
((CanonicalReferenceCoordinateSystem) model.getFeature("Lab Coordinate System"));
//设置plane1的坐标源,有两种方式:1是导入的方式,2是参考坐标系
plane1.setCoordinateSystemSourceOption(1);
//plane1的参考坐标系
plane1.setReferenceCoordinateSystem(coordinateSystem);
//设置plane1的坐标原点为line1的起点
plane1.getLocalOrigin().setValue(new DoubleVector(new double[]{0,-x/2,l}));
model.getFeatureManager().execute(plane1);
//在plane1上作图
Sketch sketch2 = model.getFeatureManager().createSketch(plane1);
//开始编辑草图
model.getFeatureManager().startSketchEdit(sketch2);
//画个圆
CircleSketchPrimitive circle = sketch2.createCircle(new DoubleVector(new double[]{0,0}),r);
//结束草图编辑
model.getFeatureManager().stopSketchEdit(sketch2);
//创建扫掠特征
SweepMerge sweepMerge = model.getFeatureManager().createSweepMerge(sketch2,sketch);
model.getFeatureManager().execute(sweepMerge);
//修改视角,便于观察创建好的几何模型
CurrentView view = scene.getCurrentView();
view.setInput(new DoubleVector(new double[] {-0.01828077219230817, 0.05115361774682087, 0.05777722455802006}),
new DoubleVector(new double[] {1.228501994806741, 0.2632547319482483, 0.21561062404762543}),
new DoubleVector(new double[] {-0.13331628974488396, 0.046996041242220205, 0.9899586551953785}),
0.4947441872638225, 0, 30.0);
}
}