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()


