Está en la página 1de 41

Machine Translated by Google

ADOBE® ILLUSTRATOR®

ADOBE ILLUSTRATOR 2022


GUÍA DEL PROGRAMADOR
Machine Translated by Google

ÿ 2022 Adobe incorporado. Reservados todos los derechos.

Guía del programador de Adobe Illustrator 2022

Si esta guía se distribuye con software que incluye un acuerdo de usuario final, esta guía, así como el software que se describe en ella, se
proporciona bajo licencia y solo se puede usar o copiar de acuerdo con los términos de dicha licencia.
Salvo que lo permita dicha licencia, ninguna parte de esta guía puede reproducirse, almacenarse en un sistema de recuperación o transmitirse
de ninguna forma ni por ningún medio, ya sea electrónico, mecánico, de grabación o de otro tipo, sin el permiso previo por escrito de Adobe.
Incorporado. Tenga en cuenta que el contenido de esta guía está protegido por la ley de derechos de autor incluso si no se distribuye con software
que incluye un acuerdo de licencia de usuario final.

El contenido de esta guía se proporciona únicamente con fines informativos, está sujeto a cambios sin previo aviso y no debe interpretarse como un
compromiso por parte de Adobe Incorporated. Adobe Incorporated no asume ninguna responsabilidad por los errores o inexactitudes que puedan
aparecer en el contenido informativo incluido en esta guía.

Recuerde que las ilustraciones o imágenes existentes que desee incluir en su proyecto pueden estar protegidas por la ley de derechos de autor. La
incorporación no autorizada de dicho material a su nuevo trabajo podría ser una violación de los derechos del propietario de los derechos de autor.
Asegúrese de obtener los permisos necesarios del propietario de los derechos de autor.

Las referencias a nombres de empresas en plantillas de muestra son solo para fines de demostración y no pretenden hacer referencia a ninguna
organización real.

Adobe, el logotipo de Adobe, Illustrator, PageMaker, Photoshop, FrameMaker, Flash, Flex y ActionScript son marcas registradas o marcas
comerciales de Adobe Incorporated en los Estados Unidos y/o en otros países. Microsoft y Windows son marcas comerciales registradas o marcas
comerciales de Microsoft Corporation en los Estados Unidos y/o en otros países. Apple y Mac OS son marcas comerciales de Apple Computer,
Incorporated, registradas en los Estados Unidos y otros países. Todas las demás marcas comerciales son propiedad de sus respectivos dueños.

Adobe Incorporated, 345 Park Avenue, San José, California 95110, EE. UU. Aviso para los usuarios finales del gobierno de EE. UU. El
Software y la Documentación son "Artículos comerciales", tal como se define ese término en 48 CFR §2.101, que consisten en "Software
informático comercial" y "Documentación de software informático comercial", tal como se utilizan dichos términos en 48 CFR §12.212 o 48 CFR §
227.7202, según corresponda. De acuerdo con 48 CFR §§12.212 o 48 CFR §§227.7202-1 hasta
227.7202-4, según corresponda, el software informático comercial y la documentación del software informático comercial son
tener licencia para los usuarios finales del gobierno de EE. UU. (a) solo como artículos comerciales y (b) solo con los derechos que se otorgan
a todos los demás usuarios finales de conformidad con los términos y condiciones del presente. Derechos inéditos reservados bajo el copyright
leyes de los Estados Unidos. Adobe Incorporated, 345 Park Avenue, San José, CA 95110-2704, EE. UU. Para el fin del gobierno de EE. UU.
Usuarios, Adobe acepta cumplir con todas las leyes de igualdad de oportunidades aplicables, incluidas, si corresponde, las disposiciones de
Orden Ejecutiva 11246, según enmendada, Sección 402 de la Ley de Asistencia para el Reajuste de los Veteranos de la Era de Vietnam de 1974 (38
USC 4212), y la Sección 503 de la Ley de Rehabilitación de 1973, según enmendada, y las reglamentaciones en 41 CFR Partes 60-1
hasta 60-60, 60-250 y 60-741. La cláusula de acción afirmativa y las normas contenidas en la oración anterior
se incorporará por referencia.
Machine Translated by Google

Prefacio

Este documento presenta la API de Adobe® Illustrator® para complementos.

ÿ El Capítulo 1, “Descripción general”, describe los conceptos básicos detrás de la programación de complementos de Illustrator.

ÿ Capítulo 2, “Tutorial” describe los fundamentos de la programación de plug-ins utilizando un proyecto de ejemplo.

ÿ El Capítulo 3, "Creación de una interfaz de usuario HTML/JS para complementos", describe cómo crear una interfaz de usuario para su
complemento utilizando Adobe Flash®.

ÿ El Capítulo 3, "Técnicas de complementos", describe las listas de propiedades de complementos (recursos PiPL) en detalle y explica
cómo manejar Live Effects en complementos.

Terminología y convenciones de notación


API : interfaz de programación de aplicaciones.

Aplicación : Illustrator 2022, a menos que se especifique lo contrario.

PiPL — Lista de propiedades del complemento.

SDK : kit de desarrollo de software para la aplicación. <SDK> indica la carpeta raíz del SDK instalado localmente. La ubicación raíz real
depende de la instalación y el sistema operativo.

Documentación de apoyo
Los siguientes documentos son complementarios a esta guía:

ÿ Primeros pasos con el desarrollo de Adobe Illustrator 2022: describe las plataformas compatibles con el desarrollo de complementos, cómo
configurar el entorno de desarrollo y los ejemplos de código incluidos en el SDK. Proporciona guías paso a paso sobre la creación de
nuevos proyectos, ya sea desde cero o desde las plantillas proporcionadas con el SDK.

ÿ Guía de portabilidad de Adobe Illustrator 2022: describe problemas relacionados con la portabilidad de complementos en diferentes
versiones de la API de Illustrator. Consulte <SDK>/docs/guides/porting-guide.pdf.

ÿ Referencia de la API de Adobe Illustrator: describe en detalle las suites y funciones de la API de Illustrator. Ver
la carpeta <SDK>/docs/references/ .

ÿ Uso del motor de texto de Adobe con Illustrator 2022: describe cómo usar el motor de texto de Adobe: el
API de texto proporcionada por el SDK de Adobe® Illustrator® 2022, en sus complementos de Illustrator.

Código de muestra

Los complementos de muestra se proporcionan en la carpeta de código de muestra en el SDK y se describen en Primeros pasos con el
desarrollo de Adobe Illustrator 2022. El Capítulo 2, “Tutorial”, describe los fundamentos de la programación de plug-ins utilizando el
proyecto de muestra Tutorial.

3
Machine Translated by Google

1 Visión general

Este capítulo presenta la arquitectura del complemento Adobe® Illustrator®. Muestra cómo los complementos interactúan con Illustrator y da una
idea del poder de los complementos.

¿Qué es un complemento?

Un complemento es una biblioteca que amplía o cambia el comportamiento de Illustrator. En Windows, un complemento se crea como una DLL
(biblioteca de vínculos dinámicos). En Mac OS, un complemento se crea como un paquete que contiene una biblioteca compartida.

La arquitectura de complementos en Illustrator es muy potente. Los complementos tienen acceso a los elegantes motores vectoriales, de texto y de
trama de Illustrator, así como a la interfaz de usuario de Illustrator. La API es una parte fundamental de la aplicación; de hecho, la mayor parte de
Illustrator se implementa como complementos.

Puede crear complementos que agreguen nuevas herramientas a las herramientas de dibujo, sombreado y trama que ya se encuentran en Illustrator.
Los complementos pueden convertir a Illustrator en una poderosa aplicación CAD, cartográfica u otra aplicación de diseño personalizado. Los usuarios
pueden agregar o eliminar complementos para personalizar Illustrator de forma rápida y sencilla según sus necesidades.

La API de Illustrator ofrece varias ventajas a los desarrolladores de complementos. Debido a que Illustrator maneja tareas de aplicaciones
grandes como imprimir y guardar archivos, puede concentrarse en la implementación de las características únicas de su complemento. No es
necesario que los complementos admitan la función de deshacer o la actualización de ventanas; estos son manejados por la API y son invisibles para el
complemento. Esto se traduce en ciclos de desarrollo más cortos.

Una breve historia de la API de Adobe Illustrator

La API de Illustrator apareció por primera vez en la versión 5.0. Soportaba un tipo de plug-in, filtros. Esto se amplió en Adobe Illustrator 5.5 para incluir
formatos de archivo. Las API 5.x mostraban características de muchos de los primeros esfuerzos de diseño de API: la interfaz era monolítica,
incorporaba suficientes funciones para lograr el propósito previsto, pero no permitía una futura expansión. Se proporcionó una sola tabla de funciones
de devolución de llamada, sin medios para ampliarla o actualizarla. La abstracción de la plataforma era mínima y la interacción con el usuario estaba
restringida a modal.

La API de Illustrator 6.0 comenzó a abordar estas limitaciones mediante un enfoque modular y extensible.
Las funciones de devolución de llamadas se organizaron en conjuntos que podían reemplazarse o ampliarse fácilmente. Los tipos de complementos se
resumieron y ampliaron para incluir herramientas, ventanas flotantes, elementos de menú, eventos y combinaciones de estos tipos. Se dieron los
primeros pasos hacia la abstracción de plataformas.

La API de Illustrator 7.0 perfeccionó los esfuerzos anteriores. La API se amplió para ser verdaderamente multiplataforma (la versión de Windows de
Adobe Illustrator saltó de la versión 4.2 directamente a la 7.0), incluido un conjunto completo de suites de interfaz de usuario. El núcleo de administración
de complementos se generalizó para el uso entre plataformas y entre productos. Se implementó una mayor parte de la funcionalidad principal de
Illustrator a través de complementos, lo que permitió cambiar el comportamiento de la aplicación sin modificar la propia aplicación.

La API de Illustrator 8.0 cambió de números fijos a números de punto flotante e incluyó más de una docena de nuevas suites, muchas correspondientes
a nuevas funciones de usuario como grupos de complementos, ajuste del cursor y acciones.

Illustrator 9.0 dejó de cargar complementos de Mac OS que contenían código Motorola 68K. Solo los complementos con la información de la
versión de Illustrator 9 en PiPL se reconocieron e incluyeron en el proceso de puesta en marcha inicial de Illustrator 9; sin embargo, los complementos
de Illustrator 6 y 5.5 eran compatibles con adaptadores.

4
Machine Translated by Google

CAPÍTULO 1 Resumen Anatomía de un complemento 5

La API de Illustrator 10.0 cambió las estructuras de la API en Mac OS para usar la alineación PowerPC (4 bytes) en lugar de la alineación de
68 K (2 bytes), lo que requiere la reconstrucción de los complementos de Mac OS. Los complementos de Illustrator para Windows creados
con Illustrator 9 SDK o anterior no se vieron afectados y siguieron siendo compatibles con Illustrator 10.

Illustrator CS1 (Illustrator versión 11.0) integró un nuevo motor de texto, Adobe Text Engine (ATE). Este cambio rompió la compatibilidad
con versiones anteriores. Los complementos de Illustrator que usaban la API de texto obsoleta tuvieron que reconstruirse con el SDK de
Illustrator 11 y migrarse para usar la nueva API ATE.

La API de Illustrator CS2 (Illustrator versión 12.0) introdujo la compatibilidad con Unicode. En Mac OS, el formato de archivo de objeto
para los complementos de Illustrator cambió de PEF a Mach-O.

La API de Illustrator CS3 (Illustrator versión 13.0) introdujo soporte para complementos binarios universales en Mac OS.
El entorno de desarrollo de complementos en Mac OS cambió a Xcode desde CodeWarrior.

La API de Illustrator CS4 (Illustrator versión 14.0) introdujo la compatibilidad con varias mesas de trabajo y el formato de archivo FXG.

En Illustrator CS5 API (Illustrator versión 15.0), Adobe Dialog Manager (ADM) quedó obsoleto. Esta versión introdujo la función Beautiful
Strokes y mejoró y mejoró las funciones existentes, como las cuadrículas de perspectiva.

En Illustrator CS6 API (Illustrator versión 16.0), se eliminó ADM. Un nuevo motor de vectorización reemplazó la funcionalidad de rastreo
anterior; se agregó la capacidad de crear patrones y degradados en los trazos; y la API proporcionó soporte para temas de color de la interfaz
de usuario. Esta versión admitía las plataformas Windows de 64 bits, con los entornos de desarrollo Visual Studio 2010 y Xcode 3.2.5.

En Illustrator CC 2014 API (Illustrator versión 18.0), los tipos de datos ASReal se eliminaron en favor de AIReal.
El entorno de desarrollo en Mac OS se actualizó a Xcode 5.1.1 con LLVM GCC4.2

En Illustrator CC 2015 API (Illustrator versión 19.0), el entorno de desarrollo en Windows se actualiza a Visual Studio 2013 y en Mac OS a
Xcode 6.2. Para obtener documentación sobre estos cambios y otros cambios de la API, consulte la Guía de portabilidad de Adobe Illustrator
2015.

En Illustrator CC 2017 API (Illustrator versión 21.0), el entorno de desarrollo en Windows se actualiza a Visual Studio 2015 y en Mac OS a
Xcode 7.3. Para obtener documentación sobre estos cambios y otros cambios de la API, consulte la Guía de portabilidad de Adobe Illustrator
2017.

En Illustrator CC 2018 API (Illustrator versión 22.0), el entorno de desarrollo en Mac OS para Xcode 8.2.1.
Para obtener documentación sobre estos cambios y otros cambios de la API, consulte la Guía de portabilidad de Adobe Illustrator 2018.

En la API de Illustrator 2019 (Illustrator versión 23.0), el entorno de desarrollo en Windows se actualiza a Visual Studio 2017 y en Mac OS
a Xcode 9.2. Para obtener documentación sobre estos cambios y otros cambios de la API, consulte la Guía de portabilidad de Adobe
Illustrator 2019.

En Illustrator 2020 (Illustrator versión 24.0), el entorno de desarrollo en Mac OS se actualizó a Xcode 11.3. Para obtener documentación
sobre estos cambios y otros cambios de la API, consulte la Guía de portabilidad de Adobe Illustrator 2020.

En Illustrator 2022 (Illustrator versión 26.0), el entorno de desarrollo en Mac OS se actualiza a Xcode
12.3. Para obtener documentación sobre estos cambios y otros cambios de la API, consulte la Guía de portabilidad de Adobe
Illustrator 2022.

Anatomía de un complemento
Como la mayoría de los programas, los complementos de Illustrator contienen código y datos. El administrador de complementos de
Illustrator carga y ejecuta el código de un complemento cuando es necesario, enviando varios mensajes al complemento. El administrador
de complementos también descarga los complementos que ya no se necesitan. Consulte la figura siguiente.
Machine Translated by Google

CAPÍTULO 1 Resumen Tipos de complementos 6

Requerido

complementos

Adobe

ilustrador

Adicional

complementos

Illustrator notifica los complementos cuando acaban de cargarse o están a punto de descargarse, lo que les permite restaurar o
guardar cualquier información de estado.

Tipos de complementos

Esta sección describe los diferentes tipos de complementos de Illustrator que puede crear. Un único archivo de complemento puede
contener varios tipos de complemento. Por ejemplo, un complemento de creación de formas puede implementar varios filtros de
complemento y una herramienta de complemento. Los tipos de complementos se enumeran en la siguiente tabla y se describen con más
detalle después de la tabla.

Tipo de complemento Que hace

Acción Reproducir o registrar acciones.

Efectos Agregue elementos de menú al menú Efectos.

Formato de archivo Agregue tipos de archivos a los comandos Abrir, Guardar y Exportar.

Filtrar Agregue elementos de menú al menú Filtro.

Comando de menú Agregue elementos de menú a la estructura general del menú.

Notificar Recibir y procesar eventos de arte-estado.

Grupo de complementos Mantener el arte de "exhibición" que está asociado con otro objeto de arte

Suite Implemente y publique su propio conjunto de funciones de devolución de llamada.

Temporizador Recibir notificación periódica.

Herramienta
Agregue herramientas al panel Herramientas.

transformar de nuevo Establezca la función de transformación de nuevo.


Machine Translated by Google

CAPÍTULO 1 Resumen Tipos de complementos 7

Complementos de acción

Los complementos de acción se utilizan para ejecutar comandos de Illustrator. Un complemento de acción puede registrarse por sí mismo para
que pueda grabarse a través del panel Acciones. Para obtener más información, consulte AIActionManagerSuite en la referencia de la API de
Adobe Illustrator.

Formatos de archivo de complementos

Los formatos de archivo de complemento se utilizan para ampliar la cantidad de tipos de archivos que Illustrator puede leer y escribir. Los
complementos indican qué formatos de archivo admiten durante la inicialización, especificando los nombres y tipos de archivo admitidos (o
extensiones). Un complemento puede registrar tantos formatos como se desee.

Los tipos de archivo admitidos por un complemento de formato de archivo pueden aparecer en los cuadros de diálogo Exportar, Guardar y Abrir
de Illustrator, según las opciones especificadas cuando se agrega el nuevo tipo de archivo.

Para obtener más información, consulte AIFileFormatSuite en la referencia de la API de Adobe Illustrator.

Filtros enchufables

Los filtros de complemento aparecen en el menú Objeto y se utilizan para crear o manipular ilustraciones de Illustrator.
Por lo general, los filtros presentan una interfaz modal para el usuario, que puede establecer parámetros antes de ejecutar.

NOTA: En otras aplicaciones (incluidas Adobe PageMaker® y Adobe FrameMaker®), el término "filtro" o "complemento de filtro" a veces se
usa para describir software que lee y escribe archivos no nativos (por ejemplo, archivos TIFF o JPEG) . En Illustrator, se denominan
complementos de formato de archivo. Illustrator utiliza el término "complemento de filtro" de forma similar a Adobe Photoshop: un complemento
de filtro modifica la ilustración de forma algorítmica.

Illustrator actualiza los menús Repetir y Deshacer automáticamente, lo que convierte a los filtros en uno de los complementos más sencillos
de crear.

Para obtener más información, consulte AIFilterSuite en la referencia de la API de Adobe Illustrator.

NOTA: AIFilterSuite está en desuso en favor de AILiveEffectSuite. Le recomendamos que cambie los complementos que implementan filtros para
usar efectos en vivo, ya que AIFilterSuite se eliminará en algún momento en el futuro.

Comandos de menú de complementos

Los menús de complementos se utilizan para agregar elementos de menú a la estructura de menús de Illustrator que no sean el menú Filtro.
Un uso típico de este tipo de complemento es agregar un elemento de menú Ocultar/Mostrar ventana al menú Ventana de Illustrator.

Los comandos de menú de complementos se pueden agregar en varios lugares de la estructura del menú.

Para obtener más información, consulte AIMenuSuite en la referencia de la API de Adobe Illustrator.

Notificadores y temporizadores complementarios

Los complementos utilizan notificadores y temporizadores para que Illustrator le informe de ciertos eventos.

Un complemento de notificador recibe una notificación cuando cambia el estado de un documento de Illustrator. Por ejemplo, un complemento
puede solicitar que se le notifique cuando cambie el estado de selección. Un complemento de notificador se registra para una o más notificaciones
durante el inicio.
Machine Translated by Google

CAPÍTULO 1 Resumen Donde viven los complementos 8

Se notifica un complemento de temporizador a intervalos de tiempo regulares. Por ejemplo, un complemento de temporizador puede solicitar que se le notifique una vez
por segundo.

Para obtener más información, consulte AINotifierSuite y AITimerSuite en la referencia de la API de Adobe Illustrator.

Complementos de grupo de complementos

Los complementos de grupo de complementos mantienen uno o más grupos de complementos. Un grupo de complementos es un objeto de arte especial que

contiene arte editable y arte que se muestra pero no se puede editar. Un complemento de grupo de complementos es responsable de regenerar el arte de visualización

(o el arte de resultado) siempre que haya un cambio en el arte de edición. Los grupos de complementos se utilizan para crear tipos de arte especiales, como Live Blends

y Brushes.

Para obtener más información, consulte AIPluginGroupSuite en la referencia de la API de Adobe Illustrator.

Herramientas de complemento

Las herramientas de complemento agregan un icono al panel Herramientas, lo que amplía la cantidad de herramientas disponibles para el usuario. Muchas

herramientas estándar de Illustrator, incluidas la herramienta cuchillo, las herramientas de forma y la herramienta de giro, se implementan como herramientas de
complemento.

Cuando se selecciona, un complemento de herramienta puede rastrear el mouse, determinar qué obra de arte se seleccionó y actuar en consecuencia.

Por ejemplo, una herramienta puede crear o distorsionar objetos. Algunas cosas se manejan automáticamente para las herramientas de complemento, como

desplazarse por la ventana.

Para obtener más información, consulte AIToolSuite en la referencia de la API de Adobe Illustrator.

Combinación de varios tipos de complementos

Como se mencionó anteriormente, es probable que un archivo de complemento implemente varios tipos de complementos. Un complemento también puede

necesitar agregar varias instancias de un solo tipo de complemento. La API del complemento es compatible con ambos casos.

Donde viven los complementos

La carpeta de complementos de Illustrator se encuentra en las siguientes ubicaciones:

Ventanas: C:\Archivos de programa\Adobe\Adobe Illustrator CC 2022\Complementos\

Mac OS: /Aplicaciones/Adobe Illustrator CC 2022/Complementos/

Una carpeta de complementos específica del usuario , que puede ser apropiada para usar en sistemas multiusuario, se encuentra de la siguiente manera:

ventanas 7: C:\Usuarios\<nombre de usuario>\AppData\Roaming\Adobe\

Configuración de Adobe Illustrator CC 2022\<códigolocal>\Complementos\

Mac OS /Usuarios/{nombre de usuario}/Biblioteca/Soporte de aplicaciones/Adobe/

Adobe Illustrator CC 2022/<códigolocal>/Complementos

Opcionalmente, se puede especificar una carpeta adicional utilizando la preferencia Carpeta de complementos adicionales de Illustrator.

En general, cada tipo de complemento se encuentra en una subcarpeta específica; por ejemplo, los complementos de herramientas están en una carpeta llamada
Instrumentos.
Machine Translated by Google

CAPÍTULO 1 Resumen ¿Qué define un complemento? 9

¿Qué define un complemento?


En Windows, un complemento de Illustrator es una DLL (biblioteca de vínculos dinámicos). En Mac OS, un complemento de Illustrator es un
paquete que contiene una biblioteca compartida. Un complemento de Illustrator tiene las siguientes características:

ÿ Una extensión de archivo de .aip; por ejemplo, CoolEffect.aip.

ÿ Un recurso PiPL de complemento válido. El recurso PiPL contiene información sobre su complemento. ilustrador
considera solo aquellos archivos con recursos PiPL como complementos potenciales. Los archivos con las propiedades correctas se agregan
a la lista de complementos.

ÿ Un punto de entrada de código que contiene código binario que puede ejecutarse en la plataforma de destino. El punto de entrada se
especifica en el recurso PiPL y se llama con varios mensajes que le indican qué acciones tomar.

Recursos de PiPL

Un recurso de lista de propiedades de complementos (PiPL) contiene propiedades utilizadas por el administrador de complementos de
Illustrator, incluidas las siguientes:

ÿ El tipo del complemento, dado por la propiedad kind .

ÿ El mecanismo de llamada para el código del complemento, proporcionado por la propiedad ivrs .

ÿ El punto de entrada del complemento, proporcionado por una propiedad de descriptor de código .

Illustrator solo considera los archivos con un PiPL válido como complementos potenciales. Las propiedades de PiPL se definen mediante recursos
de la plataforma nativa. Para obtener más información acerca de los recursos y ejemplos de PiPL, consulte el Capítulo 4, “Enchufe–
en Listados de Propiedades.

Gestión de complementos
Cuando se inicia Illustrator, solo los complementos con un PiPL válido y un punto de entrada de código se reconocen e incluyen en el
proceso de inicio inicial. Cada complemento se carga y descarga de la memoria según lo necesite Illustrator. Un complemento debe escribirse
asumiendo que no siempre está en la memoria. Esta es la razón por la que un complemento debe guardar y restaurar la información de estado
durante la descarga y la recarga. Un complemento puede esperar ciertos servicios de la aplicación. Debido a que se puede descargar un
complemento, Illustrator proporciona un medio para almacenar datos importantes cuando se descarga el complemento. Cada vez que se llama a
un complemento, se le proporciona suficiente información para realizar la acción a realizar.

El orden de carga de los complementos se vuelve importante cuando un complemento depende de un recurso proporcionado por otro, ya que el
complemento que proporciona el recurso debe cargarse primero. Como se mencionó anteriormente, los complementos que exportan una o más
suites deben declarar (en el recurso PiPL) lo que exportan. Illustrator utiliza esta información al cargar y ejecutar complementos, lo que garantiza
que las suites y otros recursos estén disponibles.

Mensajes y punto de entrada del complemento


El administrador de complementos de Illustrator se comunica con su complemento cargando el código del complemento en la memoria si es
necesario, y luego llamando al punto de entrada proporcionado por la propiedad del descriptor de código en PiPL. Por convención, el punto de
entrada se llama PluginMain y se compila con enlace C:

extern "C" ASAPI ASErr PluginMain(char* llamante, char* selector, void* mensaje);

Se pasan tres argumentos a la función PluginMain ; colectivamente, forman un mensaje.


Machine Translated by Google

CAPÍTULO 1 Resumen Punto de entrada del complemento y mensajes 10

Los dos primeros parámetros representan la acción del mensaje y describen lo que se supone que debe hacer el complemento, como se describe
en la siguiente sección. El tercer parámetro es un puntero a una estructura de datos, que varía según la acción del mensaje. Cuando determina la
acción del mensaje, escribe los datos en el parámetro del mensaje según sea necesario.

El resultado de la función es un código de error.

Acciones de mensajes: llamadores y selectores

Cada vez que se llama a su complemento, recibe una acción de mensaje de Illustrator. La acción del mensaje notifica a su complemento que
ocurrió un evento o le dice a su complemento que realice una acción.

La acción del mensaje que se pasa a su complemento consta de dos identificadores:

ÿ La persona que llama identifica al remitente del mensaje (PICA, la aplicación host o un complemento) y una
categoría de acción.

ÿ El selector especifica la acción a realizar dentro de la categoría de acción. Todos los complementos reciben al menos cuatro acciones de mensaje:
recargar, descargar, iniciar y apagar. Además, su complemento puede recibir acciones de mensajes adicionales específicas para el tipo de
complemento.

Por ejemplo, Illustrator envía un complemento con una acción de mensaje basada en estas dos cadenas, cuando el complemento se descarga y
vuelve a cargar:

#define kSPAccessCaller #define "Acceso al SP"


kSPAccessUnloadSelector "Descargar"
#define kSPAccessReloadSelector "Recargar"
Los identificadores de llamador y selector son cadenas C. Por convención, cada cadena de llamadas tiene un prefijo. Esto es para que otros
complementos puedan definir fácilmente las acciones de mensajes nuevos, con pocas posibilidades de conflicto. Por ejemplo, las personas que
llaman y los selectores de las suites de Illustrator usan el prefijo "AI", mientras que los de PICA usan el prefijo "SP".

Las acciones de mensaje de Illustrator se utilizan para indicar eventos en los que un complemento tiene interés. La información sobre los llamadores
y selectores admitidos por la API se proporciona en las páginas Llamadores de complementos y Selectores de complementos en la referencia de
la API de Adobe Illustrator.

Acciones de mensajes principales

