10

Is there free software for making my own figures related to software engineering, like memory management, stacks, etc., like the one below to use in presentations and/or reports?

Note: I used to use MS Paint, then LaTeX.

enter image description here

  • Which operating system? – Mawg Jul 20 '15 at 10:12
  • Linux or Windows – Bionix1441 Jul 20 '15 at 10:13
  • 1
    By LaTeX, do you mean that you used the TikZ package? And if you've used LaTeX, have you also looked at Asymptote? – Iwillnotexist Idonotexist Jul 20 '15 at 11:19
  • 1
    Figures like the one in the example can be drawn in TikZ relatively easily - once you figure it out once. If you need to draw a lot of very similar figures (i.e. in the same style) I would recommend looking into TikZ especially if you are already using LaTeX. Edit, examples: texample.net/tikz/examples/area/computer-science – DetlevCM Jul 20 '15 at 15:51
10

Take a look at DOT language and Graphviz software. Using it you can create such graphs as yours and much more:

http://www.tonyballantyne.com/graphs.html - start reading at section 5

https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29

http://www.graphviz.org/Documentation/dotguide.pdf

Example structure:

digraph structs {
    node[shape=record]
    struct1 [label="<f0> left|<f1> mid\ dle|<f2> right"];
    struct2 [label="{<f0> one|<f1> two\n\n\n}" shape=Mrecord];
    struct3 [label="hello\nworld |{ b |{c|<here> d|e}| f}| g | h"];
    struct1:f1 -> struct2:f0;
    struct1:f0 -> struct3:f1;
}

Rendered:

The above digraph structure

After you create some object in DOT language, you can convert it into image:

dot -Tpng input.dot > output.png
  • 1
    I second this. Additional details (Tomasz, you might wish to include them with your answer, see here for a reason; you could e.g. include one of the examples from your second link) include easy maintenance of your "graphs" and even scriptability: those "dot files" are plain-text. – Izzy Jul 20 '15 at 10:03
8

As an alternative to the text-based tools, such as graphviz and asymptote mentioned above, you can use the Inkscape vector drawing program.

You can draw pretty much anything with it, and because it is vector-based, the drawings are scalable and editable unlike ones done in paint.

2

Some of the answers above focuses on describing the figures by text, and then visualising them. This does work for some people, however there does exists loads of other options which can do this visually, as in dedicated drawing programs. So I just thought I would mention two of these, which I've used for different drawings lately:

  • draw.io – An online drawing program, but also available through the chrome app as a standalone program. It is free, and has loads of libraries to provide easy drawing of different software related figures. Allows storage to Google Drive, One Drive, DropBox, local device or within the browser. Does also have good import/export options.
  • yEd - Graph Editor – This is maybe somewhat more of a diagram/graph standalone editor, rather than a general figure editor, but I think it should be mentioned as it does have some neat features related to rearranging nodes and connections, and does quite a few of the diagram types needed when building software engineered related figures/diagrams/... . It does allows for import/export of various types, including graphml files (which might be automatically or manually updated).
1

I use Processing when I want to draw an ad hoc figure. It's totally geared to creating visual content, I think it's easiest programming language and API that I have ever used, and it is a joy to work with. At the same time, I do appreciate that most people wont want to write a computer program in order to draw a drawing!

There's an important contrast with DOT: DOT is declarative language - you describe what you want and the computer figures out how to draw it for you. Processing is an imperative language - you describe how you want your figure drawn. I'm not saying one is better than the other - just that there is a significant difference in style between the two.

I notice a common denominator in many of the technologies mentioned on this page, which is SVG: DOT, Inkscape and LaTeX can all output as SVG. Inkscape and Processing can read SVG. Therefore it might be helpful to think in terms of which tool(s) you create your SVG with, rather than which tool(s) you draw your figure with?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.