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:
Diffstat (limited to 'source/blender/editors/object/object_select.c')
-rw-r--r--source/blender/editors/object/object_select.c2060
1 files changed, 1037 insertions, 1023 deletions
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index 919055aa668..06bd4d76973 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -96,26 +96,26 @@
*/
void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
{
- if (mode == BA_INVERT) {
- mode = (base->flag & BASE_SELECTED) != 0 ? BA_DESELECT : BA_SELECT;
- }
-
- if (base) {
- switch (mode) {
- case BA_SELECT:
- if ((base->flag & BASE_SELECTABLE) != 0) {
- base->flag |= BASE_SELECTED;
- }
- break;
- case BA_DESELECT:
- base->flag &= ~BASE_SELECTED;
- break;
- case BA_INVERT:
- /* Never happens. */
- break;
- }
- BKE_scene_object_base_flag_sync_from_base(base);
- }
+ if (mode == BA_INVERT) {
+ mode = (base->flag & BASE_SELECTED) != 0 ? BA_DESELECT : BA_SELECT;
+ }
+
+ if (base) {
+ switch (mode) {
+ case BA_SELECT:
+ if ((base->flag & BASE_SELECTABLE) != 0) {
+ base->flag |= BASE_SELECTED;
+ }
+ break;
+ case BA_DESELECT:
+ base->flag &= ~BASE_SELECTED;
+ break;
+ case BA_INVERT:
+ /* Never happens. */
+ break;
+ }
+ BKE_scene_object_base_flag_sync_from_base(base);
+ }
}
/**
@@ -123,75 +123,77 @@ void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
*/
void ED_object_base_activate(bContext *C, Base *base)
{
- struct wmMsgBus *mbus = CTX_wm_message_bus(C);
- Scene *scene = CTX_data_scene(C);
- ViewLayer *view_layer = CTX_data_view_layer(C);
- view_layer->basact = base;
-
- WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
- WM_msg_publish_rna_prop(mbus, &scene->id, view_layer, LayerObjects, active);
- DEG_id_tag_update(&CTX_data_scene(C)->id, ID_RECALC_SELECT);
+ struct wmMsgBus *mbus = CTX_wm_message_bus(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ view_layer->basact = base;
+
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
+ WM_msg_publish_rna_prop(mbus, &scene->id, view_layer, LayerObjects, active);
+ DEG_id_tag_update(&CTX_data_scene(C)->id, ID_RECALC_SELECT);
}
-bool ED_object_base_deselect_all_ex(ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible)
+bool ED_object_base_deselect_all_ex(ViewLayer *view_layer,
+ View3D *v3d,
+ int action,
+ bool *r_any_visible)
{
- if (action == SEL_TOGGLE) {
- action = SEL_SELECT;
- FOREACH_VISIBLE_BASE_BEGIN(view_layer, v3d, base) {
- if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) {
- continue;
- }
- if ((base->flag & BASE_SELECTED) != 0) {
- action = SEL_DESELECT;
- break;
- }
- }
- FOREACH_VISIBLE_BASE_END;
- }
-
- bool any_visible = false;
- bool changed = false;
- FOREACH_VISIBLE_BASE_BEGIN(view_layer, v3d, base) {
- if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) {
- continue;
- }
- switch (action) {
- case SEL_SELECT:
- if ((base->flag & BASE_SELECTED) == 0) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- break;
- case SEL_DESELECT:
- if ((base->flag & BASE_SELECTED) != 0) {
- ED_object_base_select(base, BA_DESELECT);
- changed = true;
- }
- break;
- case SEL_INVERT:
- if ((base->flag & BASE_SELECTED) != 0) {
- ED_object_base_select(base, BA_DESELECT);
- changed = true;
- }
- else {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- break;
- }
- any_visible = true;
- }
- FOREACH_VISIBLE_BASE_END;
- if (r_any_visible) {
- *r_any_visible = any_visible;
- }
- return changed;
+ if (action == SEL_TOGGLE) {
+ action = SEL_SELECT;
+ FOREACH_VISIBLE_BASE_BEGIN (view_layer, v3d, base) {
+ if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) {
+ continue;
+ }
+ if ((base->flag & BASE_SELECTED) != 0) {
+ action = SEL_DESELECT;
+ break;
+ }
+ }
+ FOREACH_VISIBLE_BASE_END;
+ }
+
+ bool any_visible = false;
+ bool changed = false;
+ FOREACH_VISIBLE_BASE_BEGIN (view_layer, v3d, base) {
+ if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) {
+ continue;
+ }
+ switch (action) {
+ case SEL_SELECT:
+ if ((base->flag & BASE_SELECTED) == 0) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ break;
+ case SEL_DESELECT:
+ if ((base->flag & BASE_SELECTED) != 0) {
+ ED_object_base_select(base, BA_DESELECT);
+ changed = true;
+ }
+ break;
+ case SEL_INVERT:
+ if ((base->flag & BASE_SELECTED) != 0) {
+ ED_object_base_select(base, BA_DESELECT);
+ changed = true;
+ }
+ else {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ break;
+ }
+ any_visible = true;
+ }
+ FOREACH_VISIBLE_BASE_END;
+ if (r_any_visible) {
+ *r_any_visible = any_visible;
+ }
+ return changed;
}
-
bool ED_object_base_deselect_all(ViewLayer *view_layer, View3D *v3d, int action)
{
- return ED_object_base_deselect_all_ex(view_layer, v3d, action, NULL);
+ return ED_object_base_deselect_all_ex(view_layer, v3d, action, NULL);
}
/** \} */
@@ -202,17 +204,17 @@ bool ED_object_base_deselect_all(ViewLayer *view_layer, View3D *v3d, int action)
static int get_base_select_priority(Base *base)
{
- if (base->flag & BASE_VISIBLE) {
- if (base->flag & BASE_SELECTABLE) {
- return 3;
- }
- else {
- return 2;
- }
- }
- else {
- return 1;
- }
+ if (base->flag & BASE_VISIBLE) {
+ if (base->flag & BASE_SELECTABLE) {
+ return 3;
+ }
+ else {
+ return 2;
+ }
+ }
+ else {
+ return 1;
+ }
}
/**
@@ -221,36 +223,36 @@ static int get_base_select_priority(Base *base)
*/
Base *ED_object_find_first_by_data_id(ViewLayer *view_layer, ID *id)
{
- BLI_assert(OB_DATA_SUPPORT_ID(GS(id->name)));
-
- /* Try active object. */
- Base *basact = view_layer->basact;
-
- if (basact && basact->object && basact->object->data == id) {
- return basact;
- }
-
- /* Try all objects. */
- Base *base_best = NULL;
- int priority_best = 0;
-
- for (Base *base = view_layer->object_bases.first; base; base = base->next) {
- if (base->object && base->object->data == id) {
- if (base->flag & BASE_SELECTED) {
- return base;
- }
- else {
- int priority_test = get_base_select_priority(base);
-
- if (priority_test > priority_best) {
- priority_best = priority_test;
- base_best = base;
- }
- }
- }
- }
-
- return base_best;
+ BLI_assert(OB_DATA_SUPPORT_ID(GS(id->name)));
+
+ /* Try active object. */
+ Base *basact = view_layer->basact;
+
+ if (basact && basact->object && basact->object->data == id) {
+ return basact;
+ }
+
+ /* Try all objects. */
+ Base *base_best = NULL;
+ int priority_best = 0;
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->object && base->object->data == id) {
+ if (base->flag & BASE_SELECTED) {
+ return base;
+ }
+ else {
+ int priority_test = get_base_select_priority(base);
+
+ if (priority_test > priority_best) {
+ priority_best = priority_test;
+ base_best = base;
+ }
+ }
+ }
+ }
+
+ return base_best;
}
/**
@@ -259,36 +261,35 @@ Base *ED_object_find_first_by_data_id(ViewLayer *view_layer, ID *id)
*
* \returns false if not found in current view layer
*/
-bool ED_object_jump_to_object(
- bContext *C, Object *ob, const bool UNUSED(reveal_hidden))
+bool ED_object_jump_to_object(bContext *C, Object *ob, const bool UNUSED(reveal_hidden))
{
- ViewLayer *view_layer = CTX_data_view_layer(C);
- View3D *v3d = CTX_wm_view3d(C);
- Base *base = BKE_view_layer_base_find(view_layer, ob);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
- if (base == NULL) {
- return false;
- }
+ if (base == NULL) {
+ return false;
+ }
- /* TODO, use 'reveal_hidden', as is done with bones. */
+ /* TODO, use 'reveal_hidden', as is done with bones. */
- if (view_layer->basact != base || !(base->flag & BASE_SELECTED)) {
- /* Select if not selected. */
- if (!(base->flag & BASE_SELECTED)) {
- ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
+ if (view_layer->basact != base || !(base->flag & BASE_SELECTED)) {
+ /* Select if not selected. */
+ if (!(base->flag & BASE_SELECTED)) {
+ ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
- if (base->flag & BASE_VISIBLE) {
- ED_object_base_select(base, BA_SELECT);
- }
+ if (base->flag & BASE_VISIBLE) {
+ ED_object_base_select(base, BA_SELECT);
+ }
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
- }
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
+ }
- /* Make active if not active. */
- ED_object_base_activate(C, base);
- }
+ /* Make active if not active. */
+ ED_object_base_activate(C, base);
+ }
- return true;
+ return true;
}
/**
@@ -298,79 +299,80 @@ bool ED_object_jump_to_object(
*
* \returns false if object not in layer, bone not found, or other error
*/
-bool ED_object_jump_to_bone(
- bContext *C, Object *ob, const char *bone_name,
- const bool reveal_hidden)
+bool ED_object_jump_to_bone(bContext *C,
+ Object *ob,
+ const char *bone_name,
+ const bool reveal_hidden)
{
- /* Verify it's a valid armature object. */
- if (ob == NULL || ob->type != OB_ARMATURE) {
- return false;
- }
-
- bArmature *arm = ob->data;
-
- /* Activate the armature object. */
- if (!ED_object_jump_to_object(C, ob, reveal_hidden)) {
- return false;
- }
-
- /* Switch to pose mode from object mode. */
- if (!ELEM(ob->mode, OB_MODE_EDIT, OB_MODE_POSE)) {
- ED_object_mode_set(C, OB_MODE_POSE);
- }
-
- if (ob->mode == OB_MODE_EDIT && arm->edbo != NULL) {
- /* In Edit mode select and activate the target Edit-Bone. */
- EditBone *ebone = ED_armature_ebone_find_name(arm->edbo, bone_name);
- if (ebone != NULL) {
- if (reveal_hidden) {
- /* Unhide the bone. */
- ebone->flag &= ~BONE_HIDDEN_A;
-
- if ((arm->layer & ebone->layer) == 0) {
- arm->layer |= 1U << bitscan_forward_uint(ebone->layer);
- }
- }
-
- /* Select it. */
- ED_armature_edit_deselect_all(ob);
-
- if (EBONE_SELECTABLE(arm, ebone)) {
- ED_armature_ebone_select_set(ebone, true);
- ED_armature_edit_sync_selection(arm->edbo);
- }
-
- arm->act_edbone = ebone;
-
- ED_pose_bone_select_tag_update(ob);
- return true;
- }
- }
- else if (ob->mode == OB_MODE_POSE && ob->pose != NULL) {
- /* In Pose mode select and activate the target Bone/Pose-Channel. */
- bPoseChannel *pchan = BKE_pose_channel_find_name(ob->pose, bone_name);
- if (pchan != NULL) {
- if (reveal_hidden) {
- /* Unhide the bone. */
- pchan->bone->flag &= ~BONE_HIDDEN_P;
-
- if ((arm->layer & pchan->bone->layer) == 0) {
- arm->layer |= 1U << bitscan_forward_uint(pchan->bone->layer);
- }
- }
-
- /* Select it. */
- ED_pose_deselect_all(ob, SEL_DESELECT, true);
- ED_pose_bone_select(ob, pchan, true);
-
- arm->act_bone = pchan->bone;
-
- ED_pose_bone_select_tag_update(ob);
- return true;
- }
- }
-
- return false;
+ /* Verify it's a valid armature object. */
+ if (ob == NULL || ob->type != OB_ARMATURE) {
+ return false;
+ }
+
+ bArmature *arm = ob->data;
+
+ /* Activate the armature object. */
+ if (!ED_object_jump_to_object(C, ob, reveal_hidden)) {
+ return false;
+ }
+
+ /* Switch to pose mode from object mode. */
+ if (!ELEM(ob->mode, OB_MODE_EDIT, OB_MODE_POSE)) {
+ ED_object_mode_set(C, OB_MODE_POSE);
+ }
+
+ if (ob->mode == OB_MODE_EDIT && arm->edbo != NULL) {
+ /* In Edit mode select and activate the target Edit-Bone. */
+ EditBone *ebone = ED_armature_ebone_find_name(arm->edbo, bone_name);
+ if (ebone != NULL) {
+ if (reveal_hidden) {
+ /* Unhide the bone. */
+ ebone->flag &= ~BONE_HIDDEN_A;
+
+ if ((arm->layer & ebone->layer) == 0) {
+ arm->layer |= 1U << bitscan_forward_uint(ebone->layer);
+ }
+ }
+
+ /* Select it. */
+ ED_armature_edit_deselect_all(ob);
+
+ if (EBONE_SELECTABLE(arm, ebone)) {
+ ED_armature_ebone_select_set(ebone, true);
+ ED_armature_edit_sync_selection(arm->edbo);
+ }
+
+ arm->act_edbone = ebone;
+
+ ED_pose_bone_select_tag_update(ob);
+ return true;
+ }
+ }
+ else if (ob->mode == OB_MODE_POSE && ob->pose != NULL) {
+ /* In Pose mode select and activate the target Bone/Pose-Channel. */
+ bPoseChannel *pchan = BKE_pose_channel_find_name(ob->pose, bone_name);
+ if (pchan != NULL) {
+ if (reveal_hidden) {
+ /* Unhide the bone. */
+ pchan->bone->flag &= ~BONE_HIDDEN_P;
+
+ if ((arm->layer & pchan->bone->layer) == 0) {
+ arm->layer |= 1U << bitscan_forward_uint(pchan->bone->layer);
+ }
+ }
+
+ /* Select it. */
+ ED_pose_deselect_all(ob, SEL_DESELECT, true);
+ ED_pose_bone_select(ob, pchan, true);
+
+ arm->act_bone = pchan->bone;
+
+ ED_pose_bone_select_tag_update(ob);
+ return true;
+ }
+ }
+
+ return false;
}
/** \} */
@@ -381,16 +383,16 @@ bool ED_object_jump_to_bone(
static bool objects_selectable_poll(bContext *C)
{
- /* we don't check for linked scenes here, selection is
- * still allowed then for inspection of scene */
- Object *obact = CTX_data_active_object(C);
+ /* we don't check for linked scenes here, selection is
+ * still allowed then for inspection of scene */
+ Object *obact = CTX_data_active_object(C);
- if (CTX_data_edit_object(C))
- return 0;
- if (obact && obact->mode)
- return 0;
+ if (CTX_data_edit_object(C))
+ return 0;
+ if (obact && obact->mode)
+ return 0;
- return 1;
+ return 1;
}
/** \} */
@@ -401,51 +403,54 @@ static bool objects_selectable_poll(bContext *C)
static int object_select_by_type_exec(bContext *C, wmOperator *op)
{
- ViewLayer *view_layer = CTX_data_view_layer(C);
- View3D *v3d = CTX_wm_view3d(C);
- short obtype, extend;
-
- obtype = RNA_enum_get(op->ptr, "type");
- extend = RNA_boolean_get(op->ptr, "extend");
-
- if (extend == 0) {
- ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
- }
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (base->object->type == obtype) {
- ED_object_base_select(base, BA_SELECT);
- }
- }
- CTX_DATA_END;
-
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
-
- return OPERATOR_FINISHED;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ short obtype, extend;
+
+ obtype = RNA_enum_get(op->ptr, "type");
+ extend = RNA_boolean_get(op->ptr, "extend");
+
+ if (extend == 0) {
+ ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
+ }
+
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (base->object->type == obtype) {
+ ED_object_base_select(base, BA_SELECT);
+ }
+ }
+ CTX_DATA_END;
+
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+
+ return OPERATOR_FINISHED;
}
void OBJECT_OT_select_by_type(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select By Type";
- ot->description = "Select all visible objects that are of a type";
- ot->idname = "OBJECT_OT_select_by_type";
-
- /* api callbacks */
- ot->invoke = WM_menu_invoke;
- ot->exec = object_select_by_type_exec;
- ot->poll = objects_selectable_poll;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend selection instead of deselecting everything first");
- ot->prop = RNA_def_enum(ot->srna, "type", rna_enum_object_type_items, 1, "Type", "");
- RNA_def_property_translation_context(ot->prop, BLT_I18NCONTEXT_ID_ID);
+ /* identifiers */
+ ot->name = "Select By Type";
+ ot->description = "Select all visible objects that are of a type";
+ ot->idname = "OBJECT_OT_select_by_type";
+
+ /* api callbacks */
+ ot->invoke = WM_menu_invoke;
+ ot->exec = object_select_by_type_exec;
+ ot->poll = objects_selectable_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna,
+ "extend",
+ false,
+ "Extend",
+ "Extend selection instead of deselecting everything first");
+ ot->prop = RNA_def_enum(ot->srna, "type", rna_enum_object_type_items, 1, "Type", "");
+ RNA_def_property_translation_context(ot->prop, BLT_I18NCONTEXT_ID_ID);
}
/** \} */
@@ -455,270 +460,273 @@ void OBJECT_OT_select_by_type(wmOperatorType *ot)
* \{ */
enum {
- OBJECT_SELECT_LINKED_IPO = 1,
- OBJECT_SELECT_LINKED_OBDATA,
- OBJECT_SELECT_LINKED_MATERIAL,
- OBJECT_SELECT_LINKED_DUPGROUP,
- OBJECT_SELECT_LINKED_PARTICLE,
- OBJECT_SELECT_LINKED_LIBRARY,
- OBJECT_SELECT_LINKED_LIBRARY_OBDATA,
+ OBJECT_SELECT_LINKED_IPO = 1,
+ OBJECT_SELECT_LINKED_OBDATA,
+ OBJECT_SELECT_LINKED_MATERIAL,
+ OBJECT_SELECT_LINKED_DUPGROUP,
+ OBJECT_SELECT_LINKED_PARTICLE,
+ OBJECT_SELECT_LINKED_LIBRARY,
+ OBJECT_SELECT_LINKED_LIBRARY_OBDATA,
};
static const EnumPropertyItem prop_select_linked_types[] = {
- //{OBJECT_SELECT_LINKED_IPO, "IPO", 0, "Object IPO", ""}, // XXX deprecated animation system stuff...
- {OBJECT_SELECT_LINKED_OBDATA, "OBDATA", 0, "Object Data", ""},
- {OBJECT_SELECT_LINKED_MATERIAL, "MATERIAL", 0, "Material", ""},
- {OBJECT_SELECT_LINKED_DUPGROUP, "DUPGROUP", 0, "Instanced Collection", ""},
- {OBJECT_SELECT_LINKED_PARTICLE, "PARTICLE", 0, "Particle System", ""},
- {OBJECT_SELECT_LINKED_LIBRARY, "LIBRARY", 0, "Library", ""},
- {OBJECT_SELECT_LINKED_LIBRARY_OBDATA, "LIBRARY_OBDATA", 0, "Library (Object Data)", ""},
- {0, NULL, 0, NULL, NULL},
+ //{OBJECT_SELECT_LINKED_IPO, "IPO", 0, "Object IPO", ""}, // XXX deprecated animation system stuff...
+ {OBJECT_SELECT_LINKED_OBDATA, "OBDATA", 0, "Object Data", ""},
+ {OBJECT_SELECT_LINKED_MATERIAL, "MATERIAL", 0, "Material", ""},
+ {OBJECT_SELECT_LINKED_DUPGROUP, "DUPGROUP", 0, "Instanced Collection", ""},
+ {OBJECT_SELECT_LINKED_PARTICLE, "PARTICLE", 0, "Particle System", ""},
+ {OBJECT_SELECT_LINKED_LIBRARY, "LIBRARY", 0, "Library", ""},
+ {OBJECT_SELECT_LINKED_LIBRARY_OBDATA, "LIBRARY_OBDATA", 0, "Library (Object Data)", ""},
+ {0, NULL, 0, NULL, NULL},
};
static bool object_select_all_by_obdata(bContext *C, void *obdata)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- if (base->object->data == obdata) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- CTX_DATA_END;
-
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ if (base->object->data == obdata) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ CTX_DATA_END;
+
+ return changed;
}
static bool object_select_all_by_material(bContext *C, Material *mat)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- Object *ob = base->object;
- Material *mat1;
- int a;
-
- for (a = 1; a <= ob->totcol; a++) {
- mat1 = give_current_material(ob, a);
-
- if (mat1 == mat) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- }
- CTX_DATA_END;
-
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ Object *ob = base->object;
+ Material *mat1;
+ int a;
+
+ for (a = 1; a <= ob->totcol; a++) {
+ mat1 = give_current_material(ob, a);
+
+ if (mat1 == mat) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ }
+ CTX_DATA_END;
+
+ return changed;
}
static bool object_select_all_by_instance_collection(bContext *C, Object *ob)
{
- bool changed = false;
- Collection *instance_collection = (ob->transflag & OB_DUPLICOLLECTION) ? ob->instance_collection : NULL;
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- Collection *instance_collection_other = (base->object->transflag & OB_DUPLICOLLECTION) ? base->object->instance_collection : NULL;
- if (instance_collection == instance_collection_other) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- CTX_DATA_END;
-
- return changed;
+ bool changed = false;
+ Collection *instance_collection = (ob->transflag & OB_DUPLICOLLECTION) ?
+ ob->instance_collection :
+ NULL;
+
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ Collection *instance_collection_other = (base->object->transflag & OB_DUPLICOLLECTION) ?
+ base->object->instance_collection :
+ NULL;
+ if (instance_collection == instance_collection_other) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ CTX_DATA_END;
+
+ return changed;
}
static bool object_select_all_by_particle(bContext *C, Object *ob)
{
- ParticleSystem *psys_act = psys_get_current(ob);
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- /* loop through other particles*/
- ParticleSystem *psys;
-
- for (psys = base->object->particlesystem.first; psys; psys = psys->next) {
- if (psys->part == psys_act->part) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- break;
- }
-
- if (base->flag & BASE_SELECTED) {
- break;
- }
- }
- }
- }
- CTX_DATA_END;
-
- return changed;
+ ParticleSystem *psys_act = psys_get_current(ob);
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ /* loop through other particles*/
+ ParticleSystem *psys;
+
+ for (psys = base->object->particlesystem.first; psys; psys = psys->next) {
+ if (psys->part == psys_act->part) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ break;
+ }
+
+ if (base->flag & BASE_SELECTED) {
+ break;
+ }
+ }
+ }
+ }
+ CTX_DATA_END;
+
+ return changed;
}
static bool object_select_all_by_library(bContext *C, Library *lib)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- if (lib == base->object->id.lib) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- CTX_DATA_END;
-
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ if (lib == base->object->id.lib) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ CTX_DATA_END;
+
+ return changed;
}
static bool object_select_all_by_library_obdata(bContext *C, Library *lib)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- if (base->object->data && lib == ((ID *)base->object->data)->lib) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- CTX_DATA_END;
-
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ if (base->object->data && lib == ((ID *)base->object->data)->lib) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ CTX_DATA_END;
+
+ return changed;
}
void ED_object_select_linked_by_id(bContext *C, ID *id)
{
- int idtype = GS(id->name);
- bool changed = false;
-
- if (OB_DATA_SUPPORT_ID(idtype)) {
- changed = object_select_all_by_obdata(C, id);
- }
- else if (idtype == ID_MA) {
- changed = object_select_all_by_material(C, (Material *)id);
- }
- else if (idtype == ID_LI) {
- changed = object_select_all_by_library(C, (Library *) id);
- }
-
- if (changed) {
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- }
+ int idtype = GS(id->name);
+ bool changed = false;
+
+ if (OB_DATA_SUPPORT_ID(idtype)) {
+ changed = object_select_all_by_obdata(C, id);
+ }
+ else if (idtype == ID_MA) {
+ changed = object_select_all_by_material(C, (Material *)id);
+ }
+ else if (idtype == ID_LI) {
+ changed = object_select_all_by_library(C, (Library *)id);
+ }
+
+ if (changed) {
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ }
}
static int object_select_linked_exec(bContext *C, wmOperator *op)
{
- Scene *scene = CTX_data_scene(C);
- ViewLayer *view_layer = CTX_data_view_layer(C);
- View3D *v3d = CTX_wm_view3d(C);
- Object *ob;
- int nr = RNA_enum_get(op->ptr, "type");
- bool changed = false, extend;
-
- extend = RNA_boolean_get(op->ptr, "extend");
-
- if (extend == 0) {
- ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
- }
-
- ob = OBACT(view_layer);
- if (ob == NULL) {
- BKE_report(op->reports, RPT_ERROR, "No active object");
- return OPERATOR_CANCELLED;
- }
-
- if (nr == OBJECT_SELECT_LINKED_IPO) {
- // XXX old animation system
- //if (ob->ipo == 0) return OPERATOR_CANCELLED;
- //object_select_all_by_ipo(C, ob->ipo)
- return OPERATOR_CANCELLED;
- }
- else if (nr == OBJECT_SELECT_LINKED_OBDATA) {
- if (ob->data == NULL)
- return OPERATOR_CANCELLED;
-
- changed = object_select_all_by_obdata(C, ob->data);
- }
- else if (nr == OBJECT_SELECT_LINKED_MATERIAL) {
- Material *mat = NULL;
-
- mat = give_current_material(ob, ob->actcol);
- if (mat == NULL) return OPERATOR_CANCELLED;
-
- changed = object_select_all_by_material(C, mat);
- }
- else if (nr == OBJECT_SELECT_LINKED_DUPGROUP) {
- if (ob->instance_collection == NULL)
- return OPERATOR_CANCELLED;
-
- changed = object_select_all_by_instance_collection(C, ob);
- }
- else if (nr == OBJECT_SELECT_LINKED_PARTICLE) {
- if (BLI_listbase_is_empty(&ob->particlesystem))
- return OPERATOR_CANCELLED;
-
- changed = object_select_all_by_particle(C, ob);
- }
- else if (nr == OBJECT_SELECT_LINKED_LIBRARY) {
- /* do nothing */
- changed = object_select_all_by_library(C, ob->id.lib);
- }
- else if (nr == OBJECT_SELECT_LINKED_LIBRARY_OBDATA) {
- if (ob->data == NULL)
- return OPERATOR_CANCELLED;
-
- changed = object_select_all_by_library_obdata(C, ((ID *) ob->data)->lib);
- }
- else
- return OPERATOR_CANCELLED;
-
- if (changed) {
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- return OPERATOR_FINISHED;
- }
-
- return OPERATOR_CANCELLED;
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ Object *ob;
+ int nr = RNA_enum_get(op->ptr, "type");
+ bool changed = false, extend;
+
+ extend = RNA_boolean_get(op->ptr, "extend");
+
+ if (extend == 0) {
+ ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
+ }
+
+ ob = OBACT(view_layer);
+ if (ob == NULL) {
+ BKE_report(op->reports, RPT_ERROR, "No active object");
+ return OPERATOR_CANCELLED;
+ }
+
+ if (nr == OBJECT_SELECT_LINKED_IPO) {
+ // XXX old animation system
+ //if (ob->ipo == 0) return OPERATOR_CANCELLED;
+ //object_select_all_by_ipo(C, ob->ipo)
+ return OPERATOR_CANCELLED;
+ }
+ else if (nr == OBJECT_SELECT_LINKED_OBDATA) {
+ if (ob->data == NULL)
+ return OPERATOR_CANCELLED;
+
+ changed = object_select_all_by_obdata(C, ob->data);
+ }
+ else if (nr == OBJECT_SELECT_LINKED_MATERIAL) {
+ Material *mat = NULL;
+
+ mat = give_current_material(ob, ob->actcol);
+ if (mat == NULL)
+ return OPERATOR_CANCELLED;
+
+ changed = object_select_all_by_material(C, mat);
+ }
+ else if (nr == OBJECT_SELECT_LINKED_DUPGROUP) {
+ if (ob->instance_collection == NULL)
+ return OPERATOR_CANCELLED;
+
+ changed = object_select_all_by_instance_collection(C, ob);
+ }
+ else if (nr == OBJECT_SELECT_LINKED_PARTICLE) {
+ if (BLI_listbase_is_empty(&ob->particlesystem))
+ return OPERATOR_CANCELLED;
+
+ changed = object_select_all_by_particle(C, ob);
+ }
+ else if (nr == OBJECT_SELECT_LINKED_LIBRARY) {
+ /* do nothing */
+ changed = object_select_all_by_library(C, ob->id.lib);
+ }
+ else if (nr == OBJECT_SELECT_LINKED_LIBRARY_OBDATA) {
+ if (ob->data == NULL)
+ return OPERATOR_CANCELLED;
+
+ changed = object_select_all_by_library_obdata(C, ((ID *)ob->data)->lib);
+ }
+ else
+ return OPERATOR_CANCELLED;
+
+ if (changed) {
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ return OPERATOR_FINISHED;
+ }
+
+ return OPERATOR_CANCELLED;
}
void OBJECT_OT_select_linked(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select Linked";
- ot->description = "Select all visible objects that are linked";
- ot->idname = "OBJECT_OT_select_linked";
-
- /* api callbacks */
- ot->invoke = WM_menu_invoke;
- ot->exec = object_select_linked_exec;
- ot->poll = objects_selectable_poll;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend selection instead of deselecting everything first");
- ot->prop = RNA_def_enum(ot->srna, "type", prop_select_linked_types, 0, "Type", "");
+ /* identifiers */
+ ot->name = "Select Linked";
+ ot->description = "Select all visible objects that are linked";
+ ot->idname = "OBJECT_OT_select_linked";
+
+ /* api callbacks */
+ ot->invoke = WM_menu_invoke;
+ ot->exec = object_select_linked_exec;
+ ot->poll = objects_selectable_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna,
+ "extend",
+ false,
+ "Extend",
+ "Extend selection instead of deselecting everything first");
+ ot->prop = RNA_def_enum(ot->srna, "type", prop_select_linked_types, 0, "Type", "");
}
/** \} */
@@ -728,371 +736,379 @@ void OBJECT_OT_select_linked(wmOperatorType *ot)
* \{ */
enum {
- OBJECT_GRPSEL_CHILDREN_RECURSIVE = 0,
- OBJECT_GRPSEL_CHILDREN = 1,
- OBJECT_GRPSEL_PARENT = 2,
- OBJECT_GRPSEL_SIBLINGS = 3,
- OBJECT_GRPSEL_TYPE = 4,
- OBJECT_GRPSEL_COLLECTION = 5,
- OBJECT_GRPSEL_HOOK = 7,
- OBJECT_GRPSEL_PASS = 8,
- OBJECT_GRPSEL_COLOR = 9,
- OBJECT_GRPSEL_KEYINGSET = 10,
- OBJECT_GRPSEL_LIGHT_TYPE = 11,
+ OBJECT_GRPSEL_CHILDREN_RECURSIVE = 0,
+ OBJECT_GRPSEL_CHILDREN = 1,
+ OBJECT_GRPSEL_PARENT = 2,
+ OBJECT_GRPSEL_SIBLINGS = 3,
+ OBJECT_GRPSEL_TYPE = 4,
+ OBJECT_GRPSEL_COLLECTION = 5,
+ OBJECT_GRPSEL_HOOK = 7,
+ OBJECT_GRPSEL_PASS = 8,
+ OBJECT_GRPSEL_COLOR = 9,
+ OBJECT_GRPSEL_KEYINGSET = 10,
+ OBJECT_GRPSEL_LIGHT_TYPE = 11,
};
static const EnumPropertyItem prop_select_grouped_types[] = {
- {OBJECT_GRPSEL_CHILDREN_RECURSIVE, "CHILDREN_RECURSIVE", 0, "Children", ""},
- {OBJECT_GRPSEL_CHILDREN, "CHILDREN", 0, "Immediate Children", ""},
- {OBJECT_GRPSEL_PARENT, "PARENT", 0, "Parent", ""},
- {OBJECT_GRPSEL_SIBLINGS, "SIBLINGS", 0, "Siblings", "Shared Parent"},
- {OBJECT_GRPSEL_TYPE, "TYPE", 0, "Type", "Shared object type"},
- {OBJECT_GRPSEL_COLLECTION, "COLLECTION", 0, "Collection", "Shared collection"},
- {OBJECT_GRPSEL_HOOK, "HOOK", 0, "Hook", ""},
- {OBJECT_GRPSEL_PASS, "PASS", 0, "Pass", "Render pass Index"},
- {OBJECT_GRPSEL_COLOR, "COLOR", 0, "Color", "Object Color"},
- {OBJECT_GRPSEL_KEYINGSET, "KEYINGSET", 0, "Keying Set", "Objects included in active Keying Set"},
- {OBJECT_GRPSEL_LIGHT_TYPE, "LIGHT_TYPE", 0, "Light Type", "Matching light types"},
- {0, NULL, 0, NULL, NULL},
+ {OBJECT_GRPSEL_CHILDREN_RECURSIVE, "CHILDREN_RECURSIVE", 0, "Children", ""},
+ {OBJECT_GRPSEL_CHILDREN, "CHILDREN", 0, "Immediate Children", ""},
+ {OBJECT_GRPSEL_PARENT, "PARENT", 0, "Parent", ""},
+ {OBJECT_GRPSEL_SIBLINGS, "SIBLINGS", 0, "Siblings", "Shared Parent"},
+ {OBJECT_GRPSEL_TYPE, "TYPE", 0, "Type", "Shared object type"},
+ {OBJECT_GRPSEL_COLLECTION, "COLLECTION", 0, "Collection", "Shared collection"},
+ {OBJECT_GRPSEL_HOOK, "HOOK", 0, "Hook", ""},
+ {OBJECT_GRPSEL_PASS, "PASS", 0, "Pass", "Render pass Index"},
+ {OBJECT_GRPSEL_COLOR, "COLOR", 0, "Color", "Object Color"},
+ {OBJECT_GRPSEL_KEYINGSET,
+ "KEYINGSET",
+ 0,
+ "Keying Set",
+ "Objects included in active Keying Set"},
+ {OBJECT_GRPSEL_LIGHT_TYPE, "LIGHT_TYPE", 0, "Light Type", "Matching light types"},
+ {0, NULL, 0, NULL, NULL},
};
static bool select_grouped_children(bContext *C, Object *ob, const bool recursive)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if (ob == base->object->parent) {
- if ((base->flag & BASE_SELECTED) == 0) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
-
- if (recursive) {
- changed |= select_grouped_children(C, base->object, 1);
- }
- }
- }
- CTX_DATA_END;
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ if (ob == base->object->parent) {
+ if ((base->flag & BASE_SELECTED) == 0) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+
+ if (recursive) {
+ changed |= select_grouped_children(C, base->object, 1);
+ }
+ }
+ }
+ CTX_DATA_END;
+ return changed;
}
static bool select_grouped_parent(bContext *C) /* Makes parent active and de-selected OBACT */
{
- ViewLayer *view_layer = CTX_data_view_layer(C);
- View3D *v3d = CTX_wm_view3d(C);
- Base *baspar, *basact = CTX_data_active_base(C);
- bool changed = false;
-
- if (!basact || !(basact->object->parent)) {
- return 0; /* we know OBACT is valid */
- }
-
- baspar = BKE_view_layer_base_find(view_layer, basact->object->parent);
-
- /* can be NULL if parent in other scene */
- if (baspar && BASE_SELECTABLE(v3d, baspar)) {
- ED_object_base_select(baspar, BA_SELECT);
- ED_object_base_activate(C, baspar);
- changed = true;
- }
- return changed;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ Base *baspar, *basact = CTX_data_active_base(C);
+ bool changed = false;
+
+ if (!basact || !(basact->object->parent)) {
+ return 0; /* we know OBACT is valid */
+ }
+
+ baspar = BKE_view_layer_base_find(view_layer, basact->object->parent);
+
+ /* can be NULL if parent in other scene */
+ if (baspar && BASE_SELECTABLE(v3d, baspar)) {
+ ED_object_base_select(baspar, BA_SELECT);
+ ED_object_base_activate(C, baspar);
+ changed = true;
+ }
+ return changed;
}
-
-#define COLLECTION_MENU_MAX 24
+#define COLLECTION_MENU_MAX 24
/* Select objects in the same group as the active */
static bool select_grouped_collection(bContext *C, Object *ob)
{
- bool changed = false;
- Collection *collection, *ob_collections[COLLECTION_MENU_MAX];
- int collection_count = 0, i;
- uiPopupMenu *pup;
- uiLayout *layout;
-
- for (collection = CTX_data_main(C)->collections.first; collection && collection_count < COLLECTION_MENU_MAX; collection = collection->id.next) {
- if (BKE_collection_has_object(collection, ob)) {
- ob_collections[collection_count] = collection;
- collection_count++;
- }
- }
-
- if (!collection_count)
- return 0;
- else if (collection_count == 1) {
- collection = ob_collections[0];
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- if (BKE_collection_has_object(collection, base->object)) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- CTX_DATA_END;
- return changed;
- }
-
- /* build the menu. */
- pup = UI_popup_menu_begin(C, IFACE_("Select Collection"), ICON_NONE);
- layout = UI_popup_menu_layout(pup);
-
- for (i = 0; i < collection_count; i++) {
- collection = ob_collections[i];
- uiItemStringO(layout, collection->id.name + 2, 0, "OBJECT_OT_select_same_collection", "collection", collection->id.name + 2);
- }
-
- UI_popup_menu_end(C, pup);
- return changed; /* The operator already handle this! */
+ bool changed = false;
+ Collection *collection, *ob_collections[COLLECTION_MENU_MAX];
+ int collection_count = 0, i;
+ uiPopupMenu *pup;
+ uiLayout *layout;
+
+ for (collection = CTX_data_main(C)->collections.first;
+ collection && collection_count < COLLECTION_MENU_MAX;
+ collection = collection->id.next) {
+ if (BKE_collection_has_object(collection, ob)) {
+ ob_collections[collection_count] = collection;
+ collection_count++;
+ }
+ }
+
+ if (!collection_count)
+ return 0;
+ else if (collection_count == 1) {
+ collection = ob_collections[0];
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ if (BKE_collection_has_object(collection, base->object)) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ CTX_DATA_END;
+ return changed;
+ }
+
+ /* build the menu. */
+ pup = UI_popup_menu_begin(C, IFACE_("Select Collection"), ICON_NONE);
+ layout = UI_popup_menu_layout(pup);
+
+ for (i = 0; i < collection_count; i++) {
+ collection = ob_collections[i];
+ uiItemStringO(layout,
+ collection->id.name + 2,
+ 0,
+ "OBJECT_OT_select_same_collection",
+ "collection",
+ collection->id.name + 2);
+ }
+
+ UI_popup_menu_end(C, pup);
+ return changed; /* The operator already handle this! */
}
static bool select_grouped_object_hooks(bContext *C, Object *ob)
{
- ViewLayer *view_layer = CTX_data_view_layer(C);
- View3D *v3d = CTX_wm_view3d(C);
-
- bool changed = false;
- Base *base;
- ModifierData *md;
- HookModifierData *hmd;
-
- for (md = ob->modifiers.first; md; md = md->next) {
- if (md->type == eModifierType_Hook) {
- hmd = (HookModifierData *) md;
- if (hmd->object) {
- base = BKE_view_layer_base_find(view_layer, hmd->object);
- if (base && ((base->flag & BASE_SELECTED) == 0) && (BASE_SELECTABLE(v3d, base))) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- }
- return changed;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+
+ bool changed = false;
+ Base *base;
+ ModifierData *md;
+ HookModifierData *hmd;
+
+ for (md = ob->modifiers.first; md; md = md->next) {
+ if (md->type == eModifierType_Hook) {
+ hmd = (HookModifierData *)md;
+ if (hmd->object) {
+ base = BKE_view_layer_base_find(view_layer, hmd->object);
+ if (base && ((base->flag & BASE_SELECTED) == 0) && (BASE_SELECTABLE(v3d, base))) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ }
+ return changed;
}
/* Select objects with the same parent as the active (siblings),
* parent can be NULL also */
static bool select_grouped_siblings(bContext *C, Object *ob)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if ((base->object->parent == ob->parent) && ((base->flag & BASE_SELECTED) == 0)) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- CTX_DATA_END;
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ if ((base->object->parent == ob->parent) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ CTX_DATA_END;
+ return changed;
}
static bool select_grouped_lighttype(bContext *C, Object *ob)
{
- Light *la = ob->data;
-
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if (base->object->type == OB_LAMP) {
- Light *la_test = base->object->data;
- if ((la->type == la_test->type) && ((base->flag & BASE_SELECTED) == 0)) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- }
- CTX_DATA_END;
- return changed;
+ Light *la = ob->data;
+
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ if (base->object->type == OB_LAMP) {
+ Light *la_test = base->object->data;
+ if ((la->type == la_test->type) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ }
+ CTX_DATA_END;
+ return changed;
}
static bool select_grouped_type(bContext *C, Object *ob)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if ((base->object->type == ob->type) && ((base->flag & BASE_SELECTED) == 0)) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- CTX_DATA_END;
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ if ((base->object->type == ob->type) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ CTX_DATA_END;
+ return changed;
}
static bool select_grouped_index_object(bContext *C, Object *ob)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if ((base->object->index == ob->index) && ((base->flag & BASE_SELECTED) == 0)) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- CTX_DATA_END;
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ if ((base->object->index == ob->index) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ CTX_DATA_END;
+ return changed;
}
static bool select_grouped_color(bContext *C, Object *ob)
{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && (compare_v3v3(base->object->color, ob->color, 0.005f))) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- }
- }
- CTX_DATA_END;
- return changed;
+ bool changed = false;
+
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) &&
+ (compare_v3v3(base->object->color, ob->color, 0.005f))) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ }
+ CTX_DATA_END;
+ return changed;
}
static bool select_grouped_keyingset(bContext *C, Object *UNUSED(ob), ReportList *reports)
{
- KeyingSet *ks = ANIM_scene_get_active_keyingset(CTX_data_scene(C));
- bool changed = false;
-
- /* firstly, validate KeyingSet */
- if (ks == NULL) {
- BKE_report(reports, RPT_ERROR, "No active Keying Set to use");
- return false;
- }
- else if (ANIM_validate_keyingset(C, NULL, ks) != 0) {
- if (ks->paths.first == NULL) {
- if ((ks->flag & KEYINGSET_ABSOLUTE) == 0) {
- BKE_report(reports, RPT_ERROR,
- "Use another Keying Set, as the active one depends on the currently "
- "selected objects or cannot find any targets due to unsuitable context");
- }
- else {
- BKE_report(reports, RPT_ERROR, "Keying Set does not contain any paths");
- }
- }
- return false;
- }
-
- /* select each object that Keying Set refers to */
- /* TODO: perhaps to be more in line with the rest of these, we should only take objects
- * if the passed in object is included in this too */
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- /* only check for this object if it isn't selected already, to limit time wasted */
- if ((base->flag & BASE_SELECTED) == 0) {
- KS_Path *ksp;
-
- /* this is the slow way... we could end up with > 500 items here,
- * with none matching, but end up doing this on 1000 objects...
- */
- for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
- /* if id matches, select then stop looping (match found) */
- if (ksp->id == (ID *)base->object) {
- ED_object_base_select(base, BA_SELECT);
- changed = true;
- break;
- }
- }
- }
- }
- CTX_DATA_END;
-
- return changed;
+ KeyingSet *ks = ANIM_scene_get_active_keyingset(CTX_data_scene(C));
+ bool changed = false;
+
+ /* firstly, validate KeyingSet */
+ if (ks == NULL) {
+ BKE_report(reports, RPT_ERROR, "No active Keying Set to use");
+ return false;
+ }
+ else if (ANIM_validate_keyingset(C, NULL, ks) != 0) {
+ if (ks->paths.first == NULL) {
+ if ((ks->flag & KEYINGSET_ABSOLUTE) == 0) {
+ BKE_report(reports,
+ RPT_ERROR,
+ "Use another Keying Set, as the active one depends on the currently "
+ "selected objects or cannot find any targets due to unsuitable context");
+ }
+ else {
+ BKE_report(reports, RPT_ERROR, "Keying Set does not contain any paths");
+ }
+ }
+ return false;
+ }
+
+ /* select each object that Keying Set refers to */
+ /* TODO: perhaps to be more in line with the rest of these, we should only take objects
+ * if the passed in object is included in this too */
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ /* only check for this object if it isn't selected already, to limit time wasted */
+ if ((base->flag & BASE_SELECTED) == 0) {
+ KS_Path *ksp;
+
+ /* this is the slow way... we could end up with > 500 items here,
+ * with none matching, but end up doing this on 1000 objects...
+ */
+ for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
+ /* if id matches, select then stop looping (match found) */
+ if (ksp->id == (ID *)base->object) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ break;
+ }
+ }
+ }
+ }
+ CTX_DATA_END;
+
+ return changed;
}
static int object_select_grouped_exec(bContext *C, wmOperator *op)
{
- Scene *scene = CTX_data_scene(C);
- ViewLayer *view_layer = CTX_data_view_layer(C);
- View3D *v3d = CTX_wm_view3d(C);
- Object *ob;
- const int type = RNA_enum_get(op->ptr, "type");
- bool changed = false, extend;
-
- extend = RNA_boolean_get(op->ptr, "extend");
-
- if (extend == 0) {
- changed = ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
- }
-
- ob = OBACT(view_layer);
- if (ob == NULL) {
- BKE_report(op->reports, RPT_ERROR, "No active object");
- return OPERATOR_CANCELLED;
- }
-
- switch (type) {
- case OBJECT_GRPSEL_CHILDREN_RECURSIVE:
- changed |= select_grouped_children(C, ob, true);
- break;
- case OBJECT_GRPSEL_CHILDREN:
- changed |= select_grouped_children(C, ob, false);
- break;
- case OBJECT_GRPSEL_PARENT:
- changed |= select_grouped_parent(C);
- break;
- case OBJECT_GRPSEL_SIBLINGS:
- changed |= select_grouped_siblings(C, ob);
- break;
- case OBJECT_GRPSEL_TYPE:
- changed |= select_grouped_type(C, ob);
- break;
- case OBJECT_GRPSEL_COLLECTION:
- changed |= select_grouped_collection(C, ob);
- break;
- case OBJECT_GRPSEL_HOOK:
- changed |= select_grouped_object_hooks(C, ob);
- break;
- case OBJECT_GRPSEL_PASS:
- changed |= select_grouped_index_object(C, ob);
- break;
- case OBJECT_GRPSEL_COLOR:
- changed |= select_grouped_color(C, ob);
- break;
- case OBJECT_GRPSEL_KEYINGSET:
- changed |= select_grouped_keyingset(C, ob, op->reports);
- break;
- case OBJECT_GRPSEL_LIGHT_TYPE:
- if (ob->type != OB_LAMP) {
- BKE_report(op->reports, RPT_ERROR, "Active object must be a light");
- break;
- }
- changed |= select_grouped_lighttype(C, ob);
- break;
- default:
- break;
- }
-
- if (changed) {
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- return OPERATOR_FINISHED;
- }
-
- return OPERATOR_CANCELLED;
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ Object *ob;
+ const int type = RNA_enum_get(op->ptr, "type");
+ bool changed = false, extend;
+
+ extend = RNA_boolean_get(op->ptr, "extend");
+
+ if (extend == 0) {
+ changed = ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT);
+ }
+
+ ob = OBACT(view_layer);
+ if (ob == NULL) {
+ BKE_report(op->reports, RPT_ERROR, "No active object");
+ return OPERATOR_CANCELLED;
+ }
+
+ switch (type) {
+ case OBJECT_GRPSEL_CHILDREN_RECURSIVE:
+ changed |= select_grouped_children(C, ob, true);
+ break;
+ case OBJECT_GRPSEL_CHILDREN:
+ changed |= select_grouped_children(C, ob, false);
+ break;
+ case OBJECT_GRPSEL_PARENT:
+ changed |= select_grouped_parent(C);
+ break;
+ case OBJECT_GRPSEL_SIBLINGS:
+ changed |= select_grouped_siblings(C, ob);
+ break;
+ case OBJECT_GRPSEL_TYPE:
+ changed |= select_grouped_type(C, ob);
+ break;
+ case OBJECT_GRPSEL_COLLECTION:
+ changed |= select_grouped_collection(C, ob);
+ break;
+ case OBJECT_GRPSEL_HOOK:
+ changed |= select_grouped_object_hooks(C, ob);
+ break;
+ case OBJECT_GRPSEL_PASS:
+ changed |= select_grouped_index_object(C, ob);
+ break;
+ case OBJECT_GRPSEL_COLOR:
+ changed |= select_grouped_color(C, ob);
+ break;
+ case OBJECT_GRPSEL_KEYINGSET:
+ changed |= select_grouped_keyingset(C, ob, op->reports);
+ break;
+ case OBJECT_GRPSEL_LIGHT_TYPE:
+ if (ob->type != OB_LAMP) {
+ BKE_report(op->reports, RPT_ERROR, "Active object must be a light");
+ break;
+ }
+ changed |= select_grouped_lighttype(C, ob);
+ break;
+ default:
+ break;
+ }
+
+ if (changed) {
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ return OPERATOR_FINISHED;
+ }
+
+ return OPERATOR_CANCELLED;
}
void OBJECT_OT_select_grouped(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select Grouped";
- ot->description = "Select all visible objects grouped by various properties";
- ot->idname = "OBJECT_OT_select_grouped";
-
- /* api callbacks */
- ot->invoke = WM_menu_invoke;
- ot->exec = object_select_grouped_exec;
- ot->poll = objects_selectable_poll;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend selection instead of deselecting everything first");
- ot->prop = RNA_def_enum(ot->srna, "type", prop_select_grouped_types, 0, "Type", "");
+ /* identifiers */
+ ot->name = "Select Grouped";
+ ot->description = "Select all visible objects grouped by various properties";
+ ot->idname = "OBJECT_OT_select_grouped";
+
+ /* api callbacks */
+ ot->invoke = WM_menu_invoke;
+ ot->exec = object_select_grouped_exec;
+ ot->poll = objects_selectable_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna,
+ "extend",
+ false,
+ "Extend",
+ "Extend selection instead of deselecting everything first");
+ ot->prop = RNA_def_enum(ot->srna, "type", prop_select_grouped_types, 0, "Type", "");
}
/** \} */
@@ -1103,46 +1119,46 @@ void OBJECT_OT_select_grouped(wmOperatorType *ot)
static int object_select_all_exec(bContext *C, wmOperator *op)
{
- ViewLayer *view_layer = CTX_data_view_layer(C);
- View3D *v3d = CTX_wm_view3d(C);
- int action = RNA_enum_get(op->ptr, "action");
- bool any_visible = false;
-
- bool changed = ED_object_base_deselect_all_ex(view_layer, v3d, action, &any_visible);
-
- if (changed) {
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
-
- return OPERATOR_FINISHED;
- }
- else if (any_visible == false) {
- /* TODO(campbell): Looks like we could remove this,
- * if not comment should say why its needed. */
- return OPERATOR_PASS_THROUGH;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ int action = RNA_enum_get(op->ptr, "action");
+ bool any_visible = false;
+
+ bool changed = ED_object_base_deselect_all_ex(view_layer, v3d, action, &any_visible);
+
+ if (changed) {
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+
+ return OPERATOR_FINISHED;
+ }
+ else if (any_visible == false) {
+ /* TODO(campbell): Looks like we could remove this,
+ * if not comment should say why its needed. */
+ return OPERATOR_PASS_THROUGH;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
void OBJECT_OT_select_all(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "(De)select All";
- ot->description = "Change selection of all visible objects in scene";
- ot->idname = "OBJECT_OT_select_all";
+ /* identifiers */
+ ot->name = "(De)select All";
+ ot->description = "Change selection of all visible objects in scene";
+ ot->idname = "OBJECT_OT_select_all";
- /* api callbacks */
- ot->exec = object_select_all_exec;
- ot->poll = objects_selectable_poll;
+ /* api callbacks */
+ ot->exec = object_select_all_exec;
+ ot->poll = objects_selectable_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- WM_operator_properties_select_all(ot);
+ WM_operator_properties_select_all(ot);
}
/** \} */
@@ -1153,54 +1169,55 @@ void OBJECT_OT_select_all(wmOperatorType *ot)
static int object_select_same_collection_exec(bContext *C, wmOperator *op)
{
- Main *bmain = CTX_data_main(C);
- Collection *collection;
- char collection_name[MAX_ID_NAME];
+ Main *bmain = CTX_data_main(C);
+ Collection *collection;
+ char collection_name[MAX_ID_NAME];
- /* passthrough if no objects are visible */
- if (CTX_DATA_COUNT(C, visible_bases) == 0) return OPERATOR_PASS_THROUGH;
+ /* passthrough if no objects are visible */
+ if (CTX_DATA_COUNT(C, visible_bases) == 0)
+ return OPERATOR_PASS_THROUGH;
- RNA_string_get(op->ptr, "collection", collection_name);
+ RNA_string_get(op->ptr, "collection", collection_name);
- collection = (Collection *)BKE_libblock_find_name(bmain, ID_GR, collection_name);
+ collection = (Collection *)BKE_libblock_find_name(bmain, ID_GR, collection_name);
- if (!collection) {
- return OPERATOR_PASS_THROUGH;
- }
+ if (!collection) {
+ return OPERATOR_PASS_THROUGH;
+ }
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
- if (BKE_collection_has_object(collection, base->object)) {
- ED_object_base_select(base, BA_SELECT);
- }
- }
- }
- CTX_DATA_END;
+ CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
+ if (BKE_collection_has_object(collection, base->object)) {
+ ED_object_base_select(base, BA_SELECT);
+ }
+ }
+ }
+ CTX_DATA_END;
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- return OPERATOR_FINISHED;
+ return OPERATOR_FINISHED;
}
void OBJECT_OT_select_same_collection(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select Same Collection";
- ot->description = "Select object in the same collection";
- ot->idname = "OBJECT_OT_select_same_collection";
+ /* identifiers */
+ ot->name = "Select Same Collection";
+ ot->description = "Select object in the same collection";
+ ot->idname = "OBJECT_OT_select_same_collection";
- /* api callbacks */
- ot->exec = object_select_same_collection_exec;
- ot->poll = objects_selectable_poll;
+ /* api callbacks */
+ ot->exec = object_select_same_collection_exec;
+ ot->poll = objects_selectable_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- RNA_def_string(ot->srna, "collection", NULL, MAX_ID_NAME, "Collection", "Name of the collection to select");
+ RNA_def_string(
+ ot->srna, "collection", NULL, MAX_ID_NAME, "Collection", "Name of the collection to select");
}
/** \} */
@@ -1211,58 +1228,58 @@ void OBJECT_OT_select_same_collection(wmOperatorType *ot)
static int object_select_mirror_exec(bContext *C, wmOperator *op)
{
- Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- ViewLayer *view_layer = CTX_data_view_layer(C);
- bool extend;
-
- extend = RNA_boolean_get(op->ptr, "extend");
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ bool extend;
- CTX_DATA_BEGIN (C, Base *, primbase, selected_bases)
- {
- char name_flip[MAXBONENAME];
+ extend = RNA_boolean_get(op->ptr, "extend");
- BLI_string_flip_side_name(name_flip, primbase->object->id.name + 2, true, sizeof(name_flip));
+ CTX_DATA_BEGIN (C, Base *, primbase, selected_bases) {
+ char name_flip[MAXBONENAME];
- if (!STREQ(name_flip, primbase->object->id.name + 2)) {
- Object *ob = (Object *)BKE_libblock_find_name(bmain, ID_OB, name_flip);
- if (ob) {
- Base *secbase = BKE_view_layer_base_find(view_layer, ob);
+ BLI_string_flip_side_name(name_flip, primbase->object->id.name + 2, true, sizeof(name_flip));
- if (secbase) {
- ED_object_base_select(secbase, BA_SELECT);
- }
- }
- }
+ if (!STREQ(name_flip, primbase->object->id.name + 2)) {
+ Object *ob = (Object *)BKE_libblock_find_name(bmain, ID_OB, name_flip);
+ if (ob) {
+ Base *secbase = BKE_view_layer_base_find(view_layer, ob);
- if (extend == false) ED_object_base_select(primbase, BA_DESELECT);
+ if (secbase) {
+ ED_object_base_select(secbase, BA_SELECT);
+ }
+ }
+ }
- }
- CTX_DATA_END;
+ if (extend == false)
+ ED_object_base_select(primbase, BA_DESELECT);
+ }
+ CTX_DATA_END;
- /* undo? */
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ /* undo? */
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- return OPERATOR_FINISHED;
+ return OPERATOR_FINISHED;
}
void OBJECT_OT_select_mirror(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select Mirror";
- ot->description = "Select the Mirror objects of the selected object eg. L.sword -> R.sword";
- ot->idname = "OBJECT_OT_select_mirror";
+ /* identifiers */
+ ot->name = "Select Mirror";
+ ot->description = "Select the Mirror objects of the selected object eg. L.sword -> R.sword";
+ ot->idname = "OBJECT_OT_select_mirror";
- /* api callbacks */
- ot->exec = object_select_mirror_exec;
- ot->poll = objects_selectable_poll;
+ /* api callbacks */
+ ot->exec = object_select_mirror_exec;
+ ot->poll = objects_selectable_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first");
+ RNA_def_boolean(
+ ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first");
}
/** \} */
@@ -1273,116 +1290,114 @@ void OBJECT_OT_select_mirror(wmOperatorType *ot)
static bool object_select_more_less(bContext *C, const bool select)
{
- ViewLayer *view_layer = CTX_data_view_layer(C);
-
- for (Base *base = view_layer->object_bases.first; base; base = base->next) {
- Object *ob = base->object;
- ob->flag &= ~OB_DONE;
- ob->id.tag &= ~LIB_TAG_DOIT;
- /* parent may be in another scene */
- if (ob->parent) {
- ob->parent->flag &= ~OB_DONE;
- ob->parent->id.tag &= ~LIB_TAG_DOIT;
- }
- }
-
- ListBase ctx_base_list;
- CollectionPointerLink *ctx_base;
- CTX_data_selectable_bases(C, &ctx_base_list);
-
- CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
- {
- ob->flag |= OB_DONE;
- }
- CTX_DATA_END;
-
-
- for (ctx_base = ctx_base_list.first; ctx_base; ctx_base = ctx_base->next) {
- Object *ob = ((Base *)ctx_base->ptr.data)->object;
- if (ob->parent) {
- if ((ob->flag & OB_DONE) != (ob->parent->flag & OB_DONE)) {
- ob->id.tag |= LIB_TAG_DOIT;
- ob->parent->id.tag |= LIB_TAG_DOIT;
- }
- }
- }
-
- bool changed = false;
- const short select_mode = select ? BA_SELECT : BA_DESELECT;
- const short select_flag = select ? BASE_SELECTED : 0;
-
- for (ctx_base = ctx_base_list.first; ctx_base; ctx_base = ctx_base->next) {
- Base *base = ctx_base->ptr.data;
- Object *ob = base->object;
- if ((ob->id.tag & LIB_TAG_DOIT) && ((base->flag & BASE_SELECTED) != select_flag)) {
- ED_object_base_select(base, select_mode);
- changed = true;
- }
- }
-
- BLI_freelistN(&ctx_base_list);
-
- return changed;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ Object *ob = base->object;
+ ob->flag &= ~OB_DONE;
+ ob->id.tag &= ~LIB_TAG_DOIT;
+ /* parent may be in another scene */
+ if (ob->parent) {
+ ob->parent->flag &= ~OB_DONE;
+ ob->parent->id.tag &= ~LIB_TAG_DOIT;
+ }
+ }
+
+ ListBase ctx_base_list;
+ CollectionPointerLink *ctx_base;
+ CTX_data_selectable_bases(C, &ctx_base_list);
+
+ CTX_DATA_BEGIN (C, Object *, ob, selected_objects) {
+ ob->flag |= OB_DONE;
+ }
+ CTX_DATA_END;
+
+ for (ctx_base = ctx_base_list.first; ctx_base; ctx_base = ctx_base->next) {
+ Object *ob = ((Base *)ctx_base->ptr.data)->object;
+ if (ob->parent) {
+ if ((ob->flag & OB_DONE) != (ob->parent->flag & OB_DONE)) {
+ ob->id.tag |= LIB_TAG_DOIT;
+ ob->parent->id.tag |= LIB_TAG_DOIT;
+ }
+ }
+ }
+
+ bool changed = false;
+ const short select_mode = select ? BA_SELECT : BA_DESELECT;
+ const short select_flag = select ? BASE_SELECTED : 0;
+
+ for (ctx_base = ctx_base_list.first; ctx_base; ctx_base = ctx_base->next) {
+ Base *base = ctx_base->ptr.data;
+ Object *ob = base->object;
+ if ((ob->id.tag & LIB_TAG_DOIT) && ((base->flag & BASE_SELECTED) != select_flag)) {
+ ED_object_base_select(base, select_mode);
+ changed = true;
+ }
+ }
+
+ BLI_freelistN(&ctx_base_list);
+
+ return changed;
}
static int object_select_more_exec(bContext *C, wmOperator *UNUSED(op))
{
- bool changed = object_select_more_less(C, true);
-
- if (changed) {
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ bool changed = object_select_more_less(C, true);
+
+ if (changed) {
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
void OBJECT_OT_select_more(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select More";
- ot->idname = "OBJECT_OT_select_more";
- ot->description = "Select connected parent/child objects";
+ /* identifiers */
+ ot->name = "Select More";
+ ot->idname = "OBJECT_OT_select_more";
+ ot->description = "Select connected parent/child objects";
- /* api callbacks */
- ot->exec = object_select_more_exec;
- ot->poll = ED_operator_objectmode;
+ /* api callbacks */
+ ot->exec = object_select_more_exec;
+ ot->poll = ED_operator_objectmode;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
static int object_select_less_exec(bContext *C, wmOperator *UNUSED(op))
{
- bool changed = object_select_more_less(C, false);
-
- if (changed) {
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ bool changed = object_select_more_less(C, false);
+
+ if (changed) {
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
void OBJECT_OT_select_less(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select Less";
- ot->idname = "OBJECT_OT_select_less";
- ot->description = "Deselect objects at the boundaries of parent/child relationships";
+ /* identifiers */
+ ot->name = "Select Less";
+ ot->idname = "OBJECT_OT_select_less";
+ ot->description = "Deselect objects at the boundaries of parent/child relationships";
- /* api callbacks */
- ot->exec = object_select_less_exec;
- ot->poll = ED_operator_objectmode;
+ /* api callbacks */
+ ot->exec = object_select_less_exec;
+ ot->poll = ED_operator_objectmode;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
/** \} */
@@ -1393,46 +1408,45 @@ void OBJECT_OT_select_less(wmOperatorType *ot)
static int object_select_random_exec(bContext *C, wmOperator *op)
{
- const float randfac = RNA_float_get(op->ptr, "percent") / 100.0f;
- const int seed = WM_operator_properties_select_random_seed_increment_get(op);
- const bool select = (RNA_enum_get(op->ptr, "action") == SEL_SELECT);
+ const float randfac = RNA_float_get(op->ptr, "percent") / 100.0f;
+ const int seed = WM_operator_properties_select_random_seed_increment_get(op);
+ const bool select = (RNA_enum_get(op->ptr, "action") == SEL_SELECT);
- RNG *rng = BLI_rng_new_srandom(seed);
+ RNG *rng = BLI_rng_new_srandom(seed);
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if (BLI_rng_get_float(rng) < randfac) {
- ED_object_base_select(base, select);
- }
- }
- CTX_DATA_END;
+ CTX_DATA_BEGIN (C, Base *, base, selectable_bases) {
+ if (BLI_rng_get_float(rng) < randfac) {
+ ED_object_base_select(base, select);
+ }
+ }
+ CTX_DATA_END;
- BLI_rng_free(rng);
+ BLI_rng_free(rng);
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- return OPERATOR_FINISHED;
+ return OPERATOR_FINISHED;
}
void OBJECT_OT_select_random(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Select Random";
- ot->description = "Set select on random visible objects";
- ot->idname = "OBJECT_OT_select_random";
+ /* identifiers */
+ ot->name = "Select Random";
+ ot->description = "Set select on random visible objects";
+ ot->idname = "OBJECT_OT_select_random";
- /* api callbacks */
- /*ot->invoke = object_select_random_invoke XXX - need a number popup ;*/
- ot->exec = object_select_random_exec;
- ot->poll = objects_selectable_poll;
+ /* api callbacks */
+ /*ot->invoke = object_select_random_invoke XXX - need a number popup ;*/
+ ot->exec = object_select_random_exec;
+ ot->poll = objects_selectable_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- /* properties */
- WM_operator_properties_select_random(ot);
+ /* properties */
+ WM_operator_properties_select_random(ot);
}
/** \} */