オブジェクトが選択されている状態でエッジを返したり、メッシュが選択されている状態で頂点を返したりと、何が選択されていても指定のタイプで返すための関数です。
 頂点が選択されてない!などのエラーを吐き出すのも微妙だし、毎回タイプごとに変換するMELを書くのも面倒だったのでまとめてみました。
 親を調べたり子を調べたりと、いろいろ手間ですし^^;
 意外と便利に使えてますv
ソース
  
// 選択中のオブジェクトやコンポーネントを指定のタイプで返す。
//  戻値:指定したタイプの一覧(頂点など) 引数:タイプ(vertex|edge|face|mesh|transform),戻値を一つにするフラグ
global proc string[] getSelectParticularType( string $aType, int $aSingleFlag ){
	string $aSelect[] = `ls -os -fl -showType`;
	string $aReternList[] = {};
	
	if( size($aSelect) == 0 ){
		return( {} );
	}
	
	int $i = 0;
	for( $i = 0 ; $i < size($aSelect) ; $i+=2 ){
		if( $aSelect[1+$i] == "float3" ){
			if( $aType == "vertex" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toVertex $aSelect[0+$i]` );
			}else if( $aType == "edge" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toEdge $aSelect[0+$i]` );
			}else if( $aType == "face" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toFace $aSelect[0+$i]` );
			}else if( $aType == "mesh" ){
				$aReternList = stringArrayCatenate( $aReternList, `listRelatives -p $aSelect[0+$i]` );
			}else if( $aType == "transform" ){
				string $aMesh[] = `listRelatives -p $aSelect[0+$i]`;
				$aReternList = stringArrayCatenate( $aReternList, `listRelatives -p $aMesh[0]` );
			}
		}else if( $aSelect[1+$i] == "mesh" ){
			if( $aType == "vertex" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toVertex $aSelect[0+$i]` );
			}else if( $aType == "edge" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toEdge $aSelect[0+$i]` );
			}else if( $aType == "face" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toFace $aSelect[0+$i]` );
			}else if( $aType == "mesh" ){
				$aReternList[size($aReternList)] = $aSelect[0+$i];
			}else if( $aType == "transform" ){
				$aReternList = stringArrayCatenate( $aReternList, `listRelatives -p $aSelect[0+$i]` );
			}
		}else if( $aSelect[1+$i] == "transform" ){
			if( $aType == "vertex" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toVertex $aSelect[0+$i]` );
			}else if( $aType == "edge" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toEdge $aSelect[0+$i]` );
			}else if( $aType == "face" ){
				$aReternList = stringArrayCatenate( $aReternList, `polyListComponentConversion -toFace $aSelect[0+$i]` );
			}else if( $aType == "mesh" ){
				$aReternList = stringArrayCatenate( $aReternList, `listRelatives -shapes $aSelect[0+$i]` );
			}else if( $aType == "transform" ){
				$aReternList[size($aReternList)] = $aSelect[0+$i];
			}
		}
	}
	$aReternList = stringArrayRemoveDuplicates($aReternList);
	if( $aSingleFlag == true ){
		return({$aReternList[size($aReternList)-1]});
	}
	return($aReternList);
}
 
使い方
string $aSelect[] = getSelectParticularType( "vertex", false );
 選択しているものがオブジェクトでもエッジでも$aSelect[]には頂点の一覧が返ります。
 あくまで返すだけなので、選択されているものは元のままです。
 選択したい場合はlsに返ってきた配列を渡してください。
 二つ目の引数にtrueを渡した場合、戻り値は一つになります。けれど配列ではあるので注意。
 基本的に複数が選択されていた場合、後に選んだアイテムが中心になります。
何も選択されてなかった場合、空の配列が返ります。