本文以一个简单的案例描述STAR CCM+中Macro的录制过程。
本案例演示以下过程:
本案例模型在STAR CCM+中创建。
File → Macro → Start Recording
,或点击工具栏Start Recording
按钮,在打开的文件保存对话框中指定保存的宏文件为createGeometry.java
此时可以用文本编辑器打开之前创建的createGeometry.java文件,查看里面所记录的内容。删掉其中一些没有用的语句,并对程序进行重构整理,该整理成函数的整理成函数,该参数化的参数化。这里要参数化的变量很少,只有半径和长度两个物理量。
注意:由于每一步操作均会生成java语句,因此为避免生成过多没用的语句,建议在正式录制之前多练习几遍,务求尽可能少一些无用操作,尤其是一些视图操作。
”
操作录制完毕后,可以打开录制生成的Java代码,删除其中的一些无效操作(如重复操作、视图操作等),并进行测试。
经过删减后的Java代码如下:
// Simcenter STAR-CCM+ macro: createGeometry.java
// Written by Simcenter STAR-CCM+ 18.02.008
package macro;
import java.util.*;
import star.common.*;
import star.base.neo.*;
import star.vis.*;
import star.cadmodeler.*;
public class createGeometry extends StarMacro {
public void execute() {
execute0();
}
private void execute0() {
Simulation simulation_0 = getActiveSimulation();
Scene scene_0 = simulation_0.getSceneManager().createScene("3D-CAD View");
scene_0.initializeAndWait();
CadModel cadModel_0 = simulation_0.get(SolidModelManager.class).createSolidModel(scene_0);
cadModel_0.resetSystemOptions();
scene_0.openInteractive();
scene_0.setAdvancedRenderingEnabled(false);
// draw sketch
CanonicalSketchPlane canonicalSketchPlane_0 = ((CanonicalSketchPlane) cadModel_0.getFeature("XY"));
Sketch sketch_0 = cadModel_0.getFeatureManager().createSketch(canonicalSketchPlane_0);
cadModel_0.allowMakingPartDirty(false);
cadModel_0.getFeatureManager().startSketchEdit(sketch_0);
Units units_0 = simulation_0.getUnitsManager().getPreferredUnits(Dimensions.Builder().length(1).build());
// radius = 0.01
CircleSketchPrimitive circleSketchPrimitive_0 = sketch_0.createCircle(new DoubleVector(new double[]{0.0, 0.0}), 0.130384048104053);
RadiusDimension radiusDimension_0 = sketch_0.createRadiusDimension(circleSketchPrimitive_0, 0.01, units_0);
//extrude sketch_0
ExtrusionMerge extrusionMerge_0 = cadModel_0.getFeatureManager().createExtrusionMerge(sketch_0);
extrusionMerge_0.getDistance().setValueAndUnits(1.0, units_0);
cadModel_0.getFeatureManager().execute(extrusionMerge_0);
star.cadmodeler.Body cadmodelerBody_0 = ((star.cadmodeler.Body) extrusionMerge_0.getBody(circleSketchPrimitive_0));
cadModel_0.createParts(new NeoObjectVector(new Object[]{cadmodelerBody_0}), new NeoObjectVector(new Object[]{}), true, false, 1, false, false, 3, "SharpEdges", 30.0, 2, true, 1.0E-5, false);
// split Default wall
SolidModelPart solidModelPart_0 = ((SolidModelPart) simulation_0.get(SimulationPartManager.class).getPart("Body 1"));
PartSurface partSurface_0 = ((PartSurface) solidModelPart_0.getPartSurfaceManager().getPartSurface("Default"));
PartCurve partCurve_0 = ((PartCurve) solidModelPart_0.getPartCurveManager().getPartCurve("Default"));
solidModelPart_0.getPartSurfaceManager().splitPartSurfacesByPartCurves(new NeoObjectVector(new Object[]{partSurface_0}), new NeoObjectVector(new Object[]{partCurve_0}));
partSurface_0.setPresentationName("wall");
PartSurface partSurface_1 = ((PartSurface) solidModelPart_0.getPartSurfaceManager().getPartSurface("Default 2"));
partSurface_1.setPresentationName("inlet");
PartSurface partSurface_2 = ((PartSurface) solidModelPart_0.getPartSurfaceManager().getPartSurface("Default 3"));
partSurface_2.setPresentationName("outlet");
// assign region
simulation_0.getRegionManager().newRegionsFromParts(new NeoObjectVector(new Object[]{solidModelPart_0}), "OneRegionPerPart", null, "OneBoundaryPerPartSurface", null, RegionManager.CreateInterfaceMode.BOUNDARY, "OneEdgeBoundaryPerPart", null);
}
}
Macro清理时注意:
(完)