La siguiente tabla contiene el conjunto de acciones de mensajes principales recibidas por todos los complementos y las acciones correspondientes
que debe realizar su complemento.

Llamador Selector Acción a realizar

kSPAccessCaller kSPAccessReloadSelector Restaura cualquier información de estado (globales).


("Acceso al SP") ("Recargar")

kSPAccessUnloadSelector Guarde cualquier información de estado (globales).


("Descargar")

kSPInterfaceCaller Selector de inicio de interfaz kSP Inicialice globales y agregue funciones a la aplicación.
("Interfaz SP") ("Puesta en marcha")

kSPInterfaceShutdownSelector Globales gratuitos, elimine funciones de la aplicación


("Cerrar") y guarde preferencias.
Machine Translated by Google

CAPÍTULO 1 Resumen Punto de entrada del complemento y mensajes 11

Recargar y descargar mensajes


Cada vez que un complemento se carga en la memoria o se descarga de la memoria, Illustrator le envía un acceso
acción de mensaje:

#define kSPAccessCaller "Acceso al SP"


#define kSPAccessUnloadSelector "Descargar"
#define kSPAccessReloadSelector "Recargar"

La acción del mensaje contiene el llamador de acceso y un selector de recarga o descarga. Esta es la oportunidad de su
complemento para configurar, restaurar o guardar información de estado. El llamante/selector de acceso pone entre paréntesis a todos los
demás llamantes y selectores.

Acceda a los mensajes entre paréntesis de todos los demás mensajes. Recargar es el primer mensaje que recibe su complemento;
descargar es el último. En estos momentos, su complemento no debe adquirir ni lanzar suites que no sean las integradas en Illustrator.

Mensajes de encendido y apagado


Illustrator tiene dos acciones de mensajes de interfaz principales, donde el complemento puede interactuar con la aplicación:

#define kSPInterfaceCaller #define "Interfaz SP"


kSPInterfaceStartupSelector #define "Puesta en marcha"
kSPInterfaceShutdownSelector "Cerrar"

Cuando se inicia Illustrator, envía un mensaje de "inicio" a cada complemento que encuentra. Esto permite que su complemento asigne memoria
global, agregue elementos de interfaz de usuario a Illustrator, registre suites o realice otras inicializaciones. La acción del mensaje de inicio consiste
en la persona que llama a la interfaz (kSPInterfaceCaller) y el selector de inicio (kSPInterfaceStartupSelector).

Cuando el usuario sale de Illustrator, envía a cada complemento un mensaje de "apagado". La acción del mensaje de apagado
comprende la persona que llama a la interfaz (kSPInterfaceCaller) y el selector de apagado (kSPInterfaceShutdownSelector). El
apagado está diseñado para vaciar archivos y preservar preferencias, no para destruirlos. Un complemento que exporta una suite no debe
deshacerse de sus globales de complemento ni de la información de la suite, ya que puede ser llamado después de su propio cierre por el
cierre de otro complemento. Por ejemplo, si su complemento implementa un conjunto de preferencias que usan otros complementos, es
posible que lo llamen en sus controladores de apagado después de que ya lo haya apagado.

Notificadores

Algunas acciones de mensajes también se conocen como notificadores, lo que indica que el usuario cambió algo en Illustrator; por ejemplo,
cuando el usuario selecciona un objeto.

Los complementos deben registrarse para los notificadores en los que están interesados. La suite Notifier se utiliza para registrar y eliminar
solicitudes de notificación (ver AINotifierSuite).

Los complementos también pueden crear sus propios notificadores, que se pueden usar para transmitir cambios a otros complementos.

Manejo de llamadores y selectores


La organización de su complemento se basa en gran medida en los mensajes que recibe. La rutina principal de su complemento primero
debe determinar la acción del mensaje, utilizando los parámetros de llamador y selector. Por ejemplo:

Extern "C" ASAPI ASErr PluginMain (char* llamante, char* selector, void* mensaje)
Machine Translated by Google

CAPÍTULO 1 Resumen Punto de entrada del complemento y mensajes 12

{
ASErr error = kNoErr;
if (strcmp(persona que llama, kSPAccessCaller) == 0) {
// Manejar la recarga y descarga
if (strcmp(selector, kSPAccessReloadSelector) == 0)
error = MyRestoreGlobals(mensaje);
de lo contrario si (strcmp(selector, kSPAccessUnloadSelector) == 0)
error = MySaveGlobals(mensaje);
} else if ( strcmp( llamador, kSPInterfaceCaller ) == 0 ) {
// Manejar el inicio y el apagado
if (strcmp(selector, kSPInterfaceStartupSelector) == 0)
error = MyStartupPlugin(mensaje);
de lo contrario si (strcmp(selector, kSPInterfaceShutdownSelector) == 0)
error = MyShutdownPlugin (mensaje);
} else if (strcmp(llamador, kCallerAIMenu) == 0 &&
strcmp( selector, kSelectorAIGoMenuItem ) == 0 ) ){
// Manejar el mensaje del menú
error = MyHandleMenu(mensaje);
}
error de retorno;
}

Datos del mensaje

El último argumento pasado a su punto de entrada de complemento es un puntero a una estructura de datos de mensaje, que contiene
información apropiada para la acción del mensaje. Por ejemplo, cuando se recibe una acción de mensaje con un clic del mouse, la
estructura de datos del mensaje contiene la posición del mouse.

El contenido de la estructura de datos del mensaje depende de la acción del mensaje y no se conoce por completo hasta que su complemento
lo identifica. Si bien el contenido de los datos del mensaje varía, por convención, todas las estructuras de datos del mensaje comienzan con
los campos comunes que se agrupan en la estructura SPMessageData :

typedef struct SPMessageData {


ai::int32 SPCheck;
estructura SPPlugin *self;
vacío *globales;
estructura SPBasicSuite *básico;
} SPMessageData;

Si este es un mensaje válido, el campo SPCheck contiene kSPValidSPMessageData.

El campo self es una referencia al complemento que se está llamando. La referencia al propio complemento en ejecución se utiliza para
agregar conjuntos de complementos, adaptadores y otros datos de complementos a Illustrator. Illustrator almacena este valor con los datos
agregados. Se utiliza para recuperar su complemento según sea necesario.

El puntero global es para que lo use su complemento, para preservar cualquier información entre llamadas que necesite.
Por lo general, es un puntero a un bloque de memoria asignado por su complemento al inicio. Illustrator conserva este valor cuando se
descarga el complemento y se devuelve al complemento cada vez que se llama. Los complementos usan este bloque para almacenar
cualquier información de estado que necesitan mantener entre la descarga y la recarga.

NOTA: Es importante que la memoria para los globales se asigne utilizando las API de asignación de memoria de Illustrator; de lo contrario,
el sistema operativo puede destruir la memoria cuando se descarga un complemento.

El campo básico es un puntero a la suite básica (consulte SPBasicSuite), que permite que su complemento adquiera otras suites y
proporciona administración de memoria básica. Consulte “Suites” en la página 13.
Machine Translated by Google

CAPÍTULO 1 Resumen Ilustrador API 13

Cuando Illustrator o un complemento desea enviar un mensaje a su complemento, pasa una estructura de datos de mensaje relevante. A
continuación se dan algunos ejemplos.

Llamador Tipo de mensaje Descripción

kSPAccessCaller SAccesoMensaje Contiene SPMessageData.

kSPInterfaceCaller SPInterfaceMessage Contiene SPMessageData.

kCallerAIMenú AIMenúMensaje Contiene SPMessageData y una referencia a un elemento de menú


que se eligió.

Una vez que un complemento identifica la acción del mensaje a través de los parámetros de llamador y selector, convierte el parámetro
del mensaje para acceder a más datos del mensaje. Por ejemplo:

if (strcmp(persona que llama, kSPAccessCaller) == 0) {


SPAccessMessage* accessMsg = static_cast<SPAccessMessage*>(mensaje);
// acceder a accessMsg

} else if (strcmp(llamador, kSPInterfaceCaller) == 0) {


SPInterfaceMessage* interfaceMsg = static_cast<SPInterfaceMessage*>(mensaje);
// accede al mensaje de interfaz
}
más si (strcmp(persona que llama, kCallerAIMenu) == 0) {
AIMenuMessage* menuMsg = static_cast<AIMenuMessage*>(mensaje);
// acceder al mensaje de menú
}

Mensajes de efectos en vivo

Para obtener información específica sobre los controladores de mensajes que utiliza en un complemento que agrega un elemento al
menú Live Effects, consulte "Manejo de Live Effects" en la página 33.

API de ilustrador
habitaciones

El administrador de complementos de Illustrator llama a un complemento a través del punto de entrada del complemento y envía varios
mensajes como se describe en la sección anterior. Cuando un complemento está activo, necesita una forma de realizar acciones dentro
de Illustrator. El mecanismo para esto son los conjuntos de complementos, que son una o más funciones relacionadas agrupadas en una
estructura C.

Las funciones se agrupan en suites según los servicios que brindan; por ejemplo, Path Suite (ver AIPathSuite) contiene funciones
que crean y manipulan rutas y segmentos. Para obtener documentación detallada sobre las suites y funciones proporcionadas,
consulte la referencia de la API de Adobe Illustrator.

La arquitectura de la suite de Illustrator (también conocida como Arquitectura de componentes complementarios o PICA) también se
encuentra en las últimas versiones de Adobe Photoshop y otras aplicaciones de Adobe. Un término anterior para PICA era Suite Pea (SP).
Todas las suites que forman parte de PICA comienzan con el sufijo SP; por ejemplo, SPBasicSuite.

Las suites se dividen en dos categorías generales: las que implementan un tipo de complemento (consulte “Tipos de complementos”
en la página 6) y las que proporcionan funciones generales. Las suites que brindan funciones generales constituyen la mayor parte de
Machine Translated by Google

CAPÍTULO 1 Resumen API de ilustrador 14

la API; proporcionan una amplia gama de capacidades para manipular texto, degradados o imágenes rasterizadas, o realizar funciones matemáticas. La siguiente

tabla enumera varias suites principales y lo que hacen.

Nombre de la suite Suite Servicios prestados

suite de arte AIArtSuite Accede al árbol de ilustraciones.

conjunto de bloques
AIBlockSuite SPBlocksSuite Asignar y liberar memoria.

Conjunto de colores personalizados AICustomColorSuite Crea o trabaja con colores personalizados.

Paquete de listas de documentos AIDocumentListSuite Crear o trabajar con documentos

Paquete de documentos AIDocumentSuite Obtener y configurar la información del documento.

conjunto de degradado AIGgradientSuite Crea o trabaja con degradados.

suite de grupo AIGroupSuite Haz grupos recortados.

Conjunto de capas AILayerSuite Obtenga información sobre las capas.

conjunto de caminos AIPathSuite Trabaja con trazados de Illustrator.

Conjunto aleatorio AIRandomSuite Genera números aleatorios.

Conjunto de ráster AIRasterSuite Trabaja con objetos raster.

Conjunto de matemáticas reales AIRealMathSuite Muchas funciones matemáticas útiles.

Conjunto de etiquetas AITagSuite Asociar información con objetos de arte.

Conjunto de marcos de texto AITextFrameSuite Trabajar con objetos de texto.

Para obtener descripciones detalladas de las suites y sus funciones asociadas, consulte la referencia de la API de Adobe Illustrator.

Adquisición y liberación de suites


Antes de poder usar una función en una suite, primero debe adquirir la suite. Cuando las funciones de la suite ya no sean necesarias, su complemento debe liberar la suite.

Es importante lanzar suites para que el administrador de complementos de Illustrator pueda funcionar de manera óptima. El administrador de complementos utiliza el

mecanismo de adquisición/liberación para determinar cuándo se pueden descargar los complementos para liberar memoria.

Cuando se llama a su complemento por primera vez, "conoce" solo el paquete básico (consulte SPBasicSuite), que se presentó anteriormente en este capítulo (como

parte de la estructura SPMessageData ). La suite básica se utiliza para adquirir y lanzar otras suites.

El siguiente fragmento de código muestra cómo mostrar una alerta en el inicio usando la función MessageAlert() en la suite AIUser .
Machine Translated by Google

CAPÍTULO 1 Resumen Ilustrador API 15

#include "IllustratorSDK.h"
// Dile a Xcode que exporte los siguientes símbolos
#si está definido(__GNUC__)
#pragma Impulso de visibilidad de GCC (predeterminado)
#terminara si

// Punto de entrada del complemento


extern "C" ASAPI ASErr PluginMain(char * llamador, char* selector, void* mensaje); // Dile a Xcode que vuelva a la visibilidad
predeterminada de los símbolos
#si está definido(__GNUC__)
#pragma GCC visibilidad emergente
#terminara si

externo "C"
{
AIUnicodeStringSuite* sAIUnicodeString = NULL;
SPBlocksSuite* sSPBlocks = NULL;
}

Extern "C" ASAPI ASErr PluginMain (char* llamante, char* selector, void* mensaje)
{
ASErr error = kNoErr;
SPBasicSuite* sSPBasic = ((SPMessageData*)mensaje)->básico;
if (sSPBasic->IsEqual(caller, kSPInterfaceCaller)) {
AIUserSuite *sAIUser = NULL;
error = sSPBasic->AcquireSuite(kAIUserSuite, kAIUserSuiteVersion, (const void**) &sAIUser);

error = sSPBasic->AcquireSuite(kAIUnicodeStringSuite, kAIUnicodeStringSuiteVersion, (const


vacío**) &sAIUnicodeString);
error = sSPBasic->AcquireSuite(kSPBlocksSuite, kSPBlocksSuiteVersion, (const void**)
&sSPBbloques);
if(sSPBasic->IsEqual(selector, kSPInterfaceStartupSelector)){
sAIUser->MessageAlert(ai::UnicodeString("¡Hola mundo!"));
}
else if(sSPBasic->IsEqual(selector, kSPInterfaceShutdownSelector)){
sAIUser->MessageAlert(ai::UnicodeString("¡Adiós Mundo!"));
}
error = sSPBasic->ReleaseSuite(kAIUserSuite, kAIUserSuiteVersion);
error = sSPBasic->ReleaseSuite(kAIUnicodeStringSuite, kAIUnicodeStringSuiteVersion);
}
error de retorno;
}

