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