Perspective Tools


I have a few feature suggestions that are all linked to perspective in some way. I’ve had a look around at what has already been suggested in relation to what I have in mind and concluded my perspective suggestions are safe enough for a new topic and not be duplicate spam/ would be a bit too far off to include in other topics. I’m going to start with what I think are the simpler feature ideas and end with the more complex perspective features.


While MyPaint currently has straight, curved and oval/circle tools, they are limited in their use. An example I have experienced myself is how drawing a perfect circle is done. I have to constrain the angle and drag 45 degrees from the origin point to make a circle and not an oval. There are situations where this is fine in, but when I want the circle to intersect a certain point, it can be hard to get it accurate.*

*Side note: scroll wheel of course works to zoom, but once the mouse/stylus is clicked down with the circle/oval tool, it stops working and the +/- keys on the keyboard has to be used… why? The scroll wheel should continue to work!

I used Medibang before MyPaint, and Medibang has snaps. Snaps are perspective tools that anchor lines to certain geometry. The snaps I routinely used were: grid (horizontal and vertical), parallel (which also allowed 90 degree lines from the set angle), Star (draw straight lines radiating out from the set anchor point aka like a vanishing point), and radius circle ( anchor set the centre of the circle, where you click set the radius, drag for perfect circle).

The snap radius with anchor is superior when the circle needs to intersect a certain point as you can simply click down at that intersection point and drag. You can easily get it pixel-perfect just by zooming right in if you wish. That’s what I did in Medibang when constructing perspective (see final section of post). The infinite canvas of MyPaint allowed me to finish my linear perspective study, but it was very frustrating doing perfect circles that intersect correctly the way MyPaint has its tool. Keep the current way but add snaps too; both ways dominate seperately depending on the desired outcome.


These go hand-in-hand imo. A selection tool has been suggested several times before and for years. The whole “edit layer in external app” works but it is cumbersome. It is considered an essential in an art programme to the point where I am sure there are artist who are put off of MyPaint due to its absence despite the cumbersome alternative. I am confident many more will use MyPaint with the update that introduces a good selection tool.

What I haven’t been able to notice in previous suggestions is that the selection tool is often used with the transform tool. Transform is an easy way to shift and resize whole layers or selected portions, but also a proper transform tool doubles as a perspective tool also. It is possible to draw something head-on (1 point perspective), select and transform it, pinch the sides so that it now converges to a vanishing point and goes into perspective; and finally, squashing and stretching along that perspective submits to correct perspective too. Can easily be done even with a circle: the rules of perspective all apply as you click and drag the transform points.


I’d like to suggest my own take on a dedicated perspective mode. Artistic perspective is visual geometry of spherical 3D space folding out onto a flat canvas. It all starts with your canvas aspect ratio and the following defaults:

  1. Direction of view (defaults to exact centre of canvas, 0X0Y canvas coordinate).

  2. circle that intersects the corners of the canvas (cone of vision; defaults to 60-degrees).

  3. Station point (2 30-degree straight lines from the horizontal/vertical intersection from the direction of view into the cone of vision; where the viewer stands in 3D space looking at the direction of view Default orthogonals).

From the station point, any vanishing point can be measured. 2 additional important facts about perspective are:

  1. Perspective geometry repeats every 90 degrees, thus 0 and 90 rotation look the exact same and 360 degrees of 3D space can be quartered in perspective geometry.

  2. 15 degrees from 0 is where 1-point perspective becomes 2-point perspective in art. An artist only needs every 15 degrees on both X & Y axis up to 75 (stops there due to fact 1; going further goes in curvilinear which I have yet to study and thus cannot include as a feature suggestion even if I wanted to).

A square canvas, centre direction of view, 60 degree cone of vision and orthogonal station point.

This means that the centre of the canvas is the 0Y0X vanishing point (not just digital coordinate for the programme to understand), and by default a good perspective mode could give the artist every 15X VP on every 15Y horizon line up to 75 simply by giving the canvas size. The infinite canvas of MyPaint would be great for this perspective mode as the artist can see outside their canvas border and see the vanishing points no matter how big their original canvas.

Additionally, all these numbers are default, but it is entirely possible for an artist to not centre their direction of view, have a different cone of vision than 60, and have the station point in any orientation radius to the direction of view. If the artist wishes to see the 13Y66X VP shown they should be able to just put in those numbers and MyPaint puts it there for them. Full perspective customisation!

I’ll stop here since these are suggestions for an art programme, but there is more about perspective that MyPaint’s perspective mode could do for the artist. Mainly measurement points (which I currently struggle to create beyond 0Y horizon lines with the current circle method available). MyPaint also creating measurement points with the vanishing points will allow the programme to create 1:1:1 ratio cubes (or allow the artist to do so for themselves with the created perspective grid), which are the most basic form that perspective can create. Very, very useful!


Even the inclusion of a radius anchor-snap in a programme already with an infinite canvas would be a god send for me. Drawing the perfect circle that intersects the correct point for 75Y75X VP is impossible to make accurate without headache. Snaps would take all the frustration out of manually constructing perspective.

The selection and transform tool are staples of an art programme and the current editing in external app is more like a band aid fix than a proper solution for a programme for artist.

My take on perspective mode would honestly be the first of its kind I believe for a digital art programme. But I think it would be worth it. In fact, being the first programme that helps to construct a perspective grind with every 15 degrees only from the one input of canvas size would make MyPaint better than any other art programme for perspective. Even more with the customisation of direction of view, cone of vision etc. I understand it would be a big undertaking for something so unique which is why I don’t expect my take on a perspective mode to be the adopted way, but the unique, accurate take on geometric linear perspective may attract more artists to MyPaint.

I’m no programmer, but I’m sure implementing this perspective mode will include way more maths than an artists needs. Geometry is unique in that while you can calculate it, you can also only draw lines, squares and circles to get to the correct answer. A programme probably needs the maths though, and I can’t help at all in explaining how the maths would have to be. I just know the lines, squares and circles to visually construct perspective.

A very nice and detailed write-up!

The lack of scroll-zooming when dragging (line modes, ink mode, fill-drag) has been bugging me as well, so that’s on the list of things to fix (probably not as easy as it sounds).

There is already a fairly complete implementation of a perspective mode in the pull requests on github. Unfortunately it is not quite complete and I haven’t looked into what the problems are (it’s a pretty large set of additions/changes).

As with all things like this, the main issue is time, and the availability of people who would be able/willing to help (here meaning: code).