资产库MEL API: MG-资产库提供的Mel的应用程序接口。你可以用这些mel全局函数，通过自己编写脚本来新建，管理及使用资产库。 一个比较大的用途是用它来批量加入资产项，及自动生成ma档等。 前提条件: 当前运行的Maya有安装MGTools Pro3或以上版本。 接口全局函数说明: （后面有附示例代码） 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。 提示：如果要使用程序来上传下载您的资产库，可以使用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。 示例代码:
|  | //在执行这些代码前，打开资产库工具，可以实时看到这些代码的执行结果。 //初始化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} ); |