¿Cómo obtener un script de Illustrator para ver el tamaño visible del arte recortado en lugar del tamaño original del arte?

Cuando utilizo una secuencia de comandos de Illustrator con límites visibles o tamaño de selección en imágenes recortadas, la secuencia de comandos ve el tamaño original de las imágenes recortadas como el tamaño de los grupos en lugar de su tamaño visible (recortado). Digamos que tengo una 150mm x 200mmimagen y estoy usando una máscara de recorte para recortar una 100mm x 100mmparte. Así que ahora veo un rectángulo 100mm x 100mm, luego le agrego algunos otros elementos; no se vuelve más grande que 100mm x 100mm. Entonces quiero trabajar con este tamaño, no con el tamaño de la imagen original.

¿Cómo implementar esto en el script para trabajar más con él? Estoy usando Illustrator CS5.

¿Marcar "Usar límites de vista previa" en las preferencias altera las cosas?

Respuestas (3)

Siempre que el arte recortado sea un vector (a diferencia de una imagen de trama), puede usarlo Object > Expand appearancepara eliminar las partes que están recortadas. Por lo tanto, el guión ya no verá el arte original y no funcionará correctamente.

Debe obtener los límites geométricos del elemento de ruta de recorte real; es el primer elemento de ruta en un grupo de recorte.

Un grupo de recorte es básicamente un GroupItemcon clipped: truey uno de los elementos dentro de ese grupo tendrá clipping: true.

Echa un vistazo a este script:

function getVisibleBounds(item, geometric) {
    var bounds;

    // `clipped` is a property of a group
    if (item.typename = "GroupItem" && item.clipped) {
        var clippingItem;

        // look at all the items in the group to find the clipping item
        for (var i = 0; i < item.pageItems.length; i++) {

            // a child item will have `clipping` property set
            if (item.pageItems[i].clipping) {

                // found the clipping item!
                clippingItem = item.pageItems[i];
                break;

            // do the same thing for CompoundPathItems
            } else if (item.pageItems[i].typename == "CompoundPathItem") {
                if (item.pageItems[i].pathItems[0].clipping) {
                    clippingItem = item.pageItems[i];
                    break;
                }
            }
        }
        // store the clipping item's bounds
        bounds = geometric ? clippingItem.geometricBounds : clippingItem.visibleBounds;
    } else {

        // or just a normal item
        bounds = geometric ? item.geometricBounds : item.visibleBounds;
    }
    return bounds;
}