[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28565] branches/render25: adding up/ down buttons for moving vgroups in the stack
Joseph Eagar
joeedh at gmail.com
Tue May 4 10:59:32 CEST 2010
Revision: 28565
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28565
Author: joeedh
Date: 2010-05-04 10:59:32 +0200 (Tue, 04 May 2010)
Log Message:
-----------
adding up/down buttons for moving vgroups in the stack
Modified Paths:
--------------
branches/render25/release/scripts/ui/properties_data_mesh.py
branches/render25/source/blender/editors/object/object_intern.h
branches/render25/source/blender/editors/object/object_ops.c
branches/render25/source/blender/editors/object/object_vgroup.c
branches/render25/source/blender/editors/space_view3d/drawobject.c
branches/render25/source/blender/makesdna/DNA_object_types.h
Modified: branches/render25/release/scripts/ui/properties_data_mesh.py
===================================================================
--- branches/render25/release/scripts/ui/properties_data_mesh.py 2010-05-04 07:34:46 UTC (rev 28564)
+++ branches/render25/release/scripts/ui/properties_data_mesh.py 2010-05-04 08:59:32 UTC (rev 28565)
@@ -155,6 +155,9 @@
col.operator("object.vertex_group_add", icon='ZOOMIN', text="")
col.operator("object.vertex_group_remove", icon='ZOOMOUT', text="")
col.menu("MESH_MT_vertex_group_specials", icon='DOWNARROW_HLT', text="")
+ if group:
+ col.operator("object.vertex_group_move", icon='TRIA_UP', text="").direction = 'UP'
+ col.operator("object.vertex_group_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
if group:
row = layout.row()
Modified: branches/render25/source/blender/editors/object/object_intern.h
===================================================================
--- branches/render25/source/blender/editors/object/object_intern.h 2010-05-04 07:34:46 UTC (rev 28564)
+++ branches/render25/source/blender/editors/object/object_intern.h 2010-05-04 08:59:32 UTC (rev 28565)
@@ -196,6 +196,7 @@
void OBJECT_OT_vertex_group_mirror(struct wmOperatorType *ot);
void OBJECT_OT_vertex_group_set_active(struct wmOperatorType *ot);
void OBJECT_OT_vertex_group_sort(struct wmOperatorType *ot);
+void OBJECT_OT_vertex_group_move(struct wmOperatorType *ot);
void OBJECT_OT_game_property_new(struct wmOperatorType *ot);
void OBJECT_OT_game_property_remove(struct wmOperatorType *ot);
Modified: branches/render25/source/blender/editors/object/object_ops.c
===================================================================
--- branches/render25/source/blender/editors/object/object_ops.c 2010-05-04 07:34:46 UTC (rev 28564)
+++ branches/render25/source/blender/editors/object/object_ops.c 2010-05-04 08:59:32 UTC (rev 28565)
@@ -176,6 +176,7 @@
WM_operatortype_append(OBJECT_OT_vertex_group_mirror);
WM_operatortype_append(OBJECT_OT_vertex_group_set_active);
WM_operatortype_append(OBJECT_OT_vertex_group_sort);
+ WM_operatortype_append(OBJECT_OT_vertex_group_move);
WM_operatortype_append(OBJECT_OT_game_property_new);
WM_operatortype_append(OBJECT_OT_game_property_remove);
Modified: branches/render25/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/render25/source/blender/editors/object/object_vgroup.c 2010-05-04 07:34:46 UTC (rev 28564)
+++ branches/render25/source/blender/editors/object/object_vgroup.c 2010-05-04 08:59:32 UTC (rev 28565)
@@ -1920,41 +1920,38 @@
ot->prop= prop;
}
-static int vgroup_sort(void *def_a_ptr, void *def_b_ptr)
+/*creates the name_array parameter for vgroup_do_remap, call this before fiddling
+ with the order of vgroups then call vgroup_do_remap after*/
+static char *vgroup_init_remap(Object *ob)
{
- bDeformGroup *def_a= (bDeformGroup *)def_a_ptr;
- bDeformGroup *def_b= (bDeformGroup *)def_b_ptr;
+ bDeformGroup *def;
+ int def_tot = BLI_countlist(&ob->defbase);
+ char *name_array= MEM_mallocN(MAX_VGROUP_NAME * sizeof(char) * def_tot, "sort vgroups");
+ char *name;
- return strcmp(def_a->name, def_b->name);
+ name= name_array;
+ for(def = ob->defbase.first; def; def=def->next) {
+ BLI_strncpy(name, def->name, MAX_VGROUP_NAME);
+ name += MAX_VGROUP_NAME;
+ }
+
+ return name_array;
}
-#define DEF_GROUP_SIZE (sizeof(((bDeformGroup *)NULL)->name))
-static int vertex_group_sort_exec(bContext *C, wmOperator *op)
+static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op)
{
- Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+ MDeformVert *dvert= NULL;
bDeformGroup *def;
int def_tot = BLI_countlist(&ob->defbase);
+ int *sort_map_update= MEM_mallocN(MAX_VGROUP_NAME * sizeof(int) * def_tot + 1, "sort vgroups"); /* needs a dummy index at the start*/
+ int *sort_map= sort_map_update + 1;
char *name;
- char *name_array= MEM_mallocN(DEF_GROUP_SIZE * sizeof(char) * def_tot, "sort vgroups");
- int *sort_map_update= MEM_mallocN(DEF_GROUP_SIZE * sizeof(int) * def_tot + 1, "sort vgroups"); /* needs a dummy index at the start*/
- int *sort_map= sort_map_update + 1;
int i;
- MDeformVert *dvert= NULL;
- int dvert_tot;
-
name= name_array;
- for(def = ob->defbase.first; def; def=def->next){
- BLI_strncpy(name, def->name, DEF_GROUP_SIZE);
- name += DEF_GROUP_SIZE;
- }
-
- BLI_sortlist(&ob->defbase, vgroup_sort);
-
- name= name_array;
for(def= ob->defbase.first, i=0; def; def=def->next, i++){
sort_map[i]= BLI_findstringindex(&ob->defbase, name, offsetof(bDeformGroup, name));
- name += DEF_GROUP_SIZE;
+ name += MAX_VGROUP_NAME;
}
if(ob->mode == OB_MODE_EDIT) {
@@ -1975,8 +1972,12 @@
}
}
else {
+ int dvert_tot=0;
+
ED_vgroup_give_array(ob->data, &dvert, &dvert_tot);
- while(dvert_tot--) {
+
+ /*create as necassary*/
+ while(dvert && dvert_tot--) {
if(dvert->totweight)
defvert_remap(dvert, sort_map);
dvert++;
@@ -1988,22 +1989,46 @@
sort_map[i]++;
sort_map_update[0]= 0;
-
vgroup_remap_update_users(ob, sort_map_update);
ob->actdef= sort_map_update[ob->actdef];
- MEM_freeN(name_array);
- MEM_freeN(sort_map_update);
+ return OPERATOR_FINISHED;
+}
- DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
- WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob);
+static int vgroup_sort(void *def_a_ptr, void *def_b_ptr)
+{
+ bDeformGroup *def_a= (bDeformGroup *)def_a_ptr;
+ bDeformGroup *def_b= (bDeformGroup *)def_b_ptr;
- return OPERATOR_FINISHED;
+ return strcmp(def_a->name, def_b->name);
}
-#undef DEF_GROUP_SIZE
+static int vertex_group_sort_exec(bContext *C, wmOperator *op)
+{
+ Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+ char *name_array;
+ int ret;
+ /*init remapping*/
+ name_array = vgroup_init_remap(ob);
+
+ /*sort vgroup names*/
+ BLI_sortlist(&ob->defbase, vgroup_sort);
+
+ /*remap vgroup data to map to correct names*/
+ ret = vgroup_do_remap(ob, name_array, op);
+
+ if (ret != OPERATOR_CANCELLED) {
+ DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob);
+ }
+
+ if (name_array) MEM_freeN(name_array);
+
+ return ret;
+}
+
void OBJECT_OT_vertex_group_sort(wmOperatorType *ot)
{
ot->name= "Sort Vertex Groups";
@@ -2017,3 +2042,63 @@
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
+static int vgroup_move_exec(bContext *C, wmOperator *op)
+{
+ Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+ bDeformGroup *def;
+ char *name_array;
+ int dir= RNA_enum_get(op->ptr, "direction"), ret;
+
+ def = BLI_findlink(&ob->defbase, ob->actdef - 1);
+ if (!def) {
+ return OPERATOR_CANCELLED;
+ }
+
+ name_array = vgroup_init_remap(ob);
+
+ if (dir == 1) { /*up*/
+ void *prev = def->prev;
+
+ BLI_remlink(&ob->defbase, def);
+ BLI_insertlinkbefore(&ob->defbase, prev, def);
+ } else { /*down*/
+ void *next = def->next;
+
+ BLI_remlink(&ob->defbase, def);
+ BLI_insertlinkafter(&ob->defbase, next, def);
+ }
+
+ ret = vgroup_do_remap(ob, name_array, op);
+
+ if (name_array) MEM_freeN(name_array);
+
+ if (ret != OPERATOR_CANCELLED) {
+ DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob);
+ }
+
+ return ret;
+}
+
+void OBJECT_OT_vertex_group_move(wmOperatorType *ot)
+{
+ static EnumPropertyItem vgroup_slot_move[] = {
+ {1, "UP", 0, "Up", ""},
+ {-1, "DOWN", 0, "Down", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ /* identifiers */
+ ot->name= "Move Vertex Group";
+ ot->idname= "OBJECT_OT_vertex_group_move";
+
+ /* api callbacks */
+ ot->poll= vertex_group_poll;
+ ot->exec= vgroup_move_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ RNA_def_enum(ot->srna, "direction", vgroup_slot_move, 0, "Direction", "Direction to move, UP or DOWN");
+}
Modified: branches/render25/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/render25/source/blender/editors/space_view3d/drawobject.c 2010-05-04 07:34:46 UTC (rev 28564)
+++ branches/render25/source/blender/editors/space_view3d/drawobject.c 2010-05-04 08:59:32 UTC (rev 28565)
@@ -3864,7 +3864,7 @@
float *cd2=0,*cdata2=0;
/* setup gl flags */
- if(ob_dt > OB_WIRE) {
+ if (1) { //ob_dt > OB_WIRE) {
glEnableClientState(GL_NORMAL_ARRAY);
if(part->draw&PART_DRAW_MAT_COL)
@@ -3874,13 +3874,13 @@
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
}
- else {
+ /*else {
glDisableClientState(GL_NORMAL_ARRAY);
glDisable(GL_COLOR_MATERIAL);
glDisable(GL_LIGHTING);
UI_ThemeColor(TH_WIRE);
- }
+ }*/
if(totchild && (part->draw&PART_DRAW_PARENT)==0)
totpart=0;
@@ -3894,7 +3894,7 @@
if(path->steps > 0) {
glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
- if(ob_dt > OB_WIRE) {
+ if(1) { //ob_dt > OB_WIRE) {
glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
if(part->draw&PART_DRAW_MAT_COL)
glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
@@ -3910,7 +3910,7 @@
path=cache[a];
glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
- if(ob_dt > OB_WIRE) {
+ if(1) { //ob_dt > OB_WIRE) {
glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
if(part->draw&PART_DRAW_MAT_COL)
glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
@@ -3921,7 +3921,7 @@
/* restore & clean up */
- if(ob_dt > OB_WIRE) {
+ if(1) { //ob_dt > OB_WIRE) {
if(part->draw&PART_DRAW_MAT_COL)
glDisable(GL_COLOR_ARRAY);
glDisable(GL_COLOR_MATERIAL);
Modified: branches/render25/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_object_types.h 2010-05-04 07:34:46 UTC (rev 28564)
+++ branches/render25/source/blender/makesdna/DNA_object_types.h 2010-05-04 08:59:32 UTC (rev 28565)
@@ -62,6 +62,7 @@
struct bDeformGroup *next, *prev;
char name[32];
} bDeformGroup;
+#define MAX_VGROUP_NAME 32
/**
* The following illustrates the orientation of the
More information about the Bf-blender-cvs
mailing list