Salome Python メモ

2014年1月22日

バージョン

Salome-Meca 2013.2 (Salome 6.6.0)

Salome

Salome モジュール

import salome

初期化

salome.salome_init()

スタディ

カレントスタディとアクティブスタディ

study = salome.myStudy # カレントスタディ
name = salome.myStudyName # カレントスタディ名
id = salome.myStudyId # カレントスタディ ID

# カレントスタディの変更
salome.setCurrentStudy(study)
salome.setCurrentStudyId(id)

id = salome.getActiveStudy() # アクティブスタディ ID

アクティブスタディとカレントスタディは、GUI 上でマウスで操作する場合は一致する。GUI で Python を動かす (TUI) 場合は、ウインドウ - セッション - アクティブスタディが固定で、Python から GUI の操作が可能なのはアクティブスタディ (= 初期のカレントスタディ) のみ。

スタディの作成

study = salome.myStudyManager.NewStudy(name) # 新規作成

study = salome.myStudyManager.Open(filename) # ファイルを開く

開いているスタディの取得
studies = salome.myStudyManager.GetOpenStudies() # 開いているスタディのリスト

# スタディの取得
study = salome.myStudyManager.GetStudyByName(name)
study = salome.myStudyManager.GetStudyByID(id)

スタディの情報

name = study._get_Name() # スタディ名
id = study._get_StudyId() # スタディ ID

study._set_Name(name) # スタディ名の変更

スタディの内容の出力

salome.DumpStudy(study)

スタディの保存

salome.myStudyManager.SaveAs(filename, study, False) # 名前をつけて保存 (*.hdf)
salome.myStudyManager.Save(study, False) # 上書き保存

スタディを閉じる

study.Close()

スタディはスクリプトが終了しても勝手には閉じない。

オブジェクトブラウザ

更新

salome.sg.updateObjBrowser(True) # Object Browser の更新

スクリプトは GUI なしでも実行できるため、GUI の操作をする場合は GUI があるかどうかチェックする。

hasDesktop = salome.sg.hasDesktop() # GUI があるか否か

ビュー

更新

salome.sg.UpdateView()

視点切り替え

salome.sg.ViewTop()
salome.sg.ViewBottom()
salome.sg.ViewFront()
salome.sg.ViewBack()
salome.sg.ViewLeft()
salome.sg.ViewRight()

salome.sg.ResetView() # リセット

全体表示

salome.sg.FitAll()

オブジェクトの表示/非表示

salome.sg.Erase(id)
salome.sg.Display(id)
salome.sg.DisplayOnly(id)

salome.sg.EraseAll()
salome.sg.DisplayAll()

UpdateView() が必要。

SObject

オブジェクトの取得

obj = study.FindObject(name) # 名前
obj = study.FindObjectID(id) # id : ID ('0:1:1:5' など)
obj = study.FindObjectByPath(path) # path : パス ('/Geometry/Box_1' など)
obj = salome.IDToSObject(id) # ID

ジオメトリオブジェクトなどを格納しているスタディ内のオブジェクト。

ID は Entry とも呼び、オブジェクトブラウザの一番上の項目 ("Name" と書かれているところ) を右クリックして "Entry" を選べば確認できる。

依存オブジェクトの取得

father = obj.GetFather() # obj に依存する (obj が属する) オブジェクト

objList = study.FindDependances(obj) # obj が依存するオブジェクトのリスト
# オブジェクト直接ではなく、オブジェクトそのものは GetFather() で得る必要がある。

オブジェクト情報の取得

name = obj.GetName() # 名前
id = obj.GetID() # ID
path = study.GetObjectPath(obj) # パス

オブジェクトの名前の変更

obj.SetAttrString('AttributeName', newName)

格納しているオブジェクトの取得

modObj = obj.GetObject()

たとえば、ジオメトリオブジェクトを得る場合はつぎのようにする。

box = salome.myStudy.FindObject('Box_1').GetObject()

ID から直接オブジェクトを得ることもできる。

modObj = salome.IDToObject(id) # ID

オブジェクトの削除

import salome.kernel.studyedit as studyedit
se = studyedit.StudyEditor()
se.removeItem(obj, True)

ジオメトリ

ジオメトリモジュール

import geompy

スタディの設定

geompy.init_geom(study)

スタディへの形状の追加

id = geompy.addToStudy(shape, name) # publish
id = geompy.addToStudyInFather(father, shape, name) # サブ形状として追加

名前を '' にすると、自動的に名前が付けられる。

