STAR CCM+二次開發(fā)|02 Macro錄制
瀏覽:3942 評(píng)論:2 收藏:9
本文以一個(gè)簡(jiǎn)單的案例描述STAR CCM+中Macro的錄制過程。
1 案例描述
本案例演示以下過程:
-
利用STAR CCM+錄制一段創(chuàng)建幾何模型的腳本 -
開發(fā)一個(gè)GUI界面,實(shí)現(xiàn)幾何模型參數(shù)化建模
2 建立模型
本案例模型在STAR CCM+中創(chuàng)建。
-
啟動(dòng)STAR CCM+,新建一個(gè)simulation -
選擇菜單 File → Macro → Start Recording,或點(diǎn)擊工具欄Start Recording按鈕,在打開的文件保存對(duì)話框中指定保存的宏文件為createGeometry.java
-
右鍵選擇樹形節(jié)點(diǎn) Geometry > 3D-CAD Model,選擇 New打開幾何創(chuàng)建界面,如下圖所示
-
在幾何操作模塊中,右鍵選擇節(jié)點(diǎn) Features > XY,選擇菜單 Create Sketch在XY平面上創(chuàng)建草圖
-
在草圖中創(chuàng)建一個(gè)半徑0.01m的圓,如下圖所示
-
關(guān)閉草圖面板返回至模型操作,鼠標(biāo)右鍵選擇樹形節(jié)點(diǎn) Sketch 1,選擇彈出菜單 Extrude進(jìn)行草圖拉伸
-
在彈出的參數(shù)設(shè)置界面中,設(shè)置拉伸長(zhǎng)度 Distant為 1m,,如下圖所示
-
點(diǎn)擊按鈕 Close 3D-CAD關(guān)閉建模面板 -
右鍵選擇模型樹節(jié)點(diǎn) Geometry > 3D-CAD Models > 3D-CAD Model 1,選擇菜單 New Geometry Part,在彈出對(duì)話框中采用默認(rèn)參數(shù),點(diǎn)擊 OK按鈕關(guān)閉對(duì)話框。
-
右鍵選擇樹節(jié)點(diǎn) Geometry > Parts > Body 1> Surfaces > Default,選擇菜單 Split By Part Curves...
-
在彈出的對(duì)話框中,選擇 Part Curves為 Default,如下圖所示,點(diǎn)擊 OK按鈕確認(rèn)操作
-
更改模型樹節(jié)點(diǎn)名稱Default為wall,default 2為inlet,default 3為outlet -
右鍵選擇模型樹節(jié)點(diǎn) Geometry >Part > Body 1,選擇菜單 Assign Parts to Regions...
-
在彈出的菜單中,進(jìn)行如下圖所示選擇,點(diǎn)擊 Apply及 Close按鈕確認(rèn)并關(guān)閉對(duì)話框
-
結(jié)束宏的錄制,至此幾何創(chuàng)建完畢。
此時(shí)可以用文本編輯器打開之前創(chuàng)建的createGeometry.java文件,查看里面所記錄的內(nèi)容。刪掉其中一些沒有用的語句,并對(duì)程序進(jìn)行重構(gòu)整理,該整理成函數(shù)的整理成函數(shù),該參數(shù)化的參數(shù)化。這里要參數(shù)化的變量很少,只有半徑和長(zhǎng)度兩個(gè)物理量。
注意:由于每一步操作均會(huì)生成java語句,因此為避免生成過多沒用的語句,建議在正式錄制之前多練習(xí)幾遍,務(wù)求盡可能少一些無用操作,尤其是一些視圖操作。
”
操作錄制完畢后,可以打開錄制生成的Java代碼,刪除其中的一些無效操作(如重復(fù)操作、視圖操作等),并進(jìn)行測(cè)試。
經(jīng)過刪減后的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清理時(shí)注意:
-
通常情況下與Scene及view相關(guān)的行都可以直接刪掉,這些都是用于顯示的語句 -
源代碼中不能出現(xiàn)任何中文字符,因?yàn)樵赟TAR CCM+中運(yùn)行時(shí)會(huì)識(shí)別不出來而報(bào)錯(cuò),注釋中也不允許有中文字符 -
在清理Macro時(shí),可以采用注釋的方式測(cè)試刪除后的效果,避免誤刪
可看下面的演示視頻。
(完)
文章來源:CFD之道
技術(shù)鄰APP
工程師必備
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP
5
2
9




















