C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

getNumberOfSections

こちらに取り組みました。
解決済み: 工具径補正が使われて場合 ポスト処理後の工具詳細情報に追加させたい - Autodesk Community

ポストコンフィグの改造は、自分にも刺激的です。忘れないうちに覚書を。


ポスト処理する際、こちらのエントリー関数なるものと戦う事になります。
Entry Functions


かなり大雑把な流れとしてはこんな感じです。

・onOpen()
 ↓
・onSection()
 ↓  ↑
・onSectionEnd()
 ↓
・onClose()

あぁ上手く表現出来ない。onSection - onSectionEnd 間はツールパス分呼び出されます。
最初は簡単かな? と思っていたのですが、工具径補正(G41,G42)は工具が情報を
持っているのではなく、ツールパスが持っています。

そしてご希望の工具情報は onOpen で処理されています。
つまり onOpen で工具情報を書き出そうとしても、onSection が未処理の為
工具径補正を使用しているのか? いないのか? が分らぬ状態のタイミングで
工具情報を書き出す事となり、
”少し試した所そうでもない事が分かりました。”
と言う運びとなったわけです。
要は onOpen で工具径補正の使用の有無を知る方法を見付けなければなりません。

実はちょっと心当たりがありました。
セットアップシート用のスクリプトを作ろうとした際(完全に中断・・と言うか忘れている)
何かの拍子で onOpen で全ての Section を走査する関数か何かがあり
”あぁ onSection 使わなくても出来るじゃん”
と思った事があったのですが、肝心の関数名を忘れてしまい、出だしから苦労しました。
APIでのツールパスはOperationオブジェクトなので、勘違いして余計に時間がかかりました)

で、やっと見つけたのが "getNumberOfSections" 関数です。

function getCompensationInfo() {
  strategyWhiteLst = ["contour2d", "bore", "thread", "circular"];
  compensationTypeBlackLst = ["computer", "off"];
  g41Lst = ["climb-control", "climb-wear", "conventional-inverseWear", "left-control", "left-wear", "right-inverseWear"];
  g42Lst = ["conventional-control", "conventional-wear", "climb-inverseWear", "right-control", "right-wear", "left-inverseWear"];

  var dict = {}
  for (var i = 0; i < getNumberOfSections(); ++i) { // <-これです
    var sectioni = getSection(i);
・・・

getNumberOfSections関数は、ポスト処理に投げられたツールパス達を投げ返してくれます。
つまりonSection関数が呼び出される前でも、ツールパスの情報が取得出来ます。

ループで回しまくっている section(ツールパス) からは、大半は Parameter として
情報を引き出せるので、必要な情報を引っ張り出します。

section.getParameter(<パラメータ名>)

肝心のパラメータ名は、Dumperポストで処理させて地道に探しています。
https://cam.autodesk.com/hsmposts?p=dump

これらの方法で習得した工具径補正情報は、

Key:Tコード Value:G41 か G42 又は 両方

の辞書(Javascrptだと、ハッシュテーブルかな?)を作成し、工具情報を書き出す際、
KeyとしてのTコードを利用し情報を引き出して書き出しました。

絶対、言葉の説明だけじゃ理解されないと思う。(=他人には役に立たない)