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