形状をスタディから隠す

geompy.hideInStudy(shape) # unpublish

オブジェクトを見えなくする。これは、依存関係のせいで削除できないオブジェクトを実質取り除くための手段。

再表示

obj = geompy.ObjectToSObject(shape)
attr = geompy.myBuilder.FindOrCreateAttribute(obj, "AttributeDrawable")
attr.SetDrawable(True)

attr.IsDrawable() で表示/非表示を判断できるが、属性 "AttributeDrawable" はもともと持っているわけではないようで、これを作った時点でオブジェクトが見えなくなってしまう。したがって、オブジェクトが見えているかどうか判断する必要がある場合は、つぎのようにする。

obj = geompy.ObjectToSObject(shape)
[res, attr] = obj.FindAttribute("AttributeDrawable")
if not res: isDrwable = True
attr = geompy.myBuilder.FindOrCreateAttribute(obj, "AttributeDrawable")
isDrawable = attr.IsDrawable()

GUI への反映

gg = salome.ImportComponentGUI('GEOM')
gg.createAndDisplayGO(id) # オブジェクトを追加し画面に表示
gg.eraseGO(id) # 画面から取り除く

オブジェクト情報の取得

name = shape.GetName() # 名前
id = shape.GetStudyEntry() # ID
obj = geompy.ObjectToSObject(shape) # SObject

type = shape.GetType() # タイプ (BOX など)
typeName = geompy.ShapeIdToType(type) # タイプ名

shapeType = shape.GetShapeType() # 形状タイプ (GEOM.SOLID など)
shapeTypeName = shape.GetShapType().__str__() # 形状タイプ名

形状タイプ

geompy.ShapeType['VERTEX']   # 点
geompy.ShapeType['EDGE']     # 辺 (線)
geompy.ShapeType['WIRE']     # ワイヤー (線の集合)
geompy.ShapeType['FACE']     # 面
geompy.ShapeType['SHELL']    # シェル (面の集合)
geompy.ShapeType['SOLID']    # ソリッド
geompy.ShapeType['COMPOUND'] # 複合 (形状の集合)

import GEOM
GEOM.VERTEX   # 点
GEOM.EDGE     # 辺 (線)
GEOM.WIRE     # ワイヤー (線の集合)
GEOM.FACE     # 面
GEOM.SHELL    # シェル (面の集合)
GEOM.SOLID    # ソリッド
GEOM.COMPOUND # 複合 (形状の集合)

形状の GetShapeType() が返すのは下のほうだが、geompy のメソッドの引数に渡すのは上の geompy.ShapeType のほうがよいらしい。

p = geompy.MakeVertex(x, y, z) # 座標
p = geompy.MakeVertexWithRef(p0, dx, dy, dz) # 相対位置指定

# 線上の点
p = geompy.MakeVertexOnCurve(line, param) # param : [0, 1]
p = geompy.MakeVertexOnCurveByLength(line, length, startPoint) # 点からの距離
p = geompy.MakeVertexOnCurveByCoord(line, x, y, z) # 座標

p = geompy.MakeVertexOnLinesIntersection(line1, line2) # 交点

1D

直線

line = geompy.MakeLine(p, v) # ベクトルから
line = geompy.MakeLineTwoPnt(p1, p2) # 2 点から

line = geompy.MakeCircle(p0, v, r) # 中心、軸ベクトル、半径
line = geompy.MakeCircleThreePnt(p1, p2, p3) # 3 点から
line = geompy.MakeCircleCenter2Pnt(p0, p1, p2) # 中心と 2 点から
line = geompy.MakeCircleR(r) # 原点中心で XY 面に作成

楕円

line = geompy.MakeEllipse(p0, v, r1, r2, v1) # 中心、軸ベクトル、半径1、半径2、半径1方向
line = geompy.MakeEllipseRR(r1, r2) # 原点中心で XY 面に作成

円弧

line = geompy.MakeArc(p1, p2, p3) # 3 点から
line = geompy.MakeArcCenter(p0, p1, p2) # 中心と 2 点から
line = geompy.MakeArcOfEllipse(p0, p1, p2) # 楕円

曲線

line = geompy.MakePolyline(pointList, isClosed) # ポリライン
line = geompy.MakeBezier(pointList, isClosed) # ベジエ
line = geompy.MakeInterpol(pointList, isClosed, doReordering) # 補間

ワイヤー (線の集合)

wire = geompy.MakeWire(lineList)

スケッチャー

