Fix adding objects in local view

This commit is contained in:
Campbell Barton 2018-12-07 12:59:04 +11:00
parent a48bd6cc74
commit 341d5b08b0
8 changed files with 140 additions and 76 deletions

View File

@ -477,13 +477,14 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
Nurb *nu;
bool newob = false;
bool enter_editmode;
ushort local_view_bits;
float dia;
float loc[3], rot[3];
float mat[4][4];
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL))
return OPERATOR_CANCELLED;
if (!isSurf) { /* adding curve */
@ -491,7 +492,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
const char *name = get_curve_defname(type);
Curve *cu;
obedit = ED_object_add_type(C, OB_CURVE, name, loc, rot, true);
obedit = ED_object_add_type(C, OB_CURVE, name, loc, rot, true, local_view_bits);
newob = true;
cu = (Curve *)obedit->data;
@ -507,7 +508,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
else { /* adding surface */
if (obedit == NULL || obedit->type != OB_SURF) {
const char *name = get_surf_defname(type);
obedit = ED_object_add_type(C, OB_SURF, name, loc, rot, true);
obedit = ED_object_add_type(C, OB_SURF, name, loc, rot, true, local_view_bits);
newob = true;
}
else {

View File

@ -1815,11 +1815,17 @@ static bool gp_session_initdata(bContext *C, wmOperator *op, tGPsdata *p)
return 0;
}
/* if active object doesn't exist or isn't a GP Object, create one */
const float *cur = p->scene->cursor.location;
if ((!obact) || (obact->type != OB_GPENCIL)) {
View3D *v3d = p->sa->spacedata.first;
/* if active object doesn't exist or isn't a GP Object, create one */
const float *cur = p->scene->cursor.location;
ushort local_view_bits = 0;
if (v3d->localvd) {
local_view_bits = v3d->local_view_uuid;
}
/* create new default object */
obact = ED_add_gpencil_object(C, p->scene, cur);
obact = ED_add_gpencil_object(C, p->scene, cur, local_view_bits);
}
/* assign object after all checks to be sure we have one active */
p->ob = obact;

View File

@ -1205,11 +1205,11 @@ void ED_gpencil_reset_layers_parent(Depsgraph *depsgraph, Object *obact, bGPdata
/* GP Object Stuff */
/* Helper function to create new OB_GPENCIL Object */
Object *ED_add_gpencil_object(bContext *C, Scene *UNUSED(scene), const float loc[3])
Object *ED_add_gpencil_object(bContext *C, Scene *UNUSED(scene), const float loc[3], ushort local_view_bits)
{
float rot[3] = {0.0f};
Object *ob = ED_object_add_type(C, OB_GPENCIL, NULL, loc, rot, false);
Object *ob = ED_object_add_type(C, OB_GPENCIL, NULL, loc, rot, false, local_view_bits);
/* define size */
BKE_object_obdata_size_init(ob, GP_OBGPENCIL_DEFAULT_SIZE);

View File

@ -235,7 +235,8 @@ void ED_gpencil_create_monkey(struct bContext *C, float mat[4][4]);
void ED_gpencil_create_stroke(struct bContext *C, float mat[4][4]);
/* ------------ Object Utilities ------------ */
struct Object *ED_add_gpencil_object(struct bContext *C, struct Scene *scene, const float loc[3]);
struct Object *ED_add_gpencil_object(
struct bContext *C, struct Scene *scene, const float loc[3], unsigned short local_view_bits);
void ED_gpencil_add_defaults(struct bContext *C);
/* set object modes */
void ED_gpencil_setup_modes(struct bContext *C, struct bGPdata *gpd, int newmode);

View File

@ -178,14 +178,15 @@ void ED_object_add_unit_props_size(struct wmOperatorType *ot);
void ED_object_add_unit_props_radius(struct wmOperatorType *ot);
void ED_object_add_generic_props(struct wmOperatorType *ot, bool do_editmode);
void ED_object_add_mesh_props(struct wmOperatorType *ot);
bool ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, const char view_align_axis,
float loc[3], float rot[3],
bool *enter_editmode, bool *is_view_aligned);
bool ED_object_add_generic_get_opts(
struct bContext *C, struct wmOperator *op, const char view_align_axis,
float loc[3], float rot[3],
bool *enter_editmode, unsigned short *local_view_bits, bool *is_view_aligned);
struct Object *ED_object_add_type(
struct bContext *C,
int type, const char *name, const float loc[3], const float rot[3],
bool enter_editmode)
bool enter_editmode, unsigned short local_view_bits)
ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
void ED_object_single_users(struct Main *bmain, struct Scene *scene, const bool full, const bool copy_groups);

View File

@ -66,14 +66,14 @@ typedef struct MakePrimitiveData {
static Object *make_prim_init(
bContext *C, const char *idname,
const float loc[3], const float rot[3],
const float loc[3], const float rot[3], ushort local_view_bits,
MakePrimitiveData *r_creation_data)
{
Object *obedit = CTX_data_edit_object(C);
r_creation_data->was_editmode = false;
if (obedit == NULL || obedit->type != OB_MESH) {
obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false);
obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false, local_view_bits);
/* create editmode */
ED_object_editmode_enter(C, EM_IGNORE_LAYER); /* rare cases the active layer is messed up */
@ -111,11 +111,14 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@ -161,11 +164,14 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@ -218,6 +224,7 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
int cap_end, cap_tri;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
@ -225,8 +232,10 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
cap_tri = (cap_end == 2);
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@ -277,14 +286,17 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
const bool cap_end = (end_fill_type != 0);
const bool cap_tri = (end_fill_type == 2);
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@ -339,14 +351,17 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
const bool cap_end = (end_fill_type != 0);
const bool cap_tri = (end_fill_type == 2);
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@ -400,11 +415,14 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@ -459,12 +477,15 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
float loc[3], rot[3];
float dia;
bool enter_editmode;
ushort local_view_bits;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Y', loc, rot, &enter_editmode, NULL);
ED_object_add_generic_get_opts(C, op, 'Y', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Suzanne"), loc, rot, &creation_data);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Suzanne"),
loc, rot, local_view_bits, &creation_data);
dia = RNA_float_get(op->ptr, "size") / 2.0f;
mul_mat3_m4_fl(creation_data.mat, dia);
@ -513,11 +534,14 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@ -568,11 +592,14 @@ static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
BMEditMesh *em;
float loc[3], rot[3];
bool enter_editmode;
ushort local_view_bits;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"), loc, rot, &creation_data);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
obedit = make_prim_init(
C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"),
loc, rot, local_view_bits, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {

View File

@ -309,9 +309,10 @@ void ED_object_add_mesh_props(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "calc_uvs", true, "Generate UVs", "Generate a default UV map");
}
bool ED_object_add_generic_get_opts(bContext *C, wmOperator *op, const char view_align_axis,
float loc[3], float rot[3],
bool *enter_editmode, bool *is_view_aligned)
bool ED_object_add_generic_get_opts(
bContext *C, wmOperator *op, const char view_align_axis,
float loc[3], float rot[3],
bool *enter_editmode, ushort *local_view_bits, bool *is_view_aligned)
{
PropertyRNA *prop;
@ -329,6 +330,13 @@ bool ED_object_add_generic_get_opts(bContext *C, wmOperator *op, const char view
}
}
if (local_view_bits) {
View3D *v3d = CTX_wm_view3d(C);
if (v3d && v3d->localvd) {
*local_view_bits = v3d->local_view_uuid;
}
}
/* Location! */
{
float _loc[3];
@ -379,7 +387,7 @@ Object *ED_object_add_type(
bContext *C,
int type, const char *name,
const float loc[3], const float rot[3],
bool enter_editmode)
bool enter_editmode, ushort local_view_bits)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
@ -393,6 +401,7 @@ Object *ED_object_add_type(
/* deselects all, sets active object */
ob = BKE_object_add(bmain, scene, view_layer, type, name);
BASACT(view_layer)->local_view_bits = local_view_bits;
/* editor level activate, notifiers */
ED_object_base_activate(C, view_layer->basact);
@ -424,14 +433,15 @@ static int object_add_exec(bContext *C, wmOperator *op)
{
Object *ob;
bool enter_editmode;
ushort local_view_bits;
float loc[3], rot[3], radius;
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
radius = RNA_float_get(op->ptr, "radius");
ob = ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), NULL, loc, rot, enter_editmode);
ob = ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), NULL, loc, rot, enter_editmode, local_view_bits);
if (ob->type == OB_LATTICE) {
/* lattice is a special case!
@ -486,17 +496,18 @@ static int lightprobe_add_exec(bContext *C, wmOperator *op)
LightProbe *probe;
int type;
bool enter_editmode;
ushort local_view_bits;
float loc[3], rot[3];
float radius;
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
type = RNA_enum_get(op->ptr, "type");
radius = RNA_float_get(op->ptr, "radius");
ob = ED_object_add_type(C, OB_LIGHTPROBE, get_lightprobe_defname(type), loc, rot, false);
ob = ED_object_add_type(C, OB_LIGHTPROBE, get_lightprobe_defname(type), loc, rot, false, local_view_bits);
BKE_object_obdata_size_init(ob, radius);
probe = (LightProbe *)ob->data;
@ -556,21 +567,22 @@ static int effector_add_exec(bContext *C, wmOperator *op)
Object *ob;
int type;
bool enter_editmode;
ushort local_view_bits;
float loc[3], rot[3];
float mat[4][4];
float dia;
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
type = RNA_enum_get(op->ptr, "type");
dia = RNA_float_get(op->ptr, "radius");
if (type == PFIELD_GUIDE) {
Curve *cu;
const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "CurveGuide");
ob = ED_object_add_type(C, OB_CURVE, name, loc, rot, false);
ob = ED_object_add_type(C, OB_CURVE, name, loc, rot, false, local_view_bits);
cu = ob->data;
cu->flag |= CU_PATH | CU_3D;
@ -582,7 +594,7 @@ static int effector_add_exec(bContext *C, wmOperator *op)
}
else {
const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "Field");
ob = ED_object_add_type(C, OB_EMPTY, name, loc, rot, false);
ob = ED_object_add_type(C, OB_EMPTY, name, loc, rot, false, local_view_bits);
BKE_object_obdata_size_init(ob, dia);
if (ELEM(type, PFIELD_WIND, PFIELD_VORTEX))
ob->empty_drawtype = OB_SINGLE_ARROW;
@ -625,15 +637,16 @@ static int object_camera_add_exec(bContext *C, wmOperator *op)
Object *ob;
Camera *cam;
bool enter_editmode;
ushort local_view_bits;
float loc[3], rot[3];
/* force view align for cameras */
RNA_boolean_set(op->ptr, "view_align", true);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
ob = ED_object_add_type(C, OB_CAMERA, NULL, loc, rot, false);
}
ob = ED_object_add_type(C, OB_CAMERA, NULL, loc, rot, false, local_view_bits);
if (v3d) {
if (v3d->camera == NULL)
@ -680,16 +693,17 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op)
Object *obedit = CTX_data_edit_object(C);
bool newob = false;
bool enter_editmode;
ushort local_view_bits;
float loc[3], rot[3];
float mat[4][4];
float dia;
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
if (obedit == NULL || obedit->type != OB_MBALL) {
obedit = ED_object_add_type(C, OB_MBALL, NULL, loc, rot, true);
obedit = ED_object_add_type(C, OB_MBALL, NULL, loc, rot, true, local_view_bits);
newob = true;
}
else {
@ -738,16 +752,17 @@ static int object_add_text_exec(bContext *C, wmOperator *op)
{
Object *obedit = CTX_data_edit_object(C);
bool enter_editmode;
ushort local_view_bits;
float loc[3], rot[3];
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
if (obedit && obedit->type == OB_FONT)
return OPERATOR_CANCELLED;
obedit = ED_object_add_type(C, OB_FONT, NULL, loc, rot, enter_editmode);
obedit = ED_object_add_type(C, OB_FONT, NULL, loc, rot, enter_editmode, local_view_bits);
BKE_object_obdata_size_init(obedit, RNA_float_get(op->ptr, "radius"));
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
@ -782,15 +797,16 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
RegionView3D *rv3d = CTX_wm_region_view3d(C);
bool newob = false;
bool enter_editmode;
ushort local_view_bits;
float loc[3], rot[3], dia;
bool view_aligned = rv3d && (U.flag & USER_ADD_VIEWALIGNED);
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
if ((obedit == NULL) || (obedit->type != OB_ARMATURE)) {
obedit = ED_object_add_type(C, OB_ARMATURE, NULL, loc, rot, true);
obedit = ED_object_add_type(C, OB_ARMATURE, NULL, loc, rot, true, local_view_bits);
ED_object_editmode_enter(C, 0);
newob = true;
}
@ -840,13 +856,14 @@ static int object_empty_add_exec(bContext *C, wmOperator *op)
{
Object *ob;
int type = RNA_enum_get(op->ptr, "type");
ushort local_view_bits;
float loc[3], rot[3];
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
ob = ED_object_add_type(C, OB_EMPTY, NULL, loc, rot, false);
}
ob = ED_object_add_type(C, OB_EMPTY, NULL, loc, rot, false, local_view_bits);
BKE_object_empty_draw_type_set(ob, type);
BKE_object_obdata_size_init(ob, RNA_float_get(op->ptr, "radius"));
@ -899,7 +916,14 @@ static int empty_drop_named_image_invoke(bContext *C, wmOperator *op, const wmEv
ob = ob_cursor;
}
else {
ob = ED_object_add_type(C, OB_EMPTY, NULL, NULL, NULL, false);
/* add new empty */
ushort local_view_bits;
float rot[3];
if (!ED_object_add_generic_get_opts(C, op, 'Z', NULL, rot, NULL, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
ob = ED_object_add_type(C, OB_EMPTY, NULL, NULL, rot, false, local_view_bits);
ED_object_location_from_view(C, ob->loc);
ED_view3d_cursor3d_position(C, event->mval, false, ob->loc);
@ -951,14 +975,15 @@ static int object_gpencil_add_exec(bContext *C, wmOperator *op)
const int type = RNA_enum_get(op->ptr, "type");
ushort local_view_bits;
float loc[3], rot[3];
bool newob = false;
/* Note: We use 'Y' here (not 'Z'), as */
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Y', loc, rot, NULL, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Y', loc, rot, NULL, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
/* add new object if not currently editing a GP object,
* or if "empty" was chosen (i.e. user wants a blank GP canvas)
*/
@ -982,7 +1007,7 @@ static int object_gpencil_add_exec(bContext *C, wmOperator *op)
}
float radius = RNA_float_get(op->ptr, "radius");
ob = ED_object_add_type(C, OB_GPENCIL, ob_name, loc, rot, true);
ob = ED_object_add_type(C, OB_GPENCIL, ob_name, loc, rot, true, local_view_bits);
gpd = ob->data;
newob = true;
@ -1080,13 +1105,14 @@ static int object_light_add_exec(bContext *C, wmOperator *op)
Object *ob;
Lamp *la;
int type = RNA_enum_get(op->ptr, "type");
ushort local_view_bits;
float loc[3], rot[3];
WM_operator_view3d_unit_defaults(C, op);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
ob = ED_object_add_type(C, OB_LAMP, get_light_defname(type), loc, rot, false);
}
ob = ED_object_add_type(C, OB_LAMP, get_light_defname(type), loc, rot, false, local_view_bits);
float size = RNA_float_get(op->ptr, "radius");
/* Better defaults for light size. */
@ -1143,6 +1169,7 @@ static int collection_instance_add_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Collection *collection;
ushort local_view_bits;
float loc[3], rot[3];
if (RNA_struct_property_is_set(op->ptr, "name")) {
@ -1164,9 +1191,9 @@ static int collection_instance_add_exec(bContext *C, wmOperator *op)
else
collection = BLI_findlink(&CTX_data_main(C)->collection, RNA_enum_get(op->ptr, "collection"));
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
if (collection) {
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
@ -1177,7 +1204,7 @@ static int collection_instance_add_exec(bContext *C, wmOperator *op)
active_lc = BKE_layer_collection_activate_parent(view_layer, active_lc);
}
Object *ob = ED_object_add_type(C, OB_EMPTY, collection->id.name + 2, loc, rot, false);
Object *ob = ED_object_add_type(C, OB_EMPTY, collection->id.name + 2, loc, rot, false, local_view_bits);
ob->dup_group = collection;
ob->transflag |= OB_DUPLICOLLECTION;
id_us_plus(&collection->id);
@ -1225,13 +1252,14 @@ void OBJECT_OT_collection_instance_add(wmOperatorType *ot)
static int object_speaker_add_exec(bContext *C, wmOperator *op)
{
Object *ob;
ushort local_view_bits;
float loc[3], rot[3];
Scene *scene = CTX_data_scene(C);
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, NULL))
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
ob = ED_object_add_type(C, OB_SPEAKER, NULL, loc, rot, false);
}
ob = ED_object_add_type(C, OB_SPEAKER, NULL, loc, rot, false, local_view_bits);
/* to make it easier to start using this immediately in NLA, a default sound clip is created
* ready to be moved around to retime the sound and/or make new sound clips

View File

@ -558,7 +558,7 @@ static int collection_instance_exec(bContext *C, wmOperator *UNUSED(op))
/* Effectively instance the collections. */
GSET_ITER(collections_to_edit_iter, data.collections_to_edit) {
Collection *collection = BLI_gsetIterator_getKey(&collections_to_edit_iter);
Object *ob = ED_object_add_type(C, OB_EMPTY, collection->id.name + 2, scene->cursor.location, NULL, false);
Object *ob = ED_object_add_type(C, OB_EMPTY, collection->id.name + 2, scene->cursor.location, NULL, false, 0);
ob->dup_group = collection;
ob->transflag |= OB_DUPLICOLLECTION;
id_lib_extern(&collection->id);