2011-02-21 07:25:24 +00:00
|
|
|
/*
|
2009-01-14 16:13:50 +00:00
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2009-01-14 16:13:50 +00:00
|
|
|
*
|
|
|
|
|
* The Original Code is Copyright (C) 2008, Blender Foundation
|
|
|
|
|
* This is a new part of Blender
|
|
|
|
|
*
|
|
|
|
|
* Contributor(s): Joshua Leung
|
|
|
|
|
*
|
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
|
*/
|
|
|
|
|
|
2011-02-21 07:25:24 +00:00
|
|
|
/** \file ED_gpencil.h
|
|
|
|
|
* \ingroup editors
|
|
|
|
|
*/
|
|
|
|
|
|
2012-02-17 18:59:41 +00:00
|
|
|
#ifndef __ED_GPENCIL_H__
|
|
|
|
|
#define __ED_GPENCIL_H__
|
2009-01-14 16:13:50 +00:00
|
|
|
|
|
|
|
|
struct ListBase;
|
2011-01-10 22:10:28 +00:00
|
|
|
struct bContext;
|
2009-01-14 16:13:50 +00:00
|
|
|
struct bScreen;
|
|
|
|
|
struct ScrArea;
|
|
|
|
|
struct ARegion;
|
|
|
|
|
struct View3D;
|
|
|
|
|
struct SpaceNode;
|
|
|
|
|
struct SpaceSeq;
|
|
|
|
|
struct bGPdata;
|
|
|
|
|
struct bGPDlayer;
|
|
|
|
|
struct bGPDframe;
|
2009-08-28 12:41:45 +00:00
|
|
|
struct PointerRNA;
|
2009-08-29 06:50:32 +00:00
|
|
|
struct Panel;
|
2009-01-14 16:13:50 +00:00
|
|
|
struct ImBuf;
|
Key Configuration
Keymaps are now saveable and configurable from the user preferences, note
that editing one item in a keymap means the whole keymap is now defined by
the user and will not be updated by Blender, an option for syncing might be
added later. The outliner interface is still there, but I will probably
remove it.
There's actually 3 levels now:
* Default builtin key configuration.
* Key configuration loaded from .py file, for configs like Blender 2.4x
or other 3D applications.
* Keymaps edited by the user and saved in .B.blend. These can be saved
to .py files as well to make creating distributable configurations
easier.
Also, user preferences sections were reorganized a bit, now there is:
Interface, Editing, Input, Files and System.
Implementation notes:
* wmKeyConfig was added which represents a key configuration containing
keymaps.
* wmKeymapItem was renamed to wmKeyMapItem for consistency with wmKeyMap.
* Modal maps are not wrapped yet.
* User preferences DNA file reading did not support newdataadr() yet,
added this now for reading keymaps.
* Key configuration related settings are now RNA wrapped.
* is_property_set and is_property_hidden python methods were added.
2009-10-08 18:40:03 +00:00
|
|
|
struct wmKeyConfig;
|
2009-01-14 16:13:50 +00:00
|
|
|
|
|
|
|
|
|
2009-08-28 12:41:45 +00:00
|
|
|
/* ------------- Grease-Pencil Helpers ---------------- */
|
2009-01-14 16:13:50 +00:00
|
|
|
|
2009-08-28 12:41:45 +00:00
|
|
|
/* Temporary 'Stroke Point' data
|
|
|
|
|
*
|
|
|
|
|
* Used as part of the 'stroke cache' used during drawing of new strokes
|
|
|
|
|
*/
|
2009-01-14 16:13:50 +00:00
|
|
|
typedef struct tGPspoint {
|
2012-05-12 20:39:39 +00:00
|
|
|
int x, y; /* x and y coordinates of cursor (in relative to area) */
|
|
|
|
|
float pressure; /* pressure of tablet at this point */
|
2009-01-14 16:13:50 +00:00
|
|
|
} tGPspoint;
|
|
|
|
|
|
Grease Pencil Todos: "Sketching Sessions"
Due to popular request and usability considerations, this commit
reintroduces functionality similar to 2.4's "Draw Mode" for Grease
Pencil.
In the toolbar under the Draw/Line/Eraser buttons, you can find the
"Use Sketching Sessions" toggle, which enables this feature. This is a
per-scene setting, and defaults to off, so that the current 2.5
behaviour is still the default (i.e. the Grease Pencil operator will
only do a single stroke at a time).
With this option enabled, drawing with Grease Pencil will enter a
semi-modal state where you can draw multiple strokes without needing
to keep holding the DKEY throughout (though you'll still need to do so
to start the strokes, unless you use some toolbar buttons), while
still being able to manipulate the viewport. Header help-text prints
show the appropriate keybindings (i.e. press ESCKEY or ENTER to end
the sketching session).
Notes:
- To aid maintainability of the 3D-View toolbar code, I've taken the
liberty to factor out the groups of widgets which commonly occur in
most of the toolbars into separate functions (namely "Repeat" and
"Grease Pencil"). Perhaps it might make it slightly harder to newbies
to the toolbar code to grasp, though the physics panels are far worse
;)
- I've reshuffled some code in the Grease Pencil code to separate out
the various states of operation again more clearly, though some more
work is still needed there (TODO)
- There can now be only one Grease Pencil operator running at a time
- Redoing Grease Pencil operations where sketching sessions was
enabled still needs work. Namely, a way of delimiting the set of
points recorded into strokes is still needed (TODO)
- Ultimately, it should be possible to switch tools midway through a
session. Currently sessions are limited to only being able to be used
with a single drawing mode (TODO)
- After ending a drawing session, the titlebar contols may not work on
Windows without manually making the main window lose focus and then
regain (i.e. click on some other window in toolbar, then come back).
This may be related to (bug #25480)
2011-01-04 03:14:01 +00:00
|
|
|
|
|
|
|
|
/* Check if 'sketching sessions' are enabled */
|
|
|
|
|
#define GPENCIL_SKETCH_SESSIONS_ON(scene) ((scene)->toolsettings->gpencil_flags & GP_TOOL_FLAG_PAINTSESSIONS_ON)
|
|
|
|
|
|
2009-08-28 12:41:45 +00:00
|
|
|
/* ----------- Grease Pencil Tools/Context ------------- */
|
2009-08-26 12:01:15 +00:00
|
|
|
|
2009-08-28 12:41:45 +00:00
|
|
|
struct bGPdata **gpencil_data_get_pointers(struct bContext *C, struct PointerRNA *ptr);
|
|
|
|
|
struct bGPdata *gpencil_data_get_active(struct bContext *C);
|
2009-11-09 08:03:43 +00:00
|
|
|
struct bGPdata *gpencil_data_get_active_v3d(struct Scene *scene); /* for offscreen rendering */
|
2009-08-26 12:01:15 +00:00
|
|
|
|
2009-08-28 12:41:45 +00:00
|
|
|
/* ----------- Grease Pencil Operators ----------------- */
|
2009-08-26 12:01:15 +00:00
|
|
|
|
Key Configuration
Keymaps are now saveable and configurable from the user preferences, note
that editing one item in a keymap means the whole keymap is now defined by
the user and will not be updated by Blender, an option for syncing might be
added later. The outliner interface is still there, but I will probably
remove it.
There's actually 3 levels now:
* Default builtin key configuration.
* Key configuration loaded from .py file, for configs like Blender 2.4x
or other 3D applications.
* Keymaps edited by the user and saved in .B.blend. These can be saved
to .py files as well to make creating distributable configurations
easier.
Also, user preferences sections were reorganized a bit, now there is:
Interface, Editing, Input, Files and System.
Implementation notes:
* wmKeyConfig was added which represents a key configuration containing
keymaps.
* wmKeymapItem was renamed to wmKeyMapItem for consistency with wmKeyMap.
* Modal maps are not wrapped yet.
* User preferences DNA file reading did not support newdataadr() yet,
added this now for reading keymaps.
* Key configuration related settings are now RNA wrapped.
* is_property_set and is_property_hidden python methods were added.
2009-10-08 18:40:03 +00:00
|
|
|
void ED_keymap_gpencil(struct wmKeyConfig *keyconf);
|
2009-08-26 12:01:15 +00:00
|
|
|
void ED_operatortypes_gpencil(void);
|
|
|
|
|
|
2.5
Patch from Joshua, converting Grease Pencil to 2.5.
All GP data now is an ID block, allowing re-use, link and append.
For better contextual control within 2.5, these GP ID's will get
linked to actual data, like NodeTrees, Scenes, Images or Objects.
That will ensure Undo works, and opens up exciting new use cases
as well. :)
Patch note: on reading files, GPencils linked from editors will
get moved to the main library, using standard naming (indicating
where it was used), and with "Fake User" set. That way the user
can manually relink the pencils where appropriate.
We can check on just linking GP to some default, like 3d window
pencils to Scene? Nice to experiment with.
Notes for Joshua:
- for reading old GPencil, it has to use old code as well, meaning
to tread data as "indirect data, within another ID".
- Saving ID data means the chunk in file BHead needs the ID_GD code,
and not "DATA", which indicates 'indirect data'. That's the file
format spec.
- I've added do_versions_gpencil_2_50(), feel free to further tweak
things here, like linking things to scene or so.
- Formerly GPencil saved 2.50 files won't convert gpencil
2009-04-20 10:13:55 +00:00
|
|
|
/* ------------ Grease-Pencil Drawing API ------------------ */
|
2009-01-14 16:13:50 +00:00
|
|
|
/* drawgpencil.c */
|
|
|
|
|
|
2012-06-07 17:57:49 +00:00
|
|
|
void draw_gpencil_2dimage(struct bContext *C /* , struct ImBuf *ibuf */);
|
2010-04-28 07:25:39 +00:00
|
|
|
void draw_gpencil_view2d(struct bContext *C, short onlyv2d);
|
2011-10-23 13:00:41 +00:00
|
|
|
void draw_gpencil_view3d(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, short only3d);
|
2009-01-14 16:13:50 +00:00
|
|
|
|
2009-08-29 06:50:32 +00:00
|
|
|
void gpencil_panel_standard(const struct bContext *C, struct Panel *pa);
|
|
|
|
|
|
2011-01-10 22:10:28 +00:00
|
|
|
/* ----------- Grease-Pencil AnimEdit API ------------------ */
|
2012-06-08 14:31:38 +00:00
|
|
|
short gplayer_frames_looper(struct bGPDlayer *gpl, struct Scene *scene,
|
|
|
|
|
short (*gpf_cb)(struct bGPDframe *, struct Scene *));
|
2011-01-10 22:10:28 +00:00
|
|
|
void gplayer_make_cfra_list(struct bGPDlayer *gpl, ListBase *elems, short onlysel);
|
|
|
|
|
|
|
|
|
|
short is_gplayer_frame_selected(struct bGPDlayer *gpl);
|
|
|
|
|
void set_gplayer_frame_selection(struct bGPDlayer *gpl, short mode);
|
|
|
|
|
void select_gpencil_frames(struct bGPDlayer *gpl, short select_mode);
|
|
|
|
|
void select_gpencil_frame(struct bGPDlayer *gpl, int selx, short select_mode);
|
|
|
|
|
void borderselect_gplayer_frames(struct bGPDlayer *gpl, float min, float max, short select_mode);
|
|
|
|
|
|
|
|
|
|
void delete_gplayer_frames(struct bGPDlayer *gpl);
|
2012-06-08 14:46:17 +00:00
|
|
|
void duplicate_gplayer_frames(struct bGPDlayer *gpl);
|
2011-01-10 22:10:28 +00:00
|
|
|
|
|
|
|
|
void free_gpcopybuf(void);
|
|
|
|
|
void copy_gpdata(void);
|
|
|
|
|
void paste_gpdata(void);
|
|
|
|
|
|
|
|
|
|
void snap_gplayer_frames(struct bGPDlayer *gpl, short mode);
|
|
|
|
|
void mirror_gplayer_frames(struct bGPDlayer *gpl, short mode);
|
2009-01-14 16:13:50 +00:00
|
|
|
|
2011-09-06 07:59:18 +00:00
|
|
|
/* ------------ Grease-Pencil Undo System ------------------ */
|
|
|
|
|
int ED_gpencil_session_active(void);
|
|
|
|
|
int ED_undo_gpencil_step(struct bContext *C, int step, const char *name);
|
|
|
|
|
|
2012-02-17 18:59:41 +00:00
|
|
|
#endif /* __ED_GPENCIL_H__ */
|