WIP Adding more graphical projection drawing tools
Stubbing out tools for drawing in axonometric projection -- Isometric, Dimetric, Trimetric -- and in oblique projection. Also, placed 1-, 2-, and 3-point perspective tools, along with these new ones, into a new Magic Tool group, MAGIC_TYPE_PROJECTIONS. See https://sourceforge.net/p/tuxpaint/feature-requests/252/ and https://sourceforge.net/p/tuxpaint/feature-requests/253/
This commit is contained in:
parent
45eabd97b8
commit
5d1cdd6c3f
3 changed files with 175 additions and 38 deletions
|
|
@ -6,7 +6,7 @@ Copyright (c) 2002-2024
|
||||||
Various contributors (see below, and AUTHORS.txt)
|
Various contributors (see below, and AUTHORS.txt)
|
||||||
https://tuxpaint.org/
|
https://tuxpaint.org/
|
||||||
|
|
||||||
2024.January.8 (0.9.32)
|
2024.January.12 (0.9.32)
|
||||||
* Improvements to Magic tools:
|
* Improvements to Magic tools:
|
||||||
----------------------------
|
----------------------------
|
||||||
* Support for complexity levels in Magic tools via the plugin API.
|
* Support for complexity levels in Magic tools via the plugin API.
|
||||||
|
|
@ -25,23 +25,41 @@ https://tuxpaint.org/
|
||||||
|
|
||||||
* New Magic Tools:
|
* New Magic Tools:
|
||||||
----------------
|
----------------
|
||||||
* Vanishing point magic tools:
|
* WIP Tools to draw with various kinds of graphical projections
|
||||||
+ 1-point Perspective ("1-Point Select" & "1-Point Draw")
|
(all placed within a new tool group):
|
||||||
Choose a vanishing point, and then draw lines that always
|
+ Point-projection persepctive:
|
||||||
point towards it, or are vertical or horizontal.
|
- 1-point Perspective ("1-Point Select" & "1-Point Draw")
|
||||||
+ 2-point Perspective ("2-Point Select" & "2-Point Draw")
|
Choose a vanishing point, and then draw lines that always
|
||||||
Choose two vanishing points, and then draw lines that always
|
point towards it, or are vertical or horizontal.
|
||||||
point towards them, along the horizon defined by them,
|
- 2-point Perspective ("2-Point Select" & "2-Point Draw")
|
||||||
or perpendicular to that horizon.
|
Choose two vanishing points, and then draw lines that always
|
||||||
+ 3-point Perspective ("3-Point Select" & "3-Point Draw")
|
point towards them, along the horizon defined by them,
|
||||||
Choose three vanishing points, and then draw lines that always
|
or perpendicular to that horizon.
|
||||||
point towards them, or along the horizon defined by the first two.
|
- 3-point Perspective ("3-Point Select" & "3-Point Draw")
|
||||||
|
Choose three vanishing points, and then draw lines that always
|
||||||
|
point towards them, or along the horizon defined by the first two.
|
||||||
|
+ WIP Orthographic (orthogonal) projection:
|
||||||
|
- WIP Isometric ("Isometric Lines")
|
||||||
|
Lines only go at evenly-spaced (120 degrees) angles (vertically
|
||||||
|
and diagonally).
|
||||||
|
- WIP Dimetric ("Dimetric Select" & "Dimetric Draw")
|
||||||
|
Choose a single angle for both diagonals directions; lines may
|
||||||
|
only go diagonally at those angles, or vertically.
|
||||||
|
- WIP Dimetric ("Trimetric Select" & "Trimetric Draw")
|
||||||
|
Choose an angle for two diagonals directions; lines may
|
||||||
|
only go diagonally at those angles, or vertically.
|
||||||
|
- WIP Oblique ("Oblique Select" & "Oblique Draw")
|
||||||
|
Choose an angle for a single diagonal direction; lines may
|
||||||
|
only go diagonally at that one angle, vertically, or
|
||||||
|
horizontally.
|
||||||
+ None of these tools are available when in "novice" complexity mode
|
+ None of these tools are available when in "novice" complexity mode
|
||||||
(see above).
|
(see above).
|
||||||
+ "Select" tools (to edit vanishing points) are not offered
|
+ "Select" tools (to edit vanishing points or angles) are not offered
|
||||||
when in "beginner" complexity mode.
|
when in "beginner" complexity mode. However, in "beginner" mode:
|
||||||
- Also, two "3-Point Draw" tools are provided in "beginner"
|
- Two "3-Point Draw" tools are provided, offering both 'upwards'
|
||||||
mode, to offer both 'looking up' and 'looking down' perspectives.
|
and 'downwards' perspectives.
|
||||||
|
- WIP Two "Oblqiue" tools are provided, offering recedings axes
|
||||||
|
to both the right and the left.
|
||||||
+ Code: Bill Kendrick <bill@newbreedsoftware.com>
|
+ Code: Bill Kendrick <bill@newbreedsoftware.com>
|
||||||
+ Sounds:
|
+ Sounds:
|
||||||
- Select: "Gummibandloop_121.wav"
|
- Select: "Gummibandloop_121.wav"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
/* n_pt_persp.c
|
/* n_pt_persp.c
|
||||||
|
|
||||||
1-, 2-, and 3-point perspective line-drawing tools.
|
1-, 2-, and 3-point perspective, axonometric (isometric, dimetric,
|
||||||
|
and trimetric), and oblique line-drawing tools,
|
||||||
|
|
||||||
Different complexity (expertise) levels offer different
|
Different complexity (expertise) levels offer different
|
||||||
tools. In Advanced mode, there are "Draw" and "Select"
|
tools. In Advanced mode, there are "Draw" and "Select"
|
||||||
|
|
@ -12,7 +13,7 @@
|
||||||
|
|
||||||
by Bill Kendrick <bill@newbreedsoftware.com>
|
by Bill Kendrick <bill@newbreedsoftware.com>
|
||||||
|
|
||||||
December 12, 2023 - December 30, 2023
|
December 12, 2023 - January 12, 2024
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -29,14 +30,37 @@
|
||||||
/* All _possible_ tools */
|
/* All _possible_ tools */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TOOL_1PT_SELECT, /* advanced & beginner */
|
/* 1-point perspective */
|
||||||
TOOL_1PT_DRAW, /* advanced only */
|
TOOL_1PT_SELECT, /* advanced only */
|
||||||
TOOL_2PT_SELECT, /* advanced & beginner */
|
TOOL_1PT_DRAW, /* advanced & beginner */
|
||||||
TOOL_2PT_DRAW, /* advanced only */
|
|
||||||
TOOL_3PT_SELECT, /* advanced & beginner */
|
/* 2-point perspective */
|
||||||
TOOL_3PT_DRAW, /* advanced only */
|
TOOL_2PT_SELECT, /* advanced only */
|
||||||
TOOL_3PT_SELECT_ALT, /* beginner only (not directly accessible; used for drawing guideS) */
|
TOOL_2PT_DRAW, /* advanced & beginner */
|
||||||
|
|
||||||
|
/* 3-point perspective */
|
||||||
|
TOOL_3PT_SELECT, /* advanced only */
|
||||||
|
TOOL_3PT_DRAW, /* advanced & beginner */
|
||||||
|
TOOL_3PT_SELECT_ALT, /* beginner only (not directly accessible; used for drawing guides) */
|
||||||
TOOL_3PT_DRAW_ALT, /* beginner only */
|
TOOL_3PT_DRAW_ALT, /* beginner only */
|
||||||
|
|
||||||
|
/* Isometric */
|
||||||
|
TOOL_ISO_DRAW, /* advanced & beginner (N.B. isometric defined by exact angles; no "SELECT" tool) */
|
||||||
|
|
||||||
|
/* Dimetric */
|
||||||
|
TOOL_DIM_SELECT, /* advanced only */
|
||||||
|
TOOL_DIM_DRAW, /* advanced & beginner */
|
||||||
|
|
||||||
|
/* Trimetric */
|
||||||
|
TOOL_TRI_SELECT, /* advanced only */
|
||||||
|
TOOL_TRI_DRAW, /* advanced & beginner */
|
||||||
|
|
||||||
|
/* Oblique */
|
||||||
|
TOOL_OBLQ_SELECT, /* advanced only */
|
||||||
|
TOOL_OBLQ_DRAW, /* advanced & beginner */
|
||||||
|
TOOL_OBLQ_SELECT_ALT, /* beginner only (not directly accessible; used for drawing guides) */
|
||||||
|
TOOL_OBLQ_DRAW_ALT, /* beginner only */
|
||||||
|
|
||||||
NUM_TOOLS
|
NUM_TOOLS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -44,14 +68,36 @@ enum
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
char * tool_debug_names[NUM_TOOLS] = {
|
char * tool_debug_names[NUM_TOOLS] = {
|
||||||
|
/* 1-point perspective */
|
||||||
"1pt select",
|
"1pt select",
|
||||||
"1pt draw",
|
"1pt draw",
|
||||||
|
|
||||||
|
/* 2-point perspective */
|
||||||
"2pt select",
|
"2pt select",
|
||||||
"2pt draw",
|
"2pt draw",
|
||||||
|
|
||||||
|
/* 3-point perspective */
|
||||||
"3pt select",
|
"3pt select",
|
||||||
"3pt draw",
|
"3pt draw",
|
||||||
"3pt select alt",
|
"3pt select alt",
|
||||||
"3pt draw alt",
|
"3pt draw alt",
|
||||||
|
|
||||||
|
/* Isometric */
|
||||||
|
"iso draw",
|
||||||
|
|
||||||
|
/* Dimetric */
|
||||||
|
"dim select",
|
||||||
|
"dim draw",
|
||||||
|
|
||||||
|
/* Trimetric */
|
||||||
|
"tri select",
|
||||||
|
"tri draw",
|
||||||
|
|
||||||
|
/* Oblique */
|
||||||
|
"oblq select alt",
|
||||||
|
"oblq draw alt",
|
||||||
|
"oblq select",
|
||||||
|
"oblq draw",
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -59,8 +105,8 @@ Uint8 complexity;
|
||||||
|
|
||||||
int num_tools[NUM_MAGIC_COMPLEXITY_LEVELS] = {
|
int num_tools[NUM_MAGIC_COMPLEXITY_LEVELS] = {
|
||||||
0, /* Novice */
|
0, /* Novice */
|
||||||
4, /* Beginner */
|
9, /* Beginner */
|
||||||
6, /* Advanced */
|
13, /* Advanced */
|
||||||
};
|
};
|
||||||
|
|
||||||
int * which_to_tool;
|
int * which_to_tool;
|
||||||
|
|
@ -68,12 +114,8 @@ int * which_to_tool;
|
||||||
int which_to_tool_per_complexity[NUM_MAGIC_COMPLEXITY_LEVELS][NUM_TOOLS] = {
|
int which_to_tool_per_complexity[NUM_MAGIC_COMPLEXITY_LEVELS][NUM_TOOLS] = {
|
||||||
/* Novice */
|
/* Novice */
|
||||||
{
|
{
|
||||||
-1,
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
-1,
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1,
|
-1,
|
||||||
},
|
},
|
||||||
/* Beginner */
|
/* Beginner */
|
||||||
|
|
@ -82,9 +124,12 @@ int which_to_tool_per_complexity[NUM_MAGIC_COMPLEXITY_LEVELS][NUM_TOOLS] = {
|
||||||
TOOL_2PT_DRAW,
|
TOOL_2PT_DRAW,
|
||||||
TOOL_3PT_DRAW,
|
TOOL_3PT_DRAW,
|
||||||
TOOL_3PT_DRAW_ALT,
|
TOOL_3PT_DRAW_ALT,
|
||||||
-1,
|
TOOL_ISO_DRAW,
|
||||||
-1,
|
TOOL_DIM_DRAW,
|
||||||
-1,
|
TOOL_TRI_DRAW,
|
||||||
|
TOOL_OBLQ_DRAW,
|
||||||
|
TOOL_OBLQ_DRAW_ALT,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
},
|
},
|
||||||
/* Advanced */
|
/* Advanced */
|
||||||
{
|
{
|
||||||
|
|
@ -94,43 +139,116 @@ int which_to_tool_per_complexity[NUM_MAGIC_COMPLEXITY_LEVELS][NUM_TOOLS] = {
|
||||||
TOOL_2PT_DRAW,
|
TOOL_2PT_DRAW,
|
||||||
TOOL_3PT_SELECT,
|
TOOL_3PT_SELECT,
|
||||||
TOOL_3PT_DRAW,
|
TOOL_3PT_DRAW,
|
||||||
-1,
|
TOOL_ISO_DRAW,
|
||||||
|
TOOL_DIM_SELECT,
|
||||||
|
TOOL_DIM_DRAW,
|
||||||
|
TOOL_TRI_SELECT,
|
||||||
|
TOOL_TRI_DRAW,
|
||||||
|
TOOL_OBLQ_SELECT,
|
||||||
|
TOOL_OBLQ_DRAW,
|
||||||
|
-1, -1, -1, -1,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *icon_filenames[NUM_TOOLS] = {
|
const char *icon_filenames[NUM_TOOLS] = {
|
||||||
|
/* 1-point perspective */
|
||||||
"1pt_persp_select.png",
|
"1pt_persp_select.png",
|
||||||
"1pt_persp_draw.png",
|
"1pt_persp_draw.png",
|
||||||
|
|
||||||
|
/* 2-point perspective */
|
||||||
"2pt_persp_select.png",
|
"2pt_persp_select.png",
|
||||||
"2pt_persp_draw.png",
|
"2pt_persp_draw.png",
|
||||||
|
|
||||||
|
/* 3-point perspective */
|
||||||
"3pt_persp_select.png",
|
"3pt_persp_select.png",
|
||||||
"3pt_persp_draw.png",
|
"3pt_persp_draw.png",
|
||||||
"",
|
"",
|
||||||
"3pt_persp_draw_alt.png",
|
"3pt_persp_draw_alt.png",
|
||||||
|
|
||||||
|
/* Isometric */
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
|
|
||||||
|
/* Dimetric */
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
|
|
||||||
|
/* Trimetric */
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
|
|
||||||
|
/* Oblique */
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
|
"",
|
||||||
|
"Snow_flake4.png", // FIXME
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const char *tool_names[NUM_TOOLS] = {
|
const char *tool_names[NUM_TOOLS] = {
|
||||||
|
/* 1-point perspective */
|
||||||
gettext_noop("1-Point Select"),
|
gettext_noop("1-Point Select"),
|
||||||
gettext_noop("1-Point Draw"),
|
gettext_noop("1-Point Draw"),
|
||||||
|
|
||||||
|
/* 2-point perspective */
|
||||||
gettext_noop("2-Point Select"),
|
gettext_noop("2-Point Select"),
|
||||||
gettext_noop("2-Point Draw"),
|
gettext_noop("2-Point Draw"),
|
||||||
|
|
||||||
|
/* 3-point perspective */
|
||||||
gettext_noop("3-Point Select"),
|
gettext_noop("3-Point Select"),
|
||||||
gettext_noop("3-Point Draw"),
|
gettext_noop("3-Point Draw"),
|
||||||
"",
|
"",
|
||||||
gettext_noop("3-Point Draw Down"),
|
gettext_noop("3-Point Draw Down"),
|
||||||
|
|
||||||
|
/* Isometric */
|
||||||
|
gettext_noop("Isometric Lines"),
|
||||||
|
|
||||||
|
/* Dimetric */
|
||||||
|
gettext_noop("Dimetric Select"),
|
||||||
|
gettext_noop("Dimetric Draw"),
|
||||||
|
|
||||||
|
/* Trimetric */
|
||||||
|
gettext_noop("Trimetric Select"),
|
||||||
|
gettext_noop("Trimetric Draw"),
|
||||||
|
|
||||||
|
/* Oblique */
|
||||||
|
gettext_noop("Oblique Select"),
|
||||||
|
gettext_noop("Oblique Draw"),
|
||||||
|
"",
|
||||||
|
gettext_noop("Oblique Draw Left"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const char *tool_descriptions[NUM_TOOLS] = {
|
const char *tool_descriptions[NUM_TOOLS] = {
|
||||||
|
/* 1-point perspective */
|
||||||
gettext_noop("Click in your drawing to pick a vanishing point for the 1-point perspective painting tool."),
|
gettext_noop("Click in your drawing to pick a vanishing point for the 1-point perspective painting tool."),
|
||||||
gettext_noop("Click and drag to draw lines with your 1-point perspective vanishing point."),
|
gettext_noop("Click and drag to draw lines with your 1-point perspective vanishing point."),
|
||||||
|
|
||||||
|
/* 2-point perspective */
|
||||||
gettext_noop("Click two places in your drawing to pick vanishing points for the 2-point perspective painting tool."),
|
gettext_noop("Click two places in your drawing to pick vanishing points for the 2-point perspective painting tool."),
|
||||||
gettext_noop("Click and drag to draw lines with your 2-point perspective vanishing points."),
|
gettext_noop("Click and drag to draw lines with your 2-point perspective vanishing points."),
|
||||||
|
|
||||||
|
/* 3-point perspective */
|
||||||
gettext_noop("Click three places in your drawing to pick vanishing points for the 3-point perspective painting tool."),
|
gettext_noop("Click three places in your drawing to pick vanishing points for the 3-point perspective painting tool."),
|
||||||
gettext_noop("Click and drag to draw lines with your 3-point perspective vanishing points."),
|
gettext_noop("Click and drag to draw lines with your 3-point perspective vanishing points."),
|
||||||
"",
|
"",
|
||||||
gettext_noop("Click and drag to draw lines with your 3-point perspective vanishing points (downward perspective)."),
|
gettext_noop("Click and drag to draw lines with your 3-point perspective vanishing points (downward perspective)."),
|
||||||
|
|
||||||
|
/* Isometric */
|
||||||
|
gettext_noop("Click and drag to draw lines with an isometric projection."),
|
||||||
|
|
||||||
|
/* Dimetric */
|
||||||
|
gettext_noop("Click in your drawing to adjust the angle used by the dimetric projection painting tool."),
|
||||||
|
gettext_noop("Click and drag to draw lines with dimetric projection."),
|
||||||
|
|
||||||
|
/* Trimetric */
|
||||||
|
gettext_noop("Click in your drawing to adjust the angles used by the trimetric projection painting tool."),
|
||||||
|
gettext_noop("Click and drag to draw lines with trimetric projection."),
|
||||||
|
|
||||||
|
/* Oblique */
|
||||||
|
gettext_noop("Click in your drawing to adjust the angle used by the oblique projection painting tool."),
|
||||||
|
gettext_noop("Click and drag to draw lines with oblique projection."),
|
||||||
|
"",
|
||||||
|
gettext_noop("Click and drag to draw lines with oblique projection (right-facing)."),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -344,7 +462,7 @@ char *n_pt_persp_get_name(magic_api * api ATTRIBUTE_UNUSED, int which)
|
||||||
|
|
||||||
int n_pt_persp_get_group(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
|
int n_pt_persp_get_group(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
return (MAGIC_TYPE_PAINTING);
|
return (MAGIC_TYPE_PROJECTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -183,6 +183,7 @@ enum {
|
||||||
MAGIC_TYPE_PAINTING,
|
MAGIC_TYPE_PAINTING,
|
||||||
MAGIC_TYPE_PATTERN_PAINTING,
|
MAGIC_TYPE_PATTERN_PAINTING,
|
||||||
MAGIC_TYPE_PICTURE_DECORATIONS,
|
MAGIC_TYPE_PICTURE_DECORATIONS,
|
||||||
|
MAGIC_TYPE_PROJECTIONS,
|
||||||
MAGIC_TYPE_ARTISTIC
|
MAGIC_TYPE_ARTISTIC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue