読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

コンテキストメニューからフォルダを展開する

PowerMillには僕の知る限り、古いバージョンからフォルダの機能があります。
このフォルダなのですが、WinなExplorer(ディレクトリ)とはちょっと挙動が
異なり、何となく要望があって後から付け加えた機能にも感じます。

もちろんフォルダ機能が無ければ、Treeが長すぎて扱いにくくなる為
活用しています。(社内では僕だけですが・・・)

このフォルダを展開したり縮小したりが・・・・まとめて出来ない!
そう、CATIAのこんな感じの機能が欲しいんです。
f:id:kandennti:20170419184259p:plain
(CATIAもここにあるので、案外使わないのですが)


こちらのすごいマクロを参考に作ってみました。
(正確には、ほぼパクリ)
Solved: Create macro to pick folder and activate it - Autodesk Community


まず、実際にフォルダの展開縮小を行うマクロです。
(TreeExpansion.mac としておきます)

//PMill_Macro
//TreeExpansion.mac

function main(string FolderType, int Level) {
	string list ValidFolderNames={'ncprogram','toolpath','tool','boundary','pattern','featureset','featuregroup','workplane','model','stockmodel'}
	IF not member($ValidFolderNames,lcase($FolderType)) {
		MESSAGE ERROR '不適切なフォルダ名です!'
		RETURN
	}	
	string list Folders = get_folders($FolderType)
	IF (size($Folders) == 0) {
		RETURN
	}

	$Folders=reverse($Folders)
	string cmd = 'EXPLORER SELECT $FolderType ROOT'
	DoCommand $cmd

	//全部閉じる
	if $Level == 0 {
		DEBUG EXPLORER KEY LEFT
		RETURN
	}
   
	DEBUG EXPLORER KEY RIGHT_RECURSIVE
	
	//全部開く
	if $Level < 0 {
		RETURN
	}
	
   foreach ff in folders {
      EXPLORER SELECT FOLDER $ff NEW
      DEBUG EXPLORER KEY LEFT
   } 
   
	//1レベル
 	if $Level == 1 {
		RETURN
	}  
   
	//nレベル
	string list Lv_n_Fols = {}
	foreach ff in folders {
		string list f=tokens($ff,'\')
		IF (size($f) == ($Level + 1)) {
			int dmy = add_last($Lv_n_Fols, dirname($ff))
		}
	} 
	
 	if size($Lv_n_Fols) == 0 {
		//指定レベルまでフォルダなし-全展開
		string cmd = 'EXPLORER SELECT $FolderType ROOT'
		DoCommand $cmd
		DEBUG EXPLORER KEY RIGHT_RECURSIVE
		RETURN
	} 
	
	foreach ff in Lv_n_Fols {
		EXPLORER SELECT FOLDER $ff NEW
		DEBUG EXPLORER KEY RIGHT
	} 	
}

念のため、このマクロ単体では動きません。

CATIAの様にメニューからの呼び出しが面倒な為、マクロの呼び出しはコンテキストメニューから
行いたいです。 以前行ったこちらの様に。
工具コンテキストメニューから工具変更 - C#ATIA


その為、toolpath.XML に追記します。
(この辺の方法は、Helpのカスタムメニュー辺りに記載されています)

<?xml version="1.0"  encoding="utf-8" ?>

<menupage>
	<menupage label="ツリー展開">
		<button label="全て縮小" command='MACRO all\TreeExpansion.mac "toolpath" 0' />	
		<spacer/>
		<button label="1次展開" command='MACRO all\TreeExpansion.mac "toolpath" 1' />
		<button label="2次展開" command='MACRO all\TreeExpansion.mac "toolpath" 2' />
		<button label="全て展開" command='MACRO all\TreeExpansion.mac "toolpath" -1' />
	</menupage>
	
	・・・

</menupage>

実際に設定した上での操作はこんな感じです。

個人的には楽になりそうです。
が、もうちょっと操作性を良くしたいんですけど、設定ファイルを編集する
必要性が有りそうなので、迷い中。