Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ADOBE® ILLUSTRATOR®
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
ÿ 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.
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.
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
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
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.
Formato de archivo Agregue tipos de archivos a los comandos Abrir, Guardar y Exportar.
Grupo de complementos Mantener el arte de "exhibición" que está asociado con otro objeto de arte
Herramienta
Agregue herramientas al panel Herramientas.
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.
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.
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.
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
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.
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
Para obtener más información, consulte AIToolSuite en la referencia de la API de Adobe Illustrator.
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.
Una carpeta de complementos específica del usuario , que puede ser apropiada para usar en sistemas multiusuario, se encuentra de la siguiente manera:
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
ÿ 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 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.
extern "C" ASAPI ASErr PluginMain(char* llamante, char* selector, void* mensaje);
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.
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 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:
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.
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.
kSPInterfaceCaller Selector de inicio de interfaz kSP Inicialice globales y agregue funciones a la aplicación.
("Interfaz SP") ("Puesta en marcha")
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.
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.
Extern "C" ASAPI ASErr PluginMain (char* llamante, char* selector, void* mensaje)
Machine Translated by Google
{
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;
}
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 :
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
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.
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:
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
la API; proporcionan una amplia gama de capacidades para manipular texto, degradados o imágenes rasterizadas, o realizar funciones matemáticas. La siguiente
conjunto de bloques
AIBlockSuite SPBlocksSuite Asignar y liberar memoria.
Para obtener descripciones detalladas de las suites y sus funciones asociadas, consulte la referencia de la API de Adobe Illustrator.
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
#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
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);
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
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 Mac OS, use Xcode 12.3 (requiere macOS 10.15.4 o superior), LLVM Clang y macOS predeterminado
SDK.
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
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.
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
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.
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.
ÿ 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.
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
ÿ Notificadores
ÿ Carga y descarga
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.
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:
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.
ÿ Ventanas: Tutorial.rc
Para obtener más información sobre PiPL, consulte “Listas de propiedades de complementos” en la página 35.
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.
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
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.
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:
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);
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.
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
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.
estructura typedef {
AIFilterHandle filterVariation1;
AIToolHandle toolVariation1;
AIMenuItemHandle sobrePluginMenu;
} Globales;
Globales* g = cero;
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
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:
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.
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;
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:
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:
Hay dos mensajes de pares de llamador/selector asociados con los tipos de complementos de filtro:
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:
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;
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:
ÿ 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:
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
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 .
ÿ Rellene el TPB con pares clave-valor que proporcionen el nombre y el tipo de datos de cada parámetro llamando
AIActionManagerSuite::AIActionSetTypeKey.
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.
ÿ 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.
Para obtener un código de muestra, consulte las funciones GoFilter y RecordFilterAction en Tutorial.cpp.
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
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:
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.
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:
ÿ 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:
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
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.
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
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:
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
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.
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:
PICodeMacIntel32Propiedad mi32 PIMacIntelCodeDesc descriptor de código que contiene el punto de entrada del código
Intel para complementos en plataformas Mac OS.
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.
El recurso PiPL de su complemento puede incluir las propiedades opcionales descritas en la siguiente tabla.
Machine Translated by Google
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.
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.
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
/** 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á.
Su complemento puede agregar elementos al menú Live Effects. Para manejar un efecto en vivo programáticamente,
proporcione controladores para estos dos mensajes:
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.
ÿ El mensaje->arte puede ser el arte seleccionado actualmente o la salida de un efecto en vivo anterior; no es necesariamente
un grupo.
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
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.
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
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.
Extensión BOLSILLO
EnchufeEnchufe Enchufar
llamar a dispatchEvent()
enviarEvento()
invocar función de devolución de llamada ()
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
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.
ÿ 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);
ÿ 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.
CAPÍTULO 4 Creación de una interfaz de usuario HTML/JS para complementos Comunicación entre complementos y extensiones 38
/**
* 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.
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:
// 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);
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:
Estos son algunos ejemplos de diferentes formas de crear y enviar eventos en JavaScript:
csInterface.dispatchEvent(evento);
csInterface.dispatchEvent(evento);
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
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.
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.
aplicaciónActivar El anfitrión obtiene el evento de activación del sistema Solo Mac OS:
operativo estreno profesional
Preludio
photoshop
InDesign/InCopy
ilustrador
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.
Para compilar su complemento de C++ en Windows, use Visual Studio 2019. En Mac OS, use Xcode 12.3.
ÿ En Windows: SDK_root\samplecode\FreeGrid\FreeGrid.vcxproj
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.
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
Cuando inicia Illustrator, el menú de su extensión (como se define en el archivo de manifiesto) aparece en el menú Ventana > Extensiones .