Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/armature/editarmature.c2
-rw-r--r--source/blender/editors/curve/editfont.c6
-rw-r--r--source/blender/editors/include/ED_object.h9
-rw-r--r--source/blender/editors/mesh/editmesh_add.c102
-rw-r--r--source/blender/editors/object/object_add.c172
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;