diff options
-rw-r--r-- | source/blender/editors/armature/editarmature.c | 2 | ||||
-rw-r--r-- | source/blender/editors/curve/editfont.c | 6 | ||||
-rw-r--r-- | source/blender/editors/include/ED_object.h | 9 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_add.c | 102 | ||||
-rw-r--r-- | source/blender/editors/object/object_add.c | 172 |
5 files changed, 180 insertions, 111 deletions
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 4564ec49477..f382896c868 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -5785,7 +5785,7 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg) } dst = add_object(scene, OB_ARMATURE); - ED_object_base_init_from_view(NULL, scene->basact); // XXX NULL is C + ED_object_base_init_transform(NULL, scene->basact, NULL, NULL); // XXX NULL is C, loc, rot obedit= scene->basact->object; /* Copy orientation from source */ diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c index b6b0289e871..da794eb1c25 100644 --- a/source/blender/editors/curve/editfont.c +++ b/source/blender/editors/curve/editfont.c @@ -475,11 +475,13 @@ static void txt_add_object(bContext *C, TextLine *firstline, int totline, float Base *base; struct TextLine *tmp; int nchars = 0, a; - + float rot[3] = {0.f, 0.f, 0.f}; + obedit= add_object(scene, OB_FONT); base= scene->basact; - ED_object_base_init_from_view(C, base, 1); /* seems to assume view align ? TODO - look into this, could be an operator option */ + + ED_object_base_init_transform(C, base, NULL, rot); /* seems to assume view align ? TODO - look into this, could be an operator option */ where_is_object(scene, obedit); obedit->loc[0] += offset[0]; diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 1b77d298e3a..0ba5c938377 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -79,11 +79,14 @@ void ED_object_toggle_modes(struct bContext *C, int mode); void ED_object_exit_editmode(struct bContext *C, int flag); void ED_object_enter_editmode(struct bContext *C, int flag); -void ED_object_base_init_from_view(struct bContext *C, struct Base *base, int view_align); +void ED_object_location_from_view(struct bContext *C, float *loc); +void ED_object_rotation_from_view(struct bContext *C, float *rot); +void ED_object_base_init_transform(struct bContext *C, struct Base *base, float *loc, float *rot); + void ED_object_add_generic_props(struct wmOperatorType *ot, int do_editmode); int ED_object_add_generic_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event); -void ED_object_add_generic_get_opts(struct wmOperator *op, int *view_align, int *enter_editmode); -struct Object *ED_object_add_type(struct bContext *C, int type, int view_align, int enter_editmode); +void ED_object_add_generic_get_opts(struct wmOperator *op, float *loc, float *rot, int *enter_editmode); +struct Object *ED_object_add_type(struct bContext *C, int type, float *loc, float *rot, int enter_editmode); void ED_object_single_users(struct Scene *scene, int full); diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 26fde849f9f..d7f421331e5 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -1273,30 +1273,25 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se /* uses context to figure out transform for primitive */ /* returns standard diameter */ -static float new_primitive_matrix(bContext *C, int view_align, float primmat[][4]) +static float new_primitive_matrix(bContext *C, float *loc, float *rot, float primmat[][4]) { Object *obedit= CTX_data_edit_object(C); - Scene *scene = CTX_data_scene(C); View3D *v3d =CTX_wm_view3d(C); - RegionView3D *rv3d= ED_view3d_context_rv3d(C); - float *curs, mat[3][3], vmat[3][3], cmat[3][3], imat[3][3]; + float mat[3][3], rmat[3][3], cmat[3][3], imat[3][3]; unit_m4(primmat); + + eul_to_mat3(rmat, rot); + invert_m3(rmat); - if(rv3d && view_align) { - copy_m3_m4(vmat, rv3d->viewmat); - } else - unit_m3(vmat); - - /* inverse transform for view and object */ + /* inverse transform for initial rotation and object */ copy_m3_m4(mat, obedit->obmat); - mul_m3_m3m3(cmat, vmat, mat); + mul_m3_m3m3(cmat, rmat, mat); invert_m3_m3(imat, cmat); copy_m4_m3(primmat, imat); /* center */ - curs= give_cursor(scene, v3d); - VECCOPY(primmat[3], curs); + VECCOPY(primmat[3], loc); VECSUB(primmat[3], primmat[3], obedit->obmat[3]); invert_m3_m3(imat, mat); mul_m3_v3(imat, primmat[3]); @@ -1307,7 +1302,7 @@ static float new_primitive_matrix(bContext *C, int view_align, float primmat[][4 /* ********* add primitive operators ************* */ -static void make_prim_ext(bContext *C, int view_align, int enter_editmode, +static void make_prim_ext(bContext *C, float *loc, float *rot, int enter_editmode, int type, int tot, int seg, int subdiv, float dia, float depth, int ext, int fill) { @@ -1316,14 +1311,15 @@ static void make_prim_ext(bContext *C, int view_align, int enter_editmode, float mat[4][4]; if(obedit==NULL || obedit->type!=OB_MESH) { + obedit= ED_object_add_type(C, OB_MESH, loc, rot, FALSE); + /* create editmode */ - obedit= ED_object_add_type(C, OB_MESH, view_align, FALSE); ED_object_enter_editmode(C, EM_DO_UNDO|EM_IGNORE_LAYER); /* rare cases the active layer is messed up */ newob = 1; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); - dia *= new_primitive_matrix(C, view_align, mat); + dia *= new_primitive_matrix(C, loc, rot, mat); make_prim(obedit, type, mat, tot, seg, subdiv, dia, depth, ext, fill); @@ -1340,11 +1336,14 @@ static void make_prim_ext(bContext *C, int view_align, int enter_editmode, static int add_primitive_plane_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); /* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */ - make_prim_ext(C, view_align, enter_editmode, PRIM_PLANE, 4, 0, 0, sqrt(2.0f), 0.0f, 0, 1); + make_prim_ext(C, loc, rot, enter_editmode, + PRIM_PLANE, 4, 0, 0, sqrt(2.0f), 0.0f, 0, 1); return OPERATOR_FINISHED; } @@ -1368,11 +1367,14 @@ void MESH_OT_primitive_plane_add(wmOperatorType *ot) static int add_primitive_cube_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); /* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */ - make_prim_ext(C, view_align, enter_editmode, PRIM_CUBE, 4, 0, 0, sqrt(2.0f), 1.0f, 1, 1); + make_prim_ext(C, loc, rot, enter_editmode, + PRIM_CUBE, 4, 0, 0, sqrt(2.0f), 1.0f, 1, 1); return OPERATOR_FINISHED; } @@ -1396,10 +1398,12 @@ void MESH_OT_primitive_cube_add(wmOperatorType *ot) static int add_primitive_circle_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - make_prim_ext(C, view_align, enter_editmode, + make_prim_ext(C, loc, rot, enter_editmode, PRIM_CIRCLE, RNA_int_get(op->ptr, "vertices"), 0, 0, RNA_float_get(op->ptr,"radius"), 0.0f, 0, RNA_boolean_get(op->ptr, "fill")); @@ -1432,10 +1436,12 @@ void MESH_OT_primitive_circle_add(wmOperatorType *ot) static int add_primitive_tube_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - make_prim_ext(C, view_align, enter_editmode, + make_prim_ext(C, loc, rot, enter_editmode, PRIM_CYLINDER, RNA_int_get(op->ptr, "vertices"), 0, 0, RNA_float_get(op->ptr,"radius"), RNA_float_get(op->ptr, "depth"), 1, @@ -1470,10 +1476,12 @@ void MESH_OT_primitive_tube_add(wmOperatorType *ot) static int add_primitive_cone_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - make_prim_ext(C, view_align, enter_editmode, + make_prim_ext(C, loc, rot, enter_editmode, PRIM_CONE, RNA_int_get(op->ptr, "vertices"), 0, 0, RNA_float_get(op->ptr,"radius"), RNA_float_get(op->ptr, "depth"), 0, RNA_boolean_get(op->ptr, "cap_end")); @@ -1507,10 +1515,12 @@ void MESH_OT_primitive_cone_add(wmOperatorType *ot) static int add_primitive_grid_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - make_prim_ext(C, view_align, enter_editmode, + make_prim_ext(C, loc, rot, enter_editmode, PRIM_GRID, RNA_int_get(op->ptr, "x_subdivisions"), RNA_int_get(op->ptr, "y_subdivisions"), 0, RNA_float_get(op->ptr,"size"), 0.0f, 0, 1); @@ -1543,10 +1553,12 @@ void MESH_OT_primitive_grid_add(wmOperatorType *ot) static int add_primitive_monkey_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - make_prim_ext(C, view_align, enter_editmode, + make_prim_ext(C, loc, rot, enter_editmode, PRIM_MONKEY, 0, 0, 2, 0.0f, 0.0f, 0, 0); return OPERATOR_FINISHED; @@ -1572,10 +1584,12 @@ void MESH_OT_primitive_monkey_add(wmOperatorType *ot) static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - make_prim_ext(C, view_align, enter_editmode, + make_prim_ext(C, loc, rot, enter_editmode, PRIM_UVSPHERE, RNA_int_get(op->ptr, "rings"), RNA_int_get(op->ptr, "segments"), 0, RNA_float_get(op->ptr,"size"), 0.0f, 0, 0); @@ -1608,10 +1622,12 @@ void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot) static int add_primitive_icosphere_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - make_prim_ext(C, view_align, enter_editmode, + make_prim_ext(C, loc, rot, enter_editmode, PRIM_ICOSPHERE, 0, 0, RNA_int_get(op->ptr, "subdivisions"), RNA_float_get(op->ptr,"size"), 0.0f, 0, 0); diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 5ad6e2d557c..abc182ef7ae 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -99,38 +99,47 @@ /************************** Exported *****************************/ -void ED_object_base_init_from_view(bContext *C, Base *base, int view_align) +void ED_object_location_from_view(bContext *C, float *loc) { View3D *v3d= CTX_wm_view3d(C); Scene *scene= CTX_data_scene(C); - Object *ob= base->object; - if (scene==NULL) - return; + if (v3d) { + if (v3d->localvd) + copy_v3_v3(loc, v3d->cursor); + else + copy_v3_v3(loc, scene->cursor); + } else { + copy_v3_v3(loc, scene->cursor); + } +} + +void ED_object_rotation_from_view(bContext *C, float *rot) +{ + RegionView3D *rv3d = CTX_wm_region_view3d(C); - if (v3d==NULL) { - base->lay = scene->lay; - VECCOPY(ob->loc, scene->cursor); - } - else { - if (v3d->localvd) { - base->lay= ob->lay= v3d->layact | v3d->lay; - VECCOPY(ob->loc, v3d->cursor); - } - else { - base->lay= ob->lay= v3d->layact; - VECCOPY(ob->loc, scene->cursor); - } - - if (view_align) { - RegionView3D *rv3d = CTX_wm_region_view3d(C); - if(rv3d) { - rv3d->viewquat[0]= -rv3d->viewquat[0]; - quat_to_eul( ob->rot,rv3d->viewquat); - rv3d->viewquat[0]= -rv3d->viewquat[0]; - } - } + if(rv3d) { + rv3d->viewquat[0]= -rv3d->viewquat[0]; + quat_to_eul( rot, rv3d->viewquat); + rv3d->viewquat[0]= -rv3d->viewquat[0]; } + else + rot[0] = rot[1] = rot[2] = 0.f; +} + +void ED_object_base_init_transform(bContext *C, Base *base, float *loc, float *rot) +{ + Object *ob= base->object; + Scene *scene= CTX_data_scene(C); + + if (!scene) return; + + if (loc) + copy_v3_v3(ob->loc, loc); + + if (rot) + copy_v3_v3(ob->rot, rot); + where_is_object(scene, ob); } @@ -143,20 +152,44 @@ void add_object_draw(Scene *scene, View3D *v3d, int type) /* for toolbox or menu void ED_object_add_generic_props(wmOperatorType *ot, int do_editmode) { - RNA_def_boolean(ot->srna, "view_align", 0, "View Align", "Align the new object to the view."); + RNA_def_boolean(ot->srna, "view_align", 0, "Align to View", "Align the new object to the view."); if(do_editmode) RNA_def_boolean(ot->srna, "enter_editmode", 0, "Enter Editmode", "Enter editmode when adding this object."); + + RNA_def_float_vector(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location for the newly added object.", -FLT_MAX, FLT_MAX); + RNA_def_float_rotation(ot->srna, "rotation", 3, NULL, -FLT_MAX, FLT_MAX, "Rotation", "Rotation for the newly added object", -FLT_MAX, FLT_MAX); } static void object_add_generic_invoke_options(bContext *C, wmOperator *op) { - if (!RNA_property_is_set(op->ptr, "view_align")) - RNA_boolean_set(op->ptr, "view_align", U.flag & USER_ADD_VIEWALIGNED); - if(RNA_struct_find_property(op->ptr, "enter_editmode")) /* optional */ if (!RNA_property_is_set(op->ptr, "enter_editmode")) RNA_boolean_set(op->ptr, "enter_editmode", U.flag & USER_ADD_EDITMODE); + + if (!RNA_property_is_set(op->ptr, "location")) { + float loc[3]; + + ED_object_location_from_view(C, loc); + RNA_float_set_array(op->ptr, "location", loc); + } + + if (!RNA_property_is_set(op->ptr, "rotation")) { + int view_align; + float rot[3] = {0.f, 0.f, 0.f}; + + /* view align property is just used to set rotation property */ + if (!RNA_property_is_set(op->ptr, "view_align")) + view_align = U.flag & USER_ADD_VIEWALIGNED; + else + view_align = RNA_boolean_get(op->ptr, "view_align"); + + if (view_align) + ED_object_rotation_from_view(C, rot); + + RNA_float_set_array(op->ptr, "rotation", rot); + } + } int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *event) @@ -165,18 +198,20 @@ int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *event) return op->type->exec(C, op); } -void ED_object_add_generic_get_opts(wmOperator *op, int *view_align, int *enter_editmode) +void ED_object_add_generic_get_opts(wmOperator *op, float *loc, float *rot, int *enter_editmode) { - *view_align= RNA_boolean_get(op->ptr, "view_align"); *enter_editmode = FALSE; if(RNA_struct_find_property(op->ptr, "enter_editmode") && RNA_boolean_get(op->ptr, "enter_editmode")) { *enter_editmode = TRUE; } + + RNA_float_get_array(op->ptr, "location", loc); + RNA_float_get_array(op->ptr, "rotation", rot); } /* for object add primitive operators */ -Object *ED_object_add_type(bContext *C, int type, int view_align, int enter_editmode) +Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int enter_editmode) { Scene *scene= CTX_data_scene(C); Object *ob; @@ -191,7 +226,7 @@ Object *ED_object_add_type(bContext *C, int type, int view_align, int enter_edit ED_base_object_activate(C, BASACT); /* more editor stuff */ - ED_object_base_init_from_view(C, BASACT, view_align); + ED_object_base_init_transform(C, BASACT, loc, rot); DAG_scene_sort(scene); @@ -204,9 +239,11 @@ Object *ED_object_add_type(bContext *C, int type, int view_align, int enter_edit /* for object add operator */ static int object_add_exec(bContext *C, wmOperator *op) { - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); - ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), view_align, enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); + ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode); return OPERATOR_FINISHED; } @@ -258,11 +295,13 @@ void add_effector_draw(Scene *scene, View3D *v3d, int type) /* for toolbox or me static Object *effector_add_type(bContext *C, wmOperator *op, int type) { Object *ob; - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); if(type==PFIELD_GUIDE) { - ob= ED_object_add_type(C, OB_CURVE, view_align, FALSE); + ob= ED_object_add_type(C, OB_CURVE, loc, rot, FALSE); rename_id(&ob->id, "CurveGuide"); ((Curve*)ob->data)->flag |= CU_PATH|CU_3D; @@ -273,7 +312,7 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type) ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); } else { - ob= ED_object_add_type(C, OB_EMPTY, view_align, FALSE); + ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE); rename_id(&ob->id, "Field"); switch(type) { @@ -335,13 +374,14 @@ static int object_add_curve_exec(bContext *C, wmOperator *op) ListBase *editnurb; Nurb *nu; int newob= 0, type= RNA_enum_get(op->ptr, "type"); - int view_align, enter_editmode; + int enter_editmode; + float loc[3], rot[3]; object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); if(obedit==NULL || obedit->type!=OB_CURVE) { - obedit= ED_object_add_type(C, OB_CURVE, view_align, TRUE); + obedit= ED_object_add_type(C, OB_CURVE, loc, rot, TRUE); newob = 1; if(type & CU_PRIM_PATH) @@ -419,13 +459,14 @@ static int object_add_surface_exec(bContext *C, wmOperator *op) ListBase *editnurb; Nurb *nu; int newob= 0; - int view_align, enter_editmode; + int enter_editmode; + float loc[3], rot[3]; object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); if(obedit==NULL || obedit->type!=OB_SURF) { - obedit= ED_object_add_type(C, OB_SURF, view_align, TRUE); + obedit= ED_object_add_type(C, OB_SURF, loc, rot, TRUE); newob = 1; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); @@ -479,13 +520,14 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op) MetaBall *mball; MetaElem *elem; int newob= 0; - int view_align, enter_editmode; + int enter_editmode; + float loc[3], rot[3]; object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); if(obedit==NULL || obedit->type!=OB_MBALL) { - obedit= ED_object_add_type(C, OB_MBALL, view_align, TRUE); + obedit= ED_object_add_type(C, OB_MBALL, loc, rot, TRUE); newob = 1; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); @@ -544,15 +586,16 @@ void OBJECT_OT_metaball_add(wmOperatorType *ot) static int object_add_text_exec(bContext *C, wmOperator *op) { Object *obedit= CTX_data_edit_object(C); - int view_align, enter_editmode; + int enter_editmode; + float loc[3], rot[3]; object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); if(obedit && obedit->type==OB_FONT) return OPERATOR_CANCELLED; - obedit= ED_object_add_type(C, OB_FONT, view_align, enter_editmode); + obedit= ED_object_add_type(C, OB_FONT, loc, rot, enter_editmode); WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit); @@ -582,13 +625,14 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) View3D *v3d= CTX_wm_view3d(C); RegionView3D *rv3d= NULL; int newob= 0; - int view_align, enter_editmode; + int enter_editmode; + float loc[3], rot[3]; object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) { - obedit= ED_object_add_type(C, OB_ARMATURE, view_align, TRUE); + obedit= ED_object_add_type(C, OB_ARMATURE, loc, rot, TRUE); ED_object_enter_editmode(C, 0); newob = 1; } @@ -636,10 +680,12 @@ static int object_lamp_add_exec(bContext *C, wmOperator *op) { Object *ob; int type= RNA_enum_get(op->ptr, "type"); - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); - ob= ED_object_add_type(C, OB_LAMP, view_align, FALSE); + ob= ED_object_add_type(C, OB_LAMP, loc, rot, FALSE); if(ob && ob->data) ((Lamp*)ob->data)->type= type; @@ -679,11 +725,13 @@ static int group_instance_add_exec(bContext *C, wmOperator *op) { Group *group= BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "type")); - int view_align, enter_editmode; - ED_object_add_generic_get_opts(op, &view_align, &enter_editmode); + int enter_editmode; + float loc[3], rot[3]; + + ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode); if(group) { - Object *ob= ED_object_add_type(C, OB_EMPTY, view_align, FALSE); + Object *ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE); rename_id(&ob->id, group->id.name+2); ob->dup_group= group; ob->transflag |= OB_DUPLIGROUP; |