こちらの続きです。
apperを食す4 - C#ATIA
やっと加工出来ました。
Re: 2回転のメビウスの帯 - Autodesk Community
しつこいのですがこれです。
5個に分割したのはこんな感じです。
加工自体は、片側30分以内で加工出来ていた記憶なので、
0.5h x 5(個) x 2(表裏) = 5.0h
以内です。
3軸でも一体で加工したいのですが、単純な6方向じゃ削り残っちゃうことは
確認してます。どうすれば良いのかな・・・。
こちらの続きです。
apperを食す4 - C#ATIA
やっと加工出来ました。
Re: 2回転のメビウスの帯 - Autodesk Community
しつこいのですがこれです。
5個に分割したのはこんな感じです。
加工自体は、片側30分以内で加工出来ていた記憶なので、
0.5h x 5(個) x 2(表裏) = 5.0h
以内です。
3軸でも一体で加工したいのですが、単純な6方向じゃ削り残っちゃうことは
確認してます。どうすれば良いのかな・・・。
自分がFusion360のAPIを取り組み始めた際、どの様に進めていったのか
よく覚えていないのですが・・・調べてみると、3個目でイベント使って
いるとは。結構尖ってました。
最近になり気が付いたのですが、"Fusion360APIで操作の記録が出来ない"
と言う現実から考え、最初に取り組むべきはサンプルコードの改造が一番
取り掛かりやすいと感じています。
念の為、今回はこの様の環境で試しています。
・Fusion360 Ver2.0.9849
・Win10
・ms-python.python v2021.2.633441544
尚、python的な説明は行いません。(僕も細かな事がわかっていませんので)
まず、こちらの "素のコード" の方法で、新規のスプリクトを作成します。
Fusion360のスクリプト/アドインの登録 - C#ATIA
"編集" ボタンを押すとVSCodeが起動すると何やらコードが記載されています。
折角なので、実行してみましょう。VSCodeからデバッグとして実行する方法が
Web関係の実行方法とちょっと異なる事を最近知りました。
手順としては、
アクティビティーバーの "A" をクリック。サイドバーが切り替わります。
続いてサイドバーの一番上の "Python:Attach" の左にある三角 "B" をクリック。
これだけで実行されてしまうと思います。
念の為、 コードを修正し再度実行したい場合は、"C" 部分をクリックすると
再度実行になります。(未保存で実行しても、実行直前に強制保存されます。)
もっと細かな操作は、こちらをご覧になるとよろしいかと思います。
Fusion 360 Help
実行結果としては 'Hello script' とダイアログが表示されます。
・・・表示されるだけです。まぁ画像も要らないでしょう。
"もうちょっとFusion360APIらしいものを" と思うので、ドキュメントのこちらを
お借りしましょう。
Fusion 360 Help
押し出しのサンプルです。何はともあれ、実行してみましょう。
タイムラインを見ると
スケッチ -> コンポーネント新作 -> 押し出し
を実行した事がわかります。
又、よく見てみると新たなドキュメントも作成されています。
つまりそれらの処理が書かれているってことですね! それらを見てみましょう。
まず、サンプルが読みにくいため、コメントの日本語化と追記し、型ヒントを
利用した状態に修正して見ました。処理内容は変更していません。
import adsk.core, adsk.fusion, traceback def run(context): ui :adsk.core.UserInterface = None try: # Fusion360取得 app :adsk.core.Application = adsk.core.Application.get() # ユーザーインターフェース取得 ui = app.userInterface # 新たなドキュメント作成 doc :adsk.fusion.FusionDocument = app.documents.add( adsk.core.DocumentTypes.FusionDesignDocumentType) # デザイン取得 design :adsk.fusion.Design = app.activeProduct # アクティブなデザインのルートコンポーネントを取得 rootComp :adsk.fusion.Component = design.rootComponent # xy平面に新しいスケッチを作成 sketches :adsk.fusion.Sketches = rootComp.sketches xyPlane :adsk.fusion.ConstructionPlane = rootComp.xYConstructionPlane sketch :adsk.fusion.Sketch = sketches.add(xyPlane) # 円を描く circles :adsk.fusion.SketchCircles = sketch.sketchCurves.sketchCircles circle1 :adsk.fusion.SketchCircle = circles.addByCenterRadius( adsk.core.Point3D.create(0, 0, 0), 2) # 円で定義されたプロファイルを取得 prof :adsk.fusion.Profile = sketch.profiles.item(0) # 範囲が5cm distance :adsk.core.ValueInput = adsk.core.ValueInput.createByReal(5) # 押し出しを作成 extrudes :adsk.fusion.ExtendFeatures = rootComp.features.extrudeFeatures ext :adsk.fusion.ExtendFeature = extrudes.addSimple( prof, distance, adsk.fusion.FeatureOperations.NewComponentFeatureOperation) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
本来、ここまで型ヒントを使う必要は無いとは思いますが、過剰な程やっています。
(横長の状態が嫌な為、オリジナルで1行の部分も適当に改行しています)
通常であれば、処理の最初の方から順番に "※※は▽▽の機能です" の様な説明を
するものですが、性格が歪んでいる為、逆から行います。
まず、最後の方のここをコメント化します。4行になっていますが、実質1行です。
・・・ # 押し出しを作成 extrudes :adsk.fusion.ExtendFeatures = rootComp.features.extrudeFeatures # ext :adsk.fusion.ExtendFeature = extrudes.addSimple( # prof, # distance, # adsk.fusion.FeatureOperations.NewComponentFeatureOperation) except: ・・・
この状態で、実行すると
スケッチだけになってしまいました。コメント化した部分のみで
”コンポーネント新作 -> 押し出し” を実行している事が分かります。
コメント化したaddSimpleメソッドは、こちらです。
Fusion 360 Help
"profile" と "distance" と "operation" の3つのパラメータを受け取り、
ExtrudeFeatureオブジェクトを返してきます。
それぞれGUIでの表示はこんな感じです。
まぁ日本語にすれば察しはつきます。
"profile" はGUI同様、スケッチの要素で囲まれている領域ですね。
意外なのは "distance" がdouble(pythonではfloat)型では無いところです。
これは距離では、式が利用出来たり、単位を付けられたりする為だと思われます。
"operation" は、FeatureOperations列挙型です。
Fusion 360 Help
使われていた "NewComponentFeatureOperation" は、新しいボディを作りつつ、
新たなコンポーネントに入れる事の様です。・・・GUIではありませんね。
コンポーネントを作成している犯人はわかりました。
折角なので、ここでコンポーネントを作成しないでボディだけ新作してみましょう。
コメント化した部分は元に戻し、"operation" の部分のみを書き換えます。
・・・ # 押し出しを作成 extrudes :adsk.fusion.ExtendFeatures = rootComp.features.extrudeFeatures ext :adsk.fusion.ExtendFeature = extrudes.addSimple( prof, distance, adsk.fusion.FeatureOperations.NewBodyFeatureOperation) #ここ修正 except: ・・・
念の為、Fusion360の編集からVSCodeを起動すると、"."を書いた時点でインテリセンスで
メソッド・プロパティ類が候補として表示されます。
型ヒントを使用すると楽ですね。
これを実行すると
形状は変わりませんが、コンポーネントは作成されずボディが出来ました。
しばらくフォーラムのポストコンフィグに取り組みました。
解決済み: 製造の中にある手動NCのメッセージ表示、呼び出しプログラムを対応と変更したい。 - Autodesk Community
"手動NC" は機能がある事は知っていたのですが、利用している実績を
知りませんでした。(確か海外のサイトのチュートリアルで見たぐらいです)
PowerMillの場合、タップの加工前に切り子を除去したいのでM00を入れたいとか
ポストのファイル内で、工具の種類で判断して追記したりするのですが、
手動NCの場合、工程そのものにM00を追加する感じです。
必要な条件を箇条書きに出来るような場合は、コンピュータに任せて処理した方が
間違いないのでそのようにしますが、人間が何となく判断するようなものは
コンピュータでは判断出来ませんよね?(将来AIが何とかする?)
そうなると、ポスト処理後にNCプログラムをエディタで編集するしか方法が
無いのですが、それを行うと機械をドカンとやってしまう可能性が高まります。
今まで使用してきたCAMソフトでは、Fusion360の手動NCのような機能が有りません
でした。イレギュラーなパターンに柔軟な対応が出来る機能です。
新鮮で強力な機能な気がします。PowerMillにも欲しい。
いかん。すっかりブログを更新していませんでした。
最大の理由はこちら。
electron - C#ATIA
Javascript+html+CSSが分かっていない状態で取り組んでいる事が原因で
ちっとも理解出来ていない為、electronの前にweb絡みの本も追加購入。
にしても、相変わらず理解に苦しんでます。世の中の先端がこれだと考えると
皆さん良くこんなの書けるなと感心します。とにかく書きにくい。
Fusion360に関してはチョロチョロフォーラムには書いてます。
・全てのスケッチテキストのフォントを変更する。(イマイチです)
Solved: Re: Script to edit font across multiple sketches - Autodesk Community
・パターンで作成されたBodyの属性を反映する。確認する。(質問者さんは不満足)
Re: Object: attributes - Autodesk Community
これ自分じゃないけど、環境を変更する方法。
ツールバーからcontrolDefinitionを取得してゴニョゴニョするやつ。
忘れちゃうんだよなぁ。
Solved: Re: Commands to change View Environment? - Autodesk Community
こちらはちょっと頑張りたい。
Re: 大規模アセンブリを動かす方法の一つとして - Autodesk Community
自分で、やっぱりJavascriptをやりたくないんだろうなぁ と感じる。
そう言えば、昨年の最後に "もっと初心者向けのコンテンツを書こう” って
書いたくせに1個も書いてません。(既に3月)
いや、1個だけありました。これは役立つと信じたい。
Fusion360のスクリプト/アドインの登録 - C#ATIA
探してみると、既にreisyuさんがキッチリ書かれたシリーズがあるんですよね。
Fusion 360 を Pythonで動かそう その1 スクリプトの新規作成 - Qiita
(2021/2/27現在 1~11まであります)
そうなると、何をネタにしようか迷ったのですが、何時もお世話になるAPIの
リファレンスマニュアルについて書いておくことにします。
念の為、動作環境は
・Fusion360 Ver2.0.9719
・OS Win10
・ブラウザ Google Chrome
で、pythonとしてお話進めます。
Fusion360の場合、Microsoft社のOffice製品の "マクロの記録" のような操作を
コード化するような機能が有りません。残念な事にゴリゴリ書くしか方法がありません。
そうなると頼るものがAPIリファレンスとサンプルコードしかないのですが、
APIリファレンスは英語版しかありません。既にハードルを上げまくっている
のですが、現実なので仕方がありません。
実はAPIリファレンスは2種類あります。一つはオンライン版で、こちらです。
Fusion 360 Help
もう一つはオフライン版です。
Getting Offline Access to the Fusion 360 API Help - Ekins Solutions, LLC
(上記オンライン版のページにもオフライン版がダウンロード出来ます)
オフライン版はちょっと古いので、比較的新しい機能は記載されていないと思います。
(過去に何度かオンライン版のサーバーがダウンしていたことがあり、Ekins氏の好意で
Upされています。偶に更新したファイルに変更してくれているようです。)
情報量や使い勝手を考え、オンライン版でお話を進めます。
MS Office等の場合は、目的の文字を選択状態にしF1キーを押すとHelpが表示されますが、
Fusion360の場合はその様な方法はありません。
APIに関しては、サイドバーの下の方はこのような感じです。まぁ見たままですが。
主に利用する事になるのは、"Fusion 360 API Reference Manual" - "Objects" です。
例えば、みんな大好きSketchオブジェクトを調べたい時のおススメの方法です。
折角検索したので、Sketchオブジェクトを見てみましょう。
1:オブジェクト名です。
2:スーパークラスです。まぁあまり関係無いかも・・・。
3:オブジェクトの説明です。
4:メソッドです。表現として正しくないかも知れませんが、関数です。
5:プロパティです。表現として正しくないかも知れませんが、変数です。
6:このオブジェクトのアクセス元です。主にこのオブジェクトのコレクションや
このオブジェクトをプロパティとしているアクセス元です。
7:サンプルコードへのリンク。
8:このオブジェクトを導入した時期です。これもあまり関係無いです。
Sketchオブジェクトにはありませんが、イベントや派生先のオブジェクトも
記載されたりしているオブジェクトもあります。
実際に頻繁に利用するのは、メソッドとプロパティです。
それぞれの詳細はクリックする事で見れます。スケッチの原点を示す
originプロパティを見てみます。
A:プロパティ名です。
B:このプロパティの所有オブジェクトです。
C:プロパティの説明です。
D:説明の言語の切り替えタブです。
E:使い方です。
F:プロパティの値の説明と値の型です。型に関してはpythonの場合、動的型付け言語
の為、あまり大きな意味も無いように感じますが、プロパティが読み書き可能(read/write)
なものか、読み込み専用(read only)なのかが記載されており重要です。
G:このプロパティを導入した時期です。これもあまり関係無いです。
メソッドに関してもほぼ同様な感じですが、引数(パラメータ)や戻り値の説明等も有ります。
又、メソッドの場合は "E" も重要です。引数の数・種類や戻り値の受け方も知る必要が
有ります。
自分の場合、プロパティやメソッド名をクリックしてリンクを開くより、右クリックで
新たなタブを開く事の方が遥かに多いです。(行ったり来たりを避けたい)
新たなタブを開く方法ですが、サイドバー側で行うと100%リンク切れ(エラー404)に
なります。サイト側は極稀にリンク切れも有りますが、ほぼ大丈夫です。
と、ここまで書いたものの、薄い内容しか記載していないですね・・・。
逆に迷ってしまうだろうか?
全然気が付きませんでした。
Solved: Fusion 360 with PowerMill Ultimate - Autodesk Community
昨年の8月じゃない・・・。うちがPowerMillの保守を切ってしまった上、
フォーラムも見ていなかった為、気が付きませんでした。
前々から噂があったり、ライセンス絡みでそれらしき雰囲気はありました。
今の所、製品名だけが変更されたのみっぽいのですが・・・。
PowerMillユーザーが一緒になる事を拒否する一番の理由は、あまりに機能に
差があるからだろうと思います。(僕も一緒になって欲しくない と思ってます)
以前何処かに記載したような記憶なのですが、時間があるため業務で使用する為の
アプリを作ろうかと考えてます。・・・出来るかな?
悩みまくったけれどelectronにしようかと考えてます。
Javascript+html+CSSでデスクトップアプリが作成可能なのですが、
何れも持ち合わせていない技術です。ゴールまで辿り着けるのだろうか?
技術的な情報は、Fusion360APIとは比較にならないぐらいあるのですが、
サンプルを探し回ったこれが良いのかな?
GitHub - LeeDDHH/electron-api-demos-ja: Electron APIに触れてみる
本も購入し(UI絡みの記述が多く、心が折れる)、ここに記載したから
もう逃げられないな。(イザと言う時は逃げるけど)