Coordenadas de grupos en Inkscape

Uso Inkscape como diseñador de interfaz de usuario. Quiero exportar cada grupo como un solo SVG usando el analizador de Python y el renderizador de línea de comandos de Inkscape, pero tengo problemas con las coordenadas de cada objeto.

Por ejemplo, tengo un grupo que es una ventana completa. Dentro de este grupo tenemos otro grupo (por ejemplo el botón cerrar ) que incluye un camino, un rectángulo y una elipse.

Y el analizador crea un árbol de carpetas dependiendo de <g></g>. Cuando el analizador "ve" el <g></g>entonces crea una carpeta llamada <group ID>y profundiza hasta que encuentra <g root_img="true"></g>. Todo lo que hay entre <g....></g>ellos se trata como un SVG separado y llama a la línea de comandos de Inkscape para representarlo y guardarlo como archivo *<group ID>*.png.

Esto es lo que tengo.

[folder]Window
    [image]close_btn.png
    [image]title_bar.png
    [folder]Products_list
        [image]product_belt1.png
        [image]product_belt3.png
        [image]product_belt2.png
    [folder]Advanced_options_window
        [image]hide_btn.png
        [image]title_aow_bar.png
        [folder]Options
            [image]opt1.png
            [image]opt2.png
            [image]opt3.png

Quiero los valores de coordenadas, por ejemplo:

close_btn 1250, 10
title_bar 0, 0
product_belt1.png 150, 150

Pero, ¿cómo obtengo las coordenadas absolutas de cada grupo?

EDITAR: ¿Es posible crear un complemento en el que agregue argumentos adicionales [x = 150, y = 120] a todos los grupos en XML?

Respuestas (2)

No solución pero parte de ella, idea

1 vía «semiautomática» Coloque un rectángulo transparente de 1 px con el color de marca #f1f2f300 en la esquina superior izquierda del grupo y obtenga las coordenadas del objeto de marca mediante el analizador.

«Automático» de 2 vías Según tengo entendido, necesita una coordenada absoluta desde la esquina superior izquierda, como el tamaño del documento 1000x1000 píxeles, el grupo raíz (altura = 100 px) en la esquina inferior izquierda, luego tiene las coordenadas x = 0 y y = 900. El grupo raíz tiene un subgrupo y tiene las mismas coordenadas. ¿O necesita un subgrupo de coordenadas relativas? ¿Ejemplo grupo raíz (0,900) subgrupo (0x0)?

Si solo necesita las coordenadas absolutas aquí más fácilmente, analice el grupo. Compara las coordenadas de los objetos dentro de un grupo, necesitamos un objeto con las coordenadas (x, y) más pequeñas. Esta es la posición del grupo.

Pero un poco más complicado cuando Inkscape agregó un parámetro como transform="translate(0,-100)" . Aparece cuando el grupo hizo un duplicado y cambia la posición del grupo. Aquí es necesario hacer adiciones y complicar la lógica.

Yo hice algo muy similar hace unos años. Después de explorar muchas opciones diferentes para analizar archivos SVG, terminé usando html/javascript. En aquel entonces, atravesé el archivo SVG usando jQuery, pero estoy seguro de que hay mejores bibliotecas disponibles hoy (y podría ser una buena idea usar un navegador sin cabeza ).

Una vez que sepa qué elemento desea, puede llamar Element.getBoundingClientRect()para obtener las coordenadas absolutas del mismo.