top | item 29190232

Ask HN: What do you use for programmatic drawing?

21 points| scotty79 | 4 years ago | reply

When you need to write some program that calculates and shows something quick you probably write some console program in whatever language.

But what do you personally do, when you need a quick program that needs to draw some arbitrary graphics?

What languages and libraries do you use to draw something quick to see it, save it or animate it without a hassle?

18 comments

order
[+] susam|4 years ago|reply
Gnuplot for graphs.

LaTeX PGF/TikZ for complicated diagrams.

Lines and boxes drawn with ASCII symbols (e.g., +, -, |, <, >, ^, v, /, \, ', `, etc.) using Emacs for very simple diagrams.

PGF/TikZ has considerable learning curve, so it may seem like a hassle in the initial days of learning to use it. But after mastering it once, one can unlock a lot of power and flexibility that comes with it. The PGF/TikZ manual at http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf is really worth seeing. This manual, which is itself designed using PGF/TikZ, is a masterpiece!

[+] ai_ia|4 years ago|reply
I usually use Manim for creating mathematical animations for some Mathematical courses I am writing. It’s a python library developed by the guy from 3b1b and it’s a joy to work with it.
[+] cpach|4 years ago|reply
Have you tried Pic? It might suit your needs.

http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/web/pic.html

[+] scotty79|4 years ago|reply
Personally I'd prefer to have something I can use with programming language that I use. For quick coding I mostly use Python.

I could probably make Python script that generates Pic file and run it through Pic to generate the image but it won't work for any animations and I'd need another piece of software to display the graphic.

[+] truly|4 years ago|reply
I am using Manim for animations.

However, I am also on the lookout for a good programmatic graphics editor. I am thinking of developing my own, but time is an issue.

I have successfully also used Python libraries like this one to create some graphics:

https://pypi.org/project/svgwrite/

[+] tmaly|4 years ago|reply
For Python you could use the pyglet OpenGL library to do both 2D and 3D https://github.com/pyglet/pyglet

For Scratch, the pen tool extension works really well. I was just doing a demo on this for an elementary class the other day.

[+] scotty79|4 years ago|reply
Pyglet looks great, but drawing is done in OpenGL way.

Is there a libraray that uses pyglet giving it the drawing interface more limilar to what other 2d APIs offer? Like the one suppoted by HTML Canvas tag?

EDIT:

Never mind. I just noticed pyglet.shapes offers something more palatable than OpenGL. :-)

and doing stuff is pretty clean:

    import pyglet
    from pyglet import shapes

    batch = pyglet.graphics.Batch()

    circle = shapes.Circle(700, 150, 100, color=(50, 225, 30), batch=batch)
    square = shapes.Rectangle(200, 200, 200, 200, color=(55, 55, 255), batch=batch)

    window = pyglet.window.Window(960, 540)

    @window.event
    def on_draw():
        window.clear()
        batch.draw()

    @window.event
    def on_key_press(symbol, modifiers):
        if symbol == pyglet.window.key.ESCAPE:
            window.close()

    pyglet.app.run()
[+] scotty79|4 years ago|reply
After some experimentation I found out that pygame is even better them pyglet.

I had multiple issues with pyglet with high monitor refresh rate, HDR and refresh rate mysteriously slowing down after I dragged the window around. While pygame works flawlessly.

[+] slopdo|4 years ago|reply
I'm not using it but just in case it is useful to anybody here I would add Processing to the list. Lots of examples can be found at its website:

https://processing.org/examples

[+] zzo38computer|4 years ago|reply
I use Ghostscript (although it doesn't do animations as far as I know, but it works for programmable drawings without animations).
[+] dummy_physicist|4 years ago|reply
Graphviz for diagrams, R standard library for plots, and imageMagick for simple image creation or processing.
[+] scotty79|4 years ago|reply
For charts Python with pyplot is very quick and easy.

But for arbitrary graphics I have no idea. I usually end up just launching Visual Studio, create new WinForms application and placing PictureBox component with empty bitmap or draw directly in OnPaint method of the Form.

[+] tomjen3|4 years ago|reply
Javascript and canvas. You can just right click and save the image.