Este fragmento de código pretende ilustrar los conceptos de adquisición, uso y lanzamiento de una suite. Para ver cómo se adquieren y
lanzan las suites con mayor frecuencia, consulte los complementos de muestra proporcionados en el SDK.

Paquetes de publicación

Todos los complementos utilizan suites, ya que son el mecanismo fundamental de la API de Illustrator. Los complementos también pueden
publicar conjuntos propios, para que los usen otros complementos. Esta función, en la que los complementos pueden ser tanto clientes
de suites como editores de suites, es extremadamente poderosa. Varios complementos incluidos con las suites de publicación de Illustrator
utilizados por muchos otros complementos.

Desde la perspectiva del complemento, no es importante si una suite en particular se implementa dentro de Illustrator o como un
complemento. El administrador de complementos de Illustrator es responsable de administrar conjuntos entre varios complementos y la
aplicación.

Para exportar una suite, un complemento debe llamar a SPSuitesSuite::AddSuite al iniciarse. También recomendamos que un complemento
declare una PIExportsProperty en su PiPL, para permitir que Illustrator optimice la inicialización del complemento.
Machine Translated by Google

CAPÍTULO 1 Resumen API de ilustrador 16

proceso. Illustrator siempre intenta cargar primero los complementos con PIExportsProperty , por lo que otros complementos que dependen de las
suites exportadas pueden cargarse e iniciarse correctamente en el primer intento.

Nota: PIExportsProperty está obsoleto en Illustrator 2022 y se admite en la forma anterior de PIPL.

Para obtener más información sobre cómo publicar suites, consulte SPSuitesSuite::AddSuite en la referencia de la API de Adobe Illustrator y
“Exportar propiedad” en la página 36.

Compatibilidad binaria

Los entornos de desarrollo para Illustrator 2022 han cambiado. Esto significa que debe volver a compilar los complementos creados
con una versión anterior del SDK de Illustrator para que se ejecuten en Illustrator 2022.

ÿ En Windows, use Microsoft Visual Studio 2019.

ÿ En Mac OS, use Xcode 12.3 (requiere macOS 10.15.4 o superior), LLVM Clang y macOS predeterminado
SDK.

Obra de arte de Illustrator vista por un complemento

La mayoría de los complementos manipulan las ilustraciones de Illustrator (incluidas las rutas, el texto y las imágenes rasterizadas) de alguna manera.
Los objetos de ilustraciones de Illustrator se presentan a los complementos como un árbol jerárquico, que los complementos pueden modificar libremente.

Los complementos pueden crear, eliminar y cambiar las características de los objetos de ilustraciones. Por ejemplo, los complementos pueden agrupar
objetos, mover o distorsionar rutas, ajustar colores y buscar y cambiar texto.

Soporte multiplataforma

La implementación de la API de Illustrator es altamente portátil entre plataformas. Los complementos se pueden escribir para las plataformas Mac OS
y Windows. Trabajar con tipos de datos de Illustrator es el mismo en ambas plataformas.
Las diferencias están relacionadas con las arquitecturas del hardware o del sistema operativo en el que se ejecuta Illustrator, y estas se abstraen, por lo
que la llamada a la API funciona en ambos entornos con un mínimo de código de soporte de plataforma. Hay funciones de API específicas de la
plataforma, pero estas existen en gran medida para la compatibilidad con implementaciones anteriores; hay versiones multiplataforma que le sugerimos
que use en su lugar.

Debido a este alto nivel de compatibilidad, escribir un complemento de Illustrator para Mac OS y Windows es bastante fácil. Los componentes
específicos de la plataforma, si es necesario, se pueden especificar en unas pocas líneas de código dentro de un #ifdef. Por ejemplo, el ejemplo del
Tutorial en el SDK usa un código fuente idéntico; solo los recursos son específicos de la plataforma.

Las principales diferencias están en la presentación de la interfaz de usuario y los datos de recursos; dependiendo de la complejidad de la interfaz de
usuario, esto puede ser una tarea importante. Los elementos de la interfaz de usuario, como los menús, se implementan mediante la API de Illustrator y
son altamente compatibles entre plataformas.

Memoria

SPBasicSuite y SPBlocksSuite proporcionan la funcionalidad de administración de memoria. Las funciones de asignación de


memoria de la suite básica (SPBasicSuite) son convenientes ya que esta suite está disponible cuando se llama a un complemento
(consulte SPMessageData).
Machine Translated by Google

CAPÍTULO 1 Resumen API de ilustrador 17

Recursos

Los complementos de Illustrator definen sus recursos en el formato nativo de la plataforma en la que se ejecutan.
Se puede acceder a los recursos desde un complemento usando SPAccessSuite::GetAccessInfo.

Información y estructuras de bytes


Las estructuras de datos específicas de Illustrator para las implementaciones de Mac OS y Windows son las mismas, con la excepción de las
dependencias de la plataforma, como el orden de los bytes. Tanto en Windows como en Mac OS, la alineación de bytes se realiza con límites de
ocho bytes.

Requisitos del sistema


Las plataformas admitidas para el desarrollo de complementos de Illustrator están documentadas en Primeros pasos con el desarrollo de Adobe
Illustrator 2022. Los requisitos de la plataforma para Illustrator se definen en la versión del producto
notas

clases de ayuda
La API proporciona clases auxiliares que facilitan la escritura de código de complemento. Estas clases encapsulan llamadas de
suites; eliminan la necesidad de llamar a las suites directamente en su código. Por ejemplo, ai::UnicodeString
proporciona soporte para cadenas Unicode y elimina la necesidad de llamar a AIUnicodeStringSuite.

La API proporciona los archivos de origen para estos ayudantes. Para usar un asistente, agregue el archivo .cpp que lo implementa a su proyecto y
cree el código como parte de su complemento. Por ejemplo, el archivo IAIUnicodeString.cpp implementa la clase ai::UnicodeString .

NOTA: El uso de clases auxiliares es diferente al uso de suites. Las suites son implementadas por otro componente binario (la aplicación
Illustrator o sus complementos) y son llamadas por su complemento; un archivo de encabezado API define la interfaz. Las clases auxiliares, por otro
lado, se construyen como parte de su complemento; un archivo de encabezado API define la interfaz y un archivo fuente API (archivo .cpp )
proporciona la implementación.

Para usar una clase auxiliar, un complemento generalmente debe proporcionar punteros a las suites utilizadas por la clase, en variables globales
con nombres conocidos. Por ejemplo, ai::UnicodeString requiere que el complemento de llamada adquiera un puntero a AIUnicodeStringSuite y
SPBlocksSuite en las siguientes variables globales:

externo "C" {
AIUnicodeStringSuite* sAIUnicodeString = nil;
SPBlocksSuite* sSPBlocks = nil;
}

Si agrega una clase auxiliar a su complemento y no define los punteros de la suite global que requiere, obtendrá errores de vinculación cuando
construya su proyecto. Si no adquiere los conjuntos de los que depende la clase, se producirán errores de tiempo de ejecución (consulte “Adquisición
y lanzamiento de conjuntos” en la página 14). En Windows, si agrega una clase auxiliar a su complemento y su proyecto de Visual Studio usa
encabezados precompilados, obtendrá un error de compilación, porque el archivo fuente para la clase auxiliar no #incluye su encabezado
precompilado expediente. Para corregir esto, anule la configuración Crear/Usar encabezado precompilado para que no use encabezados
precompilados para el archivo fuente de clase auxiliar.

Para obtener documentación sobre las clases proporcionadas, consulte Referencia de la API de Adobe Illustrator > Clases auxiliares.
Machine Translated by Google

CAPÍTULO 1 Resumen Adaptadores enchufables 18

Adaptadores enchufables

La compatibilidad con complementos más antiguos, así como con complementos de Photoshop, se proporciona a través de adaptadores de
complementos, complementos que asignan llamadas de API entre Illustrator y las API más antiguas o no nativas de los otros complementos. Los
adaptadores no se tratan en detalle en este documento.

Acerca del menú de complementos

Para mostrar información de contacto de la empresa o declaraciones de derechos de autor sobre su complemento, siga estos pasos:

ÿ Cree un nuevo grupo de menús en el grupo Acerca de de Illustrator (consulte kAboutMenuGroup), para contener todos los
Acerca de los elementos del menú de complementos.

ÿ Para cada complemento, cree un elemento de menú en este nuevo grupo.

ÿ Maneje el mensaje de menú relacionado con el uso de su elemento de menú de complemento Acerca de mostrando un cuadro Acerca de
que contiene información específica del complemento.

A continuación se muestra una ilustración de los menús resultantes en Mac OS:

Illustrator > Acerca de los complementos de MyCompanyName > MyPluginName1...


MiNombreDeComplemento2...

A continuación se muestra una ilustración de los menús resultantes en Windows:

Ayuda > Acerca de los complementos de MyCompanyName > MyPluginName1...


MiNombreDeComplemento2...

Se proporciona una clase auxiliar que admite esta funcionalidad como código de muestra; consulte SDKAcerca de PluginsHelper.
El ejemplo del Tutorial muestra cómo usar esta clase.

NOTA: Antes de Illustrator CS3, la lista de complementos que se cargaron se mostraba en el cuadro de diálogo Acerca de los
complementos y el usuario podía optar por solicitar más información sobre un complemento específico. A partir de Illustrator CS3, se
eliminó el cuadro de diálogo Acerca de los complementos.

Próximos pasos

En este capítulo, presentamos complementos para Adobe Illustrator y definimos varios conceptos clave, que incluyen:

ÿ Administrador de complementos

ÿ Tipos de complementos

ÿ Mensajes y acciones de mensajes

ÿ Notificadores

ÿ Carga y descarga

ÿ Adquirir, usar y liberar suites

El Capítulo 2, “Tutorial”, explica el proceso de escritura de un complemento con más detalle. Referencia de la API de Adobe Illustrator
describe cada función en detalle y brinda información sobre los objetos de arte y las estructuras de datos que necesita para completar el trabajo.
Finalmente, los proyectos de muestra en el SDK brindan ejemplos concretos y son un buen punto de partida para su proyecto.
Machine Translated by Google

2 Tutoría
Este capítulo describe los fundamentos de la programación de complementos de Illustrator, utilizando como ejemplo un complemento llamado
Tutorial que se proporciona en el SDK. Busque el proyecto de muestra en la carpeta de código de muestra en el SDK y explore el código fuente
mientras lee este capítulo.

Las características principales de un complemento de Illustrator se presentaron en el Capítulo 1, “Descripción general. Si aún no ha leído ese
capítulo, hágalo antes de continuar con este capítulo.

Punto de entrada de recursos y complementos de PiPL

Los complementos de Illustrator deben tener un recurso PiPL válido y un punto de entrada al que Illustrator pueda llamar.

La declaración de recursos PiPL del complemento Tutorial se encuentra en los siguientes archivos de origen:

En el nuevo método PIPL:

Windows y macOS: plugin.pipl

Para obtener más información sobre la nueva forma de PIPL, consulte la sección Marco de PIPL en la guía Primeros pasos con Adobe Illustrator.

En el método PiPL en desuso:

ÿ Ventanas: Tutorial.rc

ÿ Mac OS: Tutorial.r


(un enlace a <SDK_install)/common/mac/Plugin.r)

Para obtener más información sobre PiPL, consulte “Listas de propiedades de complementos” en la página 35.

El punto de entrada del complemento Tutorial es la función PluginMain en Tutorial.cpp.

Solo los complementos con la información de la versión de Illustrator en PiPL se reconocen e incluyen en el proceso de inicio inicial
de Illustrator. Un complemento se carga y descarga de la memoria según lo necesite Illustrator. Su complemento debe escribirse asumiendo
que no siempre está en la memoria. Esta es la razón por la que su complemento debe guardar y restaurar la información de estado durante la
descarga y la recarga. Su complemento puede esperar ciertos servicios de la aplicación. Debido a que su complemento puede descargarse,
Illustrator proporciona un medio para almacenar datos importantes cuando se descarga el complemento. Cada vez que se llama al complemento,
se le proporciona suficiente información para realizar la acción a realizar.

Manejo de llamadores y selectores

La organización de su complemento se basa en gran medida en los mensajes recibidos por su función PluginMain . La rutina principal de su
complemento básicamente se convierte en un interruptor implementado como una serie de comparaciones de cadenas que llaman a funciones
apropiadas para la persona que llama y selecciona la acción del mensaje. Consulte “Gestión de llamantes y selectores” en la página 11.

19
Machine Translated by Google

CAPÍTULO 2 Tutoría Uso de suites y funciones de devolución de llamada 20

Uso de suites y funciones de devolución de llamada

La API de Illustrator proporciona la funcionalidad principal utilizada por un complemento. La API de Illustrator comprende funciones de devolución
de llamada organizadas en suites. Antes de que su complemento pueda usar una función que es parte de una suite, primero se debe adquirir la
suite que lo contiene. Una suite es una estructura llena de punteros de función; cuando su complemento adquiere una suite, se devuelve un puntero
a esta estructura.

Cuando ya no se necesita la suite, se libera la suite adquirida. Es importante hacer esto para que el administrador de complementos de
Illustrator pueda funcionar de manera óptima. Por ejemplo, Illustrator realiza un seguimiento de cuántas veces se adquirió una suite. Si una suite
agregada por un complemento ya no está en uso (su recuento de referencias es 0), el complemento puede descargarse para liberar memoria.

Adquirir y liberar suites y funciones de la suite de llamadas