sketcher = geompy.Sketcher3D() # スケッチャー作成

sketcher.addPointsAbsolute(x, y, z) # 座標による点の追加
sketcher.addPointsRelative(dx, dy, dz) # 相対距離による点の追加

sketcher.addPointRadiusAngleHAbsolute(radius, angle, height, axes)
sketcher.addPointRadiusAngleHRelative(length, angle, height, axes)
# 半径、角度 [deg]、高さによる点の追加
# axes : "OXY", "OYZ" or "OXZ"

sketcher.addPointRadiusAnglesAbsolute(radius, angle1, angle2, axes)
sketcher.addPointRadiusAnglesRelative(radius, angle1, angle2, axes)
# 半径、角度1、角度2 による点の追加

sketcher.close() # 閉じる
wire = sketcher.wire() # ワイヤーの取得 (1 回限り)

ベクトル

v = geompy.MakeVector(p1, p2) # 2 点から
v = geompy.MakeVectorDXDYDZ(dx, dy, dz) # 原点からの距離
v = geompy.GetNormal(face, p) # 面の法線ベクトル

2D

face = geompy.MakeFaceWires(lineList, isPlanarWanted) # 線から
face = geompy.MakePlane(p0, v, width) # 中心点、法線ベクトル、幅

シェル (面の集合)

shell = geompy.MakeShell(faceList) # 面から

3D

ソリッド

solid = geompy.MakeSolid(shellList) # シェルから

solid = geompy.MakeBoxTwoPnt(p1, p2) # 2 点から
solid = geompy.MakeBoxDXDYDZ(dx, dy, dz) # 3 方向の幅 (原点中心)

円筒

solid = geompy.MakeCylinderRH(r, h) # 半径と高さ
solid = geompy.MakeCylinder(p, axis, r, h) # 基準点、軸ベクトル、半径、高さ

solid = geompy.MakeSphere(x, y, z, r) # 中心と半径
solid = geompy.MakeSpherePntR(p, r) # 中心点と半径
solid = geompy.MakeSphereR(r) # 原点中心で作成

円錐

solid = geompy.MakeCone(p, v, r1, r2, h) # 基準点、軸ベクトル、半径1、半径2、高さ
solid = geompy.MakeConeR1R2H(r1, r2, h) # 原点基準で作成

生成

押し出し

shape = geompy.MakePrismVecH(base, v, height) # ベクトルと高さによる
shape = geompy.MakePipe(base, path) # パスに沿って

回転

shape = geompy.MakeRevolution(base, v, angle) # 回転軸と角度 [rad]

ブーリアン

融合

shape = geompy.MakeFuse(shape1, shape2)

ブーリアン演算の和。

共通部分

shape = geompy.MakeCommon(shape1, shape2)

ブーリアン演算の積。

カット

shape = geompy.MakeCut(shape1, shape2) # shape2 で shape1 をカット

ブーリアン演算の差。

交線

shape = geompy.MakeSection(shape1, shape2)

形状が交わったところの線の複合を作る。

複合 (形状の集合)

comp = geompy.MakeCompound(shapeList)

融合 (fuse) と違い、ただまとめるだけ。

サブ形状

サブ形状の数

n = geompy.NumberOfEdges(shape) # 辺
n = geompy.NumberOfFaces(shape) # 面
n = geompy.NumberOfSolids(shape) # ソリッド
n = geompy.NumberOfSubShapes(shape, shapeType) # 指定形状タイプ

サブ形状の ID

id = geompy.GetSubShapeID(shape, subShape) # shape に属する subShape の ID
ids = geompy.SubShapeAllIDs(shape, shapeType) # すべてのサブ形状の ID

サブ形状の取得

subShape = geompy.GetSubShape(shape, id) # ID

# 指定点に近いサブ形状の取得
p = geompy.GetVertexNearPoint(shape, p0) # 点
edge = geompy.GetEdgeNearPoint(shape, p0) # 辺
face = geompy.GetFaceNearPoint(shape, p0) # 面

サブ形状の抽出

shapeList = geompy.ExtractShapes(shape, shapeType, isSorted)

たとえば、ソリッドを構成する面のリストを取得できる。

faceList = geompy.ExtractShapes(solid, geompy.ShapeType['FACE'], True)

グループの作成

group = geompy.CreateGroup(shape, shapeType)
geompy.UnionIDs(group, subShapeIDList)

移動

平行移動

shape2 = geompy.MakeTranslation(shape, dx, dy, dz) # 相対位置
shape2 = geompy.MakeTranslationTwoPoints(shape, p1, p2) # 2 点
shape2 = geompy.MakeTranslationVector(shape, v) # ベクトル
shape2 = geompy.MakeTranslationVectorDistance(shape, v, dist) # ベクトルと距離

回転移動

shape2 = geompy.MakeRotation(shape, axis, angle) # 軸と角度 [rad]
shape2 = geompy.MakeRotationThreePoints(shape, p0, p1, p2) # 中心と 2 点

鏡像

shape2 = geompy.MakeMirrorByPoint(shape, p) # 点対称
shape2 = geompy.MakeMirrorByAxis(shape, axis) # 線対称
shape2 = geompy.MakeMirrorByPlane(shape, plate) # 面対称

拡大・縮小

shape2 = geompy.MakeScaleTransform(shape, p0, scale) # 中心点とスケール
shape2 = geompy.MakeScaleAlongAxes(shape, p0, sx, sy, sz) # 中心点と軸方向のスケール

投射

shape2 = geompy.MakeProjection(shape, face) # 点、線、ワイヤーを面に投射

対応する辺の取得

compList = geompy.Propagate(shape)

たとえば、四辺形だと向かい合う辺が 2 組できる。

分割

comp = geompy.MakePartition(shapeList, toolList, keepInsideList, removeInsideList, shapeType)

面によるソリッドの分割はつぎのようにする。

comp = geompy.MakePartition([box], [plate], [], [], geompy.ShapeType['SOLID'])

面の結合

comp2 = geompy.MakeGlueFaces(comp, tol) # tol = 1e-7 など

重なっている面を結合する。

インポート/エクスポート

インポート

shape = geompy.ImportIGES(file)
shape = geompy.ImportSTEP(file)

エクスポート

geompy.ExportIGES(file)
geompy.ExportSTEP(file)

スクリプト例

tools.py

import salome
import geompy, GEOM
import salome.kernel.studyedit as studyedit


# オブジェクトの取得
def getObject(name):
    return salome.myStudy.FindObject(name).GetObject()


# 形状の追加
def addShape(shape, name):
    gg = salome.ImportComponentGUI('GEOM')
    id_shape = geompy.addToStudy(shape, name)
    gg.createAndDisplayGO(id_shape)


# サブ形状の追加
def addShapeInFather(father, shape, name):
    gg = salome.ImportComponentGUI('GEOM')
    id_shape = geompy.addToStudyInFather(father, shape, name)
    gg.createAndDisplayGO(id_shape)


# 形状の削除
def deleteShape(shape):
    gg = salome.ImportComponentGUI('GEOM')

    name = shape.GetName()
    obj = salome.myStudy.FindObject(name)
    id_obj = obj.GetID()
    gg.eraseGO(id_obj, True)
    
    se = studyedit.StudyEditor()
    se.removeItem(obj, True)

    salome.sg.updateObjBrowser(True)


# サブ形状の取得
def getSubShape(shape):
    obj = geompy.ObjectToSObject(shape)
    objList = salome.myStudy.FindDependances(obj)
    shapeList = []
    for obj in objList:
        subShape = obj.GetFather().GetObject()
        if isinstance(subShape, GEOM._objref_GEOM_Object):
            shapeList.append(subShape)
    return shapeList


# 形状が publish されているか
def isPublished(shape):
    obj = geompy.ObjectToSObject(shape)
    [res, attr] = obj.FindAttribute("AttributeDrawable")
    if not res:
        return True
    attr = geompy.myBuilder.FindOrCreateAttribute(obj, "AttributeDrawable")
    return attr.IsDrawable()


# 再 publish
def republish(shape):
    obj = geompy.ObjectToSObject(shape)
    attr = geompy.myBuilder.FindOrCreateAttribute(obj, "AttributeDrawable")
    attr.SetDrawable(True)
    salome.sg.updateObjBrowser(True)


# 全形状ループ
def allShapesLoop(func, args=None, publishedOnly=False):
    def dependancesLoop(shape, func, n, args, publishedOnly):
        if shape is not None:
            if not shape.GetName() in ['O', 'OX', 'OY', 'OZ']:
                if not publishedOnly or isPublished(shape):
                    if args is None:
                        n = func(shape, n)
                    else:
                        [n, args] = func(shape, n, args)
                    subShapeList = getSubShape(shape)
                    for subShape in subShapeList:
                        [n, args] = dependancesLoop(
                                subShape, func, n, args, publishedOnly)
        return [n, args]

    compIter = salome.myStudy.NewComponentIterator()
    compIter.Init()
    while compIter.More():
        comp = compIter.Value()

        if comp.ComponentDataType() == 'GEOM':
            shapeIter = salome.myStudy.NewChildIterator(comp)
            shapeIter.Init()
            n = 0
            while shapeIter.More():
                shape = shapeIter.Value().GetObject()
                [n, args] = dependancesLoop(shape, func, n, args, publishedOnly)
                shapeIter.Next()

        compIter.Next()

    return n


# 全形状出力
def printAllShapes():
    def func(shape, n):
        print shape.GetName(), shape.GetShapeType(), n
        n = n + 1
        return n

    return allShapesLoop(func)


# 点の数
def getNumberOfVerteces():
    def func(shape, n):
        if shape.GetShapeType() == GEOM.VERTEX:
            n = n + 1
        return n

    return allShapesLoop(func)


# 辺の数
def getNumberOfEdges():
    def func(shape, n):
        if shape.GetShapeType() == GEOM.EDGE:
            n = n + 1
        return n

    return allShapesLoop(func)


# 面の数
def getNumberOfFaces():
    def func(shape, n):
        if shape.GetShapeType() == GEOM.FACE:
            n = n + 1
        return n

    return allShapesLoop(func)


# ソリッドの数
def getNumberOfSolids():
    def func(shape, n):
        if shape.GetShapeType() == GEOM.SOLID:
            n = n + 1
        return n

    return allShapesLoop(func)


# 全形状のサブ形状の抽出
def extractAllShapes():
    def func(shape, n, args):
        [nf, ne] = args
        subShapeList = getSubShape(shape)
        if subShapeList == []:
            if shape.GetShapeType() == GEOM.SOLID:
                list = geompy.ExtractShapes(
                        shape,
                        geompy.ShapeType['FACE'],
                        True)
                for s in list:
                    nf = nf + 1
                    addShapeInFather(shape, s, 'Face_%d' % nf)
                n = n + 1
            elif shape.GetShapeType() == GEOM.FACE:
                list = geompy.ExtractShapes(
                        shape,
                        geompy.ShapeType['EDGE'],
                        True)
                for s in list:
                    ne = ne + 1
                    addShapeInFather(shape, s, 'Edge_%d' % ne)
                n = n + 1
        args = [nf, ne]
        return [n, args]

    nf = getNumberOfFaces()
    ne = getNumberOfEdges()

    return allShapesLoop(func, [nf, ne], True)


# オブジェクトの依存関係の強引なを削除
def deleteDependency(shape):
    shape2 = geompy.MakeTranslation(shape, 0, 0, 0)
    id = geompy.addToStudy(shape2, '')
    obj = salome.myStudy.FindObjectID(id)
    obj.SetAttrString('AttributeName', shape.GetName())
    deleteShape(shape)

    gg = salome.ImportComponentGUI('GEOM')
    gg.createAndDisplayGO(id)

メッシュ

メッシュモジュール

import smesh

スタディの設定

smesh.SetCurrentStudy(study)

メッシュの作成

mesh = smesh.Mesh(shape)
mesh = smesh.Mesh(shape, name) # 名前の指定

名前の設定

smesh.SetName(obj, name) # obj : メッシュやアルゴリズム

既存のメッシュの取得

m = study.FindObject(name).GetObject()
mesh = smesh.Mesh(m)

メッシュ情報の取得

name = mesh.GetName() # 名前

m = mesh.GetMesh()
shape = m.GetShapeToMesh() # 形状

# 個数
n = mesh.NbNodes()
n = mesh.NbEdges()
n = mesh.NbFaces()
n = mesh.NbTriangles()
n = mesh.NbQuadrangles()
n = mesh.NbVolumesh.s()
n = mesh.NbTetras()
n = mesh.NbHexas()
n = mesh.NbPyramesh.ds()
n = mesh.NbPrismesh.()

サブメッシュ

seg = mesh.Segment(geom=subShape)
subMesh = seg.GetSubMesh()

辺の分割の場合。他も同様。

パラメタの削除

mesh.RemoveHypothesis(hypothesis)
mesh.RemoveHypothesis(hypothesis, subShape) # サブメッシュ
# hypothesis : MaxSize() や Parameters() などの返り値

1D

辺の分割

seg = mesh.Segment()

分割数

seg.SetNumberOfSegments(num) # 分割数

# スケール分布
seg.SetDistrType(1) # 分布タイプ
seg.SetScaleFactor(scale) # 始めと終わりのサイズの比
seg.SetReversedEdges(edgeList) # 方向を逆にする辺のサブ形状 ID リスト

分割サイズ

seg.LocalLength(size)

始めと終わりの分割サイズ

seg.StartEndLength(startSize, endSize)

最大サイズ

seg.MaxSize(size)

対応する辺への設定

seg.Propagation()

2D

Triangle (Netgen 2D)

tria = mesh.Triangle(algo=smesh.NETGEN_2D)
# NETGEN 2D Parameters
tria_param = tria.Parameters()
tria_param.SetMaxSize(maxSize)
tria_param.SetMinSize(minSize)
tria_param.SetQuadAllowed(isQuadAllowed)
tria_param.SetOptimize(doOptimize)
# Length From Edges
tetra.LengthFromEdghes()
# Max. Element Area
tetra.MaxElementArea(maxArea)

Triangle (Netgen 1D-2D)

1D の設定も可能。

tria = mesh.Triangle(algo=smesh.NETGEN_1D2D)
# NETGEN 2D Parameters
tria_param = tria.Parameters()
tria_param.SetMaxSize(maxSize)
tria_param.SetMinSize(minSize)
tria_param.SetQuadAllowed(isQuadAllowed)
tria_param.SetOptimize(doOptimize)
# NETGEN 2D Simple Parameters
tria_param = tria.Parameters(smesh.SIMPLE)
tria_param.SetQuadAllowed(isQuadAllowed)

# 1D (以下から選択)
tria_param.SetNumberOfSegments(num)
tria_param.SetLocalLength(size)

# 2D (以下から選択)
tria_param.LengthFromEdges()
tria_param.SetMaxElementArea(maxArea)

Triangle (Mefisto)

tria = mesh.Triangle(algo=smesh.MEFISTO)

Quadrangle (Mapping)

quad = mesh.Quadrangle(algo=smesh.QUADRANGLE)

# Quadrangle Parameters
quad_param = quad.QuadrangleParameters()
quad_param.SetQuadType(type)
# type
import StdMeshers
StdMeshers.QUAD_STANDARD
StdMeshers.QUAD_TRIANGLE_PREF
StdMeshers.QUAD_QUADRANGLE_PREF
StdMeshers.QUAD_QUADRANGLE_PREF_REVERSED
StdMeshers.QUAD_REDUCED

Radial Quadrangle 1D2D

quad = mesh.Quadrangle(algo=smesh.RADIAL_QUAD)

# Number of Layers
quad.NumberOfLayers(num)

Projection 2D

ソースからメッシュを写す。

proj = mesh.Projection2D()
mesh.SourceFace(face, None, None, None, None, None) # ソース

3D

Tetrahedron (Netgen)

tetra = mesh.Tetrahedron()
# NETGEN 3D Parameters
tetra_param = tetra.Parameters()
tetra_param.SetMaxSize(maxSize)
tetra_param.SetMinSize(minSize)
tetra_param.SetOptimize(doOptimize)
# Max. Element Volume
tetra.MaxElementVolume(maxVol)

Netgen 1D-2D-3D

1D, 2D の設定も可能。

tetra = mesh.Tetrahedron(algo=smesh.NETGEN_1D2D3D)
# NETGEN 3D Parameters
tetra_param = tetra.Parameters()
tetra_param.SetMaxSize(maxSize)
tetra_param.SetMinSize(minSize)
tetra_param.SetOptimize(doOptimize)
# NETGEN 3D Simple Parameters
tetra_param = tetra.Parameters(smesh.SIMPLE)

# 1D (以下から選択)
tetra_param.SetNumberOfSegments(num)
tetra_param.SetLocalLength(size)

# 2D (以下から選択)
tetra_param.SetLengthFromEdges()
tetra_param.SetMaxElementArea(maxArea)

# 3D (以下から選択)
tetra_param.SetLengthFromFaces()
tetra_param.SetMaxElementVolume(maxVol)

Hexahedron (i,j,k)

hexa = mesh.Hexahedron(algo=smesh.Hexa)

# Viscous Layers
hexa.ViscousLayers(thickness, numLayers, stretchFactor, noLayerFaceList)

3D Extrusion

prism = mesh.Prism()

メッシュの作成

mesh.Compute()

メッシュのエクスポート

mesh.ExportUNV(filename)

STL ファイルのエクスポート

mesh.ExportSTL(filename)