帮助主页上一篇下一篇

bookmark 资产库MEL API:

MG-资产库提供的Mel的应用程序接口。你可以用这些mel全局函数,通过自己编写脚本来新建,管理及使用资产库。

一个比较大的用途是用它来批量加入资产项,及自动生成ma档等。

bookmark 前提条件:

当前运行的Maya有安装MGTools Pro3或以上版本。

bookmark 接口全局函数说明:  (后面有附示例代码more

global proc int MGAssetLib_initAPI ( );

描述:初始化资产库MEL API. 这是为了确保下面这些全局MEL函数有被source,这样才可用。

返回值:如果初始化过程出错,则返回0,否则返回1。

 

global proc int MGAssetLib_doesProjectExist ( string $projectName );

描述:在本地端的资产库里查找这个工程。即是在我的文档/Maya/MGTools_GlobalData/MG_AssetLib这个目录下,查找是否有名字为$projectName的库工程。

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:如果找到则返回1,没有找到则返回0。

 

global proc string MGAssetLib_getLocalProjectFile ( string $projectName );

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:返回$projectName所对应的本地库的整个路径,即我的文档/Maya/MGTools_GlobalData/MG_AssetLib/$projectName/$projectName.assetproj。

即使工程实际上不存在,也返回一样的结果。

 

global proc string MGAssetLib_createProject ( string $projectName,

string $ProjectAnnoatation,

string $globalPath,

string $statePresets [] );

描述:创建一个本地资产库工程。

参数:$projectName为名称,$ProjectAnnoatation为库工程的描述文字, $globalPath为全局资产库指向的路径。

$statePresets是库工程的状态预置,它是一个数组,这个数组的每个元素由下面格式的字符组成( 用空格分开 ):状态名称 状态颜色R 状态颜色G 状态颜色B

状态颜色的RGB数值是在0-1范围内的小数。比如: Approved 0.2 0.6 0.2

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

如果当前有打开资产库工具,则会自动在工具里打开这个新建的工程。

返回值:将返回新建的.assetproj文件 的完整路径;如果失败则返回空字符窜。

 

global proc int MGAssetLib_doesCategoryExist ( string $projectName ,

string $category );

描述:测试在$projectName的库工程目录里,是否存在一个叫$category 的类别。

注意:如果$projectName 参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:存在则返回1,否则为0。

 

global proc string MGAssetLib_getLocalCategoryFile ( string $projectName,

string $category );

描述:一个类别事实是存储在本地库工程目录里的相应 .asset文件。

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:返回以$category为名称,并且属于$projectName的库工程里的.asset文件的完整路径。

即使工程或类别实际上不存在,也返回一样的结果。

 

global proc int MGAssetLib_addCategory ( string $projectName,

string $category );

描述:在库工程里添加一个类别,并在本地相应的库工程目录里新增一个.asset文件。如果已存在则警告并返回0。

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

如果当前有打开资产库工具,则会自动打开这个新添加的类别。

返回值:添加成功则返回1,否则为0。

 

global proc int MGAssetLib_clearCategory ( string $projectName,

string $category );

描述:清空一个类别,事实上是清空本地库工程目录里相应的.asset文件里的内容。

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:清空成功则返回1,否则为0。

 

global proc int MGAssetLib_addStates ( string $projectName,

string $stateList [] );

描述:添加库工程的状态预置。

$stateList 是要添加进库工程的状态预置,它是一个数组,这个数组的每个元素由下面格式的字符组成( 用空格分开 ):状态名称 状态颜色R 状态颜色G 状态颜色B

状态颜色的RGB数值是在0-1范围内的小数。比如: Approved 0.2 0.6 0.2

注意:如果$projectName 参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:添加成功则返回1,否则为0。

 

global proc string[] MGAssetLib_getProjectStates ( string $projectName );

描述:获取库工程的即有状态预置。

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:库工程的状态预置数组。这个数组的每个元素由下面格式的字符组成( 用空格分开 ):状态名称 状态颜色R 状态颜色G 状态颜色B

状态颜色的RGB数值是在0-1范围内的小数。比如: Approved 0.2 0.6 0.2

 

global proc string[] MGAssetLib_getProjectCategories ( string $projectName );

描述:获取库工程的所有类别。

注意:如果$projectName参数含有英文字母,数字,下划线之外的字符,这些字符将自动转换成下划线。

返回值:库工程的类别数组。

 

global proc int MGAssetLib_compareTwoFileDates ( string $file1,  string $file2 );

描述:辅助性函数,用来比较两个文件的修改日期。

返回值:如果俩文件都不存在,则返回0, 如果file1存在而file2不存在,则返回1,如果file1不存在而file2存在,则返回-1;

都存在的情况下,如果file1比file2旧,则返回-1,如果两者一样,则返回0, 如果file1比file2新,则返回1;

 

global proc string[] MGAssetLib_searchPreviewImagesFromDirectory ( string $searchDirectory,

string $imageExtensionList [],

int $searchDepth );

描述:辅助性函数,搜索一个目录,来获得具有特定扩展名的文件的完整路径数组。

参数:$searchDirectory 为要搜索的目标路径,必须已存在。

$imageExtensionList 是要搜索的文件类型扩展名的数组,如 {"*.jpg", "*.bmp"}

$searchDepth 是路径搜索的深度,如果不想搜索子目录,则直接将其设为1。设为0或负数则视为无限制深度。

注意:$imageExtensionList 数组里的元素,如果不是以 "*." 开头的,则自动会加上 "*." 。

返回值:将返回搜索到的符合条件的文件的完整路径数组。

 

global proc string[] MGAssetLib_searchMayaFilesFromDirectory ( string $searchDirectory,

int $searchMA,

int $searchMB,

int $searchDepth );

描述:辅助性函数,搜索一个目录,来获得MB或MA文件的完整路径数组。

参数:$searchDirectory 为要搜索的目标路径,

$searchMA 决定是否要搜索MA文件,1为搜索,0为不搜索。

$searchMB 决定是否要搜索MB文件,1为搜索,0为不搜索。如果$searchMA 和$searchMB都为0,则直接返回空数组。

$searchDepth 是路径搜索的深度,如果不想搜索子目录,则直接将其设为1。设为0或负数则视为无限制深度。

返回值:将返回搜索到的MB,MA文件的完整路径数组。

 

global proc int MGAssetLib_addAssetRecords ( string $projectName,

string $category,

string $mayaFiles[],

string $namespaces[],

string $states[],

string $previewImageStrList[],

string $notes[] );

描述:往资产库里一次性添加多个资产项。

参数:$projectName 为要添加到的库工程名称,

$category 为要添加到的库工程里的特定类别,

$mayaFiles 为要添加的资产文件路径数组。

$namespaces为要添加的资产名称数组,资产名称将来在叫资产进来时可以用做reference的命名空间。

$states 为该资产项的状态数组。这个状态数组的每个元素直接是状态名称,不需要加颜色信息。

$previewImageStrList 为该资产项的预览图文件数组。每一个元素对应一个资产项,单个元素内可以包括多个图片路径,但要以分号 ";" 分开。

$notes 为该资产项的注释数组。每个元素对应一个资产项的注释,元素的字符窜没有限制,你可以使用任意字符。

注意:上面的数组参数全部要一一对应否则乱套,程序是以$mayaFiles这个数组的个数为要添加的个数。

其它的数组如果没有对应的元素,则为空字符窜,除了$namespace这个数组,如果它没有对应于$mayaFiles的元素,则元素自动取值为maya文件的文件名。

返回值:成功添加没有出错则返回1,否则返回0。

 

global proc int MGAssetLib_deleteAssetRecords ( string $projectName,

string $category,

string $mayaFiles [] );

描述:往资产库里一次性删除多个资产项。删除的依据是资产项的maya档案路径。

参数:$projectName 为要删除资产项的库工程,

$category 为要删除资产项的类别,

$mayaFiles 为要删除的资产路径数组。

返回值:成功删除没有出错则返回1,否则返回0。

 

global proc int MGAssetLib_makeMayaAsciiFile ( int $overrideIfExist,

string $MAFile,

string $referenceFiles [],

string $namespaceList [],

int $deferList [] );

描述:生成一个MA档案。

参数:$overrideIfExist 决定如果目标MA档已存在时是否覆盖,

$MAFile 为要生成的MA档的目标文件路径,

$referenceFiles 为要在MA档里reference的资产文件数组,

$namespaceList 为要在MA档里reference的命名空间数组,

$deferList 为MA档里reference是否要延迟加载的数组。

返回值:成功生成没有出错则返回1,否则返回0。

 

lightbulb 提示:如果要使用程序来上传下载您的资产库,可以使用MGTools提供的其它两个全局函数:( 这两个不需要初始化资产库MEL API即可使用 )

global proc int MG_CopyFolder ( string $targetFolder,

string $sourceFolder,

string $progressBarControl,

string $textControl,

int $returnAtFirstError,

int $autoHideProgressBarWhenIsDone );

描述:拷贝源文件夹下面的所有文件及子文件夹到目录文件夹里。

参数:$targetFolder  是要拷贝到的目标目录,可以不存在。

$sourceFolder 是要拷贝的源目录,必须存在且是目录,如果是文件,则取消拷贝。

$progressBarControl 指定一个 progressBar 控件的名称,如果有指定且控件存在,则在拷贝过程中会更新该进度条控件的进度。

如果您为这个参数指定了空字符窜,则该参数将被忽略。

$textControl 指定一个text 控件的名称,如果有指定且控件存在,则在拷贝过程中会更新该控件,显示当前拷贝哪个文件的信息。

如果您为这个参数指定了空字符窜,则该参数将被忽略。

$returnAtFirstError 决定是否一旦有出错,则取消后续操作返回。 1是返回,0是跳过错误并继续。

$autoHideProgressBarWhenIsDone 决定是否整个拷贝过程完成后,是否自动隐藏progressBar 控件。

返回值:成功拷贝则返回1,否则返回0。

 

global proc int MG_DeleteFolder ( string $deleteFolder,

string $progressBarControl,

string $textControl,

int $returnAtFirstError,

int $autoHideProgressBarWhenIsDone );

描述:删除文件夹。

参数:$deleteFolder  是要删除的目标目录,必须存在。

$progressBarControl 指定一个 progressBar 控件的名称,如果有指定且控件存在,则在删除过程中会更新该进度条控件的进度。

如果您为这个参数指定了空字符窜,则该参数将被忽略。

$textControl 指定一个text 控件的名称,如果有指定且控件存在,则在删除过程中会更新该控件,显示当前删除哪个文件的信息。

如果您为这个参数指定了空字符窜,则该参数将被忽略。

$returnAtFirstError 决定是否一旦有出错,则取消后续操作返回。 1是返回,0是跳过错误并继续。

$autoHideProgressBarWhenIsDone 决定是否整个删除过程完成后,是否自动隐藏progressBar 控件。

返回值:成功删除则返回1,否则返回0。

 

 

bookmark 示例代码:

 

 

 

 

 

//在执行这些代码前,打开资产库工具,可以实时看到这些代码的执行结果。

//初始化api的全局函数:

MGAssetLib_initAPI;

//创建一个资产库工程:

MGAssetLib_createProject "Mel_API"  "A asset project created by mel API"  "Z:/TNT/temp/Miguel/test/Lib_MelAPI"  {"Pending 1 0 0", "Working 0 0 1", "Approved 0 1 0"};

//创建一个叫Character的类别:

MGAssetLib_addCategory "Mel_API" "Character";

//测试刚刚这个类别有没有创建成功:

print ("The category \"Mel_API\" exists or not: " + `MGAssetLib_doesCategoryExist "Mel_API" "Character"` + "\n");

//清空类别,事实上没有必要,我们不是刚创建这个类别嘛。

MGAssetLib_clearCategory "Mel_API" "Character";

//为库工程添加状态预置:

MGAssetLib_addStates "Mel_API"  {"Hi_Res 0.5 0.8 0.5", "Lo_Res 0.8 0.5 0.5"};

/测试刚刚的状态是否有添加进去。

print `MGAssetLib_getProjectStates "Mel_API"`;

 

//现在开始搜索MB,MA档。。。

string $mayaFiles[] = `MGAssetLib_searchMayaFilesFromDirectory "D:/temp" 1 0 0`;

print $mayaFiles;

string $images[] = `MGAssetLib_searchPreviewImagesFromDirectory "D:/temp" {"*.jpg","*.bmp"} 0`;

print $images;

//抓到这些文件后,我们再写一些mel代码,来进行匹配等工作。。

// ....

//这些信息抓齐了,现在我们来往类别里添加资产项!

MGAssetLib_addAssetRecords "Mel_API" "Character"

                             {"D:/temp/myAsset1.ma","D:/temp/myAsset2.ma","D:/temp/myAsset3.ma"}

                             {"namespace1","namespace2"}

                             {"Pending","Approved","Approved"}

                             {}

                             {"Note for fist item","note for sec item","third note"};                            

//试试删除其中的一条记录!

MGAssetLib_deleteAssetRecords "Mel_API" "Character" {"D:/temp/myAsset2.ma"};

 

//现在试试用代码生成MA档!

MGAssetLib_makeMayaAsciiFile (1, "D:/temp/test.ma",   {"namespace1","namespace2"},

                               {"D:/temp/myAsset1.ma","D:/temp/myAsset2.ma","D:/temp/myAsset3.ma"},

                               {0,1,1} );


帮助主页上一篇下一篇