illustrator插件学习2

前言

前面说到了AI插件是如何工作的,此篇介绍官方tutorial插件启动的时的初始化工作。在介绍插件如何在内存中构建时会顺带说明如何使用。

前言续

介绍下ai插件的构成,插件是由不同组件构成且这些组件分为sp组件和ai组件,sp组件AI插件架构管理组件,AI组件主要用于在操作AI中相关属性如在AI的画布中绘制图形。各类套件都需要在使用之前获取。获取方法为在SPInterfaceMessage结构体中的basic套件的函数AcquireSuite()。
error = message->d.basic->AcquireSuite( kAIMenuSuite, kAIMenuSuiteVersion, (const void **) &fAIMenu );

StarUpPlugin

{
	error = Plugin::StartupPlugin(message);

	if (!error) {
		error = AddMenu(message);
	}
	if (!error) {	
		error = AddFilter(message);
	}
	if (!error) {
		error = AddTool(message);
	}
	if (!error) {
		error = AddAction(message);
	}
	if (!error) {
		error = AddNotifiers(message);
	}

	return error;
}

此函数继承自plugin基类,在基类中完成一些数据的初始化和空间的开辟工作。

addmenu函数

此函数中主要函数为SDKAboutPluginsHelper::AddAboutPluginsMenuItem()它完成了对菜单套件的获取,以及在菜单中添加菜单项。AIPlatformAddMenuItemDataUS 结构体用于对菜单项信息的初始化工作。

AIErr SDKAboutPluginsHelper::AddAboutPluginsMenuItem(
         SPInterfaceMessage* message, 
	     const char* companyMenuGroupName, 
         const ai::UnicodeString& companyName, 
	 	 AIMenuItemHandle* menuItemHandle)
{
	AIErr error = kNoErr;

	if (fAIMenu == nil) {
		error = message->d.basic->AcquireSuite( kAIMenuSuite, kAIMenuSuiteVersion, (const void **) &fAIMenu );
	}
	if (!error && fAIMenu != nil) {
		// Add an about plug-ins menu group for the given company under Illustrator's about group.
		bool exists = false;
		error = this->GroupExists(companyMenuGroupName, exists);
		if (!error && !exists) {
			AIPlatformAddMenuItemDataUS companyRootMenuData;
			companyRootMenuData.groupName = kAboutMenuGroup;
			companyRootMenuData.itemText = companyName;	
			AIMenuItemHandle companyRootMenuItemHandle = nil;
			error = fAIMenu->AddMenuItem(message->d.self, NULL, &companyRootMenuData, kMenuItemNoOptions, &companyRootMenuItemHandle);
			if (!error) {
				AIMenuGroup companyRootMenuGroup = nil;
				error = fAIMenu->AddMenuGroupAsSubMenu(companyMenuGroupName, kMenuGroupSortedAlphabeticallyOption, companyRootMenuItemHandle, &companyRootMenuGroup);
			}
		}
	}
	if (!error && fAIMenu != nil) {
		// Add menu item for this plug-in under the company's about plug-ins menu group.
		AIPlatformAddMenuItemDataUS aboutPluginMenuData;
		aboutPluginMenuData.groupName = companyMenuGroupName;
		aboutPluginMenuData.itemText = ai::UnicodeString(pluginName);
		AIMenuItemHandle aboutPluginMenuItemHandle = nil;
		error = fAIMenu->AddMenuItem(message->d.self, NULL, &aboutPluginMenuData, kMenuItemNoOptions, &aboutPluginMenuItemHandle);
		if (!error) {
			*menuItemHandle = aboutPluginMenuItemHandle;
		}
	}
	if (fAIMenu != nil) {
		message->d.basic->ReleaseSuite( kAIMenuSuite, kAIMenuSuiteVersion );
		fAIMenu = nil;
	}
	return error;
}

AddFilter

此函数用于添加滤镜。主要用到了AIFilter套件,
首先构造滤镜菜单数据

{
	PlatformAddFilterData filterData;
	filterData.category = (unsigned char*)kSDKFilterString;
	filterData.title = (unsigned char*)kTutorialFilterString;
}
使用滤镜套件安装套件
`sAIFilter->AddFilter( message->d.self, "Tutorial", &filterData,kToolWantsToTrackCursorOption, &fFilterHandle);`

GetFilterMenuItem(fFilterHandle, &menuItem);
获取item的实例用于后续跟新或使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值