こちらの続きです。
Custom Featuresに挑む2 - C#ATIA
やっと出来たよ。
今日はコードも文章も無し!
こちらの続きです。
Custom Featuresに挑む1 - C#ATIA
思うように作成出来ずに挫折しかかってます。
作りたいものを進めるのは諦め、しばらくはCustom Featuresの機能する部分を
確かめる事にしました。
挫折した部分の1つがパラメーターです。
ダイアログに表示させている項目の値を、コマンド実行時に保存させ編集時には
再表示させるためには不可欠な要素です。
Fusion 360 Help
Fusion 360 Help
"Custom Pocket" をお借りし、この様な項目を追加しました。
両方とも、コマンドの実行には何も影響を与えません。単に作成の際に入力させ
編集時に再度表示させるのが目的です。
実際に実行時には問題ありません。
しかし編集時のダイアログを開くと・・・
1項目抜けてます。
抜けている綱目は、Int型の単位の無いものです。
(実は、Fusion360のパラメータの数値は、Int(整数)は無くfloat(実数)だけの様です)
単位無しでパラメータを作っているものの、勝手に単位を付けられちゃってます。
色々と挑戦していますが、この "単位の無い" パラメータが現状扱えないみたいです。
"単位が扱えない" よりは、逃げ道があるのですが、何とも困ってます。
まぁパラメータについては、不具合がある事を公言されてはいますが
Fusion 360 Help
単位無しについては、記載されていないですね。
恐らく今の所、長さと角度だけかな・・・。
(ドキュメントが不正確なのも困るけど、面倒な気持ちは痛いほど理解できる)
サーフェスと線類が混在し選択された状態で別々の色を付けたい と
昨年末辺りでご相談頂いていたのですが、遅くなりました。
CATIAの場合は色を変更する為には一度選択状態にする必要がありますが、
一辺にサーフェスと線類を別々に色付けする事は出来ません。
その為、サーフェスのみ 線類のみ の選択状態にする必要があります。
'catvba Option Explicit Sub CATMain() '準備 Dim doc As PartDocument Set doc = CATIA.ActiveDocument Dim sel As Selection Set sel = doc.Selection sel.Clear Dim pt As Part Set pt = doc.Part '一個目の形状セット Dim hyBdy As HybridBody Set hyBdy = pt.HybridBodies.Item(1) '選択処理を軽くするための魔法 'http://catiadoc.free.fr/online/interfaces/interface_Application.htm#HSOSynchronized CATIA.HSOSynchronized = False '意図的に形状セット内の全GSD要素を選択 Dim entity As AnyObject For Each entity In hyBdy.HybridShapes sel.Add entity Next '---本題はここから--- 'HybridShapeFactory取得 'http://catiadoc.free.fr/online/interfaces/interface_HybridShapeFactory.htm#GetGeometricalFeatureType Dim hyFact As HybridShapeFactory Set hyFact = pt.HybridShapeFactory '選択要素からHybridShapeFactoryでジオメトリのタイプを '判断し選択から外す 'For文は逆順に行わないとインデックスがズレます 'Surfaceは5です Dim idx As Long Dim geoType As Long For idx = sel.Count2 To 1 Step -1 'idx番目のジオメトリのタイプを取得 geoType = hyFact.GetGeometricalFeatureType(sel.Item(idx).Reference) 'サーフェス以外は選択を解除する If Not geoType = 5 Then Call sel.Remove(idx) End If Next 'この時点でサーフェスのみが選択状態になっている '色を変更する為のVisPropertySetを取得 'http://catiadoc.free.fr/online/interfaces/interface_VisPropertySet.htm Dim vis As VisPropertySet Set vis = sel.VisProperties 'SetRealColorの引数はR,G,Bで '4番目は良く分かってません(以前教わったような気はしてます) '赤色に変更してます Call vis.SetRealColor(255, 0, 0, 1) sel.Clear '無駄ですが、もう一度形状セット内の全GSD要素を選択 For Each entity In hyBdy.HybridShapes sel.Add entity Next '選択要素からHybridShapeFactoryでジオメトリのタイプを '判断し選択から外す 'Curveは2 Lineは3 Circleは4です For idx = sel.Count2 To 1 Step -1 'idx番目のジオメトリのタイプを取得 geoType = hyFact.GetGeometricalFeatureType(sel.Item(idx).Reference) 'サーフェス以外は選択を解除する Select Case geoType Case 2, 3, 4 '何もしない Case Else Call sel.Remove(idx) End Select Next 'この時点で線のみが選択状態になっている '緑色に変更してます Call vis.SetRealColor(0, 255, 0, 1) sel.Clear End Sub
形状セット内にはサーフェスと線が1個づつですが、全ての色を変更します。
実行前は左で実行後は右です。
上記にSetRealColorで4番目の引数について
'SetRealColorの引数はR,G,Bで '4番目は良く分かってません(以前教わったような気はしてます)
と記載していますが、こちらのサイトではより詳しく記載されています。
VisPropertySetオブジェクト|CATIAマクロの作成方法 | LiCLOG
助かります。
タイトルが異なりますが、こちらの続きです。
Fusion360 Ver2.0.9636 - C#ATIA
他人のコードを読むのが苦手の為なるべく避けているのですが、
さすがに新機能なので避けることが出来ずにチラッと読みました。
サンプルがここからDL出来る2個(Round Emboss , Custom Pocket)
しか見当たらないです。
Fusion 360 Help
Custom Features的なこと以外にも、"あ~厚みはこんな風に取得するんだ" と
今さらながら感心しました・・・。
・依頼通り、Command Definitionでコマンドを作る。
・但し、ボタンを押して実行する新作用のコマンドと一度作成した後
修正用のコマンドの2個の Command Definitionが必要。
(ネイティブコマンドのログを見ていても、異なる事は気が付いていました)
・CustomFeatureDefinitionを作る際、2個のCommand Definitionを抱き合わせる。
Fusion 360 Help
・CustomFeatureInputでCustomFeatureを作る。
その際、参照すべき形状類はaddDependencyで、数値等はaddCustomParameter
に突っ込んでおくと、編集時に利用出来る・・・と言う事かな?
Fusion 360 Help
このページとリンク元のページの説明書きに、”Ruled Surface feature” って
書いてあるのは "Custom Feature" の間違いだと思うので、後で突っ込んでおく。
まぁドキュメントは作るの面倒なので原本使いまわすよね。
(気持ちは十分な程、わかる)
・編集時は、まずタイムラインをCustomFeatureの手前に戻して、トランザクションを
食い止めろ(この辺が良く分かっていない)と言う事らしい。
・変更前の選択要素や数値類はCustomFeatureのdependenciesとparametersから
引っ張り出してダイアログに反映させるみたい。
・編集後、CustomFeatureより後ろのタイムラインでエラーを出したくなきゃ
dependenciesで参照をなるべく保て って事かな・・・自信無い。
(まぁそうだと思う。)
Executeイベント後は自動で計算するからね と言う事らしい。
今までの "要素を作るだけ" のコマンドに比べて、2.5~3倍ぐらいは手間がかかりそう。
アドインはこちらを使っていたのですが、
GitHub - tapnair/Fusion360AddinSkeleton: Framework to simplify the creation of Fusion 360 Addin
Custom Featuresは対応出来ないっぽい。
こちらを覚えなきゃダメかな。
GitHub - tapnair/apper: Fusion 360 Addin Framework
・・・結局、挑む手前で終わってます。
こちらを挑戦しました。
Command to toggle canvas visibility inside a Fusion file? - Autodesk Community
キャンバスの表示の切り替えがAPIで出来るか? って事です。
もう、直感で出来るのはわかります。但し、コードにするのは大変です。
が、やりました。しんどいのでルートコンポーネントのみです。
もう、ブラウザツリーの要素の表示/非表示やリネームやらなんやらは
出来る自信あります。ただ、大変です・・・。
タイトルが異なりますが、こちらの続きです。
Custom Features - C#ATIA
ドキュメントより後になったのは初めてでしたが、無事Updateされました。
アントリムも感動ですが、やはりAPIのCustom Featuresはもっと感動です。
アドインに革命が起こったと思っても良いレベルです。
APIからTextCommandsが利用出来るようになった時以来の感動。
あぁ、単に何時のバージョンで導入されたかの覚書です。
こちらの続きです。
スケッチの向き2 - C#ATIA
ようやく完成したので、こちらで公開しました。
GitHub - kantoku-code/Fusion360_X_Horizontal: When you start working on a sketch,Rotate the X axis of the sketch so that it is horizontal.
なるべくルートコンポーネントのスケッチの作業と同じような動作を
行うようにしたつもりです。
個人的に動きは満足しています。が、コード的にはちょっぴり不満足です。
前回記載した通り、スケッチに入った抜けたはイベントが提供されていない為
こんな仕組みで行っています。
皆こんな絵よくかけるよなぁ・・・。
①OnSketchEventクラスでThreadを立ち上げます。Fusion360APIとは無関係で
Pythonの機能です。
②Threadで0.1秒毎に、_onSketchCheckHandlerクラスを呼び出します。
これは、CustomEventオブジェクトです。
③GUI側の監視します。"スケッチに入った抜けた" は分からないのですが
"今はスケッチに入っているか?" は拾い出せるので、沢山の "今" を作りました。
④実際に作業者がスケッチに入ったり抜けたりします。
・・・良く考えたら絵が違うな。別に通知しているわけじゃないです。
監視されているだけです。
⑤"スケッチに入った抜けた" が分かったら、視点をX軸が水平になるように
回転させます。
不満なのは⑤の部分です。本当はこの様にしたかったんです。
_onSketchCheckHandlerクラスは判断出来た時に回転させていますが、
判断だけを行わせたかったんです。
最初はそのようにコードを書いたのですが、ちっとも反応してくれない為
諦めました。
"CustomEventオブジェクト" と言う名称なのだから、トリガーが発生した際のみ
イベントが発生するようにしたいんだけどなぁ。