シェル形状は2次元面の体積を持たないソリッドです。
解析においては構造解析で使用したり、その他の解析でごく薄い厚みでメッシュを生成して利用します。
形状エディタでは押し出しサーフェスを使用し線を押し出して作成します。
このスクリプトでは、直線を作成し押し出しサーフェスを定義して矩形のシェルソリッドを作成します。
前提条件
- シェルの開始座標、幅及び高さは、方程式により設定する
スクリプトにおける設定内容
- シェルの開始座標、幅及び高さを方程式として登録する
- ZX平面をY軸方向にオフセットした基準平面を作成し、この平面にスケッチを作成する
Y軸方向のオフセット量に開始座標y成分の変数を設定する
スケッチ平面ではX方向が全体のZ方向、Y方向は全体のX方向となる - 指定した開始座標を基準として、シェルの幅を表す直線を作成し、拘束を付与する
開始点をX軸からの距離、Y軸からの距離で拘束し、それぞれの距離に開始座標の成分の変数を設定する - 作成した直線を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()
# 寸法パラメータ
ShellWidth = 100
ShellHeight = 100
ShellStartX = 0
ShellStartY = 0
ShellStartZ = 0
# 方程式名
EqWidth = u"width"
EqHeight = u"height"
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 createShellEquations():
"""シェルの幅、高さ、開始座標を方程式として登録する"""
designTable = geomDoc.GetDesignTable()
equationDataList = [
(EqWidth, ShellWidth),
(EqHeight, ShellHeight),
(EqStartX, ShellStartX),
(EqStartY, ShellStartY),
(EqStartZ, ShellStartZ),
]
designTable.EditStart()
for equationName, expression in equationDataList:
designTable.AddEquation(equationName)
equation = designTable.GetEquation(equationName)
setupEquation(equation, expression)
designTable.EditEnd()
def createOffsetZXPlane(part):
"""start_yでオフセットしたZX平面を作成する"""
refZXPlane = part.GetPlaneZX()
offsetPlane = part.CreateReferencePlane()
offsetPlane.SetTypeByString(u"Distance")
offsetPlane.SetPropertyByReference(u"Plane", refZXPlane)
offsetPlane.SetProperty(u"Distance", EqStartY)
return offsetPlane
def createSketchOnShellPlane(part):
"""start_yでオフセットしたZX平面上にスケッチを作成する"""
offsetPlane = createOffsetZXPlane(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 drawBaseShapeForShell(sketch, width):
"""シェルの基準となる直線を作成し、寸法と位置を拘束する"""
sketch.OpenSketch()
# ZX平面上のスケッチでは、スケッチX方向をZ方向、スケッチY方向をX方向として扱う。
sketchStartX = ShellStartZ
sketchStartY = ShellStartX
# シェルの幅を表す直線
startVertex = sketch.CreateVertex(sketchStartX, sketchStartY)
endVertex = sketch.CreateVertex(sketchStartX, sketchStartY + width)
startRef = geomDoc.CreateReferenceFromItem(startVertex)
endRef = geomDoc.CreateReferenceFromItem(endVertex)
widthLine = sketch.CreateLine(
sketchStartX,
sketchStartY,
sketchStartX,
sketchStartY + width
)
widthLineRef = geomDoc.CreateReferenceFromItem(widthLine)
sketch.CreateMonoConstraint(u"verticality", widthLineRef)
# 直線の長さを方程式で拘束する
widthConstraint = sketch.CreateBiConstraint(u"distance", startRef, endRef)
setConstraintExpression(widthConstraint, u"Distance", EqWidth)
# 直線の開始点のX位置を方程式で拘束する
startXConstraint = sketch.CreateMonoConstraint(u"distancefromxaxis", startRef)
startXDistanceExpression = getDistanceExpressionFromSignedValue(EqStartX, ShellStartX)
setConstraintExpression(startXConstraint, u"Distance", startXDistanceExpression)
# 直線のZ位置を方程式で拘束する
startZConstraint = sketch.CreateMonoConstraint(u"distancefromyaxis", startRef)
startZDistanceExpression = getDistanceExpressionFromSignedValue(EqStartZ, ShellStartZ)
setConstraintExpression(startZConstraint, u"Distance", startZDistanceExpression)
sketch.CloseSketch()
def createShellByExtrude(part, sketch):
"""直線をY軸方向に押し出し、長方形のシェル形状を作成する"""
extrudeSurface = part.CreateExtrudeSurface(sketch)
extrudeSurface.SetTypeByName(u"OneSide")
extrudeSurface.SetReverse(False)
extrudeSurface.SetProperty(u"Height", EqHeight)
return extrudeSurface
def createShellPart(part):
"""Part内に方程式付きのシェル形状を作成する"""
sketch = createSketchOnShellPlane(part)
drawBaseShapeForShell(sketch, ShellWidth)
createShellByExtrude(part, sketch)
def main():
"""方程式付きのシェル形状を持つPartを作成する"""
createShellEquations()
part = createNewPart()
createShellPart(part)
part.ClosePart()
main()


