Aplicación de dibujo vectorial con guión (a la Satimage Smile)

He usado la aplicación Smile de Satimage para hacer diagramas vectoriales (para ilustraciones técnicas, patrones de corte por láser, etc.) a través de AppleScript aumentado con comandos de dibujo. Es como lo opuesto a PaintCode , que convierte los dibujos en código. (Soy matemático, no artista, así que quiero/necesito describir imágenes con fórmulas y ecuaciones).

Lamentablemente, macOS Mojave rompió la funcionalidad OSAX, por lo que Smile quedó completamente inutilizable.[*] Además, la interfaz de usuario de Smile, tan rudimentaria, puede ser bastante frustrante. Es hora de buscar una alternativa.

El "código" no tiene que ser AppleScript. He visto un par de aplicaciones de código abierto (generalmente Qt) para editar TikZ, un lenguaje de gráficos programáticos. Sin embargo, estos están orientados a modificar el código TikZ para importarlo a documentos LaTeX y otras cosas; Estoy buscando algo más como un editor de documentos independiente, capaz de exportar a PDF o EPS directamente. (Pero si hay un editor TikZ similar a Mac realmente bueno , lo consideraría).


[*] Aparentemente hay una solución AppleScript usando una aplicación SatimageOSAX auxiliar , pero no he conseguido que funcione con Smile. Además, es solo un parche, condenado a romperse eventualmente.

Recomiendo echar un vistazo a Python y Matplotlib ( matpltotlib.org ) - ambos están instalados por defecto en Mojave y son muy fáciles de usar - como matemático puede hacerlo rápido - puede usarlo para gráficos 2D/3D, las imágenes admitidas son PNG/EPS/JPG/SVG, etc. Una nota sobre el formato .eps: tiene un error de seguridad y Apple convierte instantáneamente dichas imágenes en .pdf cuando se abren en Vista previa.
@Yoan: Voy a echar un vistazo. (No he usado Python antes, pero he visto el XKCD obligatorio , así que estoy intrigado). Dicho esto, aunque no soy completamente reacio a las travesuras de la línea de comandos para instalar cosas, uso una GUI computadora basada por una razón. :) La página de Matplotlib menciona tres distribuciones de terceros que "simplemente funcionan": Anaconda , Canopy y ActiveState . ¿Alguna idea sobre esto?
Sí, Anaconda, seguro. Tiene varias aplicaciones, Spider es un IDE con editor de texto y depurador de ipython, todo lo que necesitas para hacerlo en una GUI. La versión de Python en Mohave es 2.7.10, pero Anaconda tiene la última, 3.7.0. Recomendamos instalarlo en su ruta $HOME, es muy útil como tal, especialmente si usa Emacs (soporta Latex, Python, org-mode, etc). Apple utiliza Python 2.7 para mantener/instalar software en su computadora, por lo que es aconsejable no interferir con él, al menos al principio.

Respuestas (3)

metapost

MetaPost es un lenguaje de dibujo de imágenes completo y de código abierto, con mucho soporte y documentación .

El sistema MetaPost (de John Hobby) implementa un lenguaje de dibujo de imágenes muy parecido al de MetaFont; la diferencia es que MetaPost genera archivos de gráficos vectoriales en lugar de mapas de bits codificados por longitud de ejecución; Los formatos de salida disponibles son PostScript y SVG.

MetaPost es capaz de crear imágenes y formas complejas :

Imagen de ejemplo creada con MetaPost

beginfig(11)
    pair A, B, C;
    A:=(0,0); B:=(1cm,0); C:=(0,1cm);
    draw A--B;
    draw B--C dashed evenly;
    draw C--A dashed withdots;

endfig;

Imagen compleja dibujada con MetaPost

beginfig(117)
  u:=2cm;
  pair A, B, C, D, E;
  path p, q, r;

  A = u*up;
  p := (-.2)[ A, A rotated 72 ] -- (1.2)[ A, A rotated 72 ];
  for i=0 upto 5:
    draw p rotated 72i;
  endfor;
  B := 1/2[ A, A rotated 72 ];
  C := .8*B;

  p := B --- C .. (C rotated (2*72)){right};
  % On allonge le chemin p
  p := ( (point 0 of p) - 4mm*unitvector(direction 0 of p))
       --
       (point 0 of p)
       & p &
       (point 2 of p)
       --
       ( (point 2 of p) + 4mm*unitvector(direction 2 of p));

  E = p intersectionpoint (p rotated 72);
  q := p cutbefore fullcircle scaled -2mm shifted E;
  r := p cutafter fullcircle scaled  2mm shifted E;

  for i=0 upto 4:
    draw q rotated 72i;
    draw r rotated 72i;
    draw A rotated 72i withpen pencircle scaled 4bp;
    draw B rotated 72i withpen pencircle scaled 4bp;
    draw C rotated 72i withpen pencircle scaled 4bp;
  endfor;
endfig;

Puede instalar MetaPost como parte de BasicTex .

Bosquejo

Dirigido más a los diseñadores que a los ingenieros, Sketch ofrece una interfaz programable y compatibilidad con AppleScript.

Nota al margen

Como comentario aparte, Apple una vez distribuyó una aplicación de dibujo vectorial de muestra también llamada Sketch. Uno de los propósitos de Sketch era demostrar cómo incorporar AppleScript en una aplicación.

Fascinante. ¡MetaPost ha estado allí en la ventana emergente del "programa de composición tipográfica" de TeXShop todos estos años! La perspectiva de aclimatarse a otro paradigma de secuencias de comandos personalizadas es un poco desagradable, pero MP parece muy adecuado para el tipo de figuras que tiendo a hacer (mucha simetría). Experimentaré por un tiempo. Mientras tanto, dejaré la pregunta abierta para ver si hay aún más alternativas.
Por cierto: ¿Sabes si hay alguna manera de hacer que TeXShop muestre automáticamente la imagen MP renderizada? Regresar al Finder para abrir el archivo .ps generado ya es tedioso... ¡y solo he tenido que hacerlo dos veces! :) (Hmmmm... Me pregunto si puedo configurar una acción de carpeta "carpeta vigilada" para abrir archivos .ps recién detectados en Vista previa).
Espero que un enfoque de carpeta vigilada funcione. Tal vez valga la pena hacer una nueva pregunta para atraer más respuestas. Si puede compartir su intento inicial de un flujo de trabajo o secuencia de comandos de la carpeta de inspección, es probable que atraiga a otras personas felices de ayudarlo a refinarlo o solucionar cualquier problema.
¡Al menos aprender este paradigma de secuencias de comandos le dará algo que podría durar más que macOS y ser portátil a otras plataformas! Espero que MetaPost te funcione.
Por desgracia, no creo que MetaPost sea una solución viable, después de todo. Al leer el manual (!?!), Encuentro que "Debido al modelo matemático que se usa para describir rutas en MetaPost, todas estas rutas no son exactamente circulares, sino muy buenas aproximaciones". (De hecho, en el PostScript generado, veo que los "círculos" comprenden varios Bezier curvetos en lugar de arcs). Las aproximaciones estarían bien para mis ilustraciones, pero necesito círculos "reales" para mis proyectos de corte por láser, que son mi principal preocupación. .
Por cierto: obtuve una acción de visualización de carpetas para mostrar imágenes renderizadas automáticamente. Hay un retraso molesto de un par de segundos, y necesito refinar mi script actual para no ensuciar la carpeta con otro filename.###.pdfcon cada ajuste a la figura, pero funciona.
Lamento escuchar que las rutas circulares son aproximaciones. ¿Quizás una aplicación CAD de código abierto se adapta mejor a sus necesidades?

Código abierto: diseño asistido por computadora

Otra posibilidad para sus proyectos de corte por láser es una aplicación completa de diseño asistido por computadora (CAD). Hay algunas opciones de código abierto (gratuitas y mantenidas por la comunidad), así como muchas opciones comerciales.

  1. LibreCAD

    LibreCAD es una aplicación CAD de código abierto gratuita para Windows, Apple y Linux. El soporte y la documentación son gratuitos de nuestra gran comunidad dedicada de usuarios, colaboradores y desarrolladores.

  2. QCAD - CAD 2D

    QCAD es una aplicación gratuita de código abierto para el dibujo asistido por computadora (CAD) en dos dimensiones (2D). Con QCAD puede crear dibujos técnicos como planos de edificios, interiores, piezas mecánicas o esquemas y diagramas.

  3. GratisCAD

    FreeCAD es un modelador 3D paramétrico de código abierto hecho principalmente para diseñar objetos de la vida real de cualquier tamaño. El modelado paramétrico le permite modificar fácilmente su diseño volviendo al historial de su modelo y cambiando sus parámetros.

Gracias. Después de una revisión superficial: LibreCAD permite el dibujo de "línea de comando", pero no el dibujo con guión (bucles/condicionales/etc), per se . QCAD hace scripts, pero deben escribirse en otro lugar y pegarse; ninguna integración real. FreeCAD dice que es Python-scriptable, y tiene una ingeniosa consola de Python que muestra cómo se hacen las cosas; sin embargo, por lo que puedo decir, las secuencias de comandos se logran a través de una interfaz macro tosca. (¡Sin embargo, la exportación .svg indica que los círculos son círculos !) Como creador de aplicaciones, puedo optar por Xcode; el flujo de trabajo será extraño, pero tendré poder y flexibilidad.

No olvide que PostScript en sí mismo es un lenguaje de programación, con comandos claros para crear objetos vectoriales.

Hay muchos recursos para la programación en PostScript, sobre todo en el sitio web de Adobe.

+1. Está eso... Postscript no es el lenguaje "más bonito", incluso en niveles modestos de complejidad, pero mis diagramas son bastante complejos. :) ¡No me gustaría escribir esas cosas en TextEdit! Un entorno de edición de postscript dedicado, con colores de sintaxis y autocompletado y todas las campanas y silbatos, podría hacer que esta sea una opción viable, pero no creo que exista tal entorno.
¡He creado un módulo de coloreado de sintaxis para BBEdit, pero no autocompletado! Otra opción podría ser usar un puente de secuencias de comandos para acceder a las API CoreGraphics de MacOS, a través de lenguajes como Python (¿Ruby?) o AppleScript. Una vez que comprenda el marco, crear funciones para realizar curvas, polígonos y transformaciones de Bezier es bastante sencillo.