diff options
Diffstat (limited to 'source/blender/editors/object')
-rw-r--r-- | source/blender/editors/object/editkey.c | 116 | ||||
-rw-r--r-- | source/blender/editors/object/editlattice.c | 174 | ||||
-rw-r--r-- | source/blender/editors/object/object_edit.c | 184 | ||||
-rw-r--r-- | source/blender/editors/object/object_intern.h | 7 | ||||
-rw-r--r-- | source/blender/editors/object/object_modifier.c | 61 | ||||
-rw-r--r-- | source/blender/editors/object/object_ops.c | 15 |
6 files changed, 220 insertions, 337 deletions
diff --git a/source/blender/editors/object/editkey.c b/source/blender/editors/object/editkey.c index 1c31c7c7653..f38c03fb284 100644 --- a/source/blender/editors/object/editkey.c +++ b/source/blender/editors/object/editkey.c @@ -78,10 +78,6 @@ #include "object_intern.h" -/* XXX */ -static void BIF_undo_push() {} -/* XXX */ - #if 0 // XXX old animation system static void default_key_ipo(Scene *scene, Key *key) { @@ -117,7 +113,7 @@ static void default_key_ipo(Scene *scene, Key *key) #endif // XXX old animation system -/* **************************************** */ +/************************* Mesh ************************/ void mesh_to_key(Mesh *me, KeyBlock *kb) { @@ -213,7 +209,7 @@ void insert_meshkey(Scene *scene, Mesh *me, short rel) mesh_to_key(me, kb); } -/* ******************** */ +/************************* Lattice ************************/ void latt_to_key(Lattice *lt, KeyBlock *kb) { @@ -271,7 +267,7 @@ void insert_lattkey(Scene *scene, Lattice *lt, short rel) latt_to_key(lt, kb); } -/* ******************************** */ +/************************* Curve ************************/ void curve_to_key(Curve *cu, KeyBlock *kb, ListBase *nurb) { @@ -383,7 +379,7 @@ void insert_curvekey(Scene *scene, Curve *cu, short rel) if(cu->key==NULL) { cu->key= add_key( (ID *)cu); - if (rel) + if(rel) cu->key->type = KEY_RELATIVE; // else // default_key_ipo(scene, cu->key); // XXX old animation system @@ -396,17 +392,34 @@ void insert_curvekey(Scene *scene, Curve *cu, short rel) else curve_to_key(cu, kb, &cu->nurb); } +/*********************** add shape key ***********************/ + +void ED_object_shape_key_add(bContext *C, Scene *scene, Object *ob) +{ + Key *key; + + if(ob->type==OB_MESH) insert_meshkey(scene, ob->data, 1); + else if ELEM(ob->type, OB_CURVE, OB_SURF) insert_curvekey(scene, ob->data, 1); + else if(ob->type==OB_LATTICE) insert_lattkey(scene, ob->data, 1); -/* ******************** */ + key= ob_get_key(ob); + ob->shapenr= BLI_countlist(&key->block); -void delete_key(Scene *scene, Object *ob) + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); +} + +/*********************** remove shape key ***********************/ + +int ED_object_shape_key_remove(bContext *C, Scene *scene, Object *ob) { + Main *bmain= CTX_data_main(C); KeyBlock *kb, *rkb; Key *key; //IpoCurve *icu; - + key= ob_get_key(ob); - if(key==NULL) return; + if(key==NULL) + return 0; kb= BLI_findlink(&key->block, ob->shapenr-1); @@ -417,15 +430,15 @@ void delete_key(Scene *scene, Object *ob) BLI_remlink(&key->block, kb); key->totkey--; - if(key->refkey== kb) key->refkey= key->block.first; + if(key->refkey== kb) + key->refkey= key->block.first; if(kb->data) MEM_freeN(kb->data); MEM_freeN(kb); - for(kb= key->block.first; kb; kb= kb->next) { + for(kb= key->block.first; kb; kb= kb->next) if(kb->adrcode>=ob->shapenr) kb->adrcode--; - } #if 0 // XXX old animation system if(key->ipo) { @@ -451,12 +464,13 @@ void delete_key(Scene *scene, Object *ob) else if(GS(key->from->name)==ID_CU) ((Curve *)key->from)->key= NULL; else if(GS(key->from->name)==ID_LT) ((Lattice *)key->from)->key= NULL; - free_libblock_us(&(G.main->key), key); + free_libblock_us(&(bmain->key), key); } DAG_object_flush_update(scene, OBACT, OB_RECALC_DATA); - - BIF_undo_push("Delete Shapekey"); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return 1; } /********************** shape key operators *********************/ @@ -465,19 +479,11 @@ static int shape_key_add_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; - Key *key; if(!ob) return OPERATOR_CANCELLED; - if(ob->type==OB_MESH) insert_meshkey(scene, ob->data, 1); - else if ELEM(ob->type, OB_CURVE, OB_SURF) insert_curvekey(scene, ob->data, 1); - else if(ob->type==OB_LATTICE) insert_lattkey(scene, ob->data, 1); - - key= ob_get_key(ob); - ob->shapenr= BLI_countlist(&key->block); - - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + ED_object_shape_key_add(C, scene, ob); return OPERATOR_FINISHED; } @@ -499,67 +505,13 @@ static int shape_key_remove_exec(bContext *C, wmOperator *op) { Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; Scene *scene= CTX_data_scene(C); - Main *bmain= CTX_data_main(C); - KeyBlock *kb, *rkb; - Key *key; - //IpoCurve *icu; if(!ob) return OPERATOR_CANCELLED; - key= ob_get_key(ob); - if(key==NULL) + if(!ED_object_shape_key_remove(C, scene, ob)) return OPERATOR_CANCELLED; - kb= BLI_findlink(&key->block, ob->shapenr-1); - - if(kb) { - for(rkb= key->block.first; rkb; rkb= rkb->next) - if(rkb->relative == ob->shapenr-1) - rkb->relative= 0; - - BLI_remlink(&key->block, kb); - key->totkey--; - if(key->refkey== kb) - key->refkey= key->block.first; - - if(kb->data) MEM_freeN(kb->data); - MEM_freeN(kb); - - for(kb= key->block.first; kb; kb= kb->next) - if(kb->adrcode>=ob->shapenr) - kb->adrcode--; - -#if 0 // XXX old animation system - if(key->ipo) { - - for(icu= key->ipo->curve.first; icu; icu= icu->next) { - if(icu->adrcode==ob->shapenr-1) { - BLI_remlink(&key->ipo->curve, icu); - free_ipo_curve(icu); - break; - } - } - for(icu= key->ipo->curve.first; icu; icu= icu->next) - if(icu->adrcode>=ob->shapenr) - icu->adrcode--; - } -#endif // XXX old animation system - - if(ob->shapenr>1) ob->shapenr--; - } - - if(key->totkey==0) { - if(GS(key->from->name)==ID_ME) ((Mesh *)key->from)->key= NULL; - else if(GS(key->from->name)==ID_CU) ((Curve *)key->from)->key= NULL; - else if(GS(key->from->name)==ID_LT) ((Lattice *)key->from)->key= NULL; - - free_libblock_us(&(bmain->key), key); - } - - DAG_object_flush_update(scene, OBACT, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - return OPERATOR_FINISHED; } diff --git a/source/blender/editors/object/editlattice.c b/source/blender/editors/object/editlattice.c index 523f38dd432..3e30efd635a 100644 --- a/source/blender/editors/object/editlattice.c +++ b/source/blender/editors/object/editlattice.c @@ -52,6 +52,7 @@ #include "BKE_utildefines.h" #include "ED_object.h" +#include "ED_screen.h" #include "ED_view3d.h" #include "ED_util.h" @@ -60,16 +61,15 @@ #include "object_intern.h" -/* ***************************** */ - -static int okee() {return 0;} +/********************** Load/Make/Free ********************/ void free_editLatt(Object *ob) { Lattice *lt= ob->data; if(lt->editlatt) { - if(lt->editlatt->def) MEM_freeN(lt->editlatt->def); + if(lt->editlatt->def) + MEM_freeN(lt->editlatt->def); if(lt->editlatt->dvert) free_dverts(lt->editlatt->dvert, lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw); @@ -78,27 +78,6 @@ void free_editLatt(Object *ob) } } - -static void setflagsLatt(Object *obedit, int flag) -{ - Lattice *lt= obedit->data; - BPoint *bp; - int a; - - bp= lt->editlatt->def; - - a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw; - - while(a--) { - if(bp->hide==0) { - bp->f1= flag; - } - bp++; - } -} - - - void make_editLatt(Object *obedit) { Lattice *lt= obedit->data; @@ -108,10 +87,9 @@ void make_editLatt(Object *obedit) lt= obedit->data; - actkey = ob_get_keyblock(obedit); - if(actkey) { + actkey= ob_get_keyblock(obedit); + if(actkey) key_to_latt(actkey, lt); - } lt->editlatt= MEM_dupallocN(lt); lt->editlatt->def= MEM_dupallocN(lt->def); @@ -121,11 +99,8 @@ void make_editLatt(Object *obedit) lt->editlatt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert"); copy_dverts(lt->editlatt->dvert, lt->dvert, tot); } - - //BIF_undo_push("Original"); } - void load_editLatt(Object *obedit) { Lattice *lt; @@ -136,7 +111,8 @@ void load_editLatt(Object *obedit) lt= obedit->data; - actkey = ob_get_keyblock(obedit); + actkey= ob_get_keyblock(obedit); + if(actkey) { /* active key: vertices */ tot= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw; @@ -154,7 +130,6 @@ void load_editLatt(Object *obedit) } } else { - MEM_freeN(lt->def); lt->def= MEM_dupallocN(lt->editlatt->def); @@ -181,55 +156,135 @@ void load_editLatt(Object *obedit) lt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert"); copy_dverts(lt->dvert, lt->editlatt->dvert, tot); } - } -void remake_editLatt(Object *obedit) +/************************** Operators *************************/ + +static void setflagsLatt(Object *obedit, int flag) { - if(okee("Reload original data")==0) return; + Lattice *lt= obedit->data; + BPoint *bp; + int a; - make_editLatt(obedit); - - //BIF_undo_push("Reload original"); + bp= lt->editlatt->def; + + a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw; + + while(a--) { + if(bp->hide==0) { + bp->f1= flag; + } + bp++; + } } - -void deselectall_Latt(Object *obedit) +int de_select_all_exec(bContext *C, wmOperator *op) { + Object *obedit= CTX_data_edit_object(C); Lattice *lt= obedit->data; BPoint *bp; - int a; + int a, deselect= 0; bp= lt->editlatt->def; - a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw; while(a--) { if(bp->hide==0) { if(bp->f1) { - setflagsLatt(obedit, 0); - //BIF_undo_push("(De)select all"); - return; + deselect= 1; + break; } } bp++; } - setflagsLatt(obedit, 1); - //BIF_undo_push("(De)select all"); + + if(deselect) + setflagsLatt(obedit, 0); + else + setflagsLatt(obedit, 1); + + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); + + return OPERATOR_FINISHED; } +void LATTICE_OT_select_all_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Select or Deselect All"; + ot->idname= "LATTICE_OT_select_all_toggle"; + + /* api callbacks */ + ot->exec= de_select_all_exec; + ot->poll= ED_operator_editlattice; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +int make_regular_poll(bContext *C) +{ + Object *ob; + + if(ED_operator_editlattice(C)) return 1; + + ob= CTX_data_active_object(C); + return (ob && ob->type==OB_LATTICE); +} + +int make_regular_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob= CTX_data_edit_object(C); + Lattice *lt; + + if(ob) { + lt= ob->data; + resizelattice(lt->editlatt, lt->pntsu, lt->pntsv, lt->pntsw, NULL); + } + else { + ob= CTX_data_active_object(C); + lt= ob->data; + resizelattice(lt, lt->pntsu, lt->pntsv, lt->pntsw, NULL); + } + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob); + + return OPERATOR_FINISHED; +} + +void LATTICE_OT_make_regular(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Make Regular"; + ot->idname= "LATTICE_OT_make_regular"; + + /* api callbacks */ + ot->exec= make_regular_exec; + ot->poll= make_regular_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + +/****************************** Mouse Selection *************************/ + static void findnearestLattvert__doClosest(void *userData, BPoint *bp, int x, int y) { struct { BPoint *bp; short dist, select, mval[2]; } *data = userData; float temp = abs(data->mval[0]-x) + abs(data->mval[1]-y); - if ((bp->f1 & SELECT)==data->select) temp += 5; - if (temp<data->dist) { + if((bp->f1 & SELECT)==data->select) + temp += 5; + + if(temp<data->dist) { data->dist = temp; data->bp = bp; } } + static BPoint *findnearestLattvert(ViewContext *vc, short mval[2], int sel) { /* sel==1: selected gets a disadvantage */ @@ -247,34 +302,27 @@ static BPoint *findnearestLattvert(ViewContext *vc, short mval[2], int sel) return data.bp; } - void mouse_lattice(bContext *C, short mval[2], int extend) { ViewContext vc; - BPoint *bp=0; + BPoint *bp= NULL; view3d_set_viewcontext(C, &vc); - bp= findnearestLattvert(&vc, mval, 1); if(bp) { if(extend==0) { - setflagsLatt(vc.obedit, 0); bp->f1 |= SELECT; - } - else { + else bp->f1 ^= SELECT; /* swap */ - } WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, vc.obedit); - //BIF_undo_push("Select"); } } - -/* **************** undo for lattice object ************** */ +/******************************** Undo *************************/ typedef struct UndoLattice { BPoint *def; @@ -324,20 +372,18 @@ static int validate_undoLatt(void *data, void *edata) static void *get_editlatt(bContext *C) { Object *obedit= CTX_data_edit_object(C); + if(obedit && obedit->type==OB_LATTICE) { Lattice *lt= obedit->data; return lt->editlatt; } + return NULL; } - /* and this is all the undo system needs to know */ void undo_push_lattice(bContext *C, char *name) { undo_editmode_push(C, name, get_editlatt, free_undoLatt, undoLatt_to_editLatt, editLatt_to_undoLatt, validate_undoLatt); } - - -/***/ diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index c436ccdb328..11f6b443912 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -116,12 +116,11 @@ #include "ED_mesh.h" #include "ED_object.h" #include "ED_screen.h" +#include "ED_transform.h" #include "ED_types.h" #include "ED_util.h" #include "ED_view3d.h" -#include "BIF_transform.h" - #include "UI_interface.h" #include "RNA_access.h" @@ -1733,7 +1732,7 @@ void OBJECT_OT_select_by_layer(wmOperatorType *ot) } /* ****** invert selection *******/ -static int object_select_invert_exec(bContext *C, wmOperator *op) +static int object_select_inverse_exec(bContext *C, wmOperator *op) { CTX_DATA_BEGIN(C, Base*, base, visible_bases) { if (base->flag & SELECT) @@ -1749,16 +1748,16 @@ static int object_select_invert_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void OBJECT_OT_select_invert(wmOperatorType *ot) +void OBJECT_OT_select_inverse(wmOperatorType *ot) { /* identifiers */ - ot->name= "Invert selection"; - ot->description = "Invert th select of all visible objects."; - ot->idname= "OBJECT_OT_select_invert"; + ot->name= "Select Inverse"; + ot->description = "Invert selection of all visible objects."; + ot->idname= "OBJECT_OT_select_inverse"; /* api callbacks */ - ot->exec= object_select_invert_exec; + ot->exec= object_select_inverse_exec; ot->poll= ED_operator_scene_editable; /* flags */ @@ -3208,7 +3207,11 @@ void ED_object_exit_editmode(bContext *C, int flag) } load_editMesh(scene, obedit); - if(freedata) free_editMesh(me->edit_mesh); + if(freedata) { + free_editMesh(me->edit_mesh); + MEM_freeN(me->edit_mesh); + me->edit_mesh= NULL; + } if(G.f & G_WEIGHTPAINT) mesh_octree_table(obedit, NULL, NULL, 'e'); @@ -3257,7 +3260,7 @@ void ED_object_enter_editmode(bContext *C, int flag) { Scene *scene= CTX_data_scene(C); Base *base= CTX_data_active_base(C); - Object *ob= base->object; + Object *ob; ScrArea *sa= CTX_wm_area(C); View3D *v3d= NULL; int ok= 0; @@ -3269,7 +3272,10 @@ void ED_object_enter_editmode(bContext *C, int flag) v3d= sa->spacedata.first; if((v3d==NULL || (base->lay & v3d->lay))==0) return; - + + ob = base->object; + + if(ob==NULL) return; if(ob->data==NULL) return; if (object_data_is_libdata(ob)) { @@ -3575,9 +3581,7 @@ void special_editmenu(Scene *scene, View3D *v3d) // XXX static short numcuts= 2; Object *ob= OBACT; Object *obedit= NULL; // XXX - float fac; int nr,ret=0; - short randfac; if(ob==NULL) return; @@ -3766,144 +3770,8 @@ void special_editmenu(Scene *scene, View3D *v3d) } } else if(obedit->type==OB_MESH) { - /* This is all that is needed, since all other functionality is in Ctrl+ V/E/F but some users didnt like, so for now have the old/big menu */ - /* - nr= pupmenu("Subdivide Mesh%t|Subdivide%x1|Subdivide Multi%x2|Subdivide Multi Fractal%x3|Subdivide Smooth%x4"); - switch(nr) { - case 1: - waitcursor(1); - esubdivideflag(1, 0.0, scene->toolsettings->editbutflag, 1, 0); - - break; - case 2: - if(button(&numcuts, 1, 128, "Number of Cuts:")==0) return; - waitcursor(1); - esubdivideflag(1, 0.0, scene->toolsettings->editbutflag, numcuts, 0); - break; - case 3: - if(button(&numcuts, 1, 128, "Number of Cuts:")==0) return; - randfac= 10; - if(button(&randfac, 1, 100, "Rand fac:")==0) return; - waitcursor(1); - fac= -( (float)randfac )/100; - esubdivideflag(1, fac, scene->toolsettings->editbutflag, numcuts, 0); - break; - - case 4: - fac= 1.0f; - if(fbutton(&fac, 0.0f, 5.0f, 10, 10, "Smooth:")==0) return; - fac= 0.292f*fac; - - waitcursor(1); - esubdivideflag(1, fac, scene->toolsettings->editbutflag | B_SMOOTH, 1, 0); - break; - } - */ - - nr= pupmenu("Specials%t|Subdivide%x1|Subdivide Multi%x2|Subdivide Multi Fractal%x3|Subdivide Smooth%x12|Merge%x4|Remove Doubles%x5|Hide%x6|Reveal%x7|Select Swap%x8|Flip Normals %x9|Smooth %x10|Bevel %x11|Set Smooth %x14|Set Solid %x15|Blend From Shape%x16|Propagate To All Shapes%x17|Select Vertex Path%x18"); - - switch(nr) { - case 1: - waitcursor(1); -// XXX esubdivideflag(1, 0.0, scene->toolsettings->editbutflag, 1, 0); - - break; - case 2: -// XXX if(button(&numcuts, 1, 128, "Number of Cuts:")==0) return; - waitcursor(1); -// XXX esubdivideflag(1, 0.0, scene->toolsettings->editbutflag, numcuts, 0); - break; - case 3: -// XXX if(button(&numcuts, 1, 128, "Number of Cuts:")==0) return; - randfac= 10; -// XXX if(button(&randfac, 1, 100, "Rand fac:")==0) return; - waitcursor(1); - fac= -( (float)randfac )/100; -// XXX esubdivideflag(1, fac, scene->toolsettings->editbutflag, numcuts, 0); - break; - - case 12: /* smooth */ - /* if(button(&numcuts, 1, 128, "Number of Cuts:")==0) return; */ - fac= 1.0f; -// XXX if(fbutton(&fac, 0.0f, 5.0f, 10, 10, "Smooth:")==0) return; -// XXX fac= 0.292f*fac; - - waitcursor(1); -// XXX esubdivideflag(1, fac, scene->toolsettings->editbutflag | B_SMOOTH, 1, 0); - break; - - case 4: -// XXX mergemenu(); - break; - case 5: -// XXX notice("Removed %d Vertices", removedoublesflag(1, 0, scene->toolsettings->doublimit)); - break; - case 6: -// XXX hide_mesh(0); - break; - case 7: -// XXX reveal_mesh(); - break; - case 8: -// XXX selectswap_mesh(); - break; - case 9: -// XXX flip_editnormals(); - break; - case 10: -// XXX vertexsmooth(); - break; - case 11: -// XXX bevel_menu(); - break; - case 14: -// XXX mesh_set_smooth_faces(1); - break; - case 15: -// XXX mesh_set_smooth_faces(0); - break; - case 16: -// XXX shape_copy_select_from(); - break; - case 17: -// XXX shape_propagate(); - break; - case 18: -// XXX pathselect(); - break; - } - - - DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); - - if(nr>0) waitcursor(0); - } else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) { - - nr= pupmenu("Specials%t|Subdivide%x1|Switch Direction%x2|Set Goal Weight%x3|Set Radius%x4|Smooth%x5|Smooth Radius%x6"); - - switch(nr) { - case 1: -// XXX subdivideNurb(); - break; - case 2: -// XXX switchdirectionNurb2(); - break; - case 3: -// XXX setweightNurb(); - break; - case 4: -// XXX setradiusNurb(); - break; - case 5: -// XXX smoothNurb(); - break; - case 6: -// XXX smoothradiusNurb(); - break; - } - DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); } else if(obedit->type==OB_ARMATURE) { nr= pupmenu("Specials%t|Subdivide %x1|Subdivide Multi%x2|Switch Direction%x7|Flip Left-Right Names%x3|%l|AutoName Left-Right%x4|AutoName Front-Back%x5|AutoName Top-Bottom%x6"); @@ -6089,7 +5957,7 @@ Base *ED_object_add_duplicate(Scene *scene, Base *base, int usedupflag) } /* contextual operator dupli */ -static int duplicate_add_exec(bContext *C, wmOperator *op) +static int duplicate_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); View3D *v3d= CTX_wm_view3d(C); @@ -6121,9 +5989,9 @@ static int duplicate_add_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -static int duplicate_add_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) { - duplicate_add_exec(C, op); + duplicate_exec(C, op); RNA_int_set(op->ptr, "mode", TFM_TRANSLATION); WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr); @@ -6131,17 +5999,17 @@ static int duplicate_add_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_FINISHED; } -void OBJECT_OT_duplicate_add(wmOperatorType *ot) +void OBJECT_OT_duplicate(wmOperatorType *ot) { /* identifiers */ - ot->name= "Add Duplicate"; - ot->description = "Duplicate the object."; - ot->idname= "OBJECT_OT_duplicate_add"; + ot->name= "Duplicate Objects"; + ot->description = "Duplicate the objects."; + ot->idname= "OBJECT_OT_duplicate"; /* api callbacks */ - ot->invoke= duplicate_add_invoke; - ot->exec= duplicate_add_exec; + ot->invoke= duplicate_invoke; + ot->exec= duplicate_exec; ot->poll= ED_operator_scene_editable; diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 6ec5f029148..12776c08d4f 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -45,7 +45,7 @@ void OBJECT_OT_parent_clear(struct wmOperatorType *ot); void OBJECT_OT_track_set(struct wmOperatorType *ot); void OBJECT_OT_track_clear(struct wmOperatorType *ot); void OBJECT_OT_select_all_toggle(struct wmOperatorType *ot); -void OBJECT_OT_select_invert(struct wmOperatorType *ot); +void OBJECT_OT_select_inverse(struct wmOperatorType *ot); void OBJECT_OT_select_random(struct wmOperatorType *ot); void OBJECT_OT_select_by_type(struct wmOperatorType *ot); void OBJECT_OT_select_by_layer(struct wmOperatorType *ot); @@ -61,7 +61,7 @@ void OBJECT_OT_slowparent_clear(struct wmOperatorType *ot); void OBJECT_OT_center_set(struct wmOperatorType *ot); void OBJECT_OT_dupli_set_real(struct wmOperatorType *ot); void OBJECT_OT_object_add(struct wmOperatorType *ot); -void OBJECT_OT_duplicate_add(struct wmOperatorType *ot); +void OBJECT_OT_duplicate(struct wmOperatorType *ot); void OBJECT_OT_delete(struct wmOperatorType *ot); void OBJECT_OT_mesh_add(struct wmOperatorType *ot); @@ -78,6 +78,9 @@ void make_editLatt(Object *obedit); void load_editLatt(Object *obedit); void remake_editLatt(Object *obedit); +void LATTICE_OT_select_all_toggle(struct wmOperatorType *ot); +void LATTICE_OT_make_regular(struct wmOperatorType *ot); + /* editgroup.c */ void GROUP_OT_group_create(struct wmOperatorType *ot); void GROUP_OT_objects_remove(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index bda3e4e8f79..6b9f2db0d96 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -83,33 +83,38 @@ int ED_object_modifier_add(ReportList *reports, Scene *scene, Object *ob, int ty } } - if(mti->flags&eModifierTypeFlag_RequiresOriginalData) { - md = ob->modifiers.first; + if(type == eModifierType_ParticleSystem) { + object_add_particle_system(scene, ob); + } + else { + if(mti->flags&eModifierTypeFlag_RequiresOriginalData) { + md = ob->modifiers.first; - while(md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) - md = md->next; + while(md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) + md = md->next; - BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(type)); - } - else - BLI_addtail(&ob->modifiers, modifier_new(type)); - - /* special cases */ - if(type == eModifierType_Softbody) { - if(!ob->soft) { - ob->soft= sbNew(scene); - ob->softflag |= OB_SB_GOAL|OB_SB_EDGES; + BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(type)); } - } - else if(type == eModifierType_Collision) { - if(!ob->pd) - ob->pd= object_add_collision_fields(); + else + BLI_addtail(&ob->modifiers, modifier_new(type)); + + /* special cases */ + if(type == eModifierType_Softbody) { + if(!ob->soft) { + ob->soft= sbNew(scene); + ob->softflag |= OB_SB_GOAL|OB_SB_EDGES; + } + } + else if(type == eModifierType_Collision) { + if(!ob->pd) + ob->pd= object_add_collision_fields(); - ob->pd->deflect= 1; - DAG_scene_sort(scene); + ob->pd->deflect= 1; + DAG_scene_sort(scene); + } + else if(type == eModifierType_Surface) + DAG_scene_sort(scene); } - else if(type == eModifierType_Surface) - DAG_scene_sort(scene); DAG_object_flush_update(scene, ob, OB_RECALC_DATA); @@ -226,11 +231,11 @@ int ED_object_modifier_convert(ReportList *reports, Scene *scene, Object *ob, Mo psys=((ParticleSystemModifierData *)md)->psys; part= psys->part; - if(part->draw_as == PART_DRAW_GR || part->draw_as == PART_DRAW_OB) { + if(part->ren_as == PART_DRAW_GR || part->ren_as == PART_DRAW_OB) { ; // XXX make_object_duplilist_real(NULL); } else { - if(part->draw_as != PART_DRAW_PATH || psys->pathcache == 0) + if(part->ren_as != PART_DRAW_PATH || psys->pathcache == 0) return 0; totpart= psys->totcached; @@ -331,6 +336,10 @@ int ED_object_modifier_apply(ReportList *reports, Scene *scene, Object *ob, Modi } mesh_pmv_off(ob, me); + + /* Multires: ensure that recent sculpting is applied */ + if(md->type == eModifierType_Multires) + multires_force_update(ob); dm = mesh_create_derived_for_modifier(scene, ob, md); if (!dm) { @@ -763,9 +772,7 @@ static uiBlock *modifiers_add_menu(void *ob_v) ModifierTypeInfo *mti = modifierType_getInfo(i); /* Only allow adding through appropriate other interfaces */ - if(ELEM3(i, eModifierType_Softbody, eModifierType_Hook, eModifierType_ParticleSystem)) continue; - - if(ELEM4(i, eModifierType_Cloth, eModifierType_Collision, eModifierType_Surface, eModifierType_Fluidsim)) continue; + if(ELEM(i, eModifierType_ParticleSystem, eModifierType_Surface)) continue; if((mti->flags&eModifierTypeFlag_AcceptsCVs) || (ob->type==OB_MESH && (mti->flags&eModifierTypeFlag_AcceptsMesh))) { diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 6248d826ad4..3a9973b7ec5 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -68,7 +68,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_parent_clear); WM_operatortype_append(OBJECT_OT_track_set); WM_operatortype_append(OBJECT_OT_track_clear); - WM_operatortype_append(OBJECT_OT_select_invert); + WM_operatortype_append(OBJECT_OT_select_inverse); WM_operatortype_append(OBJECT_OT_select_random); WM_operatortype_append(OBJECT_OT_select_all_toggle); WM_operatortype_append(OBJECT_OT_select_by_type); @@ -84,7 +84,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_slowparent_clear); WM_operatortype_append(OBJECT_OT_center_set); WM_operatortype_append(OBJECT_OT_dupli_set_real); - WM_operatortype_append(OBJECT_OT_duplicate_add); + WM_operatortype_append(OBJECT_OT_duplicate); WM_operatortype_append(GROUP_OT_group_create); WM_operatortype_append(GROUP_OT_objects_remove); WM_operatortype_append(GROUP_OT_objects_add_active); @@ -122,6 +122,9 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_shape_key_add); WM_operatortype_append(OBJECT_OT_shape_key_remove); + + WM_operatortype_append(LATTICE_OT_select_all_toggle); + WM_operatortype_append(LATTICE_OT_make_regular); } void ED_keymap_object(wmWindowManager *wm) @@ -136,7 +139,7 @@ void ED_keymap_object(wmWindowManager *wm) keymap= WM_keymap_listbase(wm, "Object Mode", 0, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_select_invert", IKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_random", PADASTERKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_by_type", PADASTERKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_by_layer", PADASTERKEY, KM_PRESS, KM_ALT, 0); @@ -157,7 +160,7 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_verify_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_primitive_add", AKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_verify_item(keymap, "OBJECT_OT_duplicate_add", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0); @@ -168,5 +171,9 @@ void ED_keymap_object(wmWindowManager *wm) WM_keymap_verify_item(keymap, "GROUP_OT_objects_add_active", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove_active", GKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); + /* Lattice */ + keymap= WM_keymap_listbase(wm, "Lattice", 0, 0); + + WM_keymap_add_item(keymap, "LATTICE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); } |