Revision: 18555 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18555 Author: ton Date: 2009-01-17 19:35:33 +0100 (Sat, 17 Jan 2009)
Log Message: ----------- 2.5 - Added shift+d duplicate for object and editmode mesh. Note it uses WM_operator_name_call(), which is fine now, but in future might put again 2 undo's and operators on the stack. Will have to spend some time on how Macros will work! - added itterator CTX_selected_editable_objects() (named it first "edible" but that was too funny!) Also cleaned object_edit.c to use this correctly. - added CTX_wm_view3d(), especially for hybrid tools that *can* use view3d, but don't have to. - moved debug -d print for operators to the real invoke call Modified Paths: -------------- branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h branches/blender2.5/blender/source/blender/blenkernel/intern/context.c branches/blender2.5/blender/source/blender/editors/include/ED_object.h branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c branches/blender2.5/blender/source/blender/editors/object/object_edit.c branches/blender2.5/blender/source/blender/editors/object/object_intern.h branches/blender2.5/blender/source/blender/editors/object/object_ops.c branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h =================================================================== --- branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-01-17 16:58:05 UTC (rev 18554) +++ branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-01-17 18:35:33 UTC (rev 18555) @@ -95,6 +95,7 @@ struct bScreen *CTX_wm_screen(const bContext *C); struct ScrArea *CTX_wm_area(const bContext *C); struct SpaceLink *CTX_wm_space_data(const bContext *C); +struct View3D *CTX_wm_view3d(const bContext *C); struct ARegion *CTX_wm_region(const bContext *C); void *CTX_wm_region_data(const bContext *C); struct uiBlock *CTX_wm_ui_block(const bContext *C); @@ -141,6 +142,9 @@ void CTX_data_main_set(bContext *C, struct Main *bmain); void CTX_data_scene_set(bContext *C, struct Scene *bmain); +int CTX_data_selected_editable_objects(const bContext *C, ListBase *list); +int CTX_data_selected_editable_bases(const bContext *C, ListBase *list); + int CTX_data_selected_objects(const bContext *C, ListBase *list); int CTX_data_selected_bases(const bContext *C, ListBase *list); Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c =================================================================== --- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-01-17 16:58:05 UTC (rev 18554) +++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-01-17 18:35:33 UTC (rev 18555) @@ -31,6 +31,7 @@ #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" +#include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" #include "RNA_access.h" @@ -163,6 +164,14 @@ return (C->wm.area)? C->wm.area->spacedata.first: NULL; } +View3D *CTX_wm_view3d(const bContext *C) +{ + if(C->wm.area && C->wm.area->spacetype==SPACE_VIEW3D) + return C->wm.area->spacedata.first; + return NULL; +} + + ARegion *CTX_wm_region(const bContext *C) { return C->wm.region; @@ -367,6 +376,16 @@ return ctx_data_collection_get(C, CTX_data_selected_nodes, list); } +int CTX_data_selected_editable_objects(const bContext *C, ListBase *list) +{ + return ctx_data_collection_get(C, CTX_data_selected_editable_objects, list); +} + +int CTX_data_selected_editable_bases(const bContext *C, ListBase *list) +{ + return ctx_data_collection_get(C, CTX_data_selected_editable_bases, list); +} + int CTX_data_selected_objects(const bContext *C, ListBase *list) { return ctx_data_collection_get(C, CTX_data_selected_objects, list); Modified: branches/blender2.5/blender/source/blender/editors/include/ED_object.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/include/ED_object.h 2009-01-17 16:58:05 UTC (rev 18554) +++ branches/blender2.5/blender/source/blender/editors/include/ED_object.h 2009-01-17 18:35:33 UTC (rev 18555) @@ -64,7 +64,6 @@ /* cleanup */ int object_data_is_libdata(struct Object *ob); -int object_is_libdata(struct Object *ob); /* constraints */ struct bConstraint *add_new_constraint (short type); Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c 2009-01-17 16:58:05 UTC (rev 18554) +++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c 2009-01-17 18:35:33 UTC (rev 18555) @@ -57,9 +57,48 @@ #include "ED_mesh.h" #include "ED_view3d.h" +#include "BIF_transform.h" + #include "mesh_intern.h" +static int mesh_add_duplicate_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_edit_object(C); + EditMesh *em= ((Mesh *)ob->data)->edit_mesh; + + adduplicateflag(em, SELECT); + + return OPERATOR_FINISHED; +} + +static int mesh_add_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + mesh_add_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, NULL); + + return OPERATOR_FINISHED; +} + +static void MESH_OT_add_duplicate(wmOperatorType *ot) +{ + + /* identifiers */ + ot->name= "Add Duplicate"; + ot->idname= "MESH_OT_add_duplicate"; + + /* api callbacks */ + ot->invoke= mesh_add_duplicate_invoke; + ot->exec= mesh_add_duplicate_exec; + + ot->poll= ED_operator_editmesh; + + /* to give to transform */ + RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX); +} + + /* ************************** registration **********************************/ void ED_operatortypes_mesh(void) @@ -90,6 +129,7 @@ WM_operatortype_append(MESH_OT_add_primitive_monkey); WM_operatortype_append(MESH_OT_add_primitive_uv_sphere); WM_operatortype_append(MESH_OT_add_primitive_ico_sphere); + WM_operatortype_append(MESH_OT_add_duplicate); } @@ -127,6 +167,7 @@ WM_keymap_add_item(keymap, "MESH_OT_subdivide_smooth", WKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); /* add */ + WM_keymap_add_item(keymap, "MESH_OT_add_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "MESH_OT_add_primitive_plane", ZEROKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "MESH_OT_add_primitive_cube", ONEKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "MESH_OT_add_primitive_circle", TWOKEY, KM_PRESS, KM_CTRL, 0); Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/object/object_edit.c 2009-01-17 16:58:05 UTC (rev 18554) +++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c 2009-01-17 18:35:33 UTC (rev 18555) @@ -120,6 +120,8 @@ #include "BMF_Api.h" +#include "BIF_transform.h" + #include "UI_interface.h" #include "RNA_access.h" @@ -204,21 +206,7 @@ } - - /* - * Returns true if the Object is a from an external blend file (libdata) - */ -int object_is_libdata(Object *ob) -{ - if (!ob) return 0; - if (ob->proxy) return 0; - if (ob->id.lib) return 1; - return 0; -} - - -/* * Returns true if the Object data is a from an external blend file (libdata) */ int object_data_is_libdata(Object *ob) @@ -290,9 +278,7 @@ static int object_add_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - ScrArea *sa= CTX_wm_area(C); Object *ob; - View3D *v3d= NULL; int type= RNA_int_get(op->ptr, "type"); /* hrms, this is editor level operator */ @@ -307,9 +293,7 @@ ED_base_object_activate(C, BASACT); /* more editor stuff */ - if(sa && sa->spacetype==SPACE_VIEW3D) - v3d= sa->spacedata.first; - ED_object_base_init_from_view(scene, v3d, BASACT); + ED_object_base_init_from_view(scene, CTX_wm_view3d(C), BASACT); DAG_scene_sort(scene); @@ -1066,7 +1050,7 @@ static int clear_parent_exec(bContext *C, wmOperator *op) { - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { if(RNA_enum_is_equal(op->ptr, "type", "CLEAR")) { ob->parent= NULL; @@ -1121,15 +1105,13 @@ { if(CTX_data_edit_object(C)) return OPERATOR_CANCELLED; - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { - /*if(TESTBASELIB(v3d, base)) {*/ - ob->track= NULL; - ob->recalc |= OB_RECALC; - - if(RNA_enum_is_equal(op->ptr, "type", "CLEAR_KEEP_TRANSFORM")) { - ED_object_apply_obmat(ob); - } - /*}*/ + CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + ob->track= NULL; + ob->recalc |= OB_RECALC; + + if(RNA_enum_is_equal(op->ptr, "type", "CLEAR_KEEP_TRANSFORM")) { + ED_object_apply_obmat(ob); + } } CTX_DATA_END; @@ -1487,7 +1469,7 @@ Scene *scene= CTX_data_scene(C); int armature_clear= 0; - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { if ((ob->flag & OB_POSEMODE)) { /* only clear pose transforms if: * - with a mesh in weightpaint mode, it's related armature needs to be cleared @@ -1538,7 +1520,7 @@ Scene *scene= CTX_data_scene(C); int armature_clear= 0; - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { if ((ob->flag & OB_POSEMODE)) { /* only clear pose transforms if: * - with a mesh in weightpaint mode, it's related armature needs to be cleared @@ -1590,7 +1572,7 @@ Scene *scene= CTX_data_scene(C); int armature_clear= 0; - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { if ((ob->flag & OB_POSEMODE)) { /* only clear pose transforms if: * - with a mesh in weightpaint mode, it's related armature needs to be cleared @@ -1646,7 +1628,7 @@ float *v1, *v3, mat[3][3]; int armature_clear= 0; - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { if(ob->parent) { v1= ob->loc; v3= ob->parentinv[3]; @@ -1786,8 +1768,8 @@ static int object_set_slowparent_exec(bContext *C, wmOperator *op) { - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { - + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + if(base->object->parent) base->object->partype |= PARSLOW; base->object->recalc |= OB_RECALC_OB; @@ -1819,7 +1801,7 @@ { Scene *scene= CTX_data_scene(C); - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { if(base->object->parent) { if(base->object->partype & PARSLOW) { base->object->partype -= PARSLOW; @@ -2154,7 +2136,7 @@ } /* context itterator */ - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { if(ob!=par) { @@ -2300,33 +2282,27 @@ static int make_track_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= sa->spacedata.first; - if(scene->id.lib) return OPERATOR_CANCELLED; - if(RNA_enum_is_equal(op->ptr, "type", "TRACKTO")){ bConstraint *con; bTrackToConstraint *data; - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { - if(TESTBASELIB(v3d, base)) { - if(base!=BASACT) { - con = add_new_constraint(CONSTRAINT_TYPE_TRACKTO); - strcpy (con->name, "AutoTrack"); + CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + if(base!=BASACT) { @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs