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:
authorCampbell Barton <ideasman42@gmail.com>2020-09-07 07:43:13 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-09-07 07:43:13 +0300
commit379d5d7349400d09e1c266665398e97dcb7a9993 (patch)
tree51d5d49d50a65952b2f8882c606d2380455e5be6 /source/blender
parent955a4142ec53ab2bc446dbf292ce5c548d86de40 (diff)
Cleanup: OBJECT_OT_collection_instance_add
Minor changes to match OBJECT_OT_data_instance_add. - Access properties once & reuse them. - Early exit when the data to instance can't be found.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/object/object_add.c57
1 files changed, 30 insertions, 27 deletions
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 59c784658e8..bfb13fb99bf 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -1434,55 +1434,58 @@ static int collection_instance_add_exec(bContext *C, wmOperator *op)
ushort local_view_bits;
float loc[3], rot[3];
- if (RNA_struct_property_is_set(op->ptr, "name")) {
- char name[MAX_ID_NAME - 2];
+ PropertyRNA *prop_name = RNA_struct_find_property(op->ptr, "name");
+ PropertyRNA *prop_location = RNA_struct_find_property(op->ptr, "location");
- RNA_string_get(op->ptr, "name", name);
+ if (RNA_property_is_set(op->ptr, prop_name)) {
+ char name[MAX_ID_NAME - 2];
+ RNA_property_string_get(op->ptr, prop_name, name);
collection = (Collection *)BKE_libblock_find_name(bmain, ID_GR, name);
- if (0 == RNA_struct_property_is_set(op->ptr, "location")) {
+ if (!RNA_property_is_set(op->ptr, prop_location)) {
const wmEvent *event = CTX_wm_window(C)->eventstate;
ARegion *region = CTX_wm_region(C);
const int mval[2] = {event->x - region->winrct.xmin, event->y - region->winrct.ymin};
ED_object_location_from_view(C, loc);
ED_view3d_cursor3d_position(C, mval, false, loc);
- RNA_float_set_array(op->ptr, "location", loc);
+ RNA_property_float_set_array(op->ptr, prop_location, loc);
}
}
else {
collection = BLI_findlink(&bmain->collections, RNA_enum_get(op->ptr, "collection"));
}
+ if (collection == NULL) {
+ return OPERATOR_CANCELLED;
+ }
+
if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, NULL, NULL, &local_view_bits, NULL)) {
return OPERATOR_CANCELLED;
}
- if (collection) {
- Scene *scene = CTX_data_scene(C);
- ViewLayer *view_layer = CTX_data_view_layer(C);
- /* Avoid dependency cycles. */
- LayerCollection *active_lc = BKE_layer_collection_get_active(view_layer);
- while (BKE_collection_cycle_find(active_lc->collection, collection)) {
- active_lc = BKE_layer_collection_activate_parent(view_layer, active_lc);
- }
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
- Object *ob = ED_object_add_type(
- C, OB_EMPTY, collection->id.name + 2, loc, rot, false, local_view_bits);
- ob->instance_collection = collection;
- ob->empty_drawsize = U.collection_instance_empty_size;
- ob->transflag |= OB_DUPLICOLLECTION;
- id_us_plus(&collection->id);
+ /* Avoid dependency cycles. */
+ LayerCollection *active_lc = BKE_layer_collection_get_active(view_layer);
+ while (BKE_collection_cycle_find(active_lc->collection, collection)) {
+ active_lc = BKE_layer_collection_activate_parent(view_layer, active_lc);
+ }
- /* works without this except if you try render right after, see: 22027 */
- DEG_relations_tag_update(bmain);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
- WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
+ Object *ob = ED_object_add_type(
+ C, OB_EMPTY, collection->id.name + 2, loc, rot, false, local_view_bits);
+ ob->instance_collection = collection;
+ ob->empty_drawsize = U.collection_instance_empty_size;
+ ob->transflag |= OB_DUPLICOLLECTION;
+ id_us_plus(&collection->id);
- return OPERATOR_FINISHED;
- }
+ /* works without this except if you try render right after, see: 22027 */
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
- return OPERATOR_CANCELLED;
+ return OPERATOR_FINISHED;
}
/* only used as menu */