タイトルは省略しましたが、正しくは
”Fusion360スクリプト/アドインをPythonで開発する際、VSCodeの下らない程の些細なTips”
です。今まで試してきて "これは!" と思う事を思い出せる範囲で。
- 環境&お断り
- Fusion360からVSCodeが起動しない1
- Fusion360からVSCodeが起動しない2
- VSCodeでデバッグ出来ない
- adsk.core .fusion .cam のインポート問題1
- adsk.core .fusion .cam のインポート問題2
- 静的構文チェックpylintを無効にする
- スクリプト新作時の雛形
- 削除したらどうなるか?
- VSCodeの起動のしかた
- デバック実行ファイルを切り替え
- デバッグ時のコードコピペ
- 小言
環境&お断り
・Win10 Pro/Home
・Fusion360 Ver2.0.8624
・VSCode Ver1.47.2
・ms-Pythpn Ver2020.6.91350 (又は 2020.5.78807)
すいません、環境が無い為MACはわかりません。又、C++も試していない為わかりませんが
類似している部分はあるはずです。
又、Updateのペースが早いため、記載内容が不適切になっている可能性が高いです。
寿命としては半年も無いかも知れません。
Fusion360からVSCodeが起動しない1
まさかこれを書いている時に出くわすとは・・・。
「ms-Pythpn」のバージョンの影響で起動しない場合があります。
古い「ms-Pythpn」をインストールする方法が以前はVSCode上で可能でしたが
現状は出来なくなっています。
※追記しますが、マーケットプレイスのバグだそうです。
そのうち治るかも知れません。
visual studio code - How to install previous version of Python extension for VSCode - Stack Overflow
・「ms-Pythpn」を削除
拡張がインストールされている場合は、フォルダ自体を削除した方が良さそうです。
恐らくここに拡張のフォルダがあるはずです。
C:\Users<ユーザー名>\.vscode\extensions\ms-python.python-<バージョン>
まぁ別の所に移動しちゃっても良いかもしれませんが。
・古い「ms-Pythpn」のVSIXファイルをDLする。
「Ver2020.5.78807以降は使いたくない」と言う情報が有ったので、そうしておきます。
Release 2020.5.78807 · microsoft/vscode-python · GitHub
僕はVer2020.6.91350で使ってます。
Release 2020.6.91350 · microsoft/vscode-python · GitHub
一番下のここにクリック。
・VSIXファイルインストール
ここをご参考下さい。
VSCodeの拡張機能をバージョン指定でインストールする方法をまとめてみた. - Qiita
重要なので再度お伝えしますが、
VSCodeの拡張機能の自動更新を無効は必須です。
Fusion360からVSCodeが起動しない2
上記で対応出来ない場合、非常に面倒なのですがFusion360・VSCode共に
完全なるアンインストール&再インストールするしかない様な気がしてます。
Fusion360からVSCodeが起動しなくなった時の対処方法 - C#ATIA
VSCodeでデバッグ出来ない
過去に何度かデバッグ出来ない状態 ”socket.timeout: timed out” エラーを
経験しています。(実行はOKでデバッグがNGな状態)
Solved: socket.timeout: timed out - Autodesk Community
原因ははっきりしていないのですが、解決方法は簡単です。
Fusion360のUpdateを待つのみです。
「ms-Pythpn」のUpdateが関係している可能性もあるので、こちらの
「拡張機能の自動更新を無効にする」状態にすることで効果があるかも
しれませんが、個人的にFusion360のUpdateが一番の原因のような
気はしています。
adsk.core .fusion .cam のインポート問題1
VSCodeの左下の警告(赤印)が出ている部分をクリックし、問題(黄印)を表示させた際
グズグズとメッセージが出てきますが、これは解決させる方法を知りません。
(少し下に記載した「静的構文チェックpylintを無効にする」で解消するかも。)
但し、実行もデバッグも問題無く出来ます。
adsk.core .fusion .cam のインポート問題2
デバッグ時は通常は黄印部分でVSCodeから実行させることになると思いますが、
あまりに初歩的なエラーな場合、実行する事が出来ません。
実行さえ出来れば、tracebackでエラーの位置や内容を把握することが
出来るのですが・・・。(コードをそのようにしておく必要があります)
そのような場合、ターミナルから実行する(赤印)とかなりヒントが得られます。
ところが、通常新規で作ったスクリプトの場合、adsk.core .fusion .cam の
インポートについてのエラーとなり、肝心なエラー部分までたどり着けません。
それを解決する方法が、こちらです。
ターミナルで実行の 'adsk' モジュール見つからん問題解消 - C#ATIA
静的構文チェックpylintを無効にする
エディタ上で構文チェックでエラーとなっている場合、下に波線が表示されます。
拡張で「pylint」がインストールされている場合は、コンテキストメニュー
(右クリック)の「無効」で解消するはずです。
結果的に、こちらの記載されている「pylintを無効化する」と同じことだと
思ってます。
VSCodeのPython開発環境でpylintの代わりにflake8を導入し自動整形を設定する - Qiita
個人的には、無効にしていないです。(他の警告も表示されないので)
スクリプト新作時の雛形
スクリプト新作時の雛形はインストールフォルダ内にあります。
毎回書き換えているのであれば、雛形を書き換えてしまえば便利です。
スクリプト新作時の雛形 - C#ATIA
コメントに記載していますが、Update後も書き換えられません。
又、アドインの雛形は別のところにあります。(察してください)
削除したらどうなるか?
※本機能は、紛らわしいと言う事でVer2.0.8749から削除されました。
任意のスクリプト/アドインのコンテキストメニューで表示される「削除」を
押したらどうなるか? と言う事です。
結論としてはファイルやフォルダは削除されません。
但し、再度利用出来る状態にするには、ひと手間必要でこちらに記載があります。
Mod the Machine: Un-remove Fusion 360 add-in
VSCodeの起動のしかた
VSCodeは単体で起動してもFusion360のAPIにアクセス出来ません。
必ずFusion360からVSCodeを起動する必要があります。
Fusion360からVSCodeを起動する際は恐らくこちらの2つの方法があると思っています。
両方とも基本的には同じですが緑印から起動すると、実行時に先頭付近で一度
止まるような仕組みになっているようです。
面倒なのでいつも「編集」から起動しちゃってます。
デバック実行ファイルを切り替え
これ最近知りました。
Fusion360のスクリプトのファイル構成のお話です。仮に「NewScript1」とした場合
「NewScript1」フォルダ
L NewScript1.manifest
L NewScript1.py
の状態になっている必要があります。(ファイルの中身もそれなりに)
そのような状態で「Hoge.py」を実行したいなぁ と言う場面です。
デバッグ起動のこちらが表示されているなら切断する。
他の方がこの方法を使う場面があるものか不明ですが・・・。
デバッグ時のコードコピペ
ちょっと込み入ったお話ですが早い話が "手抜きしたい" と言うお話です。
例えばこんな感じでスケッチの円を描いたデータを用意します。
この円の直径をダイアログで表示させると言う、意味も無いものを作ろうとします。
import adsk.core, adsk.fusion, traceback def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface des :adsk.fusion.Design = app.activeProduct root = des.rootComponent skt = root.sketches[0] pass except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
ここまでは雛形をチョロチョロっと変更したもので、円の描かれているスケッチまでを
取得しています。これを実行する前に "pass" にブレークポイントを設定します。
これで実行した際、当然ブレークポイントで止まりますが目的の円はここに入ってます。
「何でそこに入っているってわかるの?」と言うのは別として、入ってます。
それをお伝えするのが目的では無いので・・・。
「SketchCircles」上でコンテキストメニューを表示させるとこんな感じです。
「式としてコピー」を選択しコード側にペーストすると
コードとして利用出来る状態でペーストしてくれます。
プロパティの値を利用したければ「値のコピー」を利用すると便利ですが、
オブジェクトの場合はあまり意味が無いかも。
そんな感じで行うと、比較的手間なく完成します。
・・・ skt = root.sketches[0] circle = skt.sketchCurves.sketchCircles[0] ui.messageBox('Diameter : {}'.format(circle.radius * 2)) ・・・
小言
過去ログ見たら、SpyderからVSCodeに切り替わってから1年経っていないようです。
正直な所、以前に比べトラブルが激増しました。間違いないです。
それでも切り替わったことにより、変数が階層状態で確認出来るようになった
メリットは大きく、個人的には理解が桁違いに深まりました。
でも、トラブル多すぎかな・・・。