//---------------------------------------------------------------------------
//  nnTextureAttribute.mel
//
//  Copyright (C) 2002 - 2008 Creative Center Graphics Section
//  All Rights Reserved.
//
//  Module  : nnTextureAttribute
//  File    : nnTextureAttribute.mel
//  Create  : 2004/01/11
//  Modify  : 2008/07/28 : DirectX G2.0版対応
//  Version : 1.18.23
//  Note    : nnTextureAttribute
//
//---------------------------------------------------------------------------

// NN Texture Attributeバージョン情報
global string $nnTextureAttributeVersion = "1.18.23";

// NN DirectX G1.1  プラグインロード情報取得
global proc int nnXBGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for DirectX G1.1             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for DirectX G1.1             "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for DirectX G1.1            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNXB"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for DirectX G1.1          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNXB"`                                  ||

				 `pluginInfo -query -loaded "MAYA65 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN Lindberghプラグインロード情報取得
global proc int nnLBGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA6 NN Exporter for Lindbergh                "` ||
				 `pluginInfo -query -loaded "MAYA7 NN Exporter for Lindbergh                "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for Lindbergh                "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for Lindbergh               "` ||
				 `pluginInfo -query -loaded "MAYA85toNNLB"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for Lindbergh             "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNLB"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for Lindbergh             "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN XENONプラグインロード情報取得
global proc int nnXENONGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for XBOX360                  "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for XBOX360                  "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for XBOX360                 "` ||
				 `pluginInfo -query -loaded "MAYA85toNNXB360"`                                 ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for XBOX360               "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNXB360"`                               ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for XBOX360               "` ||

				 `pluginInfo -query -loaded "MAYA65 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}

// NN DirectX G2.0プラグインロード情報取得
global proc int nnDXG2GetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for DirectX G2.0             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for DirectX G2.0             "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for DirectX G2.0            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNDXG2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for DirectX G2.0          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNDXG2"`                                ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for DirectX G2.0          "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN PS3プラグインロード情報取得
global proc int nnPS3GetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA65 NN Exporter for PlayStation3            "` ||
				 `pluginInfo -query -loaded "MAYA7 NN Exporter for PlayStation3             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for PlayStation3             "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for PlayStation3            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNPS3"`                                   ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for PlayStation3          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNPS3"`                                 ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for PlayStation3          "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}

//----------------------------------------------------------------------------
//			nnTextureAttributeVersion
//----------------------------------------------------------------------------
global proc nnTextureAttributeVersionNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		global string $nnTextureAttributeVersion;
		addAttr
			-dataType		"string"
			-longName		$attr
			-hidden			true
			$nodeName;
		// バージョン情報をセット
		setAttr $attrName -type "string" $nnTextureAttributeVersion;
	}
	// hiddenフラグがTRUEでなければ一度アトリビュートを削除する
	else if( `addAttr -query -hidden $attrName` == false ) {
		deleteAttr $attrName;
		nnTextureAttributeVersionNew( $attrName );
	}
}

global proc nnTextureAttributeVersionReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnTextureAttributeVersionNew( $attrName );
	}
	// hiddenフラグがTRUEでなければ一度アトリビュートを削除する
	else if( `addAttr -query -hidden $attrName` == false ) {
		deleteAttr $attrName;
		nnTextureAttributeVersionNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnTextureAttributeMainFrameLayout
//----------------------------------------------------------------------------
global proc nnTextureAttributeMainFrameLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			frameLayout
				-collapsable	true
				-collapse		false
				-label 			"NN Texture Attributes"
				-borderVisible 	true
				-borderStyle	"etchedIn"
				-marginWidth	5
				-marginHeight	5
				$grpName;
		setUITemplate -popTemplate;
	}
	// GUIの表示設定を変更
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	frameLayout -edit -visible ( $nnlb + $nnxenon + $nnps3 + $nndxg2 ) $grpName;
}

global proc nnTextureAttributeMainFrameLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		nnTextureAttributeMainFrameLayoutNew( $attrName );
	}
	// GUIの表示設定を変更
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	frameLayout -edit -visible ( $nnlb + $nnxenon + $nnps3 + $nndxg2 ) $grpName;
}

//----------------------------------------------------------------------------
//			nnTextureAttributeMainColumnLayout
//----------------------------------------------------------------------------
global proc nnTextureAttributeMainColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnTextureAttributeMainFrameLayout" + $nodeType );
				columnLayout
					-adjustableColumn true
					$grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnTextureAttributeMainColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		nnTextureAttributeMainColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//
//		Common Texture Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnTextureAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnTextureAttributeFrameLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		setParent ( "nnTextureAttributeMainColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"Common Texture Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

	// 表示/非表示チェック
	nnVisibleTextureAttribute( $attrName );
}

global proc nnTextureAttributeFrameLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		nnTextureAttributeFrameLayoutNew( $attrName );
	}

	// 表示/非表示チェック
	nnVisibleTextureAttribute( $attrName );
}

