Message Boards Message Boards

Draw: vector drawing & technical illustration application


Recently John Fultz announced GitLink as open source on GitHub. He also mentioned the desire to offer more Wolfram related open source to the community. Draw was not mentioned by John but readers of his post followed the GitHub link and discovered the Draw repository. Naturally questions followed so here we are with an introduction of Draw, the latest open source contribution to the community.

Draw is a vector drawing application. Many of the technical illustrations found in the Wolfram Language documentation were created using it. The release of Draw is to promote the advantages of using the Wolfram Language for software development.

Draw was a personal project that grew from an idea to develop a simple tool to automate the drawing of flowcharts. This simple tool expanded in response to the need of functionality for solving specific challenges required by various illustrations. The Wolfram Language was very instrumental in helping Draw evolve during this process.

Some of the more prominent features of Draw include:

  • Orthographic 3D drawing
  • Circuit, Mechanical and 3D library presets
  • Adjustable shapes such as gears or spirals
  • Shape arrays
  • Image autotrace

The gallery of examples below demonstrate the capabilities of Draw:


A look inside the application reveals an interface divided into four distinct sections:

interface sections

An example of Draw being used to work on a flowchart:


The Circuit, Mechanical and 3D libraries:


The adjustable gear shape:


The shape array:

shape array

Hope this brief introduction is enough to inspire you to download the Draw notebook from this GitHub link. Start creating illustrations or explore the Wolfram Language code to discover how the application works. Support is available by clicking the blue help button for topics such as the basics, features, interaction, tools, examples and tips. Tooltips appear for all buttons detailing their behavior. Remember this is open source software and comes with no guarantee. That being said, feel free to kick the tires and take it for a spin.

Draw works best when used in Mathematica 11 but most functionality is supported by Mathematica 10.4.1.

POSTED BY: Tim Shedelbower
1 year ago

This is fantastic! It is a serious upgrade to drawing cartoons programmatically using Graphics.

POSTED BY: Tal Einav
1 year ago

enter image description here - you have earned "Featured Contributor" badge, congratulations !

This is a great post and it has been selected for the curated Staff Picks group. Your profile is now distinguished by a "Featured Contributor" badge and displayed on the "Featured Contributor" board.

POSTED BY: Moderation Team
1 year ago

Super great! Vey useful.


1 year ago

Draw has been updated with new features and bug fixes. Download from this GitHub link. Short list of features and bug fixes include:

  • Added multiple undo and redo
  • Added command-click to clipboard button for copying graphics code instead of graphics
  • Added color palette popup menu to choose ColorData numbers 97-113
  • Added Round Corners draw tool
  • Added shadows for individual 2D shapes
  • Fixed group and ungroup functionality for better reliability

See GitHub commit for full list of changes.

POSTED BY: Tim Shedelbower
1 year ago

Hello Tim,

This is very nice. Thank you for sharing it. I have two small suggestions after opening this version for the firs time:

  • The window does not fit on my screen vertically. I use a MacBook Pro, i.e. my screen resolution is 1440 by 900. But the menu bar also takes up vertical space, and so can the dock (although personally I have that hidden). I can increase the screen resolution in which case Draw becomes usable (but not resizable).

  • It takes quite a few seconds for Draw to start up. Since the notebook has the cell brackets hidden, there is no very clear indication that something is happening at all. (Unless I look at "Running..." in the title bar.) It would be nice to put a PrintTemporary@ProgressIndicator[Appearance -> "Necklace"]; or similar to the beginning of the init code, to reassure users that something is indeed happening.

POSTED BY: Szabolcs Horvát
1 year ago

Szabolcs, glad you like it.

  • The canvas size is set by the global variable $dtCanvasSize. It is currently set to 750 but you can change it. However using a value other than 750 will cause the renderings in Draw to not match what is copied to the clipboard. Line weights, arrow sizes, etc. will be affected. Changing it to 700 would shrink it a little and not be too noticeable.

  • The GitHub notebook now displays cell brackets so you can see when draw[] is evaluating.

POSTED BY: Tim Shedelbower
1 year ago

Group Abstract Group Abstract