はじめに
今回、fusion360のpython apiを用いてサイクロイド曲線を描くことがあったので備忘録代わりに書き示しておきます。
python apiを用いて任意の図形を作れるのは魅力的だと思いました。
moduleのインポートの仕方
fusion360環境でのpythonは通常の実行環境と異なるので、pythonのmoduleを通常のpip installでは保存できません。ちょっとだけめんどくさかったのでメモ書きしておきます。
環境の確認
アドインを開いてもらって適当なサンプルスクリプトのpythonファイルを選択していただくと画像のように絶対パスが入手できます。
今回はこの絶対パスのうちの
C:/Users/[User Name]/AppData/Local/Autodesk/webdeploy/production/525fe9b2ece26c4d179982b11ecdfb713cb5058f/Python/
のdirectoryに移動します。そのdirectory上で
python -m pip install [任意のmodule]
これで任意のmoduleをインストールできます。今回はnumpyをダウンロードしました。
サイクロイド曲線の描き方
今回は公式ドキュメントを参考にプログラムを作りました。
公式ドキュメントを読んでいると任意の点を図面に描写(points.add(adsk.core.Point3D.create(x, y, 0))して、それらを曲線で繋いでいる(spline = sketch.sketchCurves.sketchFittedSplines.add(points))ことが読み取れます。
つまり任意の点がサイクロイド曲線上に載るようにプログラムをかいてあげれば解決するということです。
そのため、このようにプログラムすればサイクロイドが描写できます。
ここでaはサイクロイドの半径、resolutionはポイント数の細かさです。
ここでaはサイクロイドの半径、resolutionはポイント数の細かさです。
from numpy import sin,pi,cos
#parameter
resolution = 10
a = 1
# Define the points the spline with fit through.
for i in range(resolution):
theta = i*2*pi/resolution
x = a*(theta-sin(theta))
y = a*(1-cos(theta))
points.add(adsk.core.Point3D.create(x, y, 0))
# Create the spline.
spline = sketch.sketchCurves.sketchFittedSplines.add(points)
以上でサイクロイドが書けます。基本的に公式ドキュメントを読んでpython moduleさえDLできればなんとかなることがわかりました。
以下に全部のコードを記載します。
/import adsk.core, adsk.fusion, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
design = app.activeProduct
# Get the root component of the active design.
rootComp = design.rootComponent
# Create a new sketch on the xy plane.
sketch = rootComp.sketches.add(rootComp.xYConstructionPlane)
# Create an object collection for the points.
points = adsk.core.ObjectCollection.create()
"""
ここから任意の図形の定義
"""
from numpy import sin,pi,cos
#parameter
resolution = 10
a = 1
# Define the points the spline with fit through.
for i in range(resolution):
theta = i*2*pi/resolution
x = a*(theta-sin(theta))
y = a*(1-cos(theta))
points.add(adsk.core.Point3D.create(x, y, 0))
# Create the spline.
spline = sketch.sketchCurves.sketchFittedSplines.add(points)
"""
ここまで任意の図形の定義
"""
# Get spline fit points
fitPoints = spline.fitPoints
# Get the second fit point
fitPoint = fitPoints.item(1)
# If there is no the relative tangent handle, activate the tangent handle
line = spline.getTangentHandle(fitPoint)
if line is None:
line = spline.activateTangentHandle(fitPoint)
# Get the tangent handle
gottenLine = spline.getTangentHandle(fitPoint)
# Delete the tangent handle
gottenLine.deleteMe()
# Activate the curvature handle
# If the curvature handle activated. the relative tangentHandle is activated automatically
activatedArc= spline.activateCurvatureHandle(fitPoint)
# Get curvature handle and tangent handle
gottenArc= spline.getCurvatureHandle(fitPoint)
gottenLine = spline.getTangentHandle(fitPoint)
# Delete curvature handle
gottenArc.deleteMe();
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
コメント