2017年9月11日月曜日

良く使う処理はコマンドで

dirnameなんかもそうですが、良く使う処理は既にコマンド化されていたりするみたいです。

まずは親のオブジェクト名を取得する処理。
{
    string $p[]=`listRelatives -p $current`;
    print("\n"+$p[0]+"\n");

}
listRelativesは文字配列を返すため、いったん配列に代入しないといけないのは頂けません。
コレの代替コマンドは
{
    string $p=firstParentOf( $current );
    print("\n"+$p+"\n");
 
}
文字列で返ってくるのは中々良いのですが、オブジェクト名がロングネームでしか返ってこないので注意。


こういう時など、ロング名をショート名に変更したい場合、
{
    string $tmp[]=stringToStringArray( $long,"|" );
    string $short=$tmp[size($tmp)-1];
 
    print("\n"+$short+"\n");
 
}
こんな感じで配列の最後に入った値を取得するみたいな、なかなかの面倒くささ。
ネームスペースも外したい場合、更に複雑になりますね。

でも、この処理にも、こんなそのまんまの名称のコマンドが・・・。
{
    string $short=shortNameOf( $long );
 
    print("\n"+$short+"\n");
 
}
ただし、ネームスペースは分離できないようなので、その部分は自前で処理するしかなさそうです。

plugNodeStrippedを使用するとDAGパスとネームスペースを一気に除去できます。
2017/09/20追記


で、いちばん欲しいコマンドなのですが、指定したオブジェクトがどんなタイプなのかを調べる処理。
nodeTypeで調べても大抵 "transform"と返ってきます。
なので、子のshapeノードからタイプを調べる必要があるわけですが、これに専用のコマンドは無いようで、自力で行う必要があるみたいなのですね。
こんな風に。
{
    string $shape[]=`listRelatives -c -pa -ni -s $target`;
    string $type=`nodeType $shape[0]`;
 
    print("\n"+$type+"\n");
 
}

まぁ、transformノードに色々ブラ下げていると、nodeTypeに渡す値が$shape[0]に特定できないというのが原因だとは思います。