Cuando se llama por primera vez a su complemento, solo conoce una suite. La estructura de datos del mensaje que se pasa a todos los
complementos tiene una variable de miembro denominada básica, que apunta a la suite básica (consulte SPBasicSuite). La suite Básica se utiliza
para acceder a otras suites y contiene dos funciones importantes para hacerlo:

SPAPI SPErr (*AcquireSuite)(const char *nombre, versión larga, const void **suite);
SPAPI SPErr (*ReleaseSuite)(const char *nombre, versión larga);

Un complemento utiliza la primera función, SPBasicSuite::AcquireSuite, para obtener acceso a un conjunto de funciones. Todas las suites adquiridas
deben liberarse con la función SPBasicSuite::ReleaseSuite cuando la suite ya no sea necesaria.

Para adquirir una suite, primero debe declarar un puntero de suite. Luego llama a SPBasicSuite::AcquireSuite, utilizando el nombre y el
número de versión de la suite que desea, que se encuentra en su archivo de encabezado público. Por ejemplo, suponga que necesita usar
el conjunto de menús de Illustrator, AIMenuSuite:

AIMenuSuite* sAIMenu = nil;


SPBasicSuite* sSPBasic = ( ( SPMessageData* )mensaje)->básico;
SPErr error = sSPBasic->AcquireSuite(kAIMenuSuite, kAIMenuSuiteVersion,&sAIMenu);

Se devuelve un puntero a la suite adquirida en sAIMenu, y las funciones de la suite se pueden llamar a través de este puntero:

ai::int32 cuenta = 0;
SAIMenu->CountMenuItems(&count);

Después de usar la función, se libera la suite:

sSPBasic->ReleaseSuite( kAIMenuSuite, kAIMenuSuiteVersion );

Dado que se utilizan en todo el código del complemento, es conveniente hacer que las variables de puntero de la suite sean globales.
La convención utilizada para estas variables globales es una "s" minúscula, seguida del propietario de la suite, seguida del nombre de la suite; por
ejemplo, sSPBasic como se muestra arriba, sAIMenu para el conjunto de menús, etc.

Paquetes de API de Illustrator

Cada suite tiene el nombre y la versión de la suite en el archivo de encabezado de la suite, junto con otras definiciones, como cadenas de errores,
que son particulares de su función. Si la suite define mensajes de complemento, también están en el archivo de encabezado, con las funciones de
la suite. Los punteros de función están completamente prototipados.

La documentación completa sobre las suites disponibles y las funciones que contienen se encuentra en la referencia de la API de Illustrator.
Machine Translated by Google

CAPÍTULO 2 Tutoría Llamadores y selectores 21

Llamadores y selectores
Esta sección describe e ilustra lo que significan los distintos pares de llamador/selector y lo que se espera que haga
su complemento en respuesta a su recepción.

Persona que llama: kSPInterfaceCaller, selector: kSPInterfaceStartupSelector


Cuando se inicia Illustrator, cada complemento recibe un mensaje kSPInterfaceStartupSelector . Solo se recibe
un mensaje de este tipo por sesión de Illustrator. Aquí es donde el complemento necesita asignar memoria y
agregar tipos de complementos a Illustrator. El código de muestra que maneja el inicio en el complemento Tutorial
se parece a esto:

estructura typedef {
AIFilterHandle filterVariation1;
AIToolHandle toolVariation1;
AIMenuItemHandle sobrePluginMenu;
} Globales;

Globales* g = cero;

AIErr StartupPlugin estático (mensaje SPInterfaceMessage*)


{
Error AIErr = kNoErr;
error = AcquireSuites(mensaje->d.basic);
si (! error) {
// Asignar nuestros valores globales: Illustrator realizará un seguimiento de estos.
error = mensaje->d.básico->AsignarBloque(tamaño(Globales), (vacío **) &g);
if ( !error ) mensaje- {
>d.globals = g;
}
}
si (! error) {
error = AddFilter(mensaje);
}
si (! error) {
error = AddTool(mensaje);
}
si (! error) {
error = AddAction(mensaje);
}
si (! error) {
error = AddMenu(mensaje);
}
ReleaseSuites(mensaje->d.basic);
error de retorno;
}

Al asignar memoria durante esta fase, debe usar las funciones de administración de memoria proporcionadas por la
API de Illustrator (consulte SPBasicSuite o SPBlocksSuite, por ejemplo) y colocar una referencia a la memoria en el
campo global de la estructura SPMessageData . Illustrator conserva este valor para usted y se lo devuelve en
llamadas posteriores, por lo que es un lugar conveniente para almacenar información que puede necesitar la próxima
vez que se cargue el complemento. A Illustrator no le importa lo que ponga en el campo global . Por lo general, es un
puntero a un bloque de memoria. Si no tiene ningún dato global, puede dejar el campo global vacío.

Durante el mensaje de inicio, debe informar a Illustrator sobre los filtros, las herramientas, etc., que agrega su
complemento. Por ejemplo, la función StartupPlugin anterior agrega un filtro. El filtro se agrega llamando al
Machine Translated by Google

CAPÍTULO 2 Tutoría Llamadores y selectores 22

Función AIFilterSuite::AddFilter proporcionada por la API de Illustrator. Vea la función AddFilter en Tutorial.cpp para el código que hace
esta llamada:

error = sAIFilter->AddFilter(mensaje->d.self, "Tutorial", &filterData,


kToolWantsToTrackCursorOption, &g->filterVariation1);

Al agregar la mayoría de los tipos de complementos, se utilizan argumentos iguales o similares. El primer argumento es una
referencia al propio complemento. Puede obtener esto de la estructura SPMessageData . El segundo argumento es un identificador
para el tipo de complemento. Esta cadena de estilo C identifica el complemento agregado actual a un segundo complemento, uno
quizás buscando la funcionalidad del complemento. Para ser útil, debe ser lo más descriptivo posible.

Después del identificador hay datos y opciones específicas para el tipo de complemento. Los datos son cualquier información
específica del tipo de complemento en una plataforma. Por ejemplo, el filtro anterior tiene una categoría de filtro y un título de filtro.
Todos los filtros con la misma categoría se colocan juntos en un submenú.

Las opciones especifican el comportamiento del complemento que proporcionará Illustrator. Los filtros no tienen ningún comportamiento
especial, pero podrían usar algunas opciones de comportamiento predeterminadas, como kPluginWantsResultsAutoSelectedOption
constante, que se utiliza para controlar cómo se selecciona la ilustración cuando el complemento devuelve el control a Illustrator.

Illustrator devuelve el argumento final al complemento. Es una referencia al tipo de complemento agregado. Para complementos
simples, donde solo se agrega una instancia de un tipo de complemento determinado, este valor se puede ignorar. Si un
complemento agrega más de una instancia de un tipo, esta referencia debe guardarse en el bloque global cuya referencia se
devuelve a Illustrator. Cuando se llama a un complemento, Illustrator pasa la instancia activa del complemento dentro de los datos
del mensaje. Las referencias guardadas y el complemento actual se comparan más tarde para determinar qué instancia de
complemento seleccionó el usuario:

if ((AIFilterMessage)mensaje->filtro == g->filtroVariación1) {
// Haz algo por esta variación
}
más {
// Haz la otra variación
}

Por supuesto, si no tiene requisitos especiales, no necesita hacer ninguna verificación. Eso es todo para la inicialización.
El selector kSPInterfaceStartupSelector se llama solo una vez.

Persona que llama: kSPInterfaceCaller, selector: kSPInterfaceShutdownSelector

Cuando Illustrator está en proceso de cerrarse, cada complemento recibe un kSPInterfaceShutdownSelector


mensaje. Solo se recibe un mensaje de este tipo por sesión de Illustrator. Las acciones que deberían ocurrir cuando el usuario ha
terminado completamente de usar el complemento, como guardar la información de preferencias, se realizan en este momento.
Además, cualquier acción de seguimiento necesaria para algo realizado durante el mensaje kSelectorAIStartupPlugin debe realizarse
ahora. Algunas acciones, como agregar un tipo de complemento, no necesitan limpieza. Un ejemplo común es liberar memoria
asignada que el sistema no libera automáticamente cuando se cierra la aplicación. Una rutina de apagado correspondiente a la
función StartupPlugin() anterior se vería así:

AIErr ShutdownPlugin estático (SPInterfaceMessage* mensaje)


{
Error AIErr = kNoErr;
if ( g != nil ) mensaje- {
>d.basic->FreeBlock(g);
g = cero;
mensaje->d.globals = nil;
}
error de retorno;
}
Machine Translated by Google

CAPÍTULO 2 Tutoría Mensajes específicos del tipo de complemento 23

Persona que llama: kSPAccessCaller, selector: kSPAccessReloadSelector

El código del complemento se carga y descarga dinámicamente, dependiendo de si Illustrator lo está utilizando. Si la aplicación principal u otro
complemento no utilizan el código durante un período de tiempo predefinido, se descarga. Esto se aplica a todos los tipos de complementos,
incluidas las suites de complementos. Illustrator notifica al complemento de los eventos de carga y descarga.

Después de recibir el selector de inicio, cada vez que su complemento se trae a la memoria, recibe el par de mensajes kSPAccessCaller/
kSPAccessReloadSelector . Reload es la oportunidad de su complemento para restaurar la información de estado que necesita para
ejecutarse, como las variables globales. Los conjuntos de complementos utilizan el mensaje de recarga para configurar sus tablas de funciones.
Una rutina de recarga se parece a esto:

Globales* g;

static AIErr ReloadPlugin(SPAccessMessage *mensaje) {

Error AIErr = kNoErr;


g = ( Globales* )mensaje->d.globales;
error de retorno;
}

Persona que llama: kSPAccessCaller, selector: kSPAccessUnloadSelector

Lo opuesto al selector de recarga es kSelectorAIUnloadPlugin. Esta es una oportunidad para que el complemento guarde cualquier información
de estado antes de eliminarlo de la memoria. Aquí hay una rutina de muestra para el selector de descarga:

AIErr UnloadPlugin estático (mensaje de SPAccessMessage*)


{
Error AIErr = kNoErr;
mensaje->d.globals = g;
error de retorno;
}

Mensajes específicos del tipo de complemento

Los selectores discutidos hasta ahora son recibidos por todos los complementos. Otros pares de llamador/selector que recibe un
complemento dependen de los tipos de complemento agregados al inicio. Esta sección describe los pares llamador/selector asociados con los
tipos de complementos utilizados en el Tutorial. Para obtener una descripción de los principales tipos de complementos compatibles con Illustrator,
consulte el Capítulo 1, "Descripción general".

Filtrar complementos

Illustrator permite complementos para agregar nuevos filtros al menú Objeto. Para agregar un filtro, su complemento debe hacer lo siguiente:

ÿ Llame a AIFilterSuite::AddFilter al inicio para agregar el filtro a Illustrator.

ÿ Manejar mensajes relacionados con eventos de filtrado.

Hay dos mensajes de pares de llamador/selector asociados con los tipos de complementos de filtro:

ÿ Obtener parámetros de filtro (kCallerAIFilter / kSelectorAIGetFilterParameters).


Machine Translated by Google

CAPÍTULO 2 Tutoría Mensajes específicos del tipo de complemento 24

ÿ Filtro Ir (kCallerAIFilter / kSelectorAIGoFilter).

El par de selectores get-filter-parameters es una oportunidad para que su complemento presente un cuadro de diálogo al usuario,
solicitando información sobre cómo debería funcionar el complemento. Le sigue el par go-selector, que es cuando el complemento realmente
hace su trabajo. Los parámetros se adquieren en una llamada separada para admitir la función Último filtro en el menú Filtro, que aplica el
último filtro utilizado sin pedirle al usuario un nuevo conjunto de parámetros. En este caso, recibe un par kCallerAIFilter/kSelectorAIGoFilter
sin un par anterior kCallerAIFilter/kSelectorAIGetFilterParameters .

La función PluginMain del complemento Tutorial maneja estos pares de selectores de la siguiente manera:

} else if (strcmp(llamador, kCallerAIFilter) == 0) {


if (strcmp(selector, kSelectorAIGetFilterParameters) == 0)
error = GetFilterParameters( ( AIFilterMessage* )mensaje );
si no (strcmp(selector, kSelectorAIGoFilter) == 0)
error = GoFilter( ( AIFilterMessage* )mensaje );

Cuando el usuario elige su filtro en el menú Objeto, primero se llama a su complemento con
kSelectorAIGetFilterParameters. Debe obtener los parámetros que necesite del usuario y colocarlos en un identificador,
almacenando el identificador en el campo de parámetros de AIFilterMessage. Esto es similar a cómo se usa el campo global ,
solo los parámetros deben ser un identificador si no es nulo. El identificador de parámetros se le devuelve en llamadas
posteriores; por lo tanto, es necesario crear este identificador solo una vez. Cada vez que recibe el selector get-filter-parameters,
puede usar los parámetros anteriores para establecer los valores de diálogo predeterminados. Si su complemento coloca más
de un filtro en el menú Objeto, un parámetro separado
El mango se mantiene para cada uno. Illustrator no se preocupa por el contenido específico del identificador de parámetros , pero el
identificador debe ser independiente; es decir, no puede incluir punteros o identificadores para más datos dentro del identificador de
parámetros . Esto se debe a que Illustrator puede hacer copias de los parámetros y no sabe cómo copiar bloques de memoria a los que
hace referencia la estructura. Si no tiene ningún parámetro, deje este campo en cero.

Los parámetros utilizados por el filtro del complemento Tutorial se muestran a continuación:

estructura typedef {
esquinas ASInt32; // numero de vértices del polígono
tamaño ASInt32; // el tamaño máximo, en puntos
} MisParámetrosDeFiltro;

Estos parámetros se obtienen del usuario mediante la función GetFilterParameters en Tutorial.cpp.


El resultado de retorno de GetFilterParameters debe ser kNoErr si el usuario presiona Aceptar (o si no tiene ningún parámetro) o
kCanceledErr si el usuario cancela el filtro.

Inmediatamente después de que el complemento regresa de GetFilterParameters, se envía el par de selectores de filtros
de acceso (kCallerAIFilter/kSelectorAIGoFilter). Cuando el complemento recibe esto, realiza lo que hace el filtro, utilizando
los parámetros globales y los parámetros que el complemento configuró previamente. El complemento GoFilter del Tutorial
La función en Tutorial.cpp crea un polígono aleatorio cada vez que se llama, al crear un nuevo objeto de arte de ruta y agregarle
segmentos de ruta.

Complementos de herramientas

Illustrator permite complementos para agregar nuevas herramientas al panel Herramientas. Para agregar una herramienta, su complemento debe
hacer lo siguiente:

ÿ Proporcione un icono para representar la herramienta en el panel Herramientas.


Machine Translated by Google

CAPÍTULO 2 Tutoría Mensajes específicos del tipo de complemento 25

ÿ Llame a AIToolSuite::AddTool al inicio para agregar la herramienta a Illustrator.

ÿ Manejar mensajes relacionados con herramientas relacionados con eventos del mouse. Por ejemplo, cuando la herramienta del complemento está
seleccionado en el panel Herramientas y el botón del mouse baja y se suelta, el complemento recibe una notificación mediante un
mensaje de selección (kCallerAITool/kSelectorAIToolMouseDown). Se utiliza un enfoque similar para comunicar eventos de arrastre
del mouse, etc.

El complemento Tutorial agrega una herramienta de dibujo de líneas llamando a AIToolSuite::AddTool al inicio. Para obtener un
código de muestra, consulte la función AddTool en Tutorial.cpp.

La herramienta añadida aparece en el panel Herramientas. Cuando se selecciona y utiliza, Illustrator llama al complemento con los
selectores de herramientas enumerados anteriormente. Para crear una herramienta de línea recta mínima, el complemento debe manejar
solo el selector con el mouse hacia abajo. La función PluginMain del complemento Tutorial maneja esto de la siguiente manera:

de lo contrario si ( strcmp (persona que llama, kCallerAITool) == 0) {


if (strcmp(selector, kSelectorAIToolMouseDown) == 0)
error = ToolMouseDown ((AIToolMessage*) mensaje);
}

Cuando se hace clic con el mouse, el complemento Tutorial recibe este selector y puede procesarlo. Consulte la función
ToolMouseDown en Tutorial.cpp. Esta función dibuja segmentos de ruta a cada ubicación presionada con el mouse. La ubicación del
mouse se pasa en la estructura de mensaje de herramienta; consulte AIToolMessage en la referencia de la API de Adobe Illustrator. El
mensaje de la herramienta contiene los datos básicos del complemento y una referencia a la herramienta que se está utilizando. El campo
del cursor contiene el punto en la mesa de trabajo donde ocurrió el último evento de herramienta, y el controlador de mouse hacia abajo del
complemento Tutorial lo usa para crear una ruta. La función ToolMouseDown comienza adquiriendo las suites que necesita para hacer una
línea. La función comprueba si existe una ruta seleccionada. Si es así, le agrega segmentos de ruta; de lo contrario, crea el primer punto en
una nueva ruta. La función finaliza liberando las suites que adquirió.

Si bien la función ToolMouseDown agrega una herramienta básica, se pueden procesar otros selectores para dar más funcionalidad a la
herramienta de línea, como configurar el cursor o rastrear un arrastre del mouse. Esto se deja como ejercicio para el lector.

Complementos de acción

Para que su complemento pueda ser registrado por el panel Acciones de Illustrator, debe agregar un código especial a su complemento.
Sigue estos pasos:

1. Registrar eventos de acción : durante el inicio, su complemento debe registrar uno o más eventos de acción. Un evento de acción es
una sola operación que ejecuta su complemento. Un evento de acción se muestra en el panel Acciones de Illustrator, si el usuario
decide grabarlo.

2. Registrar eventos de acción : durante la ejecución de su complemento, debe verificar si el usuario está en
modo de grabación. Si es así, debe registrar su evento de acción y pasar todos los parámetros relevantes al Administrador de
acciones.

3. Responda al selector DoAction : una vez que registre uno o más eventos de acción, su complemento debe estar listo para ejecutar
esos eventos de acción cuando se le solicite. Su complemento debe responder a la persona que llama kActionCaller y al selector
kDoActionSelector . Estos se definen en el archivo de encabezado de la suite Action Manager.
Machine Translated by Google

CAPÍTULO 2 Tutoría Mensajes específicos del tipo de complemento 26

Registro de eventos de acción

Primero, determine cuántos eventos de acción registrará su complemento, separando la funcionalidad de su complemento en operaciones
discretas. Básicamente, intente pensar en qué operaciones los usuarios querrán registrar en el panel Acciones.

Durante el inicio, su complemento primero debe asegurarse de que la suite Action Manager (consulte
AIActionManagerSuite) esté disponible, tratando de adquirir un puntero a la suite. Esta verificación es necesaria porque el Complemento
de acción puede deshabilitarse eliminándolo de la carpeta Complementos .

Para registrar un evento de acción, su complemento debe hacer lo siguiente:

ÿ Llame a AIActionManagerSuite::AINewActionParamType para crear un bloque de parámetros de tipo (TPB) que


describe los parámetros que requiere su evento de acción.

ÿ Rellene el TPB con pares clave-valor que proporcionen el nombre y el tipo de datos de cada parámetro llamando
AIActionManagerSuite::AIActionSetTypeKey.

ÿ Llame a AIActionManagerSuite::RegisterActionEvent para registrar el evento de acción.

ÿ Llame a AIActionManagerSuite::AIDeleteActionParamType para deshacerse del TPB.

Para obtener un código de muestra, consulte la función AddAction en Tutorial.cpp.

Grabación de eventos de acción

Durante la ejecución de su complemento, si el usuario está en modo de registro, usted es responsable de registrar cualquier evento de
acción que haya registrado. Illustrator está en modo de grabación cuando el usuario está grabando acciones a través del panel Acciones.

Para registrar una acción, su complemento debe hacer lo siguiente:

ÿ Llame a AIActionManagerSuite::InRecordMode para comprobar si se están grabando las acciones.

ÿ Llame a AIActionManagerSuite::AINewActionParamValue para crear un bloque de parámetros de valor (VPB) en


qué valores de parámetros se registran. Un VPB se diferencia de un TPB en que puede contener valores reales.
Un TPB solo puede contener descripciones de tipos de datos.

ÿ Rellene el VPB con pares de valores clave que proporcionen el nombre y el valor de cada parámetro llamando a la función
AIActionManagerSuite adecuada para el tipo de datos almacenados en el parámetro. Consulte
AIActionManagerSuite::AIActionSetBoolean, AIActionManagerSuite::AIActionSetInteger,
etc.

ÿ Llame a AIActionManagerSuite::RecordActionEvent para registrar el evento de acción.

ÿ Llame a AIActionManagerSuite::AIDeleteActionParamValue para deshacerse de su referencia al VPB.

Para obtener un código de muestra, consulte las funciones GoFilter y RecordFilterAction en Tutorial.cpp.

Respondiendo al selector DoAction

Para ejecutar una acción, su complemento debe manejar el par de selectores de acción (kActionCaller/
kDoActionSelector) para cada evento de acción que registra el complemento. Esta es la forma en que Illustrator solicita que se ejecute
un evento de acción en particular.
Machine Translated by Google

CAPÍTULO 2 Tutoría Mensajes específicos del tipo de complemento 27

Su complemento debe agregar un código para detectar dicha notificación. La función PluginMain del complemento Tutorial maneja el
selector de acción de la siguiente manera:

else if (strcmp(llamador, kActionCaller) == 0) {


if (strcmp(selector, kDoActionSelector) == 0)
error = DoAction( ( DoActionMessage* )mensaje );
}

La función DoAction en Tutorial.cpp ejecuta el evento de acción solicitado. La estructura del mensaje enviada junto con
kDoActionSelector es DoActionMessage. La documentación para esta estructura se encuentra en la referencia de la API de Adobe
Illustrator. Contiene los valores de parámetros registrados que la acción debe reproducir. La DoAcción
La función extrae los valores de los parámetros en su propia estructura de datos. La estructura DoActionMessage también indica
si se debe abrir un cuadro de diálogo para permitir que el usuario ajuste los valores de los parámetros antes de que se ejecute la
acción. La función DoAction responde en consecuencia, luego llama a la función de filtro del complemento Tutorial, GoFilter, para
reproducir la acción.

Reproducir eventos de acción

También puede reproducir eventos de acción desde un complemento. Estos eventos de acción podrían originarse en la aplicación
Illustrator u otros complementos. El fragmento de código SnpDocumentActionHelper del complemento SnippetRunner demuestra cómo
reproducir eventos de acción que se originan en la aplicación Illustrator.

Complementos de menú

Illustrator permite complementos para agregar nuevos menús a su estructura de menús. Para agregar un menú, su complemento debe
hacer lo siguiente:

ÿ Llame a AIMenuSuite::AddMenuItem al inicio para agregar el menú a Illustrator.

ÿ Opcionalmente, llame a AIMenuSuite::AddMenuGroupAsSubMenu para crear un grupo en el que se pueden anidar más
elementos de menú.

ÿ Manejar mensajes relacionados con eventos del menú. Por ejemplo, cuando se hace clic en el elemento de menú de un
complemento, se notifica al complemento mediante un mensaje de selector (kCallerAIMenu/kSelectorAIGoMenuItem).

El complemento Tutorial agrega un menú de complemento Acerca de al inicio; consulte “Acerca del menú Complementos” en la página
18. Para obtener un código de muestra, consulte la función AddMenu en Tutorial.cpp. Se utiliza una clase auxiliar, SDKAboutBoxHelper,
para crear el menú que aparece en el grupo de menú Acerca de de Illustrator. Cuando se utiliza, Illustrator llama al complemento con los
selectores de herramientas enumerados anteriormente. La función PluginMain del complemento Tutorial maneja esto de la siguiente
manera:

de lo contrario si (strcmp (persona que llama, kCallerAIMenu) == 0 ) {


if (strcmp(selector, kSelectorAIGoMenuItem) == 0)
error = IrMenú( (AIMensajeMensaje*)mensaje);
}

Cuando se hace clic en el menú, el complemento Tutorial recibe este selector y puede procesarlo. Ver el menú Ir
función en Tutorial.cpp. Esta función abre un cuadro Acerca de que muestra detalles de contacto y derechos de autor.
declaración.
Machine Translated by Google

CAPÍTULO 2 Tutoría Próximos pasos 28

Próximos pasos

Para obtener más información sobre la programación de complementos de Illustrator, explore los ejemplos proporcionados en el SDK
y la documentación en la referencia de la API de Adobe Illustrator. Las instrucciones sobre cómo ejecutar y depurar complementos se
encuentran en Primeros pasos con el desarrollo de Adobe Illustrator CS6.
Machine Translated by Google

3 Técnicas de complemento

Este capítulo trata sobre las listas de propiedades de complementos (PiPL) y los efectos en vivo.

ÿ “Listas de propiedades de complementos” en la página 29

ÿ “Manejo de Live Effects” en la página 33

Listas de propiedades de complementos

Un recurso de lista de propiedades de complemento (PiPL) contiene una lista de propiedades que almacenan información sobre un complemento.
Illustrator considera solo aquellos archivos con recursos PiPL válidos como complementos potenciales.

Muestras de PiPL

La información de PiPL en Windows y macOS está dentro de plugin.pipl.

Para obtener más información sobre la nueva forma de PIPL, consulte la sección Marco de PIPL en la guía Primeros pasos con Adobe Illustrator.

Viejo método:

Los archivos de recursos de PiPL de muestra se proporcionan en el SDK en forma de código fuente.

Todos los complementos de muestra en el SDK definen sus PiPL en un formato de código fuente de recursos. Por ejemplo, el PiPL del complemento
Tutorial se define en los siguientes archivos de origen:

ÿ Windows: consulte la declaración de recursos de PiPL en el archivo Tutorial.rc .

ÿ Mac OS: consulte la declaración de recursos de PiPL en el archivo Tutorial.r .

Como muestran los ejemplos, es más flexible trabajar con recursos de PiPL en forma de código fuente.

Estructura PiPL

Una lista de propiedades de complemento tiene un número de versión y un recuento, seguido de una secuencia de contenedores de bytes de longitud
arbitraria llamados propiedades. Los tipos principales que definen un PiPL están documentados en la referencia de la API de Illustrator y se enumeran
en la siguiente tabla:

Escribe Nota

PIPropiedad Una propiedad de complemento. Cada propiedad tiene un ID de proveedor, clave, ID, longitud y datos de la
propiedad (cuyo tamaño está indicado por la longitud de la propiedad). El Id. de proveedor identifica al proveedor
que definió el tipo de propiedad. Todas las propiedades de PiPL definidas por la API de Illustrator utilizan un ID de
proveedor de ADBE. Cada propiedad debe rellenarse de modo que la siguiente propiedad comience en un límite de
cuatro bytes.

PIPropertyList Una lista de propiedades de complemento tiene un número de versión y un recuento, seguido de una secuencia
de contenedores de bytes de longitud arbitraria llamados propiedades.

29
Machine Translated by Google

CAPÍTULO 3 Técnicas de complemento Listas de propiedades de complementos 30

Propiedades de PiPL requeridas

NOTA: Las siguientes propiedades solo se admiten en la forma anterior de PIPL. La nueva forma de PIPL admite propiedades que
están presentes en este archivo:

sdk/public/tools/pipl/pipl_gen/template_plugin.json

Para obtener más información sobre la nueva forma de PIPL, consulte la sección Marco de PIPL en la guía Primeros pasos con Adobe Illustrator.

El recurso PiPL de su complemento debe incluir las propiedades requeridas que se enumeran en la siguiente tabla.

Clave de propiedad Valor Descripción

PIKindProperty kind SPEA Indica el tipo de archivo de complemento; es similar a un tipo de archivo.
Illustrator carga complementos cuya propiedad de tipo tiene el valor SPEA.

PISPVersionProperty ivrs 2 Describe a Illustrator las convenciones de llamada esperadas por el complemento
y actualmente tiene un valor de 2.

Su complemento también debe tener al menos una propiedad de descriptor de código que le indique a Illustrator el punto de entrada de su
código. Los descriptores de código están disponibles para Mac OS basado en Intel, Mac OS basado en PowerPC y complementos basados en
Windows:

Clave de propiedad Descripción

PICodeMacIntel32Propiedad mi32 PIMacIntelCodeDesc descriptor de código que contiene el punto de entrada del código
Intel para complementos en plataformas Mac OS.

PIPowerPCMachOCodeProperty mach PIMachCodeDesc descriptor de código que contiene el punto de entrada de


Código PowerPC en formato Mach-O para complementos en plataformas Mac
OS.

PIWin32X86CodeProperty wx86 PIWin32X86CodeDesc descriptor de código que contiene el punto de entrada de


complementos en plataformas Windows.

Su complemento binario puede contener múltiples descriptores de código si se ejecutará en diferentes tipos de máquinas. Por ejemplo, un
complemento binario universal de Mac OS contiene descriptores de código Intel y PowerPC.

Propiedades opcionales de PiPL

El recurso PiPL de su complemento puede incluir las propiedades opcionales descritas en la siguiente tabla.
Machine Translated by Google

CAPÍTULO 3 Técnicas de complemento Listas de propiedades de complementos 31

Clave de propiedad notas

PIExportsProperty exp. Los complementos pueden exportar una o más suites que contienen funciones para que
las utilicen otros complementos. Las suites se analizan en "Suites" en la página 13.

Para garantizar que las interdependencias de los complementos se manejen correctamente,


los complementos declaran de antemano lo que exportan. El orden de carga de los
complementos se vuelve importante cuando un complemento depende de las suites
proporcionadas por otro complemento.

Esta información de exportación se declara en las propiedades de exportación de PiPL, expt,


que contienen los nombres y los números de versión de API de las suites que proporciona

un complemento. El administrador de complementos utiliza esta información para cargar y


ejecutar complementos, lo que garantiza que las suites y otros recursos estén disponibles
cuando sea necesario.

PIPluginNameProperty pinm El nombre del complemento que se muestra en la Ayuda de Illustrator > Información del sistema
diálogo.

Exportar propiedad
Los complementos pueden ampliar la funcionalidad de la API exportando nuevas suites. Para optimizar el proceso de inicialización del complemento
de Illustrator, un complemento debe agregar una propiedad de exportación (PIExportsProperty) a su PiPL. Consulte la siguiente tabla.

Clave de propiedad notas

Los complementos PIExportsProperty expt pueden exportar uno o más conjuntos que contienen funciones para que las utilicen
otros complementos. Esta información de exportación se declara en las propiedades de
exportación de PiPL, expt, que contienen los nombres y los números de versión de API
de las suites que proporciona un complemento. El administrador de complementos utiliza
esta información para cargar y ejecutar complementos, lo que garantiza que las suites y
otros recursos estén disponibles cuando sea necesario. Cuando se solicita (adquiere)
una suite, se busca la suite en las propiedades de exportación de todos los complementos
y el complemento proporcionado se carga en la memoria. El complemento se inicia si es
necesario. Una vez que se carga el complemento que proporciona la suite y la suite
solicitada está disponible, se devuelve el control al complemento solicitante. Una solicitud
de suite podría activar una serie de complementos para que se carguen en la memoria
en forma de cascada.

Los datos de propiedad que describen los conjuntos que se van a exportar se representan en forma de estructuras C, a continuación. Esta
representación debe transcribirse en un formato de código fuente de recursos (recursos de Windows (.rc) bajo

Recursos de Visual Studio o Rez (.r) en Mac OS):

/** Lista de suites exportadas por el complemento. */


typedef struct MyExportsDesc
{
/** El número de conjuntos exportados por el complemento. */
Machine Translated by Google

CAPÍTULO 3 Técnicas de complemento Listas de propiedades de complementos 32

largo fCount; /**


Una lista de longitud variable que describe cada paquete exportado por el complemento. */ MyExportDesc
fExportaciones[1]; } MisExportacionesDesc;

/** Descripción de una suite exportada por el complemento. */ typedef


struct MyExportDesc {

/** La longitud total en bytes de este registro MyExportDesc.*/ long fLength; /** Una
cadena de estilo C con el nombre de la suite que se exportará.

* Rellenado a 4 bytes. */ char


fNombre[1]; /** La versión de
la suite que se exportará. */ versión f larga; } MiExportDesc;

Para más información


La referencia de la API de Adobe Illustrator describe los nombres de las propiedades y las estructuras de datos asociadas,
como PIPropertyList. Los complementos de muestra en el SDK muestran cómo definir un PiPL usando una plataforma nativa
recursos.
Machine Translated by Google

CAPÍTULO 3 Técnicas de complemento Manejo de efectos en vivo 33

Manejo de efectos en vivo


Los efectos en vivo le permiten aplicar un efecto a un objeto y luego modificarlo o eliminarlo dinámicamente. Cuando aplica
un efecto automático a un objeto, se agrega automáticamente al panel Apariencia. Desde el panel Apariencia, puede editar
el efecto, moverlo, duplicarlo, eliminarlo o guardarlo como parte de un estilo gráfico.

Agregar funcionalidad a un elemento de menú de Live Effect

Su complemento puede agregar elementos al menú Live Effects. Para manejar un efecto en vivo programáticamente,
proporcione controladores para estos dos mensajes:

ÿ kCallerAILiveEffect/kSelectorAIEditLiveEffectParameters: se envía cuando el usuario invoca su elemento de menú Life Effect. Su


controlador recibe y completa un diccionario de parámetros que controla las opciones de efectos.

ÿ kCallerAILiveEffect/kSelectorAIGoLiveEffect: Enviado cuando actualiza los parámetros del efecto.


Su controlador aplica el efecto, con los parámetros que ha establecido, al arte que ha sido seleccionado por el usuario,
o creado o seleccionado por su código.

Edición de parámetros de efectos

Cuando un usuario invoca su elemento de menú Live Effect, Illustrator envía su complemento el
mensaje kSelectorAIEditLiveEffectParameters , pasando un AILiveEffectEditParamMessage a su controlador.

ÿ El msg->parameters contiene un puntero a un diccionario AILiveEffectParameters , que está vacío en la primera invocación.

ÿ Si no se selecciona ningún arte cuando el usuario invoca su elemento de menú Live Effect, el parámetro
msg->allowPreview es falso.

Su complemento agrega entradas al diccionario de parámetros para controlar las opciones de efectos. Puede mostrar un cuadro de diálogo para
obtener información del usuario o determinar los valores en su propio código. Después de completar los valores del diccionario, su controlador de
edición debe llamar:

sAILiveEffect->UpdateParameters(mensaje->contexto);

Aplicando el efecto

Cuando realiza la llamada para actualizar los parámetros, Illustrator envía el mensaje kSelectorAIGoLiveEffect , pasando un
AILiveEffectGoMessage a su controlador.

ÿ Los parámetros msg-> contienen el diccionario que recibió y modificó en el controlador de edición.

IMPORTANTE: No utilice el controlador de mensajes de LiveEffect Go para modificar el diccionario pasado


en msg->parameters. Los cambios que realice allí no se conservan. Use solo el controlador de parámetros de
edición (para kCallerAILiveEffect/kSelectorAIEditLiveEffectParameters) para modificar el diccionario.

ÿ El mensaje->arte puede ser el arte seleccionado actualmente o la salida de un efecto en vivo anterior; no es necesariamente
un grupo.

Puede duplicar el arte y agregarlo a su padre, reemplazando el arte actual:


Machine Translated by Google

CAPÍTULO 3 Técnicas de complemento Manejo de efectos en vivo 34

result = sAIArt->DuplicateArt( art, kPlaceAbove, art, &path );

O puede crear un grupo, mover el arte actual a ese grupo y devolver su grupo en el parámetro:

inputArt = pMsg->art;
resultado = sAIArt->GetArtParent(inputArt, &inputParent);
si (resultado == kNoErr)
resultado = sAIArt->NewArt(kGroupArt, kPlaceBelow, inputArt, &outputGroup);
si (resultado == kNoErr)
resultado = sAIArt->ReorderArt(inputArt, kPlaceInsideOnTop, outputGroup);
// Agregue más arte al grupo de salida o modifique el inputArt
pMsg->art = grupo de salida; //esto es importante

ÿ El parámetro msg->instanceInfo le permite almacenar datos específicos del objeto, que se le devuelven
en el mensaje GoLiveEffect siempre que ese objeto necesite ser actualizado.

Una forma típica de usar esto es almacenar una semilla aleatoria. Por ejemplo, suponga que su Live Effect
genera una semilla aleatoria y usa esa semilla para generar nuevo arte, quizás aplicando un cambio de color.
Necesitas preservar esa semilla para cada invocación de tu efecto sobre ese objeto; de lo contrario, cada
modificación de su objeto genera una nueva semilla y el efecto es diferente. Muchos efectos generan la semilla
aleatoria en la primera invocación, luego almacenan la semilla en el diccionario instanceInfo . Cada invocación
posterior utiliza la semilla almacenada, si existe. Esto asegura que el mismo efecto en el mismo objeto
produzca la misma apariencia cada vez que se aplica.
Machine Translated by Google

4 Creación de una interfaz de usuario HTML/JS para complementos

La tecnología de extensión basada en Flash, que Adobe proporcionó en versiones anteriores para ayudar a terceros a crear componentes de
interfaz de usuario, se reemplazó por una arquitectura de extensión HTML5/JavaScript en la versión Creative Cloud. Puede usar cualquier
marco de interfaz de usuario que se adapte a sus necesidades, pero una solución de interfaz de usuario basada en HTML5/JavaScript y el
marco de extensibilidad CEP es una alternativa recomendada.

Las extensiones basadas en Flash existentes deben trasladarse a HTML, y todas las extensiones nuevas deben crearse utilizando HTML
y JavaScript. Para obtener más información, consulte la documentación de Creative Cloud 2022
SDK de extensión.

Extensiones de Creative Cloud


El SDK de extensión de Adobe Creative Cloud proporciona a los desarrolladores una plataforma coherente en la que ampliar las
capacidades de una o más extensiones de aplicaciones de escritorio de Adobe Creative Cloud. Se basa en Common Extensibility Platform
(CEP) y HTML5/JavaScript. Las extensiones de Adobe se ejecutan de la misma manera en todas las aplicaciones de escritorio de Adobe
Creative Cloud, brindando a los usuarios una experiencia rica y uniforme. Los desarrolladores pueden usar extensiones para agregar servicios
e integrar nuevas funciones en múltiples aplicaciones de escritorio.

Las extensiones que puede crear con Adobe Creative Cloud Extension SDK pueden proporcionar tanto la interfaz de usuario como la lógica del
programa para ampliar cualquier aplicación de Creative Cloud de forma unificada. Dichas extensiones se pueden compartir entre aplicaciones de
escritorio, accediendo a la interfaz de secuencias de comandos de la aplicación host para interactuar con cada aplicación específica de manera
adecuada.

Sin embargo, si usa una extensión solo para proporcionar una interfaz de usuario para un complemento de C++ de Illustrator, normalmente
coloca la lógica del programa en el complemento de C++, donde puede usar la API de C++ nativa de Illustrator en lugar de la interfaz de
secuencias de comandos.

ÿ Para el desarrollo de complementos de C++, se recomienda usar Visual Studio en Windows y Xcode en
Mac OS. Para obtener más información, consulte Primeros pasos con el desarrollo de Adobe Illustrator 2022.

ÿ Para el desarrollo de extensiones, utilice Creative Cloud Extension Builder 3, una herramienta basada en Eclipse que forma parte
del SDK de extensión. El SDK proporciona documentación completa para instalar y usar las herramientas.

Este capítulo proporciona pautas muy generales sobre cómo interactúan un complemento de C++ y una extensión HTML; cada complemento
tiene diferentes consideraciones y requisitos. Para obtener un código de muestra adicional que ilustre cómo modificar su complemento de C++
para usar la API de PlugPlug y cómo escribir una extensión HTML que proporcione una interfaz de usuario para un complemento de C++,
consulte los ejemplos que se proporcionan con el SDK de Illustrator.

PRE-LANZAMIENTO: Extension Builder 3 se encuentra actualmente en pre-lanzamiento, y las muestras ilustrativas se están actualizando y
ampliando actualmente para ilustrar las técnicas recomendadas.

35
Machine Translated by Google

CAPÍTULO 4 Creación de una interfaz de usuario HTML/JS para complementos Comunicación entre complementos y extensiones 36

Comunicación entre complementos y extensiones


Su complemento se comunica con su extensión a través de un subsistema de mensajería de bajo nivel llamado Eventos CEP. El
complemento carga y descarga la extensión, y el complemento y la extensión pueden enviar y responder a eventos de interacción del
usuario.

Los eventos CEP fluyen de la extensión al complemento


Extensión
y de complemento a extensión a través de bibliotecas
especiales
BOLSILLO

aplicación anfitriona

EnchufeEnchufe Enchufar

ÿ El componente de la biblioteca CEP que proporciona la API que usa la extensión para interactuar con los complementos de C++.
Para enviar eventos desde una extensión a un complemento, llame a la función de biblioteca de JavaScript
DispatchEvent(). Esto hace que el componente PlugPlug invoque la función de devolución de llamada que se ha
registrado para ese tipo de evento.

ÿ La biblioteca PlugPlug es un componente nativo que se integra directamente en la aplicación host


(Ilustrador 2022). Proporciona la API que utiliza un complemento de C++ para interactuar con extensiones HTML/JS. A
enviar eventos desde un complemento a una extensión, llamar a la función de biblioteca C++
PlugPlugDispatchEvent(). Esto hace que el componente CEP pase el evento a cualquier detector de eventos en
la extensión que ha registrado un interés para ese tipo de evento.

Extensión BOLSILLO
EnchufeEnchufe Enchufar

llamar a dispatchEvent()

enviarEvento()
invocar función de devolución de llamada ()

Enchufar EnchufeEnchufe BOLSILLO Extensión

llamar a PlugPlugDispatchEvent()

PlugPlugDispatchEvent()

delegarEventoAOyente()
Machine Translated by Google

CAPÍTULO 4 Creación de una interfaz de usuario HTML/JS para complementos Comunicación entre complementos y extensiones 37

Uso de la API PlugPlug


La biblioteca PlugPlug expone estas funciones a los complementos de C++. Para obtener detalles de referencia completos, consulte SDK_root/
samplecode/common/includes/SDKPlugPlug.h. La clase SDKPlugPlug envuelve estas funciones para facilitar su uso.

EnchufePlugLoadExtension() Cargue una extensión dada, haciendo que la interfaz de usuario HTML sea visible en
la aplicación y configurando las propiedades de la ventana como se especifica en el manifiesto de
la extensión.

PlugPlugUnloadExtension() Descargue una extensión determinada (cuando se implemente), de modo que la interfaz de usuario
HTML ya no esté visible en la aplicación.

PlugPlugDispatchEvent() Distribuye un evento CEP, que contiene datos relacionados pasados como una
cadena (const char*).

PlugPlugAddEventListener() Registra el complemento para recibir un tipo de evento determinado y define la función de
devolución de llamada para ese evento.

PlugPlugRemoveEventListener() Elimina el detector de un tipo de evento determinado.

ÿ Para recibir eventos CEP de cierto tipo en su complemento de C++, registre una función de devolución de llamada para ese tipo de
evento usando SDKPlugPlug::AddEventListener(), antes de cargar la extensión. Por ejemplo:

static void OkClickedFunc (const csxs::event::Event* const event, void* const context);

AddEventListener("com.adobe.csxs.events.OkClicked", OkClickedFunc, NULL);

ÿ El primer parámetro es el tipo de evento, el segundo es la función de devolución de llamada y el tercero es un


puntero de contexto específico del usuario o NULL.

ÿ Cuando la extensión envía un evento al complemento, pasa datos relevantes como un carácter const*. Su
La función de devolución de llamada debe analizar esta cadena en elementos de datos útiles para el complemento.

ÿ Antes de descargar la extensión, debe usar SDKPlugPlug::RemoveEventListener() para eliminar


cualquier detector de eventos que haya registrado. Por ejemplo:

RemoveEventListener("com.adobe.csxs.events.OkClicked", OkClickedFunc, NULL);

ÿ Su complemento puede cargar y descargar la extensión relacionada usando SDKPlugPlug::LoadExtension() y


SDKPlugPlug::DescargarExtensión().

ÿ Para enviar eventos desde su complemento C++ a la extensión HTML, use


SDKPlugPlug::DispatchEvent(). Puede encapsular valores complejos en los datos asociados utilizando el formato XML. Por
ejemplo:

std::string xmlString = "<carga útil>...</carga útil>";


csxs::event::Event event =
{ "com.adobe.csxs.events.UpdateDashPanel",
csxs::event::kEventScope_Application, "prueba", NULL,
xmlString.c_str()} ;

csxs::event::EventErrorCode testResult = DispatchEvent(&event);


Machine Translated by Google

CAPÍTULO 4 Creación de una interfaz de usuario HTML/JS para complementos Comunicación entre complementos y extensiones 38

Uso de la API de CEP


La clase de evento JavaScript de CEP, CSEvent, representa un evento de interacción del usuario. (Si está portando una
extensión basada en Flash existente, esto es lo mismo que el equivalente de ActionScript).

/**
* Clase CSEvent.
* Úselo para enviar un evento CEP estándar
*
* @tipo de parámetro Tipo de evento.
* @param scope El alcance del evento, "GLOBAL" o "APLICACIÓN"
* @param appId El ID único de la aplicación que generó el evento.
* @param extensionId El ID único de la extensión que generó el evento
*
* @return objeto CSEvent
*/
función CSEvent (tipo, alcance, appId, extensionId)
La clase CSInterface de la clase JavaScript de CEP define los métodos dispatchEvent() y addEventListener() que le
permiten enviar eventos y configurar y registrar devoluciones de llamada del controlador de eventos.

/**
* Registra un interés en un evento CEP de un tipo particular, y
* asigna un controlador de eventos. El controlador puede ser una función * con nombre o anónima, o
un método definido en un objeto pasado.
*
* La infraestructura de eventos notifica a su extensión cuando eventos de este
* tipo ocurre, pasando el objeto de evento a la función de controlador registrada.
*
* @param type El nombre del tipo de evento de interés.
* @param listener La función o el método del controlador de JavaScript.
* Toma un argumento, el objeto Event.
* @param obj Opcional, el objeto que contiene el método del controlador, si lo hay. El
* valor predeterminado es nulo.
*/
CSInterface.prototype.addEventListener = función (tipo, oyente, obj)

/**
* Activa un evento CEP programáticamente. Usar para despachar
* un evento de un tipo predefinido, o de un tipo que haya definido.
*
* evento @param */ Un objeto CSEvent.

CSInterface.prototype.dispatchEvent = función (evento)

Uso del marco de eventos


Si ya está familiarizado con el manejo de eventos CEP en extensiones Flash, es prácticamente lo mismo en
JavaScript. Aquí hay un fragmento de código JavaScript que muestra cómo crear un tipo de evento, definir un controlador para
él, configurar un detector de eventos para invocar el controlador y enviar el evento.

El método CSInterface.addEventListener() admite funciones de devolución de llamada del controlador de eventos con nombre
y anónimas, como se muestra en este fragmento de código:

// Crea tu instancia CSInterface local


var csInterface = nueva CSInterface();

// Crear una función de devolución de llamada del controlador de eventos con nombre
Machine Translated by Google

CAPÍTULO 4 Creación de una interfaz de usuario HTML/JS para complementos Comunicación entre complementos y extensiones 39

función myEventHandler(evento)
{
console.log(“tipo=” + evento.tipo + “, datos=” + evento.datos);
}
// Registrar el controlador de eventos nombrado
CSInterface.addEventListener(“com.adobe.cep.test”, myEventHandler);

// Registrar un controlador de eventos anónimo


// (el segundo argumento es la definición de la función de devolución de llamada)
csInterface.addEventListener(“com.adobe.cep.test”, función (evento) {

console.log(“tipo=” + evento.tipo + “, datos=” + evento.datos);}


)

Puede crear un objeto CSEvent y enviarlo mediante CSInterface.dispatchEvent().

En su devolución de llamada del controlador de eventos, puede acceder a las propiedades del objeto de evento. Por ejemplo,
esta función de controlador anónimo recupera el tipo de evento y los datos del evento:

csInterface.addEventListener(“com.adobe.cep.test”, función (evento)


{
console.log(“tipo=” + evento.tipo + “, datos=” + evento.datos);
}
); // La función anónima es el segundo parámetro

Puede pasar objetos de JavaScript como Event.data. Por ejemplo:

var csInterface = nueva CSInterface();


csInterface.addEventListener(“com.adobe.cep.test”, función (evento)
{
var obj = evento.datos;
console.log(“tipo=” + evento.tipo + “, datos.propiedad1=” + obj.p
}
); // La función de controlador anónimo espera que los datos sean un objeto

Estos son algunos ejemplos de diferentes formas de crear y enviar eventos en JavaScript:

// Crear un evento de un tipo dado, configurar los datos y enviar


var csInterface = nueva CSInterface();
var event = new CSEvent("com.adobe.cep.test", "APLICACIÓN"); event.data = "¡Esto es una prueba!";

csInterface.dispatchEvent(evento);

// Crear un evento, configurar todas las propiedades y enviar


var evento = nuevo CSEvent(); // crea un evento vacío

event.type = "com.adobe.cep.test"; event.scope =


"APLICACIÓN"; event.data = "¡Esto es una prueba!";

csInterface.dispatchEvent(evento);

// Enviar un objeto como datos de eventos


var event = new CSEvent("com.adobe.cep.test", "APLICACIÓN");
var obj = nuevo Objeto();
obj.a = "a";
obj.b = "b";
evento.datos = obj;
cSInterface.dispatchEvent(evento);
Machine Translated by Google

CAPÍTULO 4 Creación de una interfaz de usuario HTML/JS para complementos Entrega de un complemento con una interfaz de usuario HTML/JS 40

Comunicación entre la API del host nativo y las extensiones HTML

Para el paso de eventos desde la API del host nativo al código JavaScript de una extensión HTML, utilice los métodos de eventos de
C++ de PlugPlug: PlugPlugAddEventListener() y PlugPlugDispatchEvent().

A diferencia de las extensiones Flash, las extensiones HTML no admiten eventos de cambio de estado de ventana.

Soporte de tipo de evento

Estos tipos de eventos están definidos y son compatibles con las aplicaciones de escritorio de Creative Cloud. Actualmente, solo se admite el
alcance de la aplicación para los eventos.

Tipo de evento Enviado después Compatible con hosts

documentAfterActivate Se ha activado el documento (se ha creado un photoshop


documento nuevo, se ha abierto un documento InDesign/InCopy
existente o se ha seleccionado un documento abierto) ilustrador

documentAfterDeactivate El documento activo ha perdido el foco photoshop


InDesign/InCopy
ilustrador

dcoumentAfterSave El documento ha sido guardado photoshop


InDesign/InCopy

aplicaciónAntesdeSalir El anfitrión recibe la señal para comenzar la terminación InDesign/InCopy

aplicaciónActivar El anfitrión obtiene el evento de activación del sistema Solo Mac OS:
operativo estreno profesional
Preludio

Sistema operativo Windows y Mac:

photoshop
InDesign/InCopy
ilustrador

Entrega de un complemento con una interfaz de usuario HTML/JS

Esta sección utiliza el complemento de muestra de FreeGrid y la extensión de muestra de FreeGridUI como ejemplos para describir
cómo crear, instalar y depurar un complemento con una interfaz de usuario HTML/JavaScript.

Cree e instale el complemento de C++

Para compilar su complemento de C++ en Windows, use Visual Studio 2019. En Mac OS, use Xcode 12.3.

1. Abra el archivo del proyecto:

ÿ En Windows: SDK_root\samplecode\FreeGrid\FreeGrid.vcxproj

ÿ En Mac OS: SDK_root/samplecode/FreeGrid/FreeGrid.xcodeproj

2. Cree el proyecto. El resultado de la compilación se coloca en una subcarpeta de la carpeta del código de muestra , según
qué objetivo construyes:
Machine Translated by Google

CAPÍTULO 4 Creación de una interfaz de usuario HTML/JS para complementos Entrega de un complemento con una interfaz de usuario HTML/JS 41

ÿ En Windows:
salida\win\Win32\Debug o salida\win\Win32\Release
salida\win\Win64\Depuración o salida\win\Win64\Release

ÿ En Mac OS:
salida/mac/depuración o salida/mac/liberación

3. Copie el resultado de la compilación, FreeGrid.aip , en la carpeta de complementos de Adobe Illustrator 2022. Consulte “Dónde están los complementos
en vivo” en la página 8.

Empaquetar la extensión HTML


Para distribuir su extensión de Creative Suite, debe empaquetarla y firmarla para que los usuarios puedan instalarla en sus aplicaciones de escritorio
usando Extension Manager. Adobe Extension SDK proporciona un asistente de exportación para ayudarlo a hacer esto desde Extension Builder 3.

El SDK de extensión de Adobe le permite depurar su extensión durante el desarrollo, antes de empaquetar e instalar la extensión. Para hacer esto, debe
habilitar la depuración en el sistema operativo, usar Extension Builder 3 para depurar la extensión mientras se ejecuta en la aplicación host y luego
verificar los diversos registros en busca de advertencias y errores.

Consulte la documentación del SDK de extensión de Adobe para obtener detalles completos sobre cómo desarrollar y depurar una extensión.

Instalar la extensión
Para ejecutar su extensión en Illustrator, debe cargarla en una de las carpetas de implementación de extensión compartida.

Vaya a la carpeta del espacio de trabajo de Extension Builder que contiene su proyecto, busque la carpeta de salida de su proyecto (el nombre
predeterminado es bin). Copie su carpeta de Salida a la carpeta de implementación; el nombre y la ubicación de esta carpeta dependen de la versión de
Illustrator a la que se dirige y de su plataforma. A partir de esta versión, Illustrator carga extensiones desde estas ubicaciones:

ÿ Estas son las carpetas de implementación de todo el sistema para todos los usuarios:

ÿ En Windows:
C:\Archivos de programa\Archivos comunes\Adobe\CEP\extensions\

ÿ En Mac OS:
/Biblioteca/Soporte de aplicaciones/Adobe/CEP/extensions/

ÿ Para un usuario específico, estas son las ubicaciones predeterminadas de la carpeta de implementación.

ÿ En Windows:
C:\<nombre de usuario>\AppData\Roaming\Adobe\CEP\extensions\

ÿ En Mac OS:
~/Biblioteca/Soporte de aplicaciones/Adobe/CEP/extensiones/

Al iniciarse, Illustrator busca extensiones en la carpeta del sistema primero y luego en la carpeta del usuario.

Si hay un conflicto en los ID de extensión, se usa el último que se cargó. Si la misma extensión se encuentra en diferentes ubicaciones, entonces si tienen

diferentes versiones de ID de paquete, se usa la última versión.

Cuando inicia Illustrator, el menú de su extensión (como se define en el archivo de manifiesto) aparece en el menú Ventana > Extensiones .

También podría gustarte