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