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:
authorMatt Ebb <matt@mke3.net>2009-12-28 07:09:46 +0300
committerMatt Ebb <matt@mke3.net>2009-12-28 07:09:46 +0300
commitdbf295b904fb0bcb59656a57e32474b1f5adf77a (patch)
treee6923fff2baae73f1714fcf0a77b1ef03c71efa9 /source/blender
parent860e46082f24afdad9e40e15ac04d35f06924c10 (diff)
Added location and rotation operator properties for adding objects. The Align to View boolean
is now just used to set the rotation property value during invoke. This removes some reliance on 3d view info for non-interactive use, and also lets you specify new object's locations/rotations explicitly when calling from Python.
Diffstat (limited to 'source/blender')
-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;