C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

flatten関数

こちらでチョロッと書いたのですが、覚書です。
Re: Need help with macro to check through NC programs - Autodesk Community
肝になるのは、複数あるNCプログラム内で登録されているツールパスを全て
取得する方法です。

以前、書きましたがPMillのマクロでは、ネストしたList(List内にList)を作る事が
出来ません。(イロイロ試したつもりですが、やっぱり作れません)
複数のツールパスが入っているNCプログラムの場合、ツールパスのリストを取得するには
こんな感じです。(NCプログラム名が 'hoge' の場合)

	object list nc_tps_obj = entity('ncprogram', 'hoge').nctoolpath

nctoolpathメソッド? は、Helpにも記載されていない気がしてます。

デバッガで見るとこんな状態です。
f:id:kandennti:20180611104321p:plain
MAP型は、object型で(大体)取得できます。
でも、これは1つのNCプログラム分なので全てのプログラムのツールパスを取得したい場合
[entity] List([object] List)の状態のネストしたListの形になるため、
直接変数で受け取ることが出来ません。

そこでflatten関数の登場です。
他の言語同様、flatten関数はネストしたListを1次のList化するものです。
その為、全てのNCプログラムの全てのツールパス名を取得する為には

	string list nc_tps = extract(flatten(extract(folder('ncprogram'), 'nctoolpath')), 'name')

の1行で出来ます。
extractがネストしてたりするので、わかりにくいのですけどね。