[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28877] branches/render25: Render Branch: svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r28865 :28876

Brecht Van Lommel brecht at blender.org
Thu May 20 11:38:15 CEST 2010


Revision: 28877
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28877
Author:   blendix
Date:     2010-05-20 11:38:15 +0200 (Thu, 20 May 2010)

Log Message:
-----------
Render Branch: svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r28865:28876

Modified Paths:
--------------
    branches/render25/release/scripts/ui/space_view3d.py
    branches/render25/source/blender/editors/animation/anim_channels_edit.c
    branches/render25/source/blender/editors/animation/anim_filter.c
    branches/render25/source/blender/editors/include/ED_anim_api.h
    branches/render25/source/blender/editors/space_action/action_edit.c
    branches/render25/source/blender/editors/space_action/action_select.c
    branches/render25/source/blender/editors/space_graph/graph_edit.c
    branches/render25/source/blender/editors/space_graph/graph_select.c
    branches/render25/source/blender/editors/space_graph/space_graph.c
    branches/render25/source/blender/editors/space_logic/logic_window.c
    branches/render25/source/blender/editors/space_view3d/drawobject.c
    branches/render25/source/blender/makesrna/intern/rna_curve.c
    branches/render25/source/blender/makesrna/intern/rna_fcurve.c
    branches/render25/source/blender/makesrna/intern/rna_image.c
    branches/render25/source/blender/makesrna/intern/rna_material.c
    branches/render25/source/blender/makesrna/intern/rna_scene.c
    branches/render25/source/blender/makesrna/intern/rna_space.c
    branches/render25/source/blender/makesrna/intern/rna_texture.c

Added Paths:
-----------
    branches/render25/release/scripts/templates/operator_modal_view3d.py

Copied: branches/render25/release/scripts/templates/operator_modal_view3d.py (from rev 28876, trunk/blender/release/scripts/templates/operator_modal_view3d.py)
===================================================================
--- branches/render25/release/scripts/templates/operator_modal_view3d.py	                        (rev 0)
+++ branches/render25/release/scripts/templates/operator_modal_view3d.py	2010-05-20 09:38:15 UTC (rev 28877)
@@ -0,0 +1,56 @@
+from mathutils import Vector
+from bpy.props import FloatVectorProperty
+
+class ViewOperator(bpy.types.Operator):
+    '''Translate the view using mouse events.'''
+    bl_idname = "view3d.modal_operator"
+    bl_label = "Simple View Operator"
+
+    offset = FloatVectorProperty(name="Offset", size=3)
+
+
+    def execute(self, context):
+        v3d = context.area.spaces[0]
+        rv3d = v3d.region_3d
+
+        rv3d.view_location = self._initial_location + Vector(self.properties.offset)
+
+    def modal(self, context, event):
+        v3d = context.area.spaces[0]
+        rv3d = v3d.region_3d
+
+        if event.type == 'MOUSEMOVE':
+            self.properties.offset = (self._initial_mouse - Vector((event.mouse_x, event.mouse_y, 0.0))) * 0.02
+            self.execute(context)
+
+        elif event.type == 'LEFTMOUSE':
+            return {'FINISHED'}
+
+        elif event.type in ('RIGHTMOUSE', 'ESC'):
+            rv3d.view_location = self._initial_location
+            return {'CANCELLED'}
+
+        return {'RUNNING_MODAL'}
+
+    def invoke(self, context, event):
+        active_space = context.area.spaces[0]
+
+        if active_space.type == 'VIEW_3D':
+            v3d = active_space
+            rv3d = v3d.region_3d
+
+            context.manager.add_modal_handler(self)
+
+            if rv3d.view_perspective == 'CAMERA':
+                rv3d.view_perspective = 'PERSP'
+
+            self._initial_mouse = Vector((event.mouse_x, event.mouse_y, 0.0))
+            self._initial_location = rv3d.view_location.copy()
+
+            return {'RUNNING_MODAL'}
+        else:
+            self.report({'WARNING'}, "Active space must be a View3d")
+            return {'CANCELLED'}
+
+
+bpy.types.register(ViewOperator)

Modified: branches/render25/release/scripts/ui/space_view3d.py
===================================================================
--- branches/render25/release/scripts/ui/space_view3d.py	2010-05-20 09:17:49 UTC (rev 28876)
+++ branches/render25/release/scripts/ui/space_view3d.py	2010-05-20 09:38:15 UTC (rev 28877)
@@ -32,14 +32,13 @@
         obj = context.active_object
         toolsettings = context.tool_settings
 
-        row = layout.row()
+        row = layout.row(align=True)
         row.template_header()
 
-        sub = row.row(align=True)
-
         # Menus
         if context.area.show_menus:
-
+            sub = row.row(align=True)
+			
             sub.menu("VIEW3D_MT_view")
 
             # Select Menu
@@ -54,6 +53,7 @@
             else:
                 sub.menu("VIEW3D_MT_object")
 
+        row = layout.row()
         row.template_header_3D()
 
         # do in C for now since these buttons cant be both toggle AND exclusive.

Modified: branches/render25/source/blender/editors/animation/anim_channels_edit.c
===================================================================
--- branches/render25/source/blender/editors/animation/anim_channels_edit.c	2010-05-20 09:17:49 UTC (rev 28876)
+++ branches/render25/source/blender/editors/animation/anim_channels_edit.c	2010-05-20 09:38:15 UTC (rev 28877)
@@ -939,7 +939,7 @@
 	/* do groups only first (unless in Drivers mode, where there are none) */
 	if (ac.datatype != ANIMCONT_DRIVERS) {
 		/* filter data */
-		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CHANNELS | ANIMFILTER_FOREDIT);
+		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CHANNELS | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);
 		ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
 		
 		/* delete selected groups and their associated channels */
@@ -978,7 +978,7 @@
 	/* now do F-Curves */
 	if (ac.datatype != ANIMCONT_GPENCIL) {
 		/* filter data */
-		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT);
+		filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);
 		ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
 		
 		/* delete selected F-Curves */
@@ -1038,7 +1038,7 @@
 	ANIM_animdata_filter(&ac, &all_data, filter, ac.data, ac.datatype);
 	
 	/* hide all channels not selected */
-	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_UNSEL);
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_UNSEL | ANIMFILTER_NODUPLIS);
 	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
 	
 	for (ale= anim_data.first; ale; ale= ale->next) {
@@ -1054,7 +1054,7 @@
 	BLI_freelistN(&anim_data);
 	
 	/* make all the selected channels visible */
-	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL);
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS);
 	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
 	
 	for (ale= anim_data.first; ale; ale= ale->next) {
@@ -1113,11 +1113,11 @@
 		return OPERATOR_CANCELLED;
 		
 	/* get list of all channels that selection may need to be flushed to */
-	filter= ANIMFILTER_CHANNELS;
+	filter= (ANIMFILTER_CHANNELS | ANIMFILTER_NODUPLIS);
 	ANIM_animdata_filter(&ac, &all_data, filter, ac.data, ac.datatype);
 		
 	/* filter data */
-	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL);
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS);
 	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
 	
 	/* See if we should be making showing all selected or hiding */
@@ -1215,7 +1215,8 @@
 	}
 	
 	/* filter data that we're working on */
-	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS);
+	// XXX: noduplis enabled so that results don't cancel, but will be problematic for some channels where only type differs
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS | ANIMFILTER_NODUPLIS);
 	if (onlysel) filter |= ANIMFILTER_SEL;
 	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
 	

Modified: branches/render25/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/render25/source/blender/editors/animation/anim_filter.c	2010-05-20 09:17:49 UTC (rev 28876)
+++ branches/render25/source/blender/editors/animation/anim_filter.c	2010-05-20 09:38:15 UTC (rev 28877)
@@ -68,6 +68,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_blenlib.h"
+#include "BLI_ghash.h"
 
 #include "BKE_animsys.h"
 #include "BKE_action.h"
@@ -2512,6 +2513,65 @@
 	return 1;
 }  
 
+/* ----------- Cleanup API --------------- */
+
+/* Remove entries with invalid types in animation channel list */
+static int animdata_filter_remove_invalid (ListBase *anim_data)
+{
+	bAnimListElem *ale, *next;
+	int items = 0;
+	
+	/* only keep entries with valid types */
+	for (ale= anim_data->first; ale; ale= next) {
+		next= ale->next;
+		
+		if (ale->type == ANIMTYPE_NONE)
+			BLI_freelinkN(anim_data, ale);
+		else
+			items++;
+	}
+	
+	return items;
+}
+
+/* Remove duplicate entries in animation channel list */
+static int animdata_filter_remove_duplis (ListBase *anim_data)
+{
+	bAnimListElem *ale, *next;
+	GHash *gh;
+	int items = 0;
+	
+	/* build new hashtable to efficiently store and retrieve which entries have been 
+	 * encountered already while searching
+	 */
+	gh= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "animdata_filter_duplis_remove gh");
+	
+	/* loop through items, removing them from the list if a similar item occurs already */
+	for (ale = anim_data->first; ale; ale = next) {
+		next = ale->next;
+		
+		/* check if hash has any record of an entry like this 
+		 *	- just use ale->data for now, though it would be nicer to involve 
+		 *	  ale->type in combination too to capture corner cases (where same data performs differently)
+		 */
+		if (BLI_ghash_haskey(gh, ale->data) == 0) {
+			/* this entry is 'unique' and can be kept */
+			BLI_ghash_insert(gh, ale->data, NULL);
+			items++;
+		}
+		else {
+			/* this entry isn't needed anymore */
+			BLI_freelinkN(anim_data, ale);
+		}
+	}
+	
+	/* free the hash... */
+	BLI_ghash_free(gh, NULL, NULL);
+	
+	/* return the number of items still in the list */
+	return items;
+}
+
 /* ----------- Public API --------------- */
 
 /* This function filters the active data source to leave only animation channels suitable for
@@ -2527,7 +2587,6 @@
 	
 	/* only filter data if there's somewhere to put it */
 	if (data && anim_data) {
-		bAnimListElem *ale, *next;
 		Object *obact= (ac) ? ac->obact : NULL;
 		
 		/* firstly filter the data */
@@ -2572,16 +2631,12 @@
 				break;
 		}
 			
-		/* remove any weedy entries */
-		// XXX this is weedy code!
-		for (ale= anim_data->first; ale; ale= next) {
-			next= ale->next;
-			
-			if (ale->type == ANIMTYPE_NONE) {
-				items--;
-				BLI_freelinkN(anim_data, ale);
-			}
-		}
+		/* remove any 'weedy' entries */
+		items = animdata_filter_remove_invalid(anim_data);
+		
+		/* remove duplicates (if required) */
+		if (filter_mode & ANIMFILTER_NODUPLIS)
+			items = animdata_filter_remove_duplis(anim_data);
 	}
 	
 	/* return the number of items in the list */

Modified: branches/render25/source/blender/editors/include/ED_anim_api.h
===================================================================
--- branches/render25/source/blender/editors/include/ED_anim_api.h	2010-05-20 09:17:49 UTC (rev 28876)
+++ branches/render25/source/blender/editors/include/ED_anim_api.h	2010-05-20 09:38:15 UTC (rev 28877)
@@ -192,6 +192,7 @@
 	ANIMFILTER_ANIMDATA		= (1<<9),	/* only return the underlying AnimData blocks (not the tracks, etc.) data comes from */
 	ANIMFILTER_NLATRACKS	= (1<<10),	/* only include NLA-tracks */
 	ANIMFILTER_SELEDIT		= (1<<11),	/* link editability with selected status */
+	ANIMFILTER_NODUPLIS		= (1<<12),	/* duplicate entries for animation data attached to multi-user blocks must not occur */
 	
 	/* all filters - the power inside the bracket must be the last power for left-shifts + 1 */
 	ANIMFILTER_ALLFILTERS	= ((1<<12) - 1)

Modified: branches/render25/source/blender/editors/space_action/action_edit.c
===================================================================
--- branches/render25/source/blender/editors/space_action/action_edit.c	2010-05-20 09:17:49 UTC (rev 28876)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list