global proc nnVisibleTextureAttribute( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	string $bumpList[] = `listConnections ( $nodeName + ".outAlpha" )`;
	if( size( $bumpList ) == 0 ) {
		string $outColorList[] = `listConnections ( $nodeName + ".outColor" )`;
		if( size( $outColorList ) == 0 ) {
			if ( `frameLayout -exists $grpName` ) {
				frameLayout -edit -visible false $grpName;
			}
		}
		else {
			// 直接normalCameraに接続の場合を検索
			if( `nodeType $outColorList[0]` == "lambert"    ||
				`nodeType $outColorList[0]` == "phong"      ||
				`nodeType $outColorList[0]` == "phongE"     ||
				`nodeType $outColorList[0]` == "blinn"      ||
				`nodeType $outColorList[0]` == "anisotropy" ) {
				string $outNormalList[] = `listConnections ( $outColorList[0] + ".normalCamera" )`;
				if( size( $outNormalList ) == 0 ) {
					if ( `frameLayout -exists $grpName` ) {
						frameLayout -edit -visible false $grpName;
					}
				}
				else {
					if( $outNormalList[0] == $nodeName ) {
						if ( `frameLayout -exists $grpName` ) {
							frameLayout -edit -visible true $grpName;
						}
					}
					else {
						if ( `frameLayout -exists $grpName` ) {
							frameLayout -edit -visible false $grpName;
						}
					}
				}
			}
			else {
				if ( `frameLayout -exists $grpName` ) {
					frameLayout -edit -visible false $grpName;
				}
			}
		}
	}
	else {
			// 直接バンプマップに接続の場合を検索
		if( `nodeType $bumpList[0]` == "bump2d" ) {
			if ( `frameLayout -exists $grpName` ) {
				frameLayout -edit -visible true $grpName;
			}
		}
		else {
			if ( `frameLayout -exists $grpName` ) {
				if ( `frameLayout -exists $grpName` ) {
					frameLayout -edit -visible false $grpName;
				}
			}
		}
	}
}
//----------------------------------------------------------------------------
//			nnTextureAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnTextureAttributeColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnTextureAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnTextureAttributeColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		nnTextureAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnSpaceType
//----------------------------------------------------------------------------
global proc nnSpaceTypeNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		1
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Space Type"
					-changeCommand		( "nnSpaceTypeStatus " + $nodeType )
					$grpName;
					menuItem -label "TANGENT SPACE"		-data 0;
					menuItem -label "OBJECT SPACE"		-data 1;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

	// 表示/非表示チェック
	nnVisibleTextureAttribute( $attrName );

}

global proc nnSpaceTypeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnSpaceTypeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnSpaceTypeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

global proc nnSpaceTypeStatus( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];
	$grpName[0]	= "nnSpaceType"		 + $nodeType;
	$grpName[1]	= "nnReverseXAxis"	 + $nodeType;
	$grpName[2]	= "nnNormalMapAXLY"	 + $nodeType;

	if ( !`optionMenuGrp -exists $grpName[0]` ) {
		return;
	}

	int $value	= `optionMenuGrp -query -select $grpName[0]`;

	if( $value == 1 ) {
		if ( `checkBoxGrp -exists $grpName[1]` ) {
			checkBoxGrp -edit -enable false $grpName[1];
			checkBoxGrp -edit -value1 false $grpName[1];
		}
		if ( `checkBoxGrp -exists $grpName[2]` ) {
			checkBoxGrp -edit -enable true $grpName[2];
		}
	}
	else {
		if ( `checkBoxGrp -exists $grpName[1]` ) {
			checkBoxGrp -edit -enable true $grpName[1];
		}
		if ( `checkBoxGrp -exists $grpName[2]` ) {
			checkBoxGrp -edit -enable false $grpName[2];
			checkBoxGrp -edit -value1 false  $grpName[2];
		}
	}
}

//----------------------------------------------------------------------------
//			nnReverseXAxis
//----------------------------------------------------------------------------
global proc nnReverseXAxisNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Reverse X Axis"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

	nnSpaceTypeStatus( $nodeType );
}

global proc nnReverseXAxisReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnReverseXAxisNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnReverseXAxisNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnSpaceTypeStatus( $nodeType );
}

//----------------------------------------------------------------------------
//			nnNormalMapAXLY
//----------------------------------------------------------------------------
global proc nnNormalMapAXLYNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Normal Map AXLY"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

	nnSpaceTypeStatus( $nodeType );
}

global proc nnNormalMapAXLYReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnNormalMapAXLYNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnNormalMapAXLYNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnSpaceTypeStatus( $nodeType );
}

//----------------------------------------------------------------------------
//
//		Lindbergh Texture Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnLBTextureAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnLBTextureAttributeFrameLayoutNew( string $attrName )
{
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	string $title;
	if( $nnlb ) {
		$title	= "Lindbergh";
		if( $nnxenon )	$title	+= ", XBOX360";
		if( $nnps3 )	$title	+= ", PlayStaion3";
		if( $nndxg2 )	$title	+= ", DirectX G2.0";
	}
	else if( $nnxenon ){
		$title	= "XBOX360";
		if( $nnps3 )	$title	+= ", PlayStaion3";
		if( $nndxg2 )	$title	+= ", DirectX G2.0";
	}
	else if( $nnps3 ){
		$title	= "PlayStaion3";
		if( $nndxg2 )	$title	+= ", DirectX G2.0";
	}
	else if( $nndxg2 ){
		$title	= "DirectX G2.0";
	}
	else {
		return;
	}
	$title += " Texture Attributes";

	string $list[];
	tokenize( $attrName, ".", $list );
	string $attr 		= $list[1];
	string $nodeName 	= $list[0];
	string $nodeType 	= `nodeType $nodeName`;
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnTextureAttributeMainColumnLayout" + $nodeType );
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			$title
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-labelWidth		500
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnLBTextureAttributeFrameLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		nnLBTextureAttributeFrameLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnLBTextureAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnLBTextureAttributeColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnLBTextureAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnLBTextureAttributeColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		nnLBTextureAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnLBUserMap
//----------------------------------------------------------------------------
global proc nnLBUserMapNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		8
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label				"Custom User Map"
//					-changeCommand		( "nnLBEnableUserMap " + $attrName )
					$grpName;
					menuItem -label "NONE"				-data 0		($grpName+"_USER_MAPNONE");
					menuItem -label "USER MAP 1"		-data 1		($grpName+"_USER_MAP1");
					menuItem -label "USER MAP 2"		-data 2		($grpName+"_USER_MAP2");
					menuItem -label "USER MAP 3"		-data 3		($grpName+"_USER_MAP3");
					menuItem -label "USER MAP 4"		-data 4		($grpName+"_USER_MAP4");
					menuItem -label "USER MAP 5"		-data 5		($grpName+"_USER_MAP5");
					menuItem -label "USER MAP 6"		-data 6		($grpName+"_USER_MAP6");
					menuItem -label "USER MAP 7"		-data 7		($grpName+"_USER_MAP7");
					menuItem -label "USER MAP 8"		-data 8		($grpName+"_USER_MAP8");
				setParent -menu ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBUserMapReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBUserMapNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBUserMapNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

global proc nnLBEnableUserMap( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;

	// コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnLBUserMap"				 + $nodeType;
	$grpName[1]	= "nnLBEnviromentMapType"	 + $nodeType;

	string $attrName	= $nodeName+".nnLBEnviromentMapType";
	string $envMapName	= "nnLBEnviromentMap"	+ $nodeType;

	string $connectReflectedColorList[];
	string $reflectedColorPlug;

	if( `optionMenuGrp -query -select $grpName[0]` == 1 ) {
		string $outColorList[] = `listConnections ( $nodeName + ".outColor" )`;

		if( size( $outColorList ) ) {
			if( `nodeType $outColorList[0]` == "layeredTexture" ) {
				string $plugList2[] = `listConnections -plugs true ( $outColorList[0] + ".outColor" )`;
				string $outColorList2[] = `listConnections ( $outColorList[0] + ".outColor" )`;
				$reflectedColorPlug = $outColorList2[0] + ".reflectedColor";

				if( $plugList2[0] == $reflectedColorPlug ) {
					checkBoxGrp -edit -value1 true $envMapName;
//					setAttr $attrName true;
					if ( `optionMenuGrp -exists $grpName[1]` ) {
						optionMenuGrp -edit -enable true $grpName[1];
					}
				}
			}
			else {
				string $plugList[] = `listConnections -plugs true (  $nodeName + ".outColor" )`;
				$reflectedColorPlug = $outColorList[0] + ".reflectedColor";

				if( $plugList[0] == $reflectedColorPlug ) {
					checkBoxGrp -edit -value1 true $envMapName;
//					setAttr $attrName true;
					if ( `optionMenuGrp -exists $grpName[1]` ) {
						optionMenuGrp -edit -enable true $grpName[1];
					}
				}
			}
		}
		if ( `menuItem -exists ($grpName[1]+"_DUAL_PARABOLOID")` ) {
			menuItem -edit -enable true ($grpName[1]+"_DUAL_PARABOLOID");
		}
	}
	else {
		if ( `menuItem -exists ($grpName[1]+"_DUAL_PARABOLOID")` ) {
			optionMenuGrp -edit -select 1 $grpName[1];
			setAttr $attrName 0;
			menuItem -edit -enable false ($grpName[1]+"_DUAL_PARABOLOID");
		}
	}
}

//----------------------------------------------------------------------------
//			nnLBEnviromentMap
//----------------------------------------------------------------------------
global proc nnLBEnviromentMapNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Enviroment Map"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnLBEnableEnviromentMap " + $attrName )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

	// 表示/非表示のコントロール
	nnLBEnableEnviromentMap( $attrName );
}

global proc nnLBEnviromentMapReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBEnviromentMapNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBEnviromentMapNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// 表示/非表示のコントロール
	nnLBEnableEnviromentMap( $attrName );
}

global proc nnLBEnableEnviromentMap( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;

	// コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnLBEnviromentMap"		+ $nodeType;
	$grpName[1]	= "nnLBEnviromentMapType"	+ $nodeType;

	string $userMapName	= "nnLBUserMap"		+ $nodeType;
	string $outColorList[];

	string $reflectedColorPlug;

	if( `optionMenuGrp -query -select $userMapName` == 1 ) {
		string $outColorList[] = `listConnections ( $nodeName + ".outColor" )`;

		if( size( $outColorList ) ) {
			if( `nodeType $outColorList[0]` == "layeredTexture" ) {
				string $plugList2[] = `listConnections -plugs true ( $outColorList[0] + ".outColor" )`;
				string $outColorList2[] = `listConnections ( $outColorList[0] + ".outColor" )`;

				$reflectedColorPlug = $outColorList2[0] + ".reflectedColor";

				if( $plugList2[0] == $reflectedColorPlug ) {
					checkBoxGrp -edit -value1 true $grpName[0];
					setAttr $attrName true;
				}
			}
			else {
				$reflectedColorPlug = $outColorList[0] + ".reflectedColor";
				string $plugList[] = `listConnections -plugs true ( $nodeName + ".outColor" )`;

				if( $plugList[0] == $reflectedColorPlug ) {
					checkBoxGrp -edit -value1 true $grpName[0];
					setAttr $attrName true;
				}
			}
		}
	}

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;

	if( `optionMenuGrp -exists $grpName[1]` ) {
		optionMenuGrp -edit -enable $value $grpName[1];
	}

/***********
	if( $value ) {
		nnVisibleEnviromentMapTypeLB( $attrName );
	}
***********/
}

//----------------------------------------------------------------------------
//			nnLBEnviromentMapType
//----------------------------------------------------------------------------
global proc nnLBEnviromentMapTypeNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		1
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Texture Map Type" $grpName;
					menuItem -label "SPHERE"			-data 0 ($grpName+"_SPHERE");
					menuItem -label "DUAL PARABOLOID"	-data 1 ($grpName+"_DUAL_PARABOLOID");
				setParent -menu ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

	// 表示/非表示チェック
//	nnVisibleEnviromentMapTypeLB( $attrName );

}

global proc nnLBEnviromentMapTypeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBEnviromentMapTypeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBEnviromentMapTypeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// 表示/非表示チェック
//	nnVisibleEnviromentMapTypeLB( $attrName );
}

global proc nnVisibleEnviromentMapTypeLB( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $userMapName     = "nnLBUserMap"           + $nodeType;
	string $envMapName      = "nnLBEnviromentMap"     + $nodeType;
	string $envTypeMapName  = "nnLBEnviromentMapType" + $nodeType;
	
	string $envDualPara     = $envTypeMapName         + "_DUAL_PARABOLOID";

	string $reflectedColorPlug;
	string $colorPlug;


	if( !`checkBoxGrp -query -value1 $envMapName` ) {
		optionMenuGrp -edit -enable false $envTypeMapName;
		return;
	}

	if( `optionMenuGrp -query -select $userMapName` == 1 ) {
		if ( `menuItem -exists $envDualPara` ) {
			menuItem -edit -enable true $envDualPara;
		}
	}
	else {
		if ( `menuItem -exists $envDualPara` ) {
			menuItem -edit -enable false $envDualPara;
		}
		return;
	}

	string $outColorList1[] = `listConnections ( $nodeName + ".outColor" )`;

	if( size( $outColorList1 ) ) {
		if( `nodeType $outColorList1[0]` == "layeredTexture" ) {
			string $plugList2[] = `listConnections -plugs true ( $outColorList1[0] + ".outColor" )`;
			string $outColorList2[] = `listConnections ( $outColorList1[0] + ".outColor" )`;

			$colorPlug = $outColorList2[0] + ".color";

			if( $plugList2[0] == $colorPlug ) {
				if ( `menuItem -exists $envDualPara` ) {
					menuItem -edit -enable true $envDualPara;
				}
			}
			else {
				$reflectedColorPlug = $outColorList2[0] + ".reflectedColor";

				if( $plugList2[0] == $reflectedColorPlug ) {
					if ( `menuItem -exists $envDualPara` ) {
						menuItem -edit -enable true $envDualPara;
					}
				}
				else {
					if ( `menuItem -exists $envDualPara` ) {
						menuItem -edit -enable false $envDualPara;
					}
				}
			}
		}
		else {
			string $plugList[] = `listConnections -plugs true ( $nodeName + ".outColor" )`;

			$colorPlug = $outColorList1[0] + ".color";

			if( $plugList[0] == $colorPlug ) {
				if ( `menuItem -exists $envDualPara` ) {
					menuItem -edit -enable true $envDualPara;
				}
			}
			else {
				$reflectedColorPlug = $outColorList1[0] + ".reflectedColor";

				if( $plugList[0] == $reflectedColorPlug ) {
					if ( `menuItem -exists $envDualPara` ) {
						menuItem -edit -enable true $envDualPara;
					}
				}
				else {
					if ( `menuItem -exists $envDualPara` ) {
						menuItem -edit -enable false $envDualPara;
					}
				}
			}
		}
	}
	else {
		if ( `menuItem -exists $envDualPara` ) {
			menuItem -edit -enable false $envDualPara;
		}
	}
}
//----------------------------------------------------------------------------
//			nnLBWrapTypeU
//----------------------------------------------------------------------------
global proc nnLBWrapTypeUNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		5
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type U" $grpName;
					menuItem -label "CLAMP"				-data 0;
					menuItem -label "REPEAT"			-data 1;
					menuItem -label "MIRRORED REPEAT"	-data 2;
					menuItem -label "CLAMP TO BORDER"	-data 3;
					menuItem -label "CLAMP TO EDGE"		-data 4;
					menuItem -label "AUTO"				-data 5;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBWrapTypeUReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBWrapTypeUNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBWrapTypeUNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnLBWrapTypeV
//----------------------------------------------------------------------------
global proc nnLBWrapTypeVNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		5
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type V" $grpName;
					menuItem -label "CLAMP"				-data 0;
					menuItem -label "REPEAT"			-data 1;
					menuItem -label "MIRRORED REPEAT"	-data 2;
					menuItem -label "CLAMP TO BORDER"	-data 3;
					menuItem -label "CLAMP TO EDGE"		-data 4;
					menuItem -label "AUTO"				-data 5;
				setParent -menu ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBWrapTypeVReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBWrapTypeVNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBWrapTypeVNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnLBBorderColorRGB
//----------------------------------------------------------------------------
global proc nnLBBorderColorRGBNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	"double3"
				-longName		$attr
				$nodeName;
			addAttr
				-attributeType	"double"
				-parent			$attr
				-longName		($attr+"R")
				$nodeName;
			addAttr
				-attributeType	"double"
				-parent			$attr
				-longName		($attr+"G")
				$nodeName;
			addAttr
				-attributeType	"double"
				-parent			$attr
				-longName		($attr+"B")
				$nodeName;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`attrColorSliderGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				attrColorSliderGrp
					-label 				"Border Color (RGB) "
					-attribute			$attrName
					-showButton			false
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	else {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				attrColorSliderGrp -edit -attribute $attrName $grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnLBBorderColorRGBReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`attrColorSliderGrp -exists $grpName`) {
		nnLBBorderColorRGBNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBorderColorRGBNew( $attrName );
	}
	else {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				attrColorSliderGrp -edit -attribute $attrName $grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
}

//----------------------------------------------------------------------------
// 			nnLBBorderColorA
//----------------------------------------------------------------------------
global proc nnLBBorderColorANew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	"float"
			-longName		$attr
			-minValue		0
			-maxValue		1
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label 			"Border Color (Alpha)"
					-minValue		0.0
					-maxValue		1.0
					-precision 		6
					$grpName;
			separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnLBBorderColorAReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnLBBorderColorANew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBorderColorANew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnLBBorderColor
//----------------------------------------------------------------------------
global proc nnLBBorderColorNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-dataType		"string"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName -type "string" "0x00000000";
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	2
					-columnWidth		2 70
					-columnAlign2		right center
					("nnLBBorderColorLayout"+$nodeType);
					text
						-label "Border Color";
					textField
						-text		"0x00000000"
//						-editable	false
						$grpName;
				setParent ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBBorderColorReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnLBBorderColorNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBorderColorNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}
//----------------------------------------------------------------------------
//			nnLBFilterMode
//----------------------------------------------------------------------------
global proc nnLBFilterModeNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Setup Filter Mode"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnLBEnableFilterMode " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBFilterModeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBFilterModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBFilterModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

global proc nnLBEnableFilterMode( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];
	$grpName[0]	= "nnLBFilterMode"		 + $nodeType;
	$grpName[1]	= "nnLBMagFilterMode"	 + $nodeType;
	$grpName[2]	= "nnLBMinFilterMode"	 + $nodeType;
	$grpName[3]	= "nnLBAnisotopicFilter" + $nodeType;

	optionMenuGrp -edit -enable (`checkBoxGrp -query -value1 $grpName[0]`) $grpName[1];
	optionMenuGrp -edit -enable (`checkBoxGrp -query -value1 $grpName[0]`) $grpName[2];
	optionMenuGrp -edit -enable (`checkBoxGrp -query -value1 $grpName[0]`) $grpName[3];
}

//----------------------------------------------------------------------------
//			nnLBMagFilterMode
//----------------------------------------------------------------------------
global proc nnLBMagFilterModeNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		1
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Filter Mode Mag" $grpName;
					menuItem -label "NEAREST"		-data 0;
					menuItem -label "LINEAR"		-data 1;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBMagFilterModeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBMagFilterModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBMagFilterModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableFilterMode( $nodeType );
}

//----------------------------------------------------------------------------
//			nnLBMinFilterMode
//----------------------------------------------------------------------------
global proc nnLBMinFilterModeNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		5
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 4;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Filter Mode Min" $grpName;
					menuItem -label "NEAREST"					-data 0;
					menuItem -label "LINEAR"					-data 1;
					menuItem -label "NEAREST MIPMAP NEAREST"	-data 2;
					menuItem -label "NEAREST MIPMAP LINEAR"		-data 3;
					menuItem -label "LINEAR MIPMAP NEAREST"		-data 4;
					menuItem -label "LINEAR MIPMAP LINEAR"		-data 5;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBMinFilterModeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBMinFilterModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBMinFilterModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableFilterMode( $nodeType );
}

//----------------------------------------------------------------------------
//			nnLBAnisotopicFilter
//----------------------------------------------------------------------------
global proc nnLBAnisotopicFilterNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	short
				-longName		$attr
				-minValue		0
				-maxValue		3
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Anisotopic Filter" $grpName;
					menuItem -label "NONE"		-data 0;
					menuItem -label "2"			-data 1;
					menuItem -label "4"			-data 2;
					menuItem -label "8"			-data 3;
				setParent -menu ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBAnisotopicFilterReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBAnisotopicFilterNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBAnisotopicFilterNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableFilterMode( $nodeType );
}

//----------------------------------------------------------------------------
//			nnLBMipmapBaseLevel
//----------------------------------------------------------------------------
global proc nnLBMipmapBaseLevelNew( string $attrName )
{
	int		$minValue;
	int		$maxValue;
	int		$fieldMaxValue;
	string	$label;

	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	if( $nnlb ) {
		$minValue      = 0;
		$maxValue      = 100;
		$fieldMaxValue = 2147483647;
		$label         = "Mipmap Base Level";
	}
	else if( $nnxenon || $nndxg2 ) {
		$minValue      = 0;
		$maxValue      = 10;
		$fieldMaxValue = 10;
		$label         = "Mipmap Max Level";
	}
	

	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	long
				-longName		$attr
				-minValue		0
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label			$label
					-field			true
					-minValue		$minValue
					-maxValue		$maxValue
					-fieldMaxValue	$fieldMaxValue
					$grpName;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnLBMipmapBaseLevelReplace( string $attrName )
{
	int		$minValue;
	int		$maxValue;
	int		$fieldMaxValue;
	string	$label;

	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	if( $nnlb ) {
		$minValue      = 0;
		$maxValue      = 100;
		$fieldMaxValue = 2147483647;
		$label         = "Mipmap Base Level";
	}
	else if( $nnxenon || $nndxg2 ) {
		$minValue      = 0;
		$maxValue      = 10;
		$fieldMaxValue = 10;
		$label         = "Mipmap Max Level";
	}

	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnLBMipmapBaseLevelNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBMipmapBaseLevelNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		intSliderGrp
			-edit
			-label			$label
			-minValue		$minValue
			-maxValue		$maxValue
			-fieldMaxValue	$fieldMaxValue
			$grpName;
		connectControl $grpName $attrName;
	}

}

//----------------------------------------------------------------------------
//			nnLBMipmapMaxLevel
//----------------------------------------------------------------------------
global proc nnLBMipmapMaxLevelNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
			addAttr
				-attributeType	long
				-longName		$attr
				-minValue		0
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr) 1000;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName` ) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label			"Mipmap Max Level"
					-field			true
					-minValue		0
					-maxValue		2000
					-fieldMaxValue	2147483647
					$grpName;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnLBMipmapMaxLevelReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnLBMipmapMaxLevelNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBMipmapMaxLevelNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}

}

//----------------------------------------------------------------------------
// 			nnLBMinLOD
//----------------------------------------------------------------------------
global proc nnLBMinLODNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	"float"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName -1000.0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label 				"Min LOD"
					-precision 			4
					-minValue			-2000
					-maxValue			0
					-fieldMinValue		-100000
					-fieldMaxValue		100000
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnLBMinLODReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnLBMinLODNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBMinLODNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBMaxLOD
//----------------------------------------------------------------------------
global proc nnLBMaxLODNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	"float"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 1000;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label 				"Max LOD"
					-minValue			0
					-maxValue			2000
					-fieldMinValue		-100000
					-fieldMaxValue		100000
					-precision 	4
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnLBMaxLODReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnLBMaxLODNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBMaxLODNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBLODBias
//----------------------------------------------------------------------------
global proc nnLBLODBiasNew( string $attrName )
{
	int	$minValue;
	int	$maxValue;
	int	$fieldMinValue;
	int	$fieldMaxValue;
	int	$precision;

	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	if( $nnlb ) {
		$minValue      = -1.0;
		$maxValue      = 1.0;
		$fieldMinValue = -16.0;
		$fieldMaxValue = 16.00;
		$precision     = 6;
	}
	else if( $nnxenon || $nndxg2 ) {
		$minValue      = -16.0;
		$maxValue      = 15.99;
		$fieldMinValue = -16.0;
		$fieldMaxValue = 16.00;
		$precision     = 2;
	}
	else if( $nnps3 ) {
		$minValue      = -1.0;
		$maxValue      = 1.0;
		$fieldMinValue = -16.0;
		$fieldMaxValue = 15.99609375;
		$precision     = 6;
	}

	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	"float"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0.0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		setParent ( "nnLBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label 				"LOD Bias"
					-minValue			$minValue
					-maxValue			$maxValue
					-fieldMinValue		$fieldMinValue
					-fieldMaxValue		$fieldMaxValue
					-precision 			$precision
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnLBLODBiasReplace( string $attrName )
{
	int	$minValue;
	int	$maxValue;
	int	$fieldMinValue;
	int	$fieldMaxValue;
	int	$precision;

	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	if( $nnlb ) {
		$minValue      = -1.0;
		$maxValue      = 1.0;
		$fieldMinValue = -16.0;
		$fieldMaxValue = 16.00;
		$precision     = 6;
	}
	else if( $nnxenon || $nndxg2 ) {
		$minValue      = -16.0;
		$maxValue      = 15.99;
		$fieldMinValue = -16.0;
		$fieldMaxValue = 16.00;
		$precision     = 2;
	}
	else if( $nnps3 ) {
		$minValue      = -1.0;
		$maxValue      = 1.0;
		$fieldMinValue = -16.0;
		$fieldMaxValue = 15.99609375;
		$precision     = 6;
	}

	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnLBLODBiasNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBLODBiasNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		floatSliderGrp
			-edit
			-minValue		$minValue
			-maxValue		$maxValue
			-fieldMinValue	$fieldMinValue
			-fieldMaxValue	$fieldMaxValue
			-precision 		$precision
			$grpName;
		connectControl $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//
//			nnTextureAttribute
//
//----------------------------------------------------------------------------
global proc nnTextureAttribute( string $shaderGroupName )
{

	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();

	if( objectType($shaderGroupName) != "file" ) {
		return;
	}

	// nnTextureAttributeVersion
	editorTemplate
		-callCustom "nnTextureAttributeVersionNew"
					"nnTextureAttributeVersionReplace"
					"nnTextureAttributeVersion";
	editorTemplate
		-callCustom "nnTextureAttributeMainFrameLayoutNew"
					"nnTextureAttributeMainFrameLayoutReplace"
					"nnTextureAttributeMainFrameLayout";
	editorTemplate
		-callCustom "nnTextureAttributeMainColumnLayoutNew"
					"nnTextureAttributeMainColumnLayoutReplace"
					"nnTextureAttributeMainColumnLayout";

	//------------------------------------------------------------------//
	//																	//
	//	Common Texture Attributes										//
	//																	//
	//------------------------------------------------------------------//
	editorTemplate
		-callCustom "nnTextureAttributeFrameLayoutNew"
					"nnTextureAttributeFrameLayoutReplace"
					"nnTextureAttributeFrameLayout";
	editorTemplate
		-callCustom "nnTextureAttributeColumnLayoutNew"
					"nnTextureAttributeColumnLayoutReplace"
					"nnTextureAttributeColumnLayout";

	// nnSpaceType
	editorTemplate
		-callCustom "nnSpaceTypeNew"
					"nnSpaceTypeReplace"
					"nnSpaceType";
	editorTemplate
		-suppress	"nnSpaceType";

	// nnReverseXAxis
	editorTemplate
		-callCustom "nnReverseXAxisNew"
					"nnReverseXAxisReplace"
					"nnReverseXAxis";
	editorTemplate
		-suppress	"nnReverseXAxis";

	// nnNormalMapAXLY
	editorTemplate
		-callCustom "nnNormalMapAXLYNew"
					"nnNormalMapAXLYReplace"
					"nnNormalMapAXLY";
	editorTemplate
		-suppress	"nnNormalMapAXLY";

	//------------------------------------------------------------------//
	//																	//
	//	LindberghTexture Attribute										//
	//																	//
	//------------------------------------------------------------------//
	editorTemplate
		-callCustom "nnLBTextureAttributeFrameLayoutNew"
					"nnLBTextureAttributeFrameLayoutReplace"
					"nnLBTextureAttributeFrameLayout";
	editorTemplate
		-callCustom "nnLBTextureAttributeColumnLayoutNew"
					"nnLBTextureAttributeColumnLayoutReplace"
					"nnLBTextureAttributeColumnLayout";

	// nnLBUserMap
	editorTemplate
		-callCustom "nnLBUserMapNew"
					"nnLBUserMapReplace"
					"nnLBUserMap";
	editorTemplate
		-suppress	"nnLBUserMap";

	// nnLBEnviromentMap
	editorTemplate
		-callCustom "nnLBEnviromentMapNew"
					"nnLBEnviromentMapReplace"
					"nnLBEnviromentMap";
	editorTemplate
		-suppress	"nnLBEnviromentMap";

	// nnLBEnviromentMapType
	editorTemplate
		-callCustom "nnLBEnviromentMapTypeNew"
					"nnLBEnviromentMapTypeReplace"
					"nnLBEnviromentMapType";
	editorTemplate
		-suppress	"nnLBEnviromentMapType";

	// nnLBWrapTypeU
	editorTemplate
		-callCustom "nnLBWrapTypeUNew"
					"nnLBWrapTypeUReplace"
					"nnLBWrapTypeU";
	editorTemplate
		-suppress	"nnLBWrapTypeU";

	// nnLBWrapTypeV
	editorTemplate
		-callCustom "nnLBWrapTypeVNew"
					"nnLBWrapTypeVReplace"
					"nnLBWrapTypeV";
	editorTemplate
		-suppress	"nnLBWrapTypeV";

	// nnLBBorderColorRGB
	editorTemplate
		-callCustom "nnLBBorderColorRGBNew"
					"nnLBBorderColorRGBReplace"
					"nnLBBorderColorRGB";
	editorTemplate
		-suppress	"nnLBBorderColorRGB";

	// nnLBBorderColorA
	editorTemplate
		-callCustom "nnLBBorderColorANew"
					"nnLBBorderColorAReplace"
					"nnLBBorderColorA";
	editorTemplate
		-suppress	"nnLBBorderColorA";

/**********
	// nnLBBorderColor
	editorTemplate
		-callCustom "nnLBBorderColorNew"
					"nnLBBorderColorReplace"
					"nnLBBorderColor";
	editorTemplate
		-suppress	"nnLBBorderColor";
**********/
	// nnLBFilterMode
	editorTemplate
		-callCustom "nnLBFilterModeNew"
					"nnLBFilterModeReplace"
					"nnLBFilterMode";
	editorTemplate
		-suppress	"nnLBFilterMode";

	// nnLBMagFilterMode
	editorTemplate
		-callCustom "nnLBMagFilterModeNew"
					"nnLBMagFilterModeReplace"
					"nnLBMagFilterMode";
	editorTemplate
		-suppress	"nnLBMagFilterMode";

	// nnLBMagFilterMode
	editorTemplate
		-callCustom "nnLBMinFilterModeNew"
					"nnLBMinFilterModeReplace"
					"nnLBMinFilterMode";
	editorTemplate
		-suppress	"nnLBMinFilterMode";

	// nnLBAnisotopicFilter
	editorTemplate
		-callCustom "nnLBAnisotopicFilterNew"
					"nnLBAnisotopicFilterReplace"
					"nnLBAnisotopicFilter";
	editorTemplate
		-suppress	"nnLBAnisotopicFilter";

	// nnLBMipmapBaseLevel
	editorTemplate
		-callCustom "nnLBMipmapBaseLevelNew"
					"nnLBMipmapBaseLevelReplace"
					"nnLBMipmapBaseLevel";
	editorTemplate
		-suppress	"nnLBMipmapBaseLevel";

	if( $nnlb ) {
		// nnLBMipmapMaxLevel
		editorTemplate
			-callCustom "nnLBMipmapMaxLevelNew"
						"nnLBMipmapMaxLevelReplace"
						"nnLBMipmapMaxLevel";
		editorTemplate
			-suppress	"nnLBMipmapMaxLevel";

		// nnLBMinLOD
		editorTemplate
			-callCustom "nnLBMinLODNew"
						"nnLBMinLODReplace"
						"nnLBMinLOD";
		editorTemplate
			-suppress	"nnLBMinLOD";

		// nnLBMaxLOD
		editorTemplate
			-callCustom "nnLBMaxLODNew"
						"nnLBMaxLODReplace"
						"nnLBMaxLOD";
		editorTemplate
			-suppress	"nnLBMaxLOD";
	}

	// nnLBLODBias
	editorTemplate
		-callCustom "nnLBLODBiasNew"
					"nnLBLODBiasReplace"
					"nnLBLODBias";
	editorTemplate
		-suppress	"nnLBLODBias";

}
