Does it sound logical to you now with my explanation?
It is logical...
My logic of angles is based around Part Circle where angles move anti clockwise and the number gets bigger, and zero by default is at the 3 o'clock position, 90 degrees is at 12 o'clock 180 degrees is at 9 o'clock, 270 goes around 3/4 of the way around to the 6 o'clock position.
This part is extremely logic to me. I always would want it counter-clock-wise, and my zero, from elemental geometry, is always in the X axis. Forcing it to be definite positive [0,360] is not much of a deal (yes, I like -180, 180), but I can certainly live with it, specially if it is convenient to avoid lines from flipping...
Let's say that pushing the button means "hey! constraint A with reference to B using the positive angle I am giving you, so that A will end in a counter-clock-wise position relative to B, the relative position therebetween corresponding to that positive angle
Case 1: I select the ellipse first so I constraint it with respect to the reference line. So for example if I would start with an original situation as the second figure, I select first the ellipse and then the line and give 45º, I will get to an end result of figure 1.
The "problem" (more of an inconvenience to the user) is adapting to this way of working... but this is certainly not for me to decide (I am such a newbie that I can adapt to anything).
Lets restrict to ellipse angles (not normal angles). I will (try to) implement this. Then I will release the code. Then I would ask the good people of the FreeCAD community, users and lead developers and everything in between for feedback on this feature. Then it is also for then to decide if they want to move to this way of working also for normal angles or not (and also if I change the ellipse angle constraint or not, of course).
Now changing the topic. I have this (which was an xpm of a circle that I tried to convert to an ellipse using a text editor with not much luck or with better said with much lack, of skills). It is the image you see during creation of an element on the inventor view. I could certainly use the help of a more skilled artist:
static const char *cursor_createellipse[]={
"32 32 3 1",
"+ c white",
"# c red",
". c None",
"......+.........................",
"......+.........................",
"......+.........................",
"......+.........................",
"......+.........................",
"................................",
"+++++...+++++...................",
"................................",
"......+.........................",
"......+.........................",
"......+.........................",
"......+.........................",
"......+.........................",
"......+........#######..........",
"..............#.......#.........",
"............##.........##.......",
"..........##.............##.....",
"........##.................##...",
"......##.........###.........##.",
"......#..........#.#..........#.",
"......##.........###.........##.",
"........##.................##...",
"..........##.............##.....",
"............##.........##.......",
"..............#.......#.........",
"...............#######..........",
"................................",
"................................",
"................................",
"................................",
"................................",
"................................"};