[S0058] 形状エディタで楕円形状を作成する

JMAG-Designerの形状エディタでは基本図形として楕円、楕円弧を作成できます。
楕円は中心座標、主軸/副軸の半径と主軸の回転角度で定義します。主軸の回転角度は座標軸か直線との角度です。
このスクリプトでは、楕円領域形状を作成します。

前提条件

  • 楕円の中心座標、主軸半径、副軸半径及び主軸角度は、方程式により設定する

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

  • 楕円の中心座標、主軸半径、副軸半径及び主軸角度に設定する変数を方程式として登録する
  • XY平面上にスケッチを作成する
  • 楕円の中心座標、主軸半径、副軸半径を指定し、主軸角度は0として楕円を作成する
  • 楕円の主軸角度を定義するための水平線を作成する
  • 拘束を付与する
    水平線と楕円に主軸角度となる角度拘束を付与し変数を設定
    主軸と副軸をそれぞれ半径拘束とし変数を設定
    中心点をX軸からの距離、Y軸からの距離で拘束し、それぞれの距離に中心座標の成分の変数を設定
  • 作成した楕円から楕円領域を作成する
# 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()

# 寸法パラメータ
EllipseCenterX = 0
EllipseCenterY = 0
EllipseMajorRadius = 100
EllipseMinorRadius = 50
EllipseMajorAngle = 0

# 方程式名
EqCenterX = u"center_x"
EqCenterY = u"center_y"
EqMajorRadius = u"major_radius"
EqMinorRadius = u"minor_radius"
EqMajorAngle = u"major_angle"


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

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


def createEllipseEquations():
    """楕円の中心座標、長半径、短半径、長軸角度を方程式として登録する"""
    designTable = geomDoc.GetDesignTable()
    equationDataList = [
        (EqMajorRadius, EllipseMajorRadius),
        (EqMinorRadius, EllipseMinorRadius),
        (EqMajorAngle, EllipseMajorAngle),
        (EqCenterX, EllipseCenterX),
        (EqCenterY, EllipseCenterY),
    ]

    designTable.EditStart()

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

    designTable.EditEnd()


def createSketchOnXYPlane():
    """XY平面上にスケッチを作成する"""
    assm = geomDoc.GetAssembly()
    refXYPlane = assm.GetPlaneXY()
    sketch = assm.CreateSketch(refXYPlane)

    return sketch


def createRegionFromItems(sketch, itemList):
    """引数のitemListすべてからスケッチ上に領域を作成する"""
    selection = geomDoc.GetSelection()
    selection.Clear()
    for item in itemList:
        selection.Add(item)
    sketch.CreateRegions()
    selection.Clear()


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


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

    return equationName


def drawBaseShapeForEllipse(sketch, majorRadius, minorRadius, majorAngle):
    """楕円と角度基準線を作成し、拘束を付与して領域を生成する"""
    sketch.OpenSketch()

    # 楕円
    ellipse = sketch.CreateEllipse(
        EllipseCenterX,
        EllipseCenterY,
        majorRadius,
        minorRadius,
        majorAngle
    )
    ellipseRef = geomDoc.CreateReferenceFromItem(ellipse)

    # 楕円中心
    centerVertex = ellipse.GetCenterVertex()
    centerRef = geomDoc.CreateReferenceFromItem(centerVertex)
    # 長軸方向を定義するための基準点
    referencePointVertex = sketch.CreateVertex(
        EllipseCenterX + majorRadius,
        EllipseCenterY
    )
    referencePointRef = geomDoc.CreateReferenceFromItem(
        referencePointVertex
    )
    # 長軸角度の基準となる水平線
    referenceLine = sketch.CreateLine(
        EllipseCenterX,
        EllipseCenterY,
        EllipseCenterX + majorRadius,
        EllipseCenterY
    )
    referenceLineRef = geomDoc.CreateReferenceFromItem(referenceLine)
    # 基準線を水平にする
    sketch.CreateMonoConstraint(
        u"horizontality",
        referenceLineRef
    )
    # 基準点を楕円上に配置する
    sketch.CreateBiConstraint(
        u"coincident",
        referencePointRef,
        ellipseRef
    )
    # 基準線と楕円の長軸との角度を方程式で拘束する
    majorAngleConstraint = sketch.CreateBiConstraint(
        u"angle",
        referenceLineRef,
        ellipseRef
    )
    setConstraintExpression(
        majorAngleConstraint,
        u"Angle",
        EqMajorAngle
    )
    # 楕円の長半径を方程式で拘束する
    majorRadiusConstraint = sketch.CreateMonoConstraint(
        u"major_radius",
        ellipseRef
    )
    setConstraintExpression(
        majorRadiusConstraint,
        u"Radius",
        EqMajorRadius
    )
    # 楕円の短半径を方程式で拘束する
    minorRadiusConstraint = sketch.CreateMonoConstraint(
        u"minor_radius",
        ellipseRef
    )
    setConstraintExpression(
        minorRadiusConstraint,
        u"Radius",
        EqMinorRadius
    )
    # 楕円中心のX位置を方程式で拘束する
    centerXConstraint = sketch.CreateMonoConstraint(
        u"distancefromyaxis",
        centerRef
    )
    centerXDistanceExpression = getDistanceExpressionFromSignedValue(
        EqCenterX,
        EllipseCenterX
    )
    setConstraintExpression(
        centerXConstraint,
        u"Distance",
        centerXDistanceExpression
    )
    # 楕円中心のY位置を方程式で拘束する
    centerYConstraint = sketch.CreateMonoConstraint(
        u"distancefromxaxis",
        centerRef
    )
    centerYDistanceExpression = getDistanceExpressionFromSignedValue(
        EqCenterY,
        EllipseCenterY
    )
    setConstraintExpression(
        centerYConstraint,
        u"Distance",
        centerYDistanceExpression
    )
    # 楕円と内部の基準線から領域を作成する
    createRegionFromItems(
        sketch,
        [ellipse]
    )

    sketch.CloseSketch()


def createEllipseShape():
    """スケッチ内に方程式付きの楕円形状を作成する"""
    sketch = createSketchOnXYPlane()
    drawBaseShapeForEllipse(
        sketch,
        EllipseMajorRadius,
        EllipseMinorRadius,
        EllipseMajorAngle
    )


def main():
    """方程式付きの2次元楕円形状を作成する"""
    createEllipseEquations()
    createEllipseShape()


main()

Download Python source code

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

JMAG-Express Online
An engineer's diary