[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27139] trunk/blender: select parent/ child in object mode with [] keys, like pose mode.
Campbell Barton
ideasman42 at gmail.com
Thu Feb 25 16:41:47 CET 2010
Revision: 27139
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27139
Author: campbellbarton
Date: 2010-02-25 16:41:46 +0100 (Thu, 25 Feb 2010)
Log Message:
-----------
select parent/child in object mode with [] keys, like pose mode.
also needed to extend the RNA api to allow C to set enums without meaningful values.
Modified Paths:
--------------
trunk/blender/release/scripts/op/object.py
trunk/blender/source/blender/editors/object/object_ops.c
trunk/blender/source/blender/makesrna/RNA_access.h
trunk/blender/source/blender/makesrna/intern/rna_access.c
Modified: trunk/blender/release/scripts/op/object.py
===================================================================
--- trunk/blender/release/scripts/op/object.py 2010-02-25 15:26:49 UTC (rev 27138)
+++ trunk/blender/release/scripts/op/object.py 2010-02-25 15:41:46 UTC (rev 27139)
@@ -96,6 +96,48 @@
return {'FINISHED'}
+class SelectHierarchy(bpy.types.Operator):
+ '''Select object relative to the active objects position in the hierarchy'''
+ bl_idname = "object.select_hierarchy"
+ bl_label = "Select Hierarchy"
+ bl_register = True
+ bl_undo = True
+
+ direction = EnumProperty(items=(
+ ('PARENT', "Parent", ""),
+ ('CHILD', "Child", "")),
+ name="Direction",
+ description="Direction to select in the hierarchy",
+ default='PARENT')
+
+ extend = BoolProperty(name="Extend", description="Extend the existing selection", default=False)
+
+ def poll(self, context):
+ return context.object
+
+ def execute(self, context):
+ obj = context.object
+ if self.properties.direction == 'PARENT':
+ parent = obj.parent
+ if not parent:
+ return {'CANCELLED'}
+ obj_act = parent
+ else:
+ children = obj.children
+ if len(children) != 1:
+ return {'CANCELLED'}
+ obj_act = children[0]
+
+ if not self.properties.extend:
+ # obj.selected = False
+ bpy.ops.object.select_all(action='DESELECT')
+
+ obj_act.selected = True
+ context.scene.objects.active = obj_act
+
+ return {'FINISHED'}
+
+
class SubdivisionSet(bpy.types.Operator):
'''Sets a Subdivision Surface Level (1-5)'''
@@ -471,6 +513,7 @@
classes = [
SelectPattern,
SelectCamera,
+ SelectHierarchy,
SubdivisionSet,
ShapeTransfer,
JoinUVs,
Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c 2010-02-25 15:26:49 UTC (rev 27138)
+++ trunk/blender/source/blender/editors/object/object_ops.c 2010-02-25 15:41:46 UTC (rev 27139)
@@ -289,6 +289,18 @@
WM_keymap_add_item(keymap, "OBJECT_OT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_select_mirror", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set_identifier(kmi->ptr, "direction", "PARENT");
+ kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set_identifier(kmi->ptr, "direction", "PARENT");
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+
+ kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set_identifier(kmi->ptr, "direction", "CHILD");
+ kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set_identifier(kmi->ptr, "direction", "CHILD");
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+
WM_keymap_verify_item(keymap, "OBJECT_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_verify_item(keymap, "OBJECT_OT_parent_no_inverse_set", PKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
WM_keymap_verify_item(keymap, "OBJECT_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0);
Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h 2010-02-25 15:26:49 UTC (rev 27138)
+++ trunk/blender/source/blender/makesrna/RNA_access.h 2010-02-25 15:41:46 UTC (rev 27139)
@@ -809,6 +809,7 @@
int RNA_enum_get(PointerRNA *ptr, const char *name);
void RNA_enum_set(PointerRNA *ptr, const char *name, int value);
+void RNA_enum_set_identifier(PointerRNA *ptr, const char *name, const char *id);
int RNA_enum_is_equal(struct bContext *C, PointerRNA *ptr, const char *name, const char *enumname);
/* lower level functions that donr use a PointerRNA */
Modified: trunk/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_access.c 2010-02-25 15:26:49 UTC (rev 27138)
+++ trunk/blender/source/blender/makesrna/intern/rna_access.c 2010-02-25 15:41:46 UTC (rev 27139)
@@ -3295,6 +3295,20 @@
printf("RNA_enum_set: %s.%s not found.\n", ptr->type->identifier, name);
}
+void RNA_enum_set_identifier(PointerRNA *ptr, const char *name, const char *id)
+{
+ PropertyRNA *prop= RNA_struct_find_property(ptr, name);
+
+ if(prop) {
+ int value;
+ if(RNA_property_enum_value(NULL, ptr, prop, id, &value))
+ RNA_property_enum_set(ptr, prop, value);
+ else
+ printf("RNA_enum_set_identifier: %s.%s has no enum id '%s'.\n", ptr->type->identifier, name, id);
+ } else
+ printf("RNA_enum_set_identifier: %s.%s not found.\n", ptr->type->identifier, name);
+}
+
int RNA_enum_is_equal(bContext *C, PointerRNA *ptr, const char *name, const char *enumname)
{
PropertyRNA *prop= RNA_struct_find_property(ptr, name);
More information about the Bf-blender-cvs
mailing list