[S0055] 形状エディタでビーム形状を作成する

ビーム形状は線状の体積を持たないソリッドです。
解析においては構造解析で使用したり、磁界解析にて導体として利用できます。
形状エディタではスケッチの基本図形をビーム化できます。
このスクリプトでは、直線のビームを作成します。

前提条件

  • ビームの開始座標及び長さは、方程式により設定する

スクリプトにおける設定内容

  • ビームの開始座標及び長さを方程式として登録する
  • XY平面をZ軸方向にオフセットした基準平面を作成し、この平面にスケッチを作成する
    Z軸方向のオフセット量に開始座標z成分の変数を設定する
  • 指定した開始座標を基準として、ビームの長さを表すY軸方向の直線をXY平面上に作成し、拘束を付与する
  • 作成した直線をビーム化しビーム形状を作成する
# Copyright (c) 2026 JSOL CORPORATION
#
# 本スクリプトはMITライセンスのもとで公開しています。
# ライセンス全文は以下を参照してください。
# https://www.jmag-international.com/jp/scriptlibrary/jmag_script_library_mit/

app = designer.GetApplication()
geomApp = app.CreateGeometryEditor()
geomDoc = geomApp.GetDocument()

# 寸法パラメータ
BeamLength = 100
BeamStartX = 0
BeamStartY = 0
BeamStartZ = 0

# 方程式名
EqLength = u"length"
EqStartX = u"start_x"
EqStartY = u"start_y"
EqStartZ = u"start_z"


def createNewPart():
    """新しいPartを作成し、編集可能な状態で開く"""
    assm = geomDoc.GetAssembly()
    part = assm.CreatePart()
    part.OpenPart()

    return part


def setupEquation(equation, expression):
    """DesignTable上の方程式の基本設定を行う"""

    # The argument of SetType
    # 0: 値
    # 1: 式
    equation.SetType(0)
    equation.SetExpression(str(expression))


def createBeamEquations():
    """ビームの開始座標と長さを方程式として登録する"""
    designTable = geomDoc.GetDesignTable()
    equationDataList = [
        (EqLength, BeamLength),
        (EqStartX, BeamStartX),
        (EqStartY, BeamStartY),
        (EqStartZ, BeamStartZ),
    ]

    designTable.EditStart()

    for equationName, expression in equationDataList:
        designTable.AddEquation(equationName)
        equation = designTable.GetEquation(equationName)
        setupEquation(equation, expression)

    designTable.EditEnd()


def createOffsetXYPlane(part):
    """start_zでオフセットしたXY平面を作成する"""
    refXYPlane = part.GetPlaneXY()

    offsetPlane = part.CreateReferencePlane()
    offsetPlane.SetTypeByString(u"Distance")
    offsetPlane.SetPropertyByReference(u"Plane", refXYPlane)
    offsetPlane.SetProperty(u"Distance", EqStartZ)

    return offsetPlane


def createSketchOnBeamPlane(part):
    """start_zでオフセットしたXY平面上にスケッチを作成する"""
    offsetPlane = createOffsetXYPlane(part)
    offsetPlaneRef = geomDoc.CreateReferenceFromItem(offsetPlane)

    sketch = part.CreateSketch(offsetPlaneRef)

    return sketch


def setConstraintExpression(constraint, propertyName, equationName):
    """拘束寸法に方程式名を設定する"""
    constraint.SetProperty(propertyName, equationName)


def getDistanceExpressionFromSignedValue(equationName, value):
    """符号付き座標値から、距離拘束に使用する正の式を返す"""
    if value < 0:
        return u"-" + equationName

    return equationName


def drawBaseShapeForBeam(sketch, length):
    """ビームの基準線を作成し、開始位置と長さを拘束する"""
    sketch.OpenSketch()

    # ビームの開始点と終了点
    startVertex = sketch.CreateVertex(BeamStartX, BeamStartY)
    startRef = geomDoc.CreateReferenceFromItem(startVertex)
    endVertex = sketch.CreateVertex(BeamStartX, BeamStartY + length)
    endRef = geomDoc.CreateReferenceFromItem(endVertex)

    # Y軸方向のビーム基準線
    beamLine = sketch.CreateLine(
        BeamStartX,
        BeamStartY,
        BeamStartX,
        BeamStartY + length
    )
    beamLineRef = geomDoc.CreateReferenceFromItem(beamLine)
    sketch.CreateMonoConstraint(u"verticality", beamLineRef)
    # ビームの長さを方程式で拘束する
    lengthConstraint = sketch.CreateBiConstraint(u"distance", startRef, endRef)
    setConstraintExpression(lengthConstraint, u"Distance", EqLength)
    # ビーム開始点のX位置を方程式で拘束する
    startXConstraint = sketch.CreateMonoConstraint(u"distancefromyaxis", startRef)
    startXDistanceExpression = getDistanceExpressionFromSignedValue(EqStartX, BeamStartX)
    setConstraintExpression(startXConstraint, u"Distance", startXDistanceExpression)
    # ビーム開始点のY位置を方程式で拘束する
    startYConstraint = sketch.CreateMonoConstraint(u"distancefromxaxis", startRef)
    startYDistanceExpression = getDistanceExpressionFromSignedValue(EqStartY, BeamStartY)
    setConstraintExpression(startYConstraint, u"Distance", startYDistanceExpression)

    sketch.CloseSketch()


def createBeamFromSketch(part, sketch):
    """スケッチ上の直線からビーム形状を作成する"""
    beam = part.CreateMakeBeam(sketch)

    return beam


def createBeamPart(part):
    """Part内に方程式付きのビーム形状を作成する"""
    sketch = createSketchOnBeamPlane(part)
    drawBaseShapeForBeam(sketch, BeamLength)
    createBeamFromSketch(part, sketch)


def main():
    """方程式付きのビーム形状を持つPartを作成する"""
    createBeamEquations()

    part = createNewPart()
    createBeamPart(part)
    part.ClosePart()


main()

Download Python source code

ファイルご利用の注意点
JMAGスクリプトライブラリをご利用されるに際し、以下をよくお読みいただき、ご同意の上ご利用くださるようお願い申し上げます。
絞込み検索
  • カテゴリー 一覧

JMAG-Express Online
An engineer's diary