C#ATIA

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

PMillマクロの隠れ型・隠れ関数

PowerMillのマクロを作る際、参考となるものは、インストールフォルダ内に
'Macro Programming Guide' があり(日本語版はサポートに言ってもらおう!)
これと、Web上のフォーラムだけが頼りです。


'Macro Programming Guide'(以下マニュアル) によるとPowerMillマクロの
変数の型は string,int,real,bool があり、それらのコンテナとして
array,list がある(混合させるのはNG) となっています。

マニュアルには記載されていないのですが、実はもう一つ entity型がありました。
ツールパスやバウンダリ等のエンティティ用の変数の型です。
当然コンテナも entity list として利用が可能です。

先日あまりの苦しさで作ったライブラリ的なものを作成する際、entity型の
存在は何となくわかっていたのですが、利用方法が良くわかっていません
でした。 その為、指定したフォルダ内をバンバンループさせて、必要条件を
満たしたものだけを、エンティティ名のみをリストに突っ込んで返しています。
(後々の処理を考えると、エンティティそのものを返したかったのですが・・・。)


更に型のみならず、それらを扱う為の隠れ関数(マニュアルには記載されていない)
が多数存在。

例えばfilter関数(これずっと欲しかった・・・。)
第一引数はListやFolder(ArrayもOKかも)で、第二引数が抜き出す条件です。

ツールパスフォルダ内の全てのツールパスを抜き出す場合は、こんな感じです。

	entity list toolpaths = filter(folder('toolpath'), '')

全ての場合は空の文字列です。
(マニュアルにはフォルダ名を指定する場合のみ、大文字小文字を区別するので注意しろ
 と記載されているのですが、途中から仕様が変更されたようです)


これを、計算済みのツールパスのみのリストとして取得したい場合は

	entity list computedpaths = filter(folder('toolpath'), 'Computed == 1')

第二引数に条件となるものを文字列として渡すようです。


'message info' 等、マクロユーザーに表示させるためにはエンティティ型のままでは、
出来ない為、Tree上に表示させている名前を取得したいところです。

そこでまた隠し関数のextract関数の登場です。
第一引数はListやFolderで、第二引数は抜き出すパラメータ名です。
(他の言語のmapやfancみたいなもの・・・そこまではいかないですが)
先程のfilterと組み合わせると

	entity list computedpaths = filter(folder('toolpath'), 'Computed == 1')
	string list names = extract(computedpaths , 'Name') 

これで、namesには計算済みツールパスの名前が全部取得できます。
又、これは一行で書くことが出来ます。

	string list names = extract(filter(folder('toolpath'), 'Computed == 1'), 'Name') 


又、こちらでフォルダ名を取得していますが、空のフォルダ名は取得できていません
でした。
フォルダ名リストを取得する - C#ATIA

これも、get_folders関数と言う隠し関数が存在しており、あんなメンドクサイ
コードを書かずにこれだけで空フォルダも含めて、全て取得できます。

	string list dirs = get_folders('toolpath')

これらをもっと早く知りたかった。 もうこちらのライブラリ的なものが要らない
気がしてます(涙)
非常に個人的なPowerMillマクロ用ライブラリ - C#ATIA



昨日のGUIやグラフィックもそうですが、マニュアルに記載されていない関数等が
かなり多数存在しているようです。 どうもこれらは開発側が利用する為に
試験的に導入されたもののようで、動作保障が無いようです。
恐らくエラー時に動作が不安定で最悪ソフトが落ちる程度で、エラーにならない
処理での利用であれば大丈夫な気がしてます。

これらを旧Delcamさんのフォーラムには、中の人が沢山記載しており
非常に重宝しています。(特にロイドさんが)
Autodeskさんのところには登場していないようですが・・・。


追記です。
entity型はマニュアル(2017)に記載がありました。手元に全て印刷したものが
2013だったもので、すいません。
また、object型と言う型もあり、get_typename関数で型のタイプも
取得できるようです。 動的なコードが書けると言う事ですね。

更に追記です。
filter・extract・get_folders何れも、マニュアルに記載がありました。すいません