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.
Software Recommendations Stack Exchange is a question and answer site for people seeking specific software recommendations. It only takes a minute to sign up.
Sign up to join this communityIs 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.
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:
After you create some object in DOT language, you can convert it into image:
dot -Tpng input.dot > output.png
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
.
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:
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?