[Bf-blender-cvs] [cd540f3] GPencil_EditStrokes: Grease Pencil Drawing: Default to storing on the scene when painting in 3D View

Joshua Leung noreply at git.blender.org
Sun Oct 12 14:40:24 CEST 2014


Commit: cd540f393756b9261ba8b1b435e8316a41692a20
Author: Joshua Leung
Date:   Mon Oct 13 01:22:26 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rBcd540f393756b9261ba8b1b435e8316a41692a20

Grease Pencil Drawing: Default to storing on the scene when painting in 3D View

Grease Pencil will now draw on scene-level when drawing in the 3D view,
unless the active object has grease pencil data assigned (i.e. for files
saved in old versions).

The per-object method proved to be far too messy and confusing in practice,
as it was often all too easy to forget which object you had painted with.

While at present, the place where it stores strokes isn't able to be configured
from the UI yet, simply hooking up a Grease Pencil datablock into an Object's
Grease Pencil data slot should work (some tweaks are coming in the following commit
to add support for this)

===================================================================

M	source/blender/editors/gpencil/gpencil_edit.c

===================================================================

diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index 8811fc4..8fcfd47 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -100,14 +100,31 @@ bGPdata **ED_gpencil_data_get_pointers_direct(ID *screen_id, Scene *scene, ScrAr
 		switch (sa->spacetype) {
 			case SPACE_VIEW3D: /* 3D-View */
 			{
-				/* TODO: we can include other data-types such as bones later if need be... */
-
-				/* just in case no active/selected object */
-				if (ob && (ob->flag & SELECT)) {
-					/* for now, as long as there's an object, default to using that in 3D-View */
+				/* default to using scene's data, unless it doesn't exist (and object's does instead) */
+				/* XXX: this will require a toggle switch later to be more predictable */
+				bool scene_ok = (scene != NULL);
+				bool ob_ok    = ((ob) && (ob->flag & SELECT) && (ob->gpd));
+				
+				if (ob_ok || !scene_ok) {
+					/* Object Case (not good for users):
+					 * - For existing files with object-level already, 
+					 *   or where user has explicitly assigned to object,
+					 *   we can use the object as the host...
+					 *
+					 * - If there is no scene data provided (rare/impossible)
+					 *   we will also be forced to use the object
+					 */
 					if (ptr) RNA_id_pointer_create((ID *)ob, ptr);
 					return &ob->gpd;
 				}
+				else {
+					/* Scene Case (default):
+					 * This is the new (as of 2014-Oct-13, for 2.73) default setting
+					 * which should work better for most users.
+					 */
+					if (ptr) RNA_id_pointer_create((ID *)scene, ptr);
+					return &scene->gpd;
+				}
 				break;
 			}
 			case SPACE_NODE: /* Nodes Editor */




More information about the Bf-blender-cvs mailing list