Cleanup: Use C++ namespace for object editors module

Move the public functions from the editors/object (`ED_object.hh`)
header to the `blender::ed::object` namespace, and move all of the
implementation files to the namespace too. This provides better code
completion, makes it easier to use other C++ code, removes unnecessary
redundancy and verbosity from local uses of public functions, and more
cleanly separates different modules.

See the diff in `ED_object.hh` for the main renaming changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/119947
This commit is contained in:
Hans Goudey 2024-03-28 01:30:38 +01:00 committed by Hans Goudey
parent 35c6c11c7e
commit c28db1f0a0
132 changed files with 1854 additions and 1907 deletions

View File

@ -805,7 +805,7 @@ static ModifierData &legacy_object_modifier_common(Object &object,
const ModifierType type,
GpencilModifierData &legacy_md)
{
/* TODO: Copy of most of #ED_object_modifier_add, this should be a BKE_modifiers function
/* TODO: Copy of most of #ed::object::modifier_add, this should be a BKE_modifiers function
* actually. */
const ModifierTypeInfo *mti = BKE_modifier_get_info(type);

View File

@ -3365,6 +3365,7 @@ static int click_select_channel_object(bContext *C,
bAnimListElem *ale,
const short /* eEditKeyframes_Select or -1 */ selectmode)
{
using namespace blender::ed;
Scene *scene = ac->scene;
ViewLayer *view_layer = ac->view_layer;
Base *base = (Base *)ale->data;
@ -3377,7 +3378,7 @@ static int click_select_channel_object(bContext *C,
if (selectmode == SELECT_INVERT) {
/* swap select */
ED_object_base_select(base, BA_INVERT);
object::base_select(base, object::BA_INVERT);
if (adt) {
adt->flag ^= ADT_UI_SELECTED;
@ -3393,14 +3394,14 @@ static int click_select_channel_object(bContext *C,
BKE_view_layer_synced_ensure(scene, view_layer);
/* TODO: should this deselect all other types of channels too? */
LISTBASE_FOREACH (Base *, b, BKE_view_layer_object_bases_get(view_layer)) {
ED_object_base_select(b, BA_DESELECT);
object::base_select(b, object::BA_DESELECT);
if (b->object->adt) {
b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE);
}
}
/* select object now */
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
if (adt) {
adt->flag |= ADT_UI_SELECTED;
}
@ -3410,7 +3411,7 @@ static int click_select_channel_object(bContext *C,
*
* Ensure we exit edit-mode on whatever object was active before
* to avoid getting stuck there, see: #48747. */
ED_object_base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */
object::base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */
/* Similar to outliner, do not change active element when selecting elements in range. */
if ((adt) && (adt->flag & ADT_UI_SELECTED) && (selectmode != SELECT_EXTEND_RANGE)) {

View File

@ -1304,6 +1304,7 @@ static int select_timeline_marker_frame(ListBase *markers,
static void select_marker_camera_switch(
bContext *C, bool camera, bool extend, ListBase *markers, int cfra)
{
using namespace blender::ed;
#ifdef DURIAN_CAMERA_SWITCH
if (camera) {
BLI_assert(CTX_data_mode_enum(C) == CTX_MODE_OBJECT);
@ -1329,9 +1330,9 @@ static void select_marker_camera_switch(
if (marker->frame == cfra) {
base = BKE_view_layer_base_find(view_layer, marker->camera);
if (base) {
ED_object_base_select(base, eObjectSelect_Mode(sel));
object::base_select(base, object::eObjectSelect_Mode(sel));
if (sel) {
ED_object_base_activate(C, base);
object::base_activate(C, base);
}
}
}

View File

@ -198,7 +198,7 @@ static int insert_key_with_keyingset(bContext *C, wmOperator *op, KeyingSet *ks)
* updated since the last switching to the edit mode will be keyframed correctly
*/
if (obedit && ANIM_keyingset_find_id(ks, (ID *)obedit->data)) {
ED_object_mode_set(C, OB_MODE_OBJECT);
blender::ed::object::mode_set(C, OB_MODE_OBJECT);
ob_edit_mode = true;
}
@ -214,7 +214,7 @@ static int insert_key_with_keyingset(bContext *C, wmOperator *op, KeyingSet *ks)
/* restore the edit mode if necessary */
if (ob_edit_mode) {
ED_object_mode_set(C, OB_MODE_EDIT);
blender::ed::object::mode_set(C, OB_MODE_EDIT);
}
/* report failure or do updates? */

View File

@ -66,7 +66,7 @@ bArmature *ED_armature_context(const bContext *C)
CTX_data_pointer_get_type(C, "armature", &RNA_Armature).data);
if (armature == nullptr) {
Object *object = ED_object_active_context(C);
Object *object = blender::ed::object::context_active_object(C);
if (object && object->type == OB_ARMATURE) {
armature = static_cast<bArmature *>(object->data);
}

View File

@ -493,7 +493,7 @@ int ED_armature_join_objects_exec(bContext *C, wmOperator *op)
}
/* Free the old object data */
ED_object_base_free_and_unlink(bmain, scene, ob_iter);
blender::ed::object::base_free_and_unlink(bmain, scene, ob_iter);
}
}
CTX_DATA_END;
@ -735,7 +735,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
/* Only duplicate linked armature but take into account
* user preferences for duplicating actions. */
short dupflag = USER_DUP_ARM | (U.dupflag & USER_DUP_ACT);
Base *base_new = ED_object_add_duplicate(
Base *base_new = blender::ed::object::add_duplicate(
bmain, scene, view_layer, base_old, eDupli_ID_Flags(dupflag));
Object *ob_new = base_new->object;

View File

@ -1092,7 +1092,7 @@ bool ED_armature_edit_select_pick_bone(
BKE_view_layer_synced_ensure(scene, view_layer);
if (BKE_view_layer_active_base_get(view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, basact->object);

View File

@ -243,19 +243,19 @@ static void envelope_bone_weighting(Object *ob,
/* add the vert to the deform group if (weight != 0.0) */
if (distance != 0.0f) {
ED_vgroup_vert_add(ob, dgroup, i, distance, WEIGHT_REPLACE);
blender::ed::object::vgroup_vert_add(ob, dgroup, i, distance, WEIGHT_REPLACE);
}
else {
ED_vgroup_vert_remove(ob, dgroup, i);
blender::ed::object::vgroup_vert_remove(ob, dgroup, i);
}
/* do same for mirror */
if (dgroupflip && dgroupflip[j] && iflip != -1) {
if (distance != 0.0f) {
ED_vgroup_vert_add(ob, dgroupflip[j], iflip, distance, WEIGHT_REPLACE);
blender::ed::object::vgroup_vert_add(ob, dgroupflip[j], iflip, distance, WEIGHT_REPLACE);
}
else {
ED_vgroup_vert_remove(ob, dgroupflip[j], iflip);
blender::ed::object::vgroup_vert_remove(ob, dgroupflip[j], iflip);
}
}
}
@ -492,7 +492,7 @@ void ED_object_vgroup_calc_from_armature(ReportList *reports,
if (defbase_add) {
/* It's possible there are DWeights outside the range of the current
* object's deform groups. In this case the new groups won't be empty #33889. */
ED_vgroup_data_clamp_range(static_cast<ID *>(ob->data), defbase_tot);
blender::ed::object::vgroup_data_clamp_range(static_cast<ID *>(ob->data), defbase_tot);
}
}
else if (ELEM(mode, ARM_GROUPS_ENVELOPE, ARM_GROUPS_AUTO)) {

View File

@ -366,7 +366,7 @@ static bool bone_collection_assign_named_mode_specific(bContext *C,
static bool bone_collection_assign_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return false;
}
@ -399,7 +399,7 @@ static bool bone_collection_assign_poll(bContext *C)
/* Assign selected pchans to the bone collection that the user selects */
static int bone_collection_assign_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return OPERATOR_CANCELLED;
}
@ -469,7 +469,7 @@ void ARMATURE_OT_collection_assign(wmOperatorType *ot)
static bool bone_collection_create_and_assign_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return false;
}
@ -498,7 +498,7 @@ static bool bone_collection_create_and_assign_poll(bContext *C)
/* Assign selected pchans to the bone collection that the user selects */
static int bone_collection_create_and_assign_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return OPERATOR_CANCELLED;
}
@ -565,7 +565,7 @@ void ARMATURE_OT_collection_create_and_assign(wmOperatorType *ot)
static int bone_collection_unassign_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return OPERATOR_CANCELLED;
}
@ -626,7 +626,7 @@ void ARMATURE_OT_collection_unassign(wmOperatorType *ot)
static int bone_collection_unassign_named_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return OPERATOR_CANCELLED;
}
@ -712,7 +712,7 @@ static bool editbone_is_member(const EditBone *ebone, const BoneCollection *bcol
static bool armature_bone_select_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr || ob->type != OB_ARMATURE) {
return false;
}
@ -784,7 +784,7 @@ static void bone_collection_select(bContext *C,
static int bone_collection_select_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return OPERATOR_CANCELLED;
}
@ -816,7 +816,7 @@ void ARMATURE_OT_collection_select(wmOperatorType *ot)
static int bone_collection_deselect_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return OPERATOR_CANCELLED;
}
@ -891,7 +891,7 @@ static int add_or_move_to_collection_exec(bContext *C,
const assign_bone_func assign_func_bone,
const assign_ebone_func assign_func_ebone)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob->mode == OB_MODE_POSE) {
ob = ED_pose_object_from_context(C);
}
@ -953,7 +953,7 @@ static int assign_to_collection_exec(bContext *C, wmOperator *op)
static bool move_to_collection_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob == nullptr) {
return false;
}
@ -1062,7 +1062,7 @@ static void move_to_collection_menu_create(bContext *C, uiLayout *layout, void *
bool is_move_operation;
std::tie(parent_bcoll_index, is_move_operation) = menu_custom_data_decode(menu_custom_data);
const Object *ob = ED_object_context(C);
const Object *ob = blender::ed::object::context_object(C);
const bArmature *arm = static_cast<bArmature *>(ob->data);
/* The "Create a new collection" mode of this operator has its own menu, and should thus be

View File

@ -737,9 +737,9 @@ void heat_bone_weighting(Object *ob,
continue;
}
ED_vgroup_vert_remove(ob, dgrouplist[j], a);
blender::ed::object::vgroup_vert_remove(ob, dgrouplist[j], a);
if (vertsflipped && dgroupflip[j] && vertsflipped[a] >= 0) {
ED_vgroup_vert_remove(ob, dgroupflip[j], vertsflipped[a]);
blender::ed::object::vgroup_vert_remove(ob, dgroupflip[j], vertsflipped[a]);
}
}
}
@ -765,16 +765,16 @@ void heat_bone_weighting(Object *ob,
if (bbone) {
if (solution > 0.0f) {
ED_vgroup_vert_add(ob, dgrouplist[j], a, solution, WEIGHT_ADD);
blender::ed::object::vgroup_vert_add(ob, dgrouplist[j], a, solution, WEIGHT_ADD);
}
}
else {
weight = heat_limit_weight(solution);
if (weight > 0.0f) {
ED_vgroup_vert_add(ob, dgrouplist[j], a, weight, WEIGHT_REPLACE);
blender::ed::object::vgroup_vert_add(ob, dgrouplist[j], a, weight, WEIGHT_REPLACE);
}
else {
ED_vgroup_vert_remove(ob, dgrouplist[j], a);
blender::ed::object::vgroup_vert_remove(ob, dgrouplist[j], a);
}
}
@ -782,16 +782,18 @@ void heat_bone_weighting(Object *ob,
if (vertsflipped && dgroupflip[j] && vertsflipped[a] >= 0) {
if (bbone) {
if (solution > 0.0f) {
ED_vgroup_vert_add(ob, dgroupflip[j], vertsflipped[a], solution, WEIGHT_ADD);
blender::ed::object::vgroup_vert_add(
ob, dgroupflip[j], vertsflipped[a], solution, WEIGHT_ADD);
}
}
else {
weight = heat_limit_weight(solution);
if (weight > 0.0f) {
ED_vgroup_vert_add(ob, dgroupflip[j], vertsflipped[a], weight, WEIGHT_REPLACE);
blender::ed::object::vgroup_vert_add(
ob, dgroupflip[j], vertsflipped[a], weight, WEIGHT_REPLACE);
}
else {
ED_vgroup_vert_remove(ob, dgroupflip[j], vertsflipped[a]);
blender::ed::object::vgroup_vert_remove(ob, dgroupflip[j], vertsflipped[a]);
}
}
}
@ -809,17 +811,17 @@ void heat_bone_weighting(Object *ob,
continue;
}
weight = ED_vgroup_vert_weight(ob, dgrouplist[j], a);
weight = blender::ed::object::vgroup_vert_weight(ob, dgrouplist[j], a);
weight = heat_limit_weight(weight);
if (weight <= 0.0f) {
ED_vgroup_vert_remove(ob, dgrouplist[j], a);
blender::ed::object::vgroup_vert_remove(ob, dgrouplist[j], a);
}
if (vertsflipped && dgroupflip[j] && vertsflipped[a] >= 0) {
weight = ED_vgroup_vert_weight(ob, dgroupflip[j], vertsflipped[a]);
weight = blender::ed::object::vgroup_vert_weight(ob, dgroupflip[j], vertsflipped[a]);
weight = heat_limit_weight(weight);
if (weight <= 0.0f) {
ED_vgroup_vert_remove(ob, dgroupflip[j], vertsflipped[a]);
blender::ed::object::vgroup_vert_remove(ob, dgroupflip[j], vertsflipped[a]);
}
}
}

View File

@ -66,7 +66,7 @@ Object *ED_pose_object_from_context(bContext *C)
/* Since this call may also be used from the buttons window,
* we need to check for where to get the object. */
if (area && area->spacetype == SPACE_PROPERTIES) {
ob = ED_object_active_context(C);
ob = blender::ed::object::context_active_object(C);
}
else {
ob = BKE_object_pose_armature_get(CTX_data_active_object(C));

View File

@ -234,7 +234,7 @@ bool ED_armature_pose_select_pick_bone(const Scene *scene,
/* In weight-paint we select the associated vertex group too. */
if (ob_act->mode & OB_MODE_ALL_WEIGHT_PAINT) {
if (bone == arm->act_bone) {
ED_vgroup_select_by_name(ob_act, bone->name);
blender::ed::object::vgroup_select_by_name(ob_act, bone->name);
DEG_id_tag_update(&ob_act->id, ID_RECALC_GEOMETRY);
}
}
@ -304,7 +304,7 @@ void ED_armature_pose_select_in_wpaint_mode(const Scene *scene,
if ((base_arm != nullptr) && (base_arm != base_select) &&
(base_arm->flag & BASE_SELECTED))
{
ED_object_base_select(base_arm, BA_DESELECT);
blender::ed::object::base_select(base_arm, blender::ed::object::BA_DESELECT);
}
}
}
@ -322,14 +322,14 @@ void ED_armature_pose_select_in_wpaint_mode(const Scene *scene,
if ((base_arm != nullptr) && (base_arm != base_select) &&
(base_arm->flag & BASE_SELECTED))
{
ED_object_base_select(base_arm, BA_DESELECT);
blender::ed::object::base_select(base_arm, blender::ed::object::BA_DESELECT);
}
}
}
}
}
if ((base_select->flag & BASE_SELECTED) == 0) {
ED_object_base_select(base_select, BA_SELECT);
blender::ed::object::base_select(base_select, blender::ed::object::BA_SELECT);
}
}
@ -1181,7 +1181,7 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op)
/* In weight-paint we select the associated vertex group too. */
if (is_weight_paint) {
ED_vgroup_select_by_name(ob_active, pchan_mirror_act->name);
blender::ed::object::vgroup_select_by_name(ob_active, pchan_mirror_act->name);
DEG_id_tag_update(&ob_active->id, ID_RECALC_GEOMETRY);
}
}

View File

@ -1391,7 +1391,7 @@ static int separate_exec(bContext *C, wmOperator *op)
/* Take into account user preferences for duplicating actions. */
const eDupli_ID_Flags dupflag = eDupli_ID_Flags(U.dupflag & USER_DUP_ACT);
newbase = ED_object_add_duplicate(bmain, scene, view_layer, oldbase, dupflag);
newbase = blender::ed::object::add_duplicate(bmain, scene, view_layer, oldbase, dupflag);
DEG_relations_tag_update(bmain);
newob = newbase->object;
@ -2714,7 +2714,7 @@ static int set_radius_exec(bContext *C, wmOperator *op)
for (Object *obedit : objects) {
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}
@ -2831,7 +2831,7 @@ static int smooth_exec(bContext *C, wmOperator *op)
for (Object *obedit : objects) {
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}
@ -3174,7 +3174,7 @@ static int curve_smooth_radius_exec(bContext *C, wmOperator *op)
for (Object *obedit : objects) {
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}
@ -3223,7 +3223,7 @@ static int curve_smooth_tilt_exec(bContext *C, wmOperator *op)
for (Object *obedit : objects) {
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}
@ -4067,7 +4067,7 @@ static int curve_normals_make_consistent_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}
@ -4997,7 +4997,7 @@ bool ED_curve_editnurb_select_pick(bContext *C,
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
DEG_id_tag_update(static_cast<ID *>(obedit->data), ID_RECALC_SELECT | ID_RECALC_SYNC_TO_EVAL);
@ -6994,7 +6994,7 @@ int ED_curve_join_objects_exec(bContext *C, wmOperator *op)
}
}
ED_object_base_free_and_unlink(bmain, scene, ob_iter);
blender::ed::object::base_free_and_unlink(bmain, scene, ob_iter);
}
}
}
@ -7043,7 +7043,7 @@ static int clear_tilt_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}

View File

@ -509,7 +509,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
if (!isSurf) { /* adding curve */
@ -517,7 +517,8 @@ 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_CURVES_LEGACY, name, loc, rot, true, local_view_bits);
obedit = blender::ed::object::add_type(
C, OB_CURVES_LEGACY, name, loc, rot, true, local_view_bits);
newob = true;
cu = (Curve *)obedit->data;
@ -533,7 +534,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
else { /* adding surface */
if (obedit == nullptr || obedit->type != OB_SURF) {
const char *name = get_surf_defname(type);
obedit = ED_object_add_type(C, OB_SURF, name, loc, rot, true, local_view_bits);
obedit = blender::ed::object::add_type(C, OB_SURF, name, loc, rot, true, local_view_bits);
newob = true;
}
else {
@ -544,7 +545,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
float radius = RNA_float_get(op->ptr, "radius");
float scale[3];
copy_v3_fl(scale, radius);
ED_object_new_primitive_matrix(C, obedit, loc, rot, scale, mat);
blender::ed::object::new_primitive_matrix(C, obedit, loc, rot, scale, mat);
nu = ED_curve_add_nurbs_primitive(C, obedit, mat, type, newob);
editnurb = object_editcurve_get(obedit);
@ -552,7 +553,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
/* userdef */
if (newob && !enter_editmode) {
ED_object_editmode_exit_ex(bmain, scene, obedit, EM_FREEDATA);
blender::ed::object::editmode_exit_ex(bmain, scene, obedit, blender::ed::object::EM_FREEDATA);
}
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
@ -591,8 +592,8 @@ void CURVE_OT_primitive_bezier_curve_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_bezier_circle_exec(bContext *C, wmOperator *op)
@ -614,8 +615,8 @@ void CURVE_OT_primitive_bezier_circle_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_nurbs_curve_exec(bContext *C, wmOperator *op)
@ -637,8 +638,8 @@ void CURVE_OT_primitive_nurbs_curve_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_nurbs_circle_exec(bContext *C, wmOperator *op)
@ -660,8 +661,8 @@ void CURVE_OT_primitive_nurbs_circle_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_curve_path_exec(bContext *C, wmOperator *op)
@ -683,8 +684,8 @@ void CURVE_OT_primitive_nurbs_path_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
/* **************** NURBS surfaces ********************** */
@ -707,8 +708,8 @@ void SURFACE_OT_primitive_nurbs_surface_curve_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_nurbs_surface_circle_exec(bContext *C, wmOperator *op)
@ -730,8 +731,8 @@ void SURFACE_OT_primitive_nurbs_surface_circle_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_nurbs_surface_surface_exec(bContext *C, wmOperator *op)
@ -753,8 +754,8 @@ void SURFACE_OT_primitive_nurbs_surface_surface_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_nurbs_surface_cylinder_exec(bContext *C, wmOperator *op)
@ -776,8 +777,8 @@ void SURFACE_OT_primitive_nurbs_surface_cylinder_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_nurbs_surface_sphere_exec(bContext *C, wmOperator *op)
@ -799,8 +800,8 @@ void SURFACE_OT_primitive_nurbs_surface_sphere_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_nurbs_surface_torus_exec(bContext *C, wmOperator *op)
@ -822,6 +823,6 @@ void SURFACE_OT_primitive_nurbs_surface_torus_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_radius(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_generic_props(ot, true);
}

View File

@ -2043,7 +2043,7 @@ static int edcu_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
DEG_id_tag_update(static_cast<ID *>(obedit->data), ID_RECALC_SELECT | ID_RECALC_SYNC_TO_EVAL);

View File

@ -809,7 +809,7 @@ static void txt_add_object(bContext *C,
object = BKE_view_layer_active_object_get(view_layer);
/* seems to assume view align ? TODO: look into this, could be an operator option. */
ED_object_base_init_transform_on_add(object, nullptr, rot);
blender::ed::object::init_transform_on_add(object, nullptr, rot);
BKE_object_where_is_calc(depsgraph, scene, obedit);

View File

@ -67,7 +67,7 @@ void ensure_surface_deformation_node_exists(bContext &C, Object &curves_ob)
Main *bmain = CTX_data_main(&C);
Scene *scene = CTX_data_scene(&C);
ModifierData *md = ED_object_modifier_add(
ModifierData *md = object::modifier_add(
nullptr, bmain, scene, &curves_ob, DATA_("Surface Deform"), eModifierType_Nodes);
NodesModifierData &nmd = *reinterpret_cast<NodesModifierData *>(md);
nmd.node_group = ntreeAddTree(bmain, DATA_("Surface Deform"), "GeometryNodeTree");

View File

@ -524,7 +524,7 @@ static int curves_convert_from_particle_system_exec(bContext *C, wmOperator * /*
Scene &scene = *CTX_data_scene(C);
ViewLayer &view_layer = *CTX_data_view_layer(C);
Depsgraph &depsgraph = *CTX_data_depsgraph_pointer(C);
Object *ob_from_orig = ED_object_active_context(C);
Object *ob_from_orig = object::context_active_object(C);
ParticleSystem *psys_orig = static_cast<ParticleSystem *>(
CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data);
if (psys_orig == nullptr) {
@ -559,7 +559,7 @@ static int curves_convert_from_particle_system_exec(bContext *C, wmOperator * /*
static bool curves_convert_from_particle_system_poll(bContext *C)
{
return ED_object_active_context(C) != nullptr;
return blender::ed::object::context_active_object(C) != nullptr;
}
} // namespace convert_from_particle_system
@ -1186,11 +1186,18 @@ static int surface_set_exec(bContext *C, wmOperator *op)
&missing_uvs);
/* Add deformation modifier if necessary. */
blender::ed::curves::ensure_surface_deformation_node_exists(*C, curves_ob);
ensure_surface_deformation_node_exists(*C, curves_ob);
curves_id.surface = &new_surface_ob;
ED_object_parent_set(
op->reports, C, scene, &curves_ob, &new_surface_ob, PAR_OBJECT, false, true, nullptr);
object::parent_set(op->reports,
C,
scene,
&curves_ob,
&new_surface_ob,
object::PAR_OBJECT,
false,
true,
nullptr);
DEG_id_tag_update(&curves_ob.id, ID_RECALC_TRANSFORM);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, &curves_id);

View File

@ -209,7 +209,7 @@ bool attribute_set_poll(bContext &C, const ID &object_data)
static bool geometry_attributes_poll(bContext *C)
{
const Object *ob = ED_object_context(C);
const Object *ob = object::context_object(C);
const Main *bmain = CTX_data_main(C);
const ID *data = (ob) ? static_cast<ID *>(ob->data) : nullptr;
return (ob && BKE_id_is_editable(bmain, &ob->id) && data && BKE_id_is_editable(bmain, data)) &&
@ -222,7 +222,7 @@ static bool geometry_attributes_remove_poll(bContext *C)
return false;
}
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *data = (ob) ? static_cast<ID *>(ob->data) : nullptr;
if (BKE_id_attributes_active_get(data) != nullptr) {
return true;
@ -240,7 +240,7 @@ static const EnumPropertyItem *geometry_attribute_domain_itemf(bContext *C,
return rna_enum_dummy_NULL_items;
}
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
if (ob == nullptr) {
return rna_enum_dummy_NULL_items;
}
@ -250,7 +250,7 @@ static const EnumPropertyItem *geometry_attribute_domain_itemf(bContext *C,
static int geometry_attribute_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *id = static_cast<ID *>(ob->data);
char name[MAX_NAME];
@ -325,7 +325,7 @@ void GEOMETRY_OT_attribute_add(wmOperatorType *ot)
static int geometry_attribute_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *id = static_cast<ID *>(ob->data);
CustomDataLayer *layer = BKE_id_attributes_active_get(id);
@ -361,7 +361,7 @@ void GEOMETRY_OT_attribute_remove(wmOperatorType *ot)
static int geometry_color_attribute_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *id = static_cast<ID *>(ob->data);
char name[MAX_NAME];
@ -412,7 +412,7 @@ static bool geometry_attribute_convert_poll(bContext *C)
return false;
}
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *data = static_cast<ID *>(ob->data);
if (GS(data->name) != ID_ME) {
return false;
@ -429,7 +429,7 @@ static bool geometry_attribute_convert_poll(bContext *C)
static int geometry_attribute_convert_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *ob_data = static_cast<ID *>(ob->data);
CustomDataLayer *layer = BKE_id_attributes_active_get(ob_data);
const ConvertAttributeMode mode = static_cast<ConvertAttributeMode>(
@ -547,7 +547,7 @@ void GEOMETRY_OT_color_attribute_add(wmOperatorType *ot)
static int geometry_color_attribute_set_render_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *id = static_cast<ID *>(ob->data);
char name[MAX_NAME];
@ -588,7 +588,7 @@ void GEOMETRY_OT_color_attribute_render_set(wmOperatorType *ot)
static int geometry_color_attribute_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *id = static_cast<ID *>(ob->data);
const std::string active_name = StringRef(BKE_id_attributes_active_color_name(id));
if (active_name.empty()) {
@ -611,7 +611,7 @@ static bool geometry_color_attributes_remove_poll(bContext *C)
return false;
}
const Object *ob = ED_object_context(C);
const Object *ob = object::context_object(C);
const ID *data = static_cast<ID *>(ob->data);
if (BKE_id_attributes_color_find(data, BKE_id_attributes_active_color_name(data))) {
@ -638,7 +638,7 @@ void GEOMETRY_OT_color_attribute_remove(wmOperatorType *ot)
static int geometry_color_attribute_duplicate_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *id = static_cast<ID *>(ob->data);
const char *active_name = BKE_id_attributes_active_color_name(id);
if (active_name == nullptr) {
@ -668,7 +668,7 @@ static bool geometry_color_attributes_duplicate_poll(bContext *C)
return false;
}
const Object *ob = ED_object_context(C);
const Object *ob = object::context_object(C);
const ID *data = static_cast<ID *>(ob->data);
if (BKE_id_attributes_color_find(data, BKE_id_attributes_active_color_name(data))) {
@ -697,7 +697,7 @@ static int geometry_attribute_convert_invoke(bContext *C,
wmOperator *op,
const wmEvent * /*event*/)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
const bke::AttributeMetaData meta_data = *mesh->attributes().lookup_meta_data(
@ -744,7 +744,7 @@ static bool geometry_color_attribute_convert_poll(bContext *C)
return false;
}
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
ID *id = static_cast<ID *>(ob->data);
if (GS(id->name) != ID_ME) {
return false;
@ -767,7 +767,7 @@ static bool geometry_color_attribute_convert_poll(bContext *C)
static int geometry_color_attribute_convert_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
const char *name = mesh->active_color_attribute;
ED_geometry_attribute_convert(mesh,
@ -782,7 +782,7 @@ static int geometry_color_attribute_convert_invoke(bContext *C,
wmOperator *op,
const wmEvent * /*event*/)
{
Object *ob = ED_object_context(C);
Object *ob = object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
const char *name = mesh->active_color_attribute;
const bke::AttributeMetaData meta_data = *mesh->attributes().lookup_meta_data(name);

View File

@ -461,7 +461,7 @@ static void gpencil_object_vgroup_calc_from_armature(const bContext *C,
if (defbase_add) {
/* It's possible there are DWeights outside the range of the current
* object's deform groups. In this case the new groups won't be empty */
ED_vgroup_data_clamp_range(static_cast<ID *>(ob->data), defbase_tot);
blender::ed::object::vgroup_data_clamp_range(static_cast<ID *>(ob->data), defbase_tot);
}
if (mode == GP_ARMATURE_AUTO) {
@ -487,7 +487,7 @@ bool ED_gpencil_add_armature(const bContext *C, ReportList *reports, Object *ob,
/* if no armature modifier, add a new one */
GpencilModifierData *md = BKE_gpencil_modifiers_findby_type(ob, eGpencilModifierType_Armature);
if (md == nullptr) {
md = ED_object_gpencil_modifier_add(
md = blender::ed::object::gpencil_modifier_add(
reports, bmain, scene, ob, "Armature", eGpencilModifierType_Armature);
if (md == nullptr) {
BKE_report(reports, RPT_ERROR, "Unable to add a new Armature modifier to object");

View File

@ -1388,7 +1388,7 @@ static void gpencil_layer_to_curve(bContext *C,
}
}
ED_object_base_select(base_new, BA_SELECT);
blender::ed::object::base_select(base_new, blender::ed::object::BA_SELECT);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
}

View File

@ -3056,7 +3056,7 @@ int ED_gpencil_join_objects_exec(bContext *C, wmOperator *op)
}
/* Free the old object */
ED_object_base_free_and_unlink(bmain, scene, ob_iter);
blender::ed::object::base_free_and_unlink(bmain, scene, ob_iter);
}
}
CTX_DATA_END;
@ -3764,7 +3764,7 @@ bool ED_gpencil_add_lattice_modifier(const bContext *C,
/* if no lattice modifier, add a new one */
GpencilModifierData *md = BKE_gpencil_modifiers_findby_type(ob, eGpencilModifierType_Lattice);
if (md == nullptr) {
md = ED_object_gpencil_modifier_add(
md = blender::ed::object::gpencil_modifier_add(
reports, bmain, scene, ob, "Lattice", eGpencilModifierType_Lattice);
if (md == nullptr) {
BKE_report(reports, RPT_ERROR, "Unable to add a new Lattice modifier to object");

View File

@ -611,7 +611,7 @@ static int gpencil_weightmode_toggle_exec(bContext *C, wmOperator *op)
ob->mode = mode;
/* Prepare armature posemode. */
ED_object_posemode_set_for_weight_paint(C, bmain, ob, is_mode_set);
blender::ed::object::posemode_set_for_weight_paint(C, bmain, ob, is_mode_set);
}
if (mode == OB_MODE_WEIGHT_GPENCIL_LEGACY) {
@ -5074,7 +5074,7 @@ static int gpencil_stroke_separate_exec(bContext *C, wmOperator *op)
/* Take into account user preferences for duplicating actions. */
const eDupli_ID_Flags dupflag = eDupli_ID_Flags(U.dupflag & USER_DUP_ACT);
base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_prev, dupflag);
base_new = blender::ed::object::add_duplicate(bmain, scene, view_layer, base_prev, dupflag);
ob_dst = base_new->object;
ob_dst->mode = OB_MODE_OBJECT;
/* Duplication will increment #bGPdata user-count, but since we create a new grease-pencil

View File

@ -337,7 +337,7 @@ static int gpencil_trace_image_exec(bContext *C, wmOperator *op)
trace_initialize_job_data(job);
/* Back to active base. */
ED_object_base_activate(job->C, job->base_active);
blender::ed::object::base_activate(job->C, job->base_active);
if ((job->image->source == IMA_SRC_FILE) || (job->frame_num > 0)) {
wmJobWorkerStatus worker_status = {};

View File

@ -1416,7 +1416,8 @@ Object *ED_gpencil_add_object(bContext *C, const float loc[3], ushort local_view
{
const float rot[3] = {0.0f};
Object *ob = ED_object_add_type(C, OB_GPENCIL_LEGACY, nullptr, loc, rot, false, local_view_bits);
Object *ob = blender::ed::object::add_type(
C, OB_GPENCIL_LEGACY, nullptr, loc, rot, false, local_view_bits);
/* create default brushes and colors */
ED_gpencil_add_defaults(C, ob);

View File

@ -1864,7 +1864,7 @@ static Object *duplicate_grease_pencil_object(Main *bmain,
GreasePencil &grease_pencil_src)
{
const eDupli_ID_Flags dupflag = eDupli_ID_Flags(U.dupflag & USER_DUP_ACT);
Base *base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_prev, dupflag);
Base *base_new = object::add_duplicate(bmain, scene, view_layer, base_prev, dupflag);
Object *object_dst = base_new->object;
object_dst->mode = OB_MODE_OBJECT;
object_dst->data = BKE_grease_pencil_add(bmain, grease_pencil_src.id.name + 2);

View File

@ -33,7 +33,6 @@ struct Scene;
struct ShaderFxData;
struct View3D;
struct ViewLayer;
struct XFormObjectData;
struct bConstraint;
struct bContext;
struct bPoseChannel;
@ -42,16 +41,20 @@ struct wmKeyConfig;
struct wmOperator;
struct wmOperatorType;
namespace blender::ed::object {
struct XFormObjectData;
/* `object_edit.cc` */
/** `context.object` */
Object *ED_object_context(const bContext *C);
Object *context_object(const bContext *C);
/**
* Find the correct active object per context (`context.object` or `context.active_object`)
* \note context can be NULL when called from a enum with #PROP_ENUM_NO_CONTEXT.
*/
Object *ED_object_active_context(const bContext *C);
void ED_collection_hide_menu_draw(const bContext *C, uiLayout *layout);
Object *context_active_object(const bContext *C);
void collection_hide_menu_draw(const bContext *C, uiLayout *layout);
/**
* Return an array of objects:
@ -61,7 +64,7 @@ void ED_collection_hide_menu_draw(const bContext *C, uiLayout *layout);
* the callers \a filter_fn needs to check of they are editable
* (assuming they need to be modified).
*/
blender::Vector<Object *> ED_object_array_in_mode_or_selected(
blender::Vector<Object *> objects_in_mode_or_selected(
bContext *C, bool (*filter_fn)(const Object *ob, void *user_data), void *filter_user_data);
/* `object_shapekey.cc` */
@ -71,42 +74,40 @@ blender::Vector<Object *> ED_object_array_in_mode_or_selected(
* and produces an error message if so (unless \a reports is null).
* \return true if the shape key was locked.
*/
bool ED_object_edit_report_if_shape_key_is_locked(const Object *obedit, ReportList *reports);
bool shape_key_report_if_locked(const Object *obedit, ReportList *reports);
/**
* Checks if the active shape key of the object is locked, and produces an error message
* if so (unless \a reports is null).
* \return true if the shape key was locked.
*/
bool ED_object_report_if_active_shape_key_is_locked(Object *ob, ReportList *reports);
bool shape_key_report_if_active_locked(Object *ob, ReportList *reports);
/**
* Checks if any of the shape keys of the object are locked, and produces an error message if so
* (unless \a reports is null).
* \return true if a shape key was locked.
*/
bool ED_object_report_if_any_shape_key_is_locked(Object *ob, ReportList *reports);
bool shape_key_report_if_any_locked(Object *ob, ReportList *reports);
/* `object_utils.cc` */
bool ED_object_calc_active_center_for_editmode(Object *obedit,
bool select_only,
float r_center[3]);
bool ED_object_calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3]);
bool ED_object_calc_active_center(Object *ob, bool select_only, float r_center[3]);
bool calc_active_center_for_editmode(Object *obedit, bool select_only, float r_center[3]);
bool calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3]);
bool calc_active_center(Object *ob, bool select_only, float r_center[3]);
/* Object Data Container helper API. */
struct XFormObjectData_Container;
XFormObjectData_Container *ED_object_data_xform_container_create();
void ED_object_data_xform_container_destroy(XFormObjectData_Container *xds);
XFormObjectData_Container *data_xform_container_create();
void data_xform_container_destroy(XFormObjectData_Container *xds);
/**
* This may be called multiple times with the same data.
* Each time, the original transformations are re-applied, instead of accumulating the changes.
*/
void ED_object_data_xform_container_update_all(XFormObjectData_Container *xds,
Main *bmain,
Depsgraph *depsgraph);
void ED_object_data_xform_container_item_ensure(XFormObjectData_Container *xds, Object *ob);
void data_xform_container_update_all(XFormObjectData_Container *xds,
Main *bmain,
Depsgraph *depsgraph);
void data_xform_container_item_ensure(XFormObjectData_Container *xds, Object *ob);
/** Object Skip-Child Container helper API. */
enum {
@ -128,29 +129,28 @@ enum {
XFORM_OB_SKIP_CHILD_PARENT_APPLY = 2,
};
struct XFormObjectSkipChild_Container;
XFormObjectSkipChild_Container *ED_object_xform_skip_child_container_create();
void ED_object_xform_skip_child_container_item_ensure_from_array(
XFormObjectSkipChild_Container *xcs,
const Scene *scene,
ViewLayer *view_layer,
Object **objects,
uint objects_len);
void ED_object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs);
void ED_object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs,
Main *bmain,
Depsgraph *depsgraph);
void ED_object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs,
Object *ob,
Object *ob_parent_recurse,
int mode);
XFormObjectSkipChild_Container *xform_skip_child_container_create();
void xform_skip_child_container_item_ensure_from_array(XFormObjectSkipChild_Container *xcs,
const Scene *scene,
ViewLayer *view_layer,
Object **objects,
uint objects_len);
void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs);
void object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs,
Main *bmain,
Depsgraph *depsgraph);
void object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs,
Object *ob,
Object *ob_parent_recurse,
int mode);
void ED_object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4]);
void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4]);
/* `object_ops.cc` */
void ED_operatortypes_object();
void ED_operatormacros_object();
void ED_keymap_object(wmKeyConfig *keyconf);
void operatortypes_object();
void operatormacros_object();
void keymap_object(wmKeyConfig *keyconf);
/* `object_relations.cc` */
@ -192,16 +192,16 @@ extern EnumPropertyItem prop_make_parent_types[];
/**
* Set the object's parent, return true if successful.
*/
bool ED_object_parent_set(ReportList *reports,
const bContext *C,
Scene *scene,
Object *const ob,
Object *const par,
int partype,
bool xmirror,
bool keep_transform,
const int vert_par[3]);
void ED_object_parent_clear(Object *ob, int type);
bool parent_set(ReportList *reports,
const bContext *C,
Scene *scene,
Object *const ob,
Object *const par,
int partype,
bool xmirror,
bool keep_transform,
const int vert_par[3]);
void parent_clear(Object *ob, int type);
/**
* Simple API for object selection, rather than just using the flag
@ -211,32 +211,29 @@ void ED_object_parent_clear(Object *ob, int type);
* \note Caller must send a `NC_SCENE | ND_OB_SELECT` notifier
* (or a `NC_SCENE | ND_OB_VISIBLE` in case of visibility toggling).
*/
void ED_object_base_select(Base *base, eObjectSelect_Mode mode);
void base_select(Base *base, eObjectSelect_Mode mode);
/**
* Change active base, it includes the notifier
*/
void ED_object_base_activate(bContext *C, Base *base);
void ED_object_base_activate_with_mode_exit_if_needed(bContext *C, Base *base);
void base_activate(bContext *C, Base *base);
void base_activate_with_mode_exit_if_needed(bContext *C, Base *base);
/**
* Call when the active base has changed.
*/
void ED_object_base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer);
void base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer);
/**
* Remove base from a specific scene.
* \note now unlinks constraints as well.
*/
void ED_object_base_free_and_unlink(Main *bmain, Scene *scene, Object *ob);
void base_free_and_unlink(Main *bmain, Scene *scene, Object *ob);
/**
* Remove base from a specific scene.
* `ob` must not be indirectly used.
*/
void ED_object_base_free_and_unlink_no_indirect_check(Main *bmain, Scene *scene, Object *ob);
bool ED_object_base_deselect_all_ex(
void base_free_and_unlink_no_indirect_check(Main *bmain, Scene *scene, Object *ob);
bool base_deselect_all_ex(
const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible);
bool ED_object_base_deselect_all(const Scene *scene,
ViewLayer *view_layer,
View3D *v3d,
int action);
bool base_deselect_all(const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action);
/**
* Single object duplicate, if `dupflag == 0`, fully linked, else it uses the flags given.
@ -245,16 +242,12 @@ bool ED_object_base_deselect_all(const Scene *scene,
* \note caller must do `DAG_relations_tag_update(bmain);`
* this is not done automatic since we may duplicate many objects in a batch.
*/
Base *ED_object_add_duplicate(
Base *add_duplicate(
Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base, eDupli_ID_Flags dupflag);
void ED_object_parent(Object *ob, Object *parent, int type, const char *substr);
std::string ED_object_ot_drop_named_material_tooltip(bContext *C,
const char *name,
const int mval[2]);
std::string ED_object_ot_drop_geometry_nodes_tooltip(bContext *C,
PointerRNA *properties,
const int mval[2]);
void parent_set(Object *ob, Object *parent, int type, const char *substr);
std::string drop_named_material_tooltip(bContext *C, const char *name, const int mval[2]);
std::string drop_geometry_nodes_tooltip(bContext *C, PointerRNA *properties, const int mval[2]);
/* bitflags for enter/exit editmode */
enum {
@ -263,59 +256,59 @@ enum {
};
/**
* \param flag:
* - If #EM_FREEDATA isn't in the flag, use ED_object_editmode_load directly.
* - If #EM_FREEDATA isn't in the flag, use #editmode_load directly.
*/
bool ED_object_editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag);
bool ED_object_editmode_exit(bContext *C, int flag);
bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag);
bool editmode_exit(bContext *C, int flag);
/**
* Support freeing edit-mode data without flushing it back to the object.
*
* \return true if data was freed.
*/
bool ED_object_editmode_free_ex(Main *bmain, Object *obedit);
bool editmode_free_ex(Main *bmain, Object *obedit);
bool ED_object_editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag);
bool ED_object_editmode_exit_multi(bContext *C, int flag);
bool editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag);
bool editmode_exit_multi(bContext *C, int flag);
bool ED_object_editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag);
bool ED_object_editmode_enter(bContext *C, int flag);
bool ED_object_editmode_load(Main *bmain, Object *obedit);
bool editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag);
bool editmode_enter(bContext *C, int flag);
bool editmode_load(Main *bmain, Object *obedit);
void ED_object_location_from_view(bContext *C, float loc[3]);
void ED_object_rotation_from_quat(float rot[3], const float quat[4], char align_axis);
void ED_object_rotation_from_view(bContext *C, float rot[3], char align_axis);
void ED_object_base_init_transform_on_add(Object *object, const float loc[3], const float rot[3]);
void location_from_view(bContext *C, float loc[3]);
void rotation_from_quat(float rot[3], const float quat[4], char align_axis);
void rotation_from_view(bContext *C, float rot[3], char align_axis);
void init_transform_on_add(Object *object, const float loc[3], const float rot[3]);
/**
* Uses context to figure out transform for primitive.
* Returns standard diameter.
*/
float ED_object_new_primitive_matrix(bContext *C,
Object *obedit,
const float loc[3],
const float rot[3],
const float scale[3],
float primmat[4][4]);
float new_primitive_matrix(bContext *C,
Object *obedit,
const float loc[3],
const float rot[3],
const float scale[3],
float primmat[4][4]);
/**
* Avoid allowing too much insane values even by typing (typos can hang/crash Blender otherwise).
*/
#define OBJECT_ADD_SIZE_MAXF 1.0e12f
void ED_object_add_unit_props_size(wmOperatorType *ot);
void ED_object_add_unit_props_radius_ex(wmOperatorType *ot, float default_value);
void ED_object_add_unit_props_radius(wmOperatorType *ot);
void ED_object_add_generic_props(wmOperatorType *ot, bool do_editmode);
void ED_object_add_mesh_props(wmOperatorType *ot);
void ED_object_add_generic_get_opts(bContext *C,
wmOperator *op,
char view_align_axis,
float r_loc[3],
float r_rot[3],
float r_scale[3],
bool *r_enter_editmode,
unsigned short *r_local_view_bits,
bool *r_is_view_aligned);
void add_unit_props_size(wmOperatorType *ot);
void add_unit_props_radius_ex(wmOperatorType *ot, float default_value);
void add_unit_props_radius(wmOperatorType *ot);
void add_generic_props(wmOperatorType *ot, bool do_editmode);
void add_mesh_props(wmOperatorType *ot);
void add_generic_get_opts(bContext *C,
wmOperator *op,
char view_align_axis,
float r_loc[3],
float r_rot[3],
float r_scale[3],
bool *r_enter_editmode,
unsigned short *r_local_view_bits,
bool *r_is_view_aligned);
/**
* For object add primitive operators, or for object creation when `obdata != NULL`.
@ -323,35 +316,35 @@ void ED_object_add_generic_get_opts(bContext *C,
*
* \note Do not call undo push in this function (users of this function have to).
*/
Object *ED_object_add_type_with_obdata(bContext *C,
int type,
const char *name,
const float loc[3],
const float rot[3],
bool enter_editmode,
ushort local_view_bits,
ID *obdata);
Object *ED_object_add_type(bContext *C,
int type,
const char *name,
const float loc[3],
const float rot[3],
bool enter_editmode,
unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
Object *add_type_with_obdata(bContext *C,
int type,
const char *name,
const float loc[3],
const float rot[3],
bool enter_editmode,
ushort local_view_bits,
ID *obdata);
Object *add_type(bContext *C,
int type,
const char *name,
const float loc[3],
const float rot[3],
bool enter_editmode,
unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
/**
* Not an especially efficient function, only added so the single user button can be functional.
*/
void ED_object_single_user(Main *bmain, Scene *scene, Object *ob);
void object_single_user_make(Main *bmain, Scene *scene, Object *ob);
void ED_object_single_obdata_user(Main *bmain, Scene *scene, Object *ob);
void single_obdata_user_make(Main *bmain, Scene *scene, Object *ob);
/* object motion paths */
/**
* Clear motion paths for all objects.
*/
void ED_objects_clear_paths(bContext *C, bool only_selected);
void motion_paths_clear(bContext *C, bool only_selected);
/* Corresponds to eAnimvizCalcRange. */
enum eObjectPathCalcRange {
@ -366,54 +359,49 @@ enum eObjectPathCalcRange {
*
* To be called from various tools that do incremental updates
*/
void ED_objects_recalculate_paths(bContext *C,
Scene *scene,
eObjectPathCalcRange range,
ListBase *ld_objects);
void motion_paths_recalc(bContext *C,
Scene *scene,
eObjectPathCalcRange range,
ListBase *ld_objects);
void ED_objects_recalculate_paths_selected(bContext *C, Scene *scene, eObjectPathCalcRange range);
void motion_paths_recalc_selected(bContext *C, Scene *scene, eObjectPathCalcRange range);
void ED_objects_recalculate_paths_visible(bContext *C, Scene *scene, eObjectPathCalcRange range);
void motion_paths_recalc_visible(bContext *C, Scene *scene, eObjectPathCalcRange range);
/* constraints */
/**
* If object is in pose-mode, return active bone constraints, else object constraints.
* No constraints are returned for a bone on an inactive bone-layer.
*/
ListBase *ED_object_constraint_active_list(Object *ob);
ListBase *constraint_active_list(Object *ob);
/**
* Get the constraints for the active pose bone. Bone may be on an inactive bone-layer
* (unlike #ED_object_constraint_active_list, such constraints are not excluded here).
* (unlike #constraint_active_list, such constraints are not excluded here).
*/
ListBase *ED_object_pose_constraint_list(const bContext *C);
ListBase *pose_constraint_list(const bContext *C);
/**
* Find the list that a given constraint belongs to,
* and/or also get the posechannel this is from (if applicable).
*/
ListBase *ED_object_constraint_list_from_constraint(Object *ob,
bConstraint *con,
bPoseChannel **r_pchan);
ListBase *constraint_list_from_constraint(Object *ob, bConstraint *con, bPoseChannel **r_pchan);
/**
* Single constraint.
*/
bConstraint *ED_object_constraint_active_get(Object *ob);
bConstraint *constraint_active_get(Object *ob);
void object_test_constraints(Main *bmain, Object *ob);
void ED_object_constraint_active_set(Object *ob, bConstraint *con);
void ED_object_constraint_update(Main *bmain, Object *ob);
void ED_object_constraint_dependency_update(Main *bmain, Object *ob);
void constraint_active_set(Object *ob, bConstraint *con);
void constraint_update(Main *bmain, Object *ob);
void constraint_dependency_update(Main *bmain, Object *ob);
void ED_object_constraint_tag_update(Main *bmain, Object *ob, bConstraint *con);
void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstraint *con);
void constraint_tag_update(Main *bmain, Object *ob, bConstraint *con);
void constraint_dependency_tag_update(Main *bmain, Object *ob, bConstraint *con);
bool ED_object_constraint_move_to_index(Object *ob, bConstraint *con, int index);
void ED_object_constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src);
void ED_object_constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con);
void ED_object_constraint_copy_for_pose(Main *bmain,
Object *ob_dst,
bPoseChannel *pchan,
bConstraint *con);
bool constraint_move_to_index(Object *ob, bConstraint *con, int index);
void constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src);
void constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con);
void constraint_copy_for_pose(Main *bmain, Object *ob_dst, bPoseChannel *pchan, bConstraint *con);
/* `object_modes.cc` */
@ -421,23 +409,20 @@ void ED_object_constraint_copy_for_pose(Main *bmain,
* Checks the mode to be set is compatible with the object
* should be made into a generic function
*/
bool ED_object_mode_compat_test(const Object *ob, eObjectMode mode);
bool mode_compat_test(const Object *ob, eObjectMode mode);
/**
* Sets the mode to a compatible state (use before entering the mode).
*
* This is so each mode's exec function can call
*/
bool ED_object_mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports);
bool ED_object_mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports);
bool ED_object_mode_set(bContext *C, eObjectMode mode);
bool mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports);
bool mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports);
bool mode_set(bContext *C, eObjectMode mode);
void ED_object_mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob);
bool ED_object_mode_generic_has_data(Depsgraph *depsgraph, const Object *ob);
void mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob);
bool mode_generic_has_data(Depsgraph *depsgraph, const Object *ob);
void ED_object_posemode_set_for_weight_paint(bContext *C,
Main *bmain,
Object *ob,
bool is_mode_set);
void posemode_set_for_weight_paint(bContext *C, Main *bmain, Object *ob, bool is_mode_set);
/**
* Return the index of an object in a mode (typically edit/pose mode).
@ -451,18 +436,18 @@ void ED_object_posemode_set_for_weight_paint(bContext *C,
*
* \note The active object is always index 0.
*/
int ED_object_in_mode_to_index(const Scene *scene,
ViewLayer *view_layer,
eObjectMode mode,
const Object *ob);
int object_in_mode_to_index(const Scene *scene,
ViewLayer *view_layer,
eObjectMode mode,
const Object *ob);
/**
* Access the object from the index returned by #ED_object_in_mode_to_index.
* Access the object from the index returned by #object_in_mode_to_index.
*/
Object *ED_object_in_mode_from_index(const Scene *scene,
ViewLayer *view_layer,
eObjectMode mode,
int index);
Object *object_in_mode_from_index(const Scene *scene,
ViewLayer *view_layer,
eObjectMode mode,
int index);
/* `object_modifier.cc` */
@ -477,48 +462,37 @@ enum {
*
* \param scene: is only used to set current frame in some cases, and may be NULL.
*/
ModifierData *ED_object_modifier_add(
ModifierData *modifier_add(
ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
bool ED_object_modifier_remove(
ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
void ED_object_modifier_clear(Main *bmain, Scene *scene, Object *ob);
bool ED_object_modifier_move_down(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md);
bool ED_object_modifier_move_up(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md);
bool ED_object_modifier_move_to_index(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md,
int index,
bool allow_partial);
bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
void modifier_clear(Main *bmain, Scene *scene, Object *ob);
bool modifier_move_down(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md);
bool modifier_move_up(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md);
bool modifier_move_to_index(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md,
int index,
bool allow_partial);
bool ED_object_modifier_convert_psys_to_mesh(ReportList *reports,
Main *bmain,
Depsgraph *depsgraph,
Scene *scene,
ViewLayer *view_layer,
Object *ob,
ModifierData *md);
bool ED_object_modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Scene *scene,
Object *ob,
ModifierData *md,
int mode,
bool keep_modifier);
bool ED_object_modifier_copy(
ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
void ED_object_modifier_link(bContext *C, Object *ob_dst, Object *ob_src);
void ED_object_modifier_copy_to_object(bContext *C,
Object *ob_dst,
Object *ob_src,
ModifierData *md);
bool convert_psys_to_mesh(ReportList *reports,
Main *bmain,
Depsgraph *depsgraph,
Scene *scene,
ViewLayer *view_layer,
Object *ob,
ModifierData *md);
bool modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Scene *scene,
Object *ob,
ModifierData *md,
int mode,
bool keep_modifier);
bool modifier_copy(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
void modifier_link(bContext *C, Object *ob_dst, Object *ob_src);
void modifier_copy_to_object(bContext *C, Object *ob_dst, Object *ob_src, ModifierData *md);
/**
* If the object data of 'orig_ob' has other users, run 'callback' on
@ -529,76 +503,65 @@ void ED_object_modifier_copy_to_object(bContext *C,
* If the callback ever returns true, iteration will stop and the
* function value will be true. Otherwise the function returns false.
*/
bool ED_object_iter_other(Main *bmain,
Object *orig_ob,
bool include_orig,
bool (*callback)(Object *ob, void *callback_data),
void *callback_data);
bool iter_other(Main *bmain,
Object *orig_ob,
bool include_orig,
bool (*callback)(Object *ob, void *callback_data),
void *callback_data);
/**
* Use with #ED_object_iter_other(). Sets the total number of levels
* Use with #iter_other(). Sets the total number of levels
* for any multi-res modifiers on the object to the int pointed to by callback_data.
*/
bool ED_object_multires_update_totlevels_cb(Object *ob, void *totlevel_v);
bool multires_update_totlevels(Object *ob, void *totlevel_v);
/* `object_greasepencil_modifier.cc` */
GpencilModifierData *ED_object_gpencil_modifier_add(
GpencilModifierData *gpencil_modifier_add(
ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
bool ED_object_gpencil_modifier_remove(ReportList *reports,
Main *bmain,
Object *ob,
GpencilModifierData *md);
void ED_object_gpencil_modifier_clear(Main *bmain, Object *ob);
bool ED_object_gpencil_modifier_move_down(ReportList *reports,
Object *ob,
GpencilModifierData *md);
bool ED_object_gpencil_modifier_move_up(ReportList *reports, Object *ob, GpencilModifierData *md);
bool ED_object_gpencil_modifier_move_to_index(ReportList *reports,
Object *ob,
GpencilModifierData *md,
int index);
bool ED_object_gpencil_modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Object *ob,
GpencilModifierData *md,
int mode);
bool ED_object_gpencil_modifier_copy(ReportList *reports, Object *ob, GpencilModifierData *md);
void ED_object_gpencil_modifier_copy_to_object(Object *ob_dst, GpencilModifierData *md);
bool gpencil_modifier_remove(ReportList *reports,
Main *bmain,
Object *ob,
GpencilModifierData *md);
void gpencil_modifier_clear(Main *bmain, Object *ob);
bool gpencil_modifier_move_down(ReportList *reports, Object *ob, GpencilModifierData *md);
bool gpencil_modifier_move_up(ReportList *reports, Object *ob, GpencilModifierData *md);
bool gpencil_modifier_move_to_index(ReportList *reports,
Object *ob,
GpencilModifierData *md,
int index);
bool gpencil_modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Object *ob,
GpencilModifierData *md,
int mode);
bool gpencil_modifier_copy(ReportList *reports, Object *ob, GpencilModifierData *md);
void gpencil_modifier_copy_to_object(Object *ob_dst, GpencilModifierData *md);
/* `object_shader_fx.cc` */
ShaderFxData *ED_object_shaderfx_add(
ShaderFxData *shaderfx_add(
ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
bool ED_object_shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, ShaderFxData *fx);
void ED_object_shaderfx_clear(Main *bmain, Object *ob);
int ED_object_shaderfx_move_down(ReportList *reports, Object *ob, ShaderFxData *fx);
int ED_object_shaderfx_move_up(ReportList *reports, Object *ob, ShaderFxData *fx);
bool ED_object_shaderfx_move_to_index(ReportList *reports,
Object *ob,
ShaderFxData *fx,
int index);
void ED_object_shaderfx_link(Object *dst, Object *src);
void ED_object_shaderfx_copy(Object *dst, ShaderFxData *fx);
bool shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, ShaderFxData *fx);
void shaderfx_clear(Main *bmain, Object *ob);
int shaderfx_move_down(ReportList *reports, Object *ob, ShaderFxData *fx);
int shaderfx_move_up(ReportList *reports, Object *ob, ShaderFxData *fx);
bool shaderfx_move_to_index(ReportList *reports, Object *ob, ShaderFxData *fx, int index);
void shaderfx_link(Object *dst, Object *src);
void shaderfx_copy(Object *dst, ShaderFxData *fx);
/* `object_select.cc` */
void ED_object_select_linked_by_id(bContext *C, ID *id);
void select_linked_by_id(bContext *C, ID *id);
const EnumPropertyItem *ED_object_vgroup_selection_itemf_helper(const bContext *C,
PointerRNA *ptr,
PropertyRNA *prop,
bool *r_free,
unsigned int selection_mask);
void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object);
void check_force_modifiers(Main *bmain, Scene *scene, Object *object);
/**
* If id is not already an Object, try to find an object that uses it as data.
* Prefers active, then selected, then visible/selectable.
*/
Base *ED_object_find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id);
Base *find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id);
/**
* Select and make the target object active in the view layer.
@ -606,7 +569,7 @@ Base *ED_object_find_first_by_data_id(const Scene *scene, ViewLayer *view_layer,
*
* \returns false if not found in current view layer
*/
bool ED_object_jump_to_object(bContext *C, Object *ob, bool reveal_hidden);
bool jump_to_object(bContext *C, Object *ob, bool reveal_hidden);
/**
* Select and make the target object and bone active.
* Switches to Pose mode if in Object mode so the selection is visible.
@ -614,25 +577,23 @@ bool ED_object_jump_to_object(bContext *C, Object *ob, bool reveal_hidden);
*
* \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, bool reveal_hidden);
bool jump_to_bone(bContext *C, Object *ob, const char *bone_name, bool reveal_hidden);
/* `object_data_transform.cc` */
XFormObjectData *ED_object_data_xform_create_ex(ID *id, bool is_edit_mode);
XFormObjectData *ED_object_data_xform_create(ID *id);
XFormObjectData *ED_object_data_xform_create_from_edit_mode(ID *id);
XFormObjectData *data_xform_create_ex(ID *id, bool is_edit_mode);
XFormObjectData *data_xform_create(ID *id);
XFormObjectData *data_xform_create_from_edit_mode(ID *id);
void ED_object_data_xform_destroy(XFormObjectData *xod_base);
void data_xform_destroy(XFormObjectData *xod_base);
void ED_object_data_xform_by_mat4(XFormObjectData *xod, const float mat[4][4]);
void data_xform_by_mat4(XFormObjectData *xod, const float mat[4][4]);
void ED_object_data_xform_restore(XFormObjectData *xod);
void ED_object_data_xform_tag_update(XFormObjectData *xod);
namespace blender::ed::object {
void data_xform_restore(XFormObjectData *xod);
void data_xform_tag_update(XFormObjectData *xod);
void ui_template_modifier_asset_menu_items(uiLayout &layout,
const bContext &C,
StringRef catalog_path);
}
} // namespace blender::ed::object

View File

@ -11,76 +11,90 @@
#include "BLI_compiler_attrs.h"
struct bDeformGroup;
struct EnumPropertyItem;
struct ID;
struct MDeformVert;
struct Object;
struct PointerRNA;
struct PropertyRNA;
#define WEIGHT_REPLACE 1
#define WEIGHT_ADD 2
#define WEIGHT_SUBTRACT 3
bool ED_vgroup_sync_from_pose(Object *ob);
void ED_vgroup_select_by_name(Object *ob, const char *name);
namespace blender::ed::object {
bool vgroup_sync_from_pose(Object *ob);
void vgroup_select_by_name(Object *ob, const char *name);
/**
* Removes out of range #MDeformWeights
*/
void ED_vgroup_data_clamp_range(ID *id, int total);
void vgroup_data_clamp_range(ID *id, int total);
/**
* Matching index only.
*/
bool ED_vgroup_array_copy(Object *ob, Object *ob_from);
bool ED_vgroup_parray_alloc(ID *id, MDeformVert ***dvert_arr, int *dvert_tot, bool use_vert_sel);
bool vgroup_array_copy(Object *ob, Object *ob_from);
bool vgroup_parray_alloc(ID *id, MDeformVert ***dvert_arr, int *dvert_tot, bool use_vert_sel);
/**
* For use with tools that use ED_vgroup_parray_alloc with \a use_vert_sel == true.
* This finds the unselected mirror deform verts and copies the weights to them from the selected.
* For use with tools that use vgroup_parray_alloc with \a use_vert_sel ==
* true. This finds the unselected mirror deform verts and copies the weights to them from the
* selected.
*
* \note \a dvert_array has mirrored weights filled in,
* in case cleanup operations are needed on both.
*/
void ED_vgroup_parray_mirror_sync(Object *ob,
MDeformVert **dvert_array,
int dvert_tot,
const bool *vgroup_validmap,
int vgroup_tot);
void vgroup_parray_mirror_sync(Object *ob,
MDeformVert **dvert_array,
int dvert_tot,
const bool *vgroup_validmap,
int vgroup_tot);
/**
* Fill in the pointers for mirror verts (as if all mirror verts were selected too).
*
* similar to #ED_vgroup_parray_mirror_sync but only fill in mirror points.
* similar to #vgroup_parray_mirror_sync but only fill in mirror points.
*/
void ED_vgroup_parray_mirror_assign(Object *ob, MDeformVert **dvert_array, int dvert_tot);
void ED_vgroup_parray_remove_zero(MDeformVert **dvert_array,
int dvert_tot,
const bool *vgroup_validmap,
int vgroup_tot,
float epsilon,
bool keep_single);
void ED_vgroup_parray_to_weight_array(const MDeformVert **dvert_array,
int dvert_tot,
float *dvert_weights,
int def_nr);
void ED_vgroup_parray_from_weight_array(MDeformVert **dvert_array,
int dvert_tot,
const float *dvert_weights,
int def_nr,
bool remove_zero);
void ED_vgroup_mirror(Object *ob,
bool mirror_weights,
bool flip_vgroups,
bool all_vgroups,
bool use_topology,
int *r_totmirr,
int *r_totfail);
void vgroup_parray_mirror_assign(Object *ob, MDeformVert **dvert_array, int dvert_tot);
void vgroup_parray_remove_zero(MDeformVert **dvert_array,
int dvert_tot,
const bool *vgroup_validmap,
int vgroup_tot,
float epsilon,
bool keep_single);
void vgroup_parray_to_weight_array(const MDeformVert **dvert_array,
int dvert_tot,
float *dvert_weights,
int def_nr);
void vgroup_parray_from_weight_array(MDeformVert **dvert_array,
int dvert_tot,
const float *dvert_weights,
int def_nr,
bool remove_zero);
void vgroup_mirror(Object *ob,
bool mirror_weights,
bool flip_vgroups,
bool all_vgroups,
bool use_topology,
int *r_totmirr,
int *r_totfail);
/**
* Called while not in editmode.
*/
void ED_vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, int assignmode);
void vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, int assignmode);
/**
* Mesh object mode, lattice can be in edit-mode.
*/
void ED_vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum);
float ED_vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum);
void vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum);
float vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum);
/**
* Use when adjusting the active vertex weight and apply to mirror vertices.
*/
void ED_vgroup_vert_active_mirror(Object *ob, int def_nr);
void vgroup_vert_active_mirror(Object *ob, int def_nr);
const EnumPropertyItem *vgroup_selection_itemf_helper(const bContext *C,
PointerRNA *ptr,
PropertyRNA *prop,
bool *r_free,
unsigned int selection_mask);
} // namespace blender::ed::object

View File

@ -1599,7 +1599,7 @@ static bool jump_to_target_ptr(bContext *C, PointerRNA ptr, const bool poll)
base = BKE_view_layer_base_find(view_layer, (Object *)ptr.owner_id);
}
else if (OB_DATA_SUPPORT_ID(id_type)) {
base = ED_object_find_first_by_data_id(scene, view_layer, ptr.owner_id);
base = blender::ed::object::find_first_by_data_id(scene, view_layer, ptr.owner_id);
}
bool ok = false;
@ -1614,10 +1614,10 @@ static bool jump_to_target_ptr(bContext *C, PointerRNA ptr, const bool poll)
const bool reveal_hidden = true;
/* Select and activate the target. */
if (target_type == &RNA_Bone) {
ok = ED_object_jump_to_bone(C, base->object, bone_name, reveal_hidden);
ok = blender::ed::object::jump_to_bone(C, base->object, bone_name, reveal_hidden);
}
else if (target_type == &RNA_Object) {
ok = ED_object_jump_to_object(C, base->object, reveal_hidden);
ok = blender::ed::object::jump_to_object(C, base->object, reveal_hidden);
}
else {
BLI_assert(0);

View File

@ -1053,7 +1053,7 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event)
if (do_scene_obj) {
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
ED_object_single_user(bmain, scene, (Object *)id);
blender::ed::object::object_single_user_make(bmain, scene, (Object *)id);
WM_event_add_notifier(C, NC_WINDOW, nullptr);
DEG_relations_tag_update(bmain);
}
@ -2293,7 +2293,7 @@ void uiTemplateModifiers(uiLayout * /*layout*/, bContext *C)
{
ARegion *region = CTX_wm_region(C);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
ListBase *modifiers = &ob->modifiers;
const bool panels_match = UI_panel_list_matches_data(region, modifiers, modifier_panel_id);
@ -2438,10 +2438,10 @@ void uiTemplateConstraints(uiLayout * /*layout*/, bContext *C, bool use_bone_con
{
ARegion *region = CTX_wm_region(C);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
ListBase *constraints = {nullptr};
if (use_bone_constraints) {
constraints = ED_object_pose_constraint_list(C);
constraints = blender::ed::object::pose_constraint_list(C);
}
else if (ob != nullptr) {
constraints = &ob->constraints;
@ -2541,7 +2541,7 @@ static void gpencil_modifier_panel_id(void *md_link, char *r_name)
void uiTemplateGpencilModifiers(uiLayout * /*layout*/, bContext *C)
{
ARegion *region = CTX_wm_region(C);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
ListBase *modifiers = &ob->greasepencil_modifiers;
const bool panels_match = UI_panel_list_matches_data(
@ -2615,7 +2615,7 @@ static void shaderfx_panel_id(void *fx_v, char *r_idname)
void uiTemplateShaderFx(uiLayout * /*layout*/, bContext *C)
{
ARegion *region = CTX_wm_region(C);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
ListBase *shaderfx = &ob->shader_fx;
const bool panels_match = UI_panel_list_matches_data(region, shaderfx, shaderfx_panel_id);
@ -2972,7 +2972,8 @@ void uiTemplateOperatorRedoProperties(uiLayout *layout, const bContext *C)
static void constraint_active_func(bContext * /*C*/, void *ob_v, void *con_v)
{
ED_object_constraint_active_set(static_cast<Object *>(ob_v), static_cast<bConstraint *>(con_v));
blender::ed::object::constraint_active_set(static_cast<Object *>(ob_v),
static_cast<bConstraint *>(con_v));
}
static void constraint_ops_extra_draw(bContext *C, uiLayout *layout, void *con_v)
@ -2981,7 +2982,7 @@ static void constraint_ops_extra_draw(bContext *C, uiLayout *layout, void *con_v
uiLayout *row;
bConstraint *con = (bConstraint *)con_v;
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Constraint, con);
uiLayoutSetContextPointer(layout, "constraint", &ptr);
@ -3033,7 +3034,8 @@ static void constraint_ops_extra_draw(bContext *C, uiLayout *layout, void *con_v
WM_OP_INVOKE_DEFAULT,
UI_ITEM_NONE,
&op_ptr);
ListBase *constraint_list = ED_object_constraint_list_from_constraint(ob, con, nullptr);
ListBase *constraint_list = blender::ed::object::constraint_list_from_constraint(
ob, con, nullptr);
RNA_int_set(&op_ptr, "index", BLI_listbase_count(constraint_list) - 1);
if (!con->next) {
uiLayoutSetEnabled(row, false);

View File

@ -631,7 +631,7 @@ static int wm_alembic_import_exec(bContext *C, wmOperator *op)
/* Switch out of edit mode to avoid being stuck in it (#54326). */
Object *obedit = CTX_data_edit_object(C);
if (obedit) {
ED_object_mode_set(C, OB_MODE_OBJECT);
blender::ed::object::mode_set(C, OB_MODE_OBJECT);
}
AlembicImportParams params = {0};

View File

@ -154,7 +154,7 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
Main *bmain = CTX_data_main(C);
/* get editmode results */
ED_object_editmode_load(bmain, CTX_data_edit_object(C));
blender::ed::object::editmode_load(bmain, CTX_data_edit_object(C));
// Scene *scene = CTX_data_scene(C);

View File

@ -535,7 +535,7 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op)
/* Switch out of edit mode to avoid being stuck in it (#54326). */
Object *obedit = CTX_data_edit_object(C);
if (obedit) {
ED_object_mode_set(C, OB_MODE_EDIT);
blender::ed::object::mode_set(C, OB_MODE_EDIT);
}
const bool validate_meshes = false;

View File

@ -665,7 +665,7 @@ bool ED_lattice_select_pick(bContext *C, const int mval[2], const SelectPick_Par
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
DEG_id_tag_update(static_cast<ID *>(vc.obedit->data), ID_RECALC_SELECT);

View File

@ -68,7 +68,7 @@ static int make_regular_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(ob, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(ob, op->reports)) {
continue;
}
@ -221,7 +221,7 @@ static int lattice_flip_exec(bContext *C, wmOperator *op)
lt = (Lattice *)obedit->data;
lt = lt->editlatt->latt;
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}

View File

@ -52,13 +52,13 @@ static Object *make_prim_init(bContext *C,
r_creation_data->was_editmode = false;
if (obedit == nullptr || obedit->type != OB_MESH) {
obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false, local_view_bits);
ED_object_editmode_enter_ex(bmain, scene, obedit, 0);
obedit = blender::ed::object::add_type(C, OB_MESH, idname, loc, rot, false, local_view_bits);
blender::ed::object::editmode_enter_ex(bmain, scene, obedit, 0);
r_creation_data->was_editmode = true;
}
ED_object_new_primitive_matrix(C, obedit, loc, rot, scale, r_creation_data->mat);
blender::ed::object::new_primitive_matrix(C, obedit, loc, rot, scale, r_creation_data->mat);
return obedit;
}
@ -84,7 +84,8 @@ static void make_prim_finish(bContext *C,
/* userdef */
if (exit_editmode) {
ED_object_editmode_exit_ex(CTX_data_main(C), CTX_data_scene(C), obedit, EM_FREEDATA);
blender::ed::object::editmode_exit_ex(
CTX_data_main(C), CTX_data_scene(C), obedit, blender::ed::object::EM_FREEDATA);
}
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit);
}
@ -100,7 +101,7 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"),
@ -150,9 +151,9 @@ void MESH_OT_primitive_plane_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_size(ot);
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_size(ot);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_cube_exec(bContext *C, wmOperator *op)
@ -166,7 +167,7 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"),
@ -214,9 +215,9 @@ void MESH_OT_primitive_cube_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_unit_props_size(ot);
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_size(ot);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static const EnumPropertyItem fill_type_items[] = {
@ -241,7 +242,7 @@ 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(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"),
@ -294,11 +295,11 @@ void MESH_OT_primitive_circle_add(wmOperatorType *ot)
/* props */
RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
ED_object_add_unit_props_radius(ot);
blender::ed::object::add_unit_props_radius(ot);
RNA_def_enum(ot->srna, "fill_type", fill_type_items, 0, "Fill Type", "");
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
@ -315,7 +316,7 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"),
@ -369,13 +370,13 @@ void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
/* props */
RNA_def_int(ot->srna, "vertices", 32, 3, MESH_ADD_VERTS_MAXI, "Vertices", "", 3, 500);
ED_object_add_unit_props_radius(ot);
blender::ed::object::add_unit_props_radius(ot);
RNA_def_float_distance(
ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Cap Fill Type", "");
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_cone_exec(bContext *C, wmOperator *op)
@ -392,7 +393,7 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"),
@ -454,8 +455,8 @@ void MESH_OT_primitive_cone_add(wmOperatorType *ot)
ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00);
RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Base Fill Type", "");
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_grid_exec(bContext *C, wmOperator *op)
@ -469,7 +470,7 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"),
@ -526,9 +527,9 @@ void MESH_OT_primitive_grid_add(wmOperatorType *ot)
RNA_def_int(
ot->srna, "y_subdivisions", 10, 1, MESH_ADD_VERTS_MAXI, "Y Subdivisions", "", 1, 1000);
ED_object_add_unit_props_size(ot);
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_size(ot);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
@ -543,7 +544,7 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Y', loc, rot, nullptr, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
@ -593,9 +594,9 @@ void MESH_OT_primitive_monkey_add(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* props */
ED_object_add_unit_props_size(ot);
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_size(ot);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
@ -609,7 +610,7 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"),
@ -664,9 +665,9 @@ void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
RNA_def_int(ot->srna, "segments", 32, 3, MESH_ADD_VERTS_MAXI / 100, "Segments", "", 3, 500);
RNA_def_int(ot->srna, "ring_count", 16, 3, MESH_ADD_VERTS_MAXI / 100, "Rings", "", 3, 500);
ED_object_add_unit_props_radius(ot);
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}
static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
@ -680,7 +681,7 @@ static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(
blender::ed::object::add_generic_get_opts(
C, op, 'Z', loc, rot, scale, &enter_editmode, &local_view_bits, nullptr);
obedit = make_prim_init(C,
CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"),
@ -731,7 +732,7 @@ void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
/* props */
RNA_def_int(ot->srna, "subdivisions", 2, 1, 10, "Subdivisions", "", 1, 8);
ED_object_add_unit_props_radius(ot);
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_unit_props_radius(ot);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
}

View File

@ -388,8 +388,8 @@ void MESH_OT_primitive_cube_add_gizmo(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_mesh_props(ot);
ED_object_add_generic_props(ot, true);
blender::ed::object::add_mesh_props(ot);
blender::ed::object::add_generic_props(ot, true);
/* hidden props */
PropertyRNA *prop = RNA_def_float_matrix(

View File

@ -203,7 +203,7 @@ static int geometry_extract_apply(bContext *C,
if (v3d && v3d->localvd) {
local_view_bits = v3d->local_view_uid;
}
Object *new_ob = ED_object_add_type(
Object *new_ob = blender::ed::object::add_type(
C, OB_MESH, nullptr, ob->loc, ob->rot, false, local_view_bits);
BKE_mesh_nomain_to_mesh(new_mesh, static_cast<Mesh *>(new_ob->data), new_ob);
@ -212,7 +212,7 @@ static int geometry_extract_apply(bContext *C,
}
if (params->add_solidify) {
ED_object_modifier_add(
blender::ed::object::modifier_add(
op->reports, bmain, scene, new_ob, "geometry_extract_solidify", eModifierType_Solidify);
SolidifyModifierData *sfmd = (SolidifyModifierData *)BKE_modifiers_findby_name(
new_ob, "mask_extract_solidify");
@ -490,7 +490,7 @@ static int paint_mask_slice_exec(bContext *C, wmOperator *op)
if (v3d && v3d->localvd) {
local_view_bits = v3d->local_view_uid;
}
Object *new_ob = ED_object_add_type(
Object *new_ob = blender::ed::object::add_type(
C, OB_MESH, nullptr, ob->loc, ob->rot, false, local_view_bits);
Mesh *new_ob_mesh = (Mesh *)BKE_id_copy(bmain, &mesh->id);

View File

@ -775,7 +775,7 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
/* to support redo */

View File

@ -153,7 +153,7 @@ static int edbm_polybuild_transform_at_cursor_invoke(bContext *C,
if (basact != nullptr) {
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
}
BM_select_history_store(bm, ele_act);
@ -239,7 +239,7 @@ static int edbm_polybuild_delete_at_cursor_invoke(bContext *C,
if (basact != nullptr) {
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
}
WM_event_add_mousemove(vc.win);
@ -407,7 +407,7 @@ static int edbm_polybuild_face_at_cursor_invoke(bContext *C, wmOperator *op, con
if (basact != nullptr) {
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
}
@ -499,7 +499,7 @@ static int edbm_polybuild_split_at_cursor_invoke(bContext *C,
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
return OPERATOR_FINISHED;
@ -588,7 +588,7 @@ static int edbm_polybuild_dissolve_at_cursor_invoke(bContext *C,
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
WM_event_add_mousemove(vc.win);

View File

@ -2214,7 +2214,7 @@ bool EDBM_select_pick(bContext *C, const int mval[2], const SelectPick_Params *p
* switch UV layers, vgroups for eg. */
BKE_view_layer_synced_ensure(vc.scene, vc.view_layer);
if (BKE_view_layer_active_base_get(vc.view_layer) != basact) {
ED_object_base_activate(C, basact);
blender::ed::object::base_activate(C, basact);
}
DEG_id_tag_update(static_cast<ID *>(vc.obedit->data), ID_RECALC_SELECT);

View File

@ -1767,7 +1767,7 @@ static int edbm_face_make_planar_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}
@ -2642,7 +2642,7 @@ static int edbm_do_smooth_vertex_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
tot_locked++;
continue;
}
@ -2781,7 +2781,7 @@ static int edbm_do_smooth_laplacian_vertex_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
tot_locked++;
continue;
}
@ -3685,7 +3685,7 @@ static int edbm_shape_propagate_to_all_exec(bContext *C, wmOperator *op)
}
/* Check for locked shape keys. */
if (ED_object_report_if_any_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_any_locked(obedit, op->reports)) {
tot_locked++;
continue;
}
@ -3800,7 +3800,7 @@ static int edbm_blend_from_shape_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
tot_locked++;
continue;
}
@ -4394,7 +4394,7 @@ static Base *mesh_separate_tagged(
/* Take into account user preferences for duplicating actions. */
const eDupli_ID_Flags dupflag = eDupli_ID_Flags(USER_DUP_MESH | (U.dupflag & USER_DUP_ACT));
Base *base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, dupflag);
Base *base_new = blender::ed::object::add_duplicate(bmain, scene, view_layer, base_old, dupflag);
/* normally would call directly after but in this case delay recalc */
// DAG_relations_tag_update(bmain);
@ -4406,7 +4406,7 @@ static Base *mesh_separate_tagged(
*BKE_object_material_len_p(obedit),
false);
ED_object_base_select(base_new, BA_SELECT);
blender::ed::object::base_select(base_new, blender::ed::object::BA_SELECT);
BMO_op_callf(bm_old,
(BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE),
@ -4470,7 +4470,7 @@ static Base *mesh_separate_arrays(Main *bmain,
/* Take into account user preferences for duplicating actions. */
const eDupli_ID_Flags dupflag = eDupli_ID_Flags(USER_DUP_MESH | (U.dupflag & USER_DUP_ACT));
Base *base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, dupflag);
Base *base_new = blender::ed::object::add_duplicate(bmain, scene, view_layer, base_old, dupflag);
/* normally would call directly after but in this case delay recalc */
// DAG_relations_tag_update(bmain);
@ -4482,7 +4482,7 @@ static Base *mesh_separate_arrays(Main *bmain,
*BKE_object_material_len_p(obedit),
false);
ED_object_base_select(base_new, BA_SELECT);
blender::ed::object::base_select(base_new, blender::ed::object::BA_SELECT);
BM_mesh_copy_arrays(bm_old, bm_new, verts, verts_len, edges, edges_len, faces, faces_len);
@ -7895,7 +7895,7 @@ static int mesh_symmetry_snap_exec(bContext *C, wmOperator *op)
continue;
}
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (blender::ed::object::shape_key_report_if_locked(obedit, op->reports)) {
continue;
}
@ -8549,7 +8549,7 @@ static int edbm_point_normals_modal(bContext *C, wmOperator *op, const wmEvent *
params.sel_op = SEL_OP_SET;
if (EDBM_select_pick(C, event->mval, &params)) {
/* Point to newly selected active. */
ED_object_calc_active_center_for_editmode(obedit, false, target);
blender::ed::object::calc_active_center_for_editmode(obedit, false, target);
add_v3_v3(target, obedit->loc);
ret = OPERATOR_RUNNING_MODAL;
@ -8594,7 +8594,7 @@ static int edbm_point_normals_modal(bContext *C, wmOperator *op, const wmEvent *
break;
case V3D_AROUND_ACTIVE:
if (!ED_object_calc_active_center_for_editmode(obedit, false, target)) {
if (!blender::ed::object::calc_active_center_for_editmode(obedit, false, target)) {
zero_v3(target);
}
add_v3_v3(target, obedit->loc);

View File

@ -455,7 +455,7 @@ bool ED_mesh_color_ensure(Mesh *mesh, const char *name)
static bool layers_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
ID *data = (ob) ? static_cast<ID *>(ob->data) : nullptr;
return (ob && !ID_IS_LINKED(ob) && !ID_IS_OVERRIDE_LIBRARY(ob) && ob->type == OB_MESH && data &&
!ID_IS_LINKED(data) && !ID_IS_OVERRIDE_LIBRARY(data));
@ -469,7 +469,7 @@ static bool uv_texture_remove_poll(bContext *C)
return false;
}
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
CustomData *ldata = mesh_customdata_get_type(mesh, BM_LOOP, nullptr);
const int active = CustomData_get_active_layer(ldata, CD_PROP_FLOAT2);
@ -482,7 +482,7 @@ static bool uv_texture_remove_poll(bContext *C)
static int mesh_uv_texture_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
if (ED_mesh_uv_add(mesh, nullptr, true, true, op->reports) == -1) {
@ -515,7 +515,7 @@ void MESH_OT_uv_texture_add(wmOperatorType *ot)
static int mesh_uv_texture_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
CustomData *ldata = mesh_customdata_get_type(mesh, BM_LOOP, nullptr);
@ -583,7 +583,7 @@ static int mesh_customdata_clear_exec__internal(bContext *C,
/* Clear Mask */
static bool mesh_customdata_mask_clear_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob && ob->type == OB_MESH) {
Mesh *mesh = static_cast<Mesh *>(ob->data);
@ -607,7 +607,7 @@ static bool mesh_customdata_mask_clear_poll(bContext *C)
}
static int mesh_customdata_mask_clear_exec(bContext *C, wmOperator *op)
{
Object *object = ED_object_context(C);
Object *object = blender::ed::object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(object->data);
const bool ret_a = BKE_id_attribute_remove(&mesh->id, ".sculpt_mask", op->reports);
int ret_b = mesh_customdata_clear_exec__internal(C, BM_LOOP, CD_GRID_PAINT_MASK);
@ -641,7 +641,7 @@ void MESH_OT_customdata_mask_clear(wmOperatorType *ot)
*/
static int mesh_customdata_skin_state(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (ob && ob->type == OB_MESH) {
Mesh *mesh = static_cast<Mesh *>(ob->data);
@ -660,7 +660,7 @@ static bool mesh_customdata_skin_add_poll(bContext *C)
static int mesh_customdata_skin_add_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
BKE_mesh_ensure_skin_customdata(mesh);
@ -1133,7 +1133,7 @@ Mesh *ED_mesh_context(bContext *C)
return mesh;
}
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
if (ob == nullptr) {
return nullptr;
}

View File

@ -223,8 +223,8 @@ static void join_mesh_single(Depsgraph *depsgraph,
multiresModifier_prepare_join(depsgraph, scene, ob_src, ob_dst);
if ((mmd = get_multires_modifier(scene, ob_src, true))) {
ED_object_iter_other(
bmain, ob_src, true, ED_object_multires_update_totlevels_cb, &mmd->totlvl);
blender::ed::object::iter_other(
bmain, ob_src, true, blender::ed::object::multires_update_totlevels, &mmd->totlvl);
}
}
@ -640,7 +640,7 @@ int ED_mesh_join_objects_exec(bContext *C, wmOperator *op)
/* free base, now that data is merged */
if (ob_iter != ob) {
ED_object_base_free_and_unlink(bmain, scene, ob_iter);
blender::ed::object::base_free_and_unlink(bmain, scene, ob_iter);
}
}
}

View File

@ -914,7 +914,7 @@ bool ED_mball_select_pick(bContext *C, const int mval[2], const SelectPick_Param
BKE_view_layer_synced_ensure(scene, view_layer);
if (BKE_view_layer_active_base_get(view_layer) != base) {
ED_object_base_activate(C, base);
blender::ed::object::base_activate(C, base);
}
changed = true;

View File

@ -197,7 +197,7 @@ static void unassigned_assets_draw(const bContext *C, Menu *menu)
static void root_catalogs_draw(const bContext *C, Menu *menu)
{
const Object *object = ED_object_active_context(C);
const Object *object = context_active_object(C);
if (!object) {
return;
}
@ -295,10 +295,10 @@ static int modifier_add_asset_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *object = ED_object_active_context(C);
Object *object = context_active_object(C);
NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(
ED_object_modifier_add(op->reports, bmain, scene, object, nullptr, eModifierType_Nodes));
modifier_add(op->reports, bmain, scene, object, nullptr, eModifierType_Nodes));
if (!nmd) {
return OPERATOR_CANCELLED;
}
@ -398,9 +398,6 @@ void ui_template_modifier_asset_menu_items(uiLayout &layout,
const bContext &C,
const StringRef catalog_path)
{
using namespace blender;
using namespace blender::ed;
using namespace blender::ed::object;
bScreen &screen = *CTX_wm_screen(&C);
asset::AssetItemTree &tree = *get_static_item_tree();
const asset_system::AssetCatalogTreeItem *item = tree.catalogs.find_root_item(catalog_path);

File diff suppressed because it is too large Load Diff

View File

@ -44,6 +44,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
static Image *bake_object_image_get(Object *ob, int mat_nr)
{
Image *image = nullptr;
@ -103,7 +105,6 @@ struct MultiresBakeJob {
static bool multiresbake_check(bContext *C, wmOperator *op)
{
using namespace blender;
Scene *scene = CTX_data_scene(C);
Object *ob;
Mesh *mesh;
@ -215,7 +216,7 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l
DerivedMesh *dm;
MultiresModifierData *mmd = get_multires_modifier(scene, ob, false);
Mesh *mesh = (Mesh *)ob->data;
MultiresModifierData tmp_mmd = blender::dna::shallow_copy(*mmd);
MultiresModifierData tmp_mmd = dna::shallow_copy(*mmd);
*lvl = mmd->lvl;
@ -240,7 +241,7 @@ static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *l
{
Mesh *mesh = (Mesh *)ob->data;
MultiresModifierData *mmd = get_multires_modifier(scene, ob, false);
MultiresModifierData tmp_mmd = blender::dna::shallow_copy(*mmd);
MultiresModifierData tmp_mmd = dna::shallow_copy(*mmd);
DerivedMesh *cddm = CDDM_from_mesh(mesh);
DerivedMesh *dm;
@ -654,3 +655,5 @@ void OBJECT_OT_bake_image(wmOperatorType *ot)
ot->modal = objects_bake_render_modal;
ot->poll = ED_operator_object_active;
}
} // namespace blender::ed::object

View File

@ -63,6 +63,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* prototypes */
static void bake_set_props(wmOperator *op, Scene *scene);
@ -72,7 +74,7 @@ struct BakeAPIRender {
Scene *scene;
ViewLayer *view_layer;
Object *ob;
blender::Vector<PointerRNA> selected_objects;
Vector<PointerRNA> selected_objects;
/* Baking settings. */
eBakeTarget target;
@ -517,7 +519,7 @@ static bool bake_object_check(const Scene *scene,
if (image) {
if (node) {
if (blender::bke::node_is_connected_to_output(ntree, node)) {
if (bke::node_is_connected_to_output(ntree, node)) {
/* we don't return false since this may be a false positive
* this can't be RPT_ERROR though, otherwise it prevents
* multiple highpoly objects to be baked at once */
@ -640,7 +642,7 @@ static bool bake_objects_check(Main *bmain,
const Scene *scene,
ViewLayer *view_layer,
Object *ob,
blender::Span<PointerRNA> selected_objects,
Span<PointerRNA> selected_objects,
ReportList *reports,
const bool is_selected_to_active,
const eBakeTarget target)
@ -710,7 +712,7 @@ static Mesh *bake_mesh_new_from_object(Depsgraph *depsgraph,
{
Mesh *mesh = BKE_mesh_new_from_object(depsgraph, object, false, preserve_origindex);
if (mesh->normals_domain() == blender::bke::MeshNormalDomain::Corner) {
if (mesh->normals_domain() == bke::MeshNormalDomain::Corner) {
ED_mesh_split_faces(mesh);
}
@ -1001,7 +1003,7 @@ static bool bake_targets_init_vertex_colors(Main *bmain,
}
/* Ensure mesh and editmesh topology are in sync. */
ED_object_editmode_load(bmain, ob);
editmode_load(bmain, ob);
targets->images = MEM_cnew<BakeImage>(__func__);
targets->images_num = 1;
@ -1021,8 +1023,8 @@ static bool bake_targets_init_vertex_colors(Main *bmain,
return true;
}
static int find_original_loop(const blender::OffsetIndices<int> orig_faces,
const blender::Span<int> orig_corner_verts,
static int find_original_loop(const OffsetIndices<int> orig_faces,
const Span<int> orig_corner_verts,
const int *vert_origindex,
const int *poly_origindex,
const int poly_eval,
@ -1038,7 +1040,7 @@ static int find_original_loop(const blender::OffsetIndices<int> orig_faces,
}
/* Find matching loop with original vertex in original face. */
const blender::IndexRange orig_face = orig_faces[poly_orig_index];
const IndexRange orig_face = orig_faces[poly_orig_index];
const int *poly_verts_orig = &orig_corner_verts[orig_face.start()];
for (int j = 0; j < orig_face.size(); ++j) {
if (poly_verts_orig[j] == vert_orig) {
@ -1074,26 +1076,26 @@ static void bake_targets_populate_pixels_color_attributes(BakeTargets *targets,
/* Populate through adjacent triangles, first triangle wins. */
const int corner_tris_num = poly_to_tri_count(mesh_eval->faces_num, mesh_eval->corners_num);
blender::int3 *corner_tris = static_cast<blender::int3 *>(
int3 *corner_tris = static_cast<int3 *>(
MEM_mallocN(sizeof(*corner_tris) * corner_tris_num, __func__));
const blender::Span<int> corner_verts = mesh_eval->corner_verts();
blender::bke::mesh::corner_tris_calc(mesh_eval->vert_positions(),
mesh_eval->faces(),
corner_verts,
{corner_tris, corner_tris_num});
const blender::Span<int> tri_faces = mesh_eval->corner_tri_faces();
const Span<int> corner_verts = mesh_eval->corner_verts();
bke::mesh::corner_tris_calc(mesh_eval->vert_positions(),
mesh_eval->faces(),
corner_verts,
{corner_tris, corner_tris_num});
const Span<int> tri_faces = mesh_eval->corner_tri_faces();
/* For mapping back to original mesh in case there are modifiers. */
const int *vert_origindex = static_cast<const int *>(
CustomData_get_layer(&mesh_eval->vert_data, CD_ORIGINDEX));
const int *poly_origindex = static_cast<const int *>(
CustomData_get_layer(&mesh_eval->face_data, CD_ORIGINDEX));
const blender::OffsetIndices orig_faces = mesh->faces();
const blender::Span<int> orig_corner_verts = mesh->corner_verts();
const OffsetIndices orig_faces = mesh->faces();
const Span<int> orig_corner_verts = mesh->corner_verts();
for (int i = 0; i < corner_tris_num; i++) {
const blender::int3 &tri = corner_tris[i];
const int3 &tri = corner_tris[i];
const int face_i = tri_faces[i];
for (int j = 0; j < 3; j++) {
@ -1177,7 +1179,6 @@ static void convert_float_color_to_byte_color(const MPropCol *float_colors,
static bool bake_targets_output_vertex_colors(BakeTargets *targets, Object *ob)
{
using namespace blender;
Mesh *mesh = static_cast<Mesh *>(ob->data);
const CustomDataLayer *active_color_layer = BKE_id_attributes_color_find(
&mesh->id, mesh->active_color_attribute);
@ -1200,7 +1201,7 @@ static bool bake_targets_output_vertex_colors(BakeTargets *targets, Object *ob)
MEM_callocN(sizeof(int) * mesh->verts_num, "num_loops_for_vertex"));
memset(mcol, 0, sizeof(MPropCol) * mesh->verts_num);
const blender::Span<int> corner_verts = mesh->corner_verts();
const Span<int> corner_verts = mesh->corner_verts();
for (int i = 0; i < totloop; i++) {
const int v = corner_verts[i];
bake_result_add_to_rgba(mcol[v].color, &result[i * channels_num], channels_num);
@ -1389,7 +1390,7 @@ static void bake_targets_free(BakeTargets *targets)
static int bake(const BakeAPIRender *bkr,
Object *ob_low,
const blender::Span<PointerRNA> selected_objects,
const Span<PointerRNA> selected_objects,
ReportList *reports)
{
Render *re = bkr->render;
@ -2308,3 +2309,5 @@ void OBJECT_OT_bake(wmOperatorType *ot)
"UV Layer",
"UV layer to override active");
}
} // namespace blender::ed::object

View File

@ -202,7 +202,7 @@ static bool bake_simulation_poll(bContext *C)
CTX_wm_operator_poll_msg_set(C, "File must be saved before baking");
return false;
}
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
const bool use_frame_cache = ob->flag & OB_FLAG_USE_SIMULATION_CACHE;
if (!use_frame_cache) {
CTX_wm_operator_poll_msg_set(C, "Cache has to be enabled");
@ -941,12 +941,8 @@ static bool bake_delete_poll(bContext *C)
return true;
}
} // namespace blender::ed::object::bake_simulation
void OBJECT_OT_simulation_nodes_cache_calculate_to_frame(wmOperatorType *ot)
{
using namespace blender::ed::object::bake_simulation;
ot->name = "Calculate Simulation to Frame";
ot->description =
"Calculate simulations in geometry nodes modifiers from the start to current frame";
@ -965,8 +961,6 @@ void OBJECT_OT_simulation_nodes_cache_calculate_to_frame(wmOperatorType *ot)
void OBJECT_OT_simulation_nodes_cache_bake(wmOperatorType *ot)
{
using namespace blender::ed::object::bake_simulation;
ot->name = "Bake Simulation";
ot->description = "Bake simulations in geometry nodes modifiers";
ot->idname = __func__;
@ -981,8 +975,6 @@ void OBJECT_OT_simulation_nodes_cache_bake(wmOperatorType *ot)
void OBJECT_OT_simulation_nodes_cache_delete(wmOperatorType *ot)
{
using namespace blender::ed::object::bake_simulation;
ot->name = "Delete Cached Simulation";
ot->description = "Delete cached/baked simulations in geometry nodes modifiers";
ot->idname = __func__;
@ -1009,8 +1001,6 @@ static void single_bake_operator_props(wmOperatorType *ot)
void OBJECT_OT_geometry_node_bake_single(wmOperatorType *ot)
{
using namespace blender::ed::object::bake_simulation;
ot->name = "Bake Geometry Node";
ot->description = "Bake a single bake node or simulation";
ot->idname = "OBJECT_OT_geometry_node_bake_single";
@ -1025,8 +1015,6 @@ void OBJECT_OT_geometry_node_bake_single(wmOperatorType *ot)
void OBJECT_OT_geometry_node_bake_delete_single(wmOperatorType *ot)
{
using namespace blender::ed::object::bake_simulation;
ot->name = "Delete Geometry Node Bake";
ot->description = "Delete baked data of a single bake node or simulation";
ot->idname = "OBJECT_OT_geometry_node_bake_delete_single";
@ -1036,3 +1024,5 @@ void OBJECT_OT_geometry_node_bake_delete_single(wmOperatorType *ot)
single_bake_operator_props(ot);
}
} // namespace blender::ed::object::bake_simulation

View File

@ -40,6 +40,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
/********************* 3d view operators ***********************/
/* can be called with C == nullptr */
@ -58,7 +60,7 @@ static const EnumPropertyItem *collection_object_active_itemf(bContext *C,
return rna_enum_dummy_NULL_items;
}
ob = ED_object_context(C);
ob = context_object(C);
/* check that the object exists */
if (ob) {
@ -115,7 +117,7 @@ static Collection *collection_object_active_find_index(Main *bmain,
static int objects_add_active_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
int single_collection_index = RNA_enum_get(op->ptr, "collection");
@ -305,7 +307,7 @@ void COLLECTION_OT_objects_remove_all(wmOperatorType *ot)
static int collection_objects_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
int single_collection_index = RNA_enum_get(op->ptr, "collection");
@ -418,7 +420,7 @@ void COLLECTION_OT_create(wmOperatorType *ot)
static int collection_add_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Main *bmain = CTX_data_main(C);
if (ob == nullptr) {
@ -455,7 +457,7 @@ void OBJECT_OT_collection_add(wmOperatorType *ot)
static int collection_link_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Collection *collection = static_cast<Collection *>(
BLI_findlink(&bmain->collections, RNA_enum_get(op->ptr, "collection")));
@ -532,7 +534,7 @@ void OBJECT_OT_collection_link(wmOperatorType *ot)
static int collection_remove_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Collection *collection = static_cast<Collection *>(
CTX_data_pointer_get_type(C, "collection", &RNA_Collection).data);
@ -628,7 +630,7 @@ static int select_grouped_exec(bContext *C, wmOperator * /*op*/)
CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
if (BKE_collection_has_object_recursive(collection, base->object)) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
}
}
}
@ -654,3 +656,5 @@ void OBJECT_OT_collection_objects_select(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
} // namespace blender::ed::object

View File

@ -67,11 +67,13 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* ------------------------------------------------------------------- */
/** \name Constraint Data Accessors
* \{ */
ListBase *ED_object_constraint_active_list(Object *ob)
ListBase *constraint_active_list(Object *ob)
{
if (ob == nullptr) {
return nullptr;
@ -92,7 +94,7 @@ ListBase *ED_object_constraint_active_list(Object *ob)
return nullptr;
}
ListBase *ED_object_pose_constraint_list(const bContext *C)
ListBase *pose_constraint_list(const bContext *C)
{
bPoseChannel *pose_bone = static_cast<bPoseChannel *>(CTX_data_pointer_get(C, "pose_bone").data);
if (pose_bone == nullptr) {
@ -105,9 +107,7 @@ ListBase *ED_object_pose_constraint_list(const bContext *C)
return &pose_bone->constraints;
}
ListBase *ED_object_constraint_list_from_constraint(Object *ob,
bConstraint *con,
bPoseChannel **r_pchan)
ListBase *constraint_list_from_constraint(Object *ob, bConstraint *con, bPoseChannel **r_pchan)
{
if (r_pchan) {
*r_pchan = nullptr;
@ -143,9 +143,9 @@ ListBase *ED_object_constraint_list_from_constraint(Object *ob,
return nullptr;
}
bConstraint *ED_object_constraint_active_get(Object *ob)
bConstraint *constraint_active_get(Object *ob)
{
return BKE_constraints_active_get(ED_object_constraint_active_list(ob));
return BKE_constraints_active_get(constraint_active_list(ob));
}
/** \} */
@ -659,7 +659,7 @@ static bool edit_constraint_poll_generic(bContext *C,
const bool is_liboverride_allowed)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", rna_type);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : context_active_object(C);
bConstraint *con = static_cast<bConstraint *>(ptr.data);
if (!ED_operator_object_active_editable_ex(C, ob)) {
@ -716,7 +716,7 @@ static bool edit_constraint_invoke_properties(bContext *C,
int *r_retval)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : context_active_object(C);
bConstraint *con;
ListBase *list;
@ -730,7 +730,7 @@ static bool edit_constraint_invoke_properties(bContext *C,
con = static_cast<bConstraint *>(ptr.data);
RNA_string_set(op->ptr, "constraint", con->name);
list = ED_object_constraint_list_from_constraint(ob, con, nullptr);
list = constraint_list_from_constraint(ob, con, nullptr);
if (&ob->constraints == list) {
RNA_enum_set(op->ptr, "owner", EDIT_CONSTRAINT_OWNER_OBJECT);
@ -750,7 +750,7 @@ static bool edit_constraint_invoke_properties(bContext *C,
if (RNA_struct_is_a(panel_ptr->type, &RNA_Constraint)) {
con = static_cast<bConstraint *>(panel_ptr->data);
RNA_string_set(op->ptr, "constraint", con->name);
list = ED_object_constraint_list_from_constraint(ob, con, nullptr);
list = constraint_list_from_constraint(ob, con, nullptr);
RNA_enum_set(op->ptr,
"owner",
(&ob->constraints == list) ? EDIT_CONSTRAINT_OWNER_OBJECT :
@ -780,7 +780,7 @@ static bConstraint *edit_constraint_property_get(bContext *C, wmOperator *op, Ob
RNA_string_get(op->ptr, "constraint", constraint_name);
if (owner == EDIT_CONSTRAINT_OWNER_BONE) {
list = ED_object_pose_constraint_list(C);
list = pose_constraint_list(C);
if (!list) {
return nullptr;
}
@ -814,7 +814,7 @@ static bConstraint *edit_constraint_property_get(bContext *C, wmOperator *op, Ob
static int stretchto_reset_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, CONSTRAINT_TYPE_STRETCHTO);
bStretchToConstraint *data = (con) ? (bStretchToConstraint *)con->data : nullptr;
@ -825,7 +825,7 @@ static int stretchto_reset_exec(bContext *C, wmOperator *op)
/* just set original length to 0.0, which will cause a reset on next recalc */
data->orglength = 0.0f;
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, nullptr);
return OPERATOR_FINISHED;
@ -869,7 +869,7 @@ void CONSTRAINT_OT_stretchto_reset(wmOperatorType *ot)
static int limitdistance_reset_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, CONSTRAINT_TYPE_DISTLIMIT);
bDistLimitConstraint *data = (con) ? (bDistLimitConstraint *)con->data : nullptr;
@ -880,7 +880,7 @@ static int limitdistance_reset_exec(bContext *C, wmOperator *op)
/* just set original length to 0.0, which will cause a reset on next recalc */
data->dist = 0.0f;
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, nullptr);
return OPERATOR_FINISHED;
@ -941,7 +941,7 @@ static void force_evaluation_if_constraint_disabled(bContext *C, Object *ob, bCo
static int childof_set_inverse_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, CONSTRAINT_TYPE_CHILDOF);
bChildOfConstraint *data = (con) ? (bChildOfConstraint *)con->data : nullptr;
@ -958,7 +958,7 @@ static int childof_set_inverse_exec(bContext *C, wmOperator *op)
/* Force constraint to run, it will perform the recalculation. */
force_evaluation_if_constraint_disabled(C, ob, con);
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
return OPERATOR_FINISHED;
@ -995,7 +995,7 @@ void CONSTRAINT_OT_childof_set_inverse(wmOperatorType *ot)
static int childof_clear_inverse_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, CONSTRAINT_TYPE_CHILDOF);
bChildOfConstraint *data = (con) ? (bChildOfConstraint *)con->data : nullptr;
@ -1007,7 +1007,7 @@ static int childof_clear_inverse_exec(bContext *C, wmOperator *op)
/* simply clear the matrix */
unit_m4(data->invmat);
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
return OPERATOR_FINISHED;
@ -1049,7 +1049,7 @@ void CONSTRAINT_OT_childof_clear_inverse(wmOperatorType *ot)
static int followpath_path_animate_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, CONSTRAINT_TYPE_FOLLOWPATH);
bFollowPathConstraint *data = (con) ? (bFollowPathConstraint *)con->data : nullptr;
@ -1073,8 +1073,8 @@ static int followpath_path_animate_exec(bContext *C, wmOperator *op)
(BKE_fcurve_find(&cu->adt->action->curves, "eval_time", 0) == nullptr))
{
/* create F-Curve for path animation */
act = blender::animrig::id_action_ensure(bmain, &cu->id);
fcu = blender::animrig::action_fcurve_ensure(bmain, act, nullptr, nullptr, "eval_time", 0);
act = animrig::id_action_ensure(bmain, &cu->id);
fcu = animrig::action_fcurve_ensure(bmain, act, nullptr, nullptr, "eval_time", 0);
/* standard vertical range - 1:1 = 100 frames */
standardRange = 100.0f;
@ -1096,8 +1096,8 @@ static int followpath_path_animate_exec(bContext *C, wmOperator *op)
const std::optional<std::string> path = RNA_path_from_ID_to_property(&ptr, prop);
/* create F-Curve for constraint */
act = blender::animrig::id_action_ensure(bmain, &ob->id);
fcu = blender::animrig::action_fcurve_ensure(bmain, act, nullptr, nullptr, path->c_str(), 0);
act = animrig::id_action_ensure(bmain, &ob->id);
fcu = animrig::action_fcurve_ensure(bmain, act, nullptr, nullptr, path->c_str(), 0);
/* standard vertical range - 0.0 to 1.0 */
standardRange = 1.0f;
@ -1185,7 +1185,7 @@ void CONSTRAINT_OT_followpath_path_animate(wmOperatorType *ot)
static int objectsolver_set_inverse_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, CONSTRAINT_TYPE_OBJECTSOLVER);
bObjectSolverConstraint *data = (con) ? (bObjectSolverConstraint *)con->data : nullptr;
@ -1203,7 +1203,7 @@ static int objectsolver_set_inverse_exec(bContext *C, wmOperator *op)
/* Force constraint to run, it will perform the recalculation. */
force_evaluation_if_constraint_disabled(C, ob, con);
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
return OPERATOR_FINISHED;
@ -1245,7 +1245,7 @@ void CONSTRAINT_OT_objectsolver_set_inverse(wmOperatorType *ot)
static int objectsolver_clear_inverse_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, CONSTRAINT_TYPE_OBJECTSOLVER);
bObjectSolverConstraint *data = (con) ? (bObjectSolverConstraint *)con->data : nullptr;
@ -1257,7 +1257,7 @@ static int objectsolver_clear_inverse_exec(bContext *C, wmOperator *op)
/* simply clear the matrix */
unit_m4(data->invmat);
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
return OPERATOR_FINISHED;
@ -1298,9 +1298,9 @@ void CONSTRAINT_OT_objectsolver_clear_inverse(wmOperatorType *ot)
/** \name Constraint Management Utilities
* \{ */
void ED_object_constraint_active_set(Object *ob, bConstraint *con)
void constraint_active_set(Object *ob, bConstraint *con)
{
ListBase *lb = ED_object_constraint_list_from_constraint(ob, con, nullptr);
ListBase *lb = constraint_list_from_constraint(ob, con, nullptr);
/* lets be nice and escape if its active already */
/* NOTE: this assumes that the stack doesn't have other active ones set... */
@ -1311,7 +1311,7 @@ void ED_object_constraint_active_set(Object *ob, bConstraint *con)
BKE_constraints_active_set(lb, con);
}
void ED_object_constraint_update(Main *bmain, Object *ob)
void constraint_update(Main *bmain, Object *ob)
{
if (ob->pose) {
BKE_pose_update_constraint_flags(ob->pose);
@ -1332,9 +1332,9 @@ static void object_pose_tag_update(Main *bmain, Object *ob)
BKE_pose_tag_recalc(bmain, ob->pose); /* Checks & sort pose channels. */
}
void ED_object_constraint_dependency_update(Main *bmain, Object *ob)
void constraint_dependency_update(Main *bmain, Object *ob)
{
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
if (ob->pose) {
object_pose_tag_update(bmain, ob);
@ -1342,7 +1342,7 @@ void ED_object_constraint_dependency_update(Main *bmain, Object *ob)
DEG_relations_tag_update(bmain);
}
void ED_object_constraint_tag_update(Main *bmain, Object *ob, bConstraint *con)
void constraint_tag_update(Main *bmain, Object *ob, bConstraint *con)
{
if (ob->pose) {
BKE_pose_tag_update_constraint_flags(ob->pose);
@ -1365,9 +1365,9 @@ void ED_object_constraint_tag_update(Main *bmain, Object *ob, bConstraint *con)
DEG_id_tag_update(&ob->id, ID_RECALC_SYNC_TO_EVAL);
}
void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstraint *con)
void constraint_dependency_tag_update(Main *bmain, Object *ob, bConstraint *con)
{
ED_object_constraint_tag_update(bmain, ob, con);
constraint_tag_update(bmain, ob, con);
if (ob->pose) {
object_pose_tag_update(bmain, ob);
@ -1375,12 +1375,12 @@ void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstr
DEG_relations_tag_update(bmain);
}
bool ED_object_constraint_move_to_index(Object *ob, bConstraint *con, const int index)
bool constraint_move_to_index(Object *ob, bConstraint *con, const int index)
{
BLI_assert(con != nullptr);
BLI_assert(index >= 0);
ListBase *conlist = ED_object_constraint_list_from_constraint(ob, con, nullptr);
ListBase *conlist = constraint_list_from_constraint(ob, con, nullptr);
int current_index = BLI_findindex(conlist, con);
BLI_assert(current_index >= 0);
@ -1391,34 +1391,31 @@ bool ED_object_constraint_move_to_index(Object *ob, bConstraint *con, const int
return true;
}
void ED_object_constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src)
void constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src)
{
BKE_constraints_free(dst);
BKE_constraints_copy(dst, src, true);
LISTBASE_FOREACH (bConstraint *, con, dst) {
ED_object_constraint_dependency_tag_update(bmain, ob_dst, con);
constraint_dependency_tag_update(bmain, ob_dst, con);
}
WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_ADDED, nullptr);
}
void ED_object_constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con)
void constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con)
{
bConstraint *copy_con = BKE_constraint_copy_for_object(ob_dst, con);
copy_con->flag |= CONSTRAINT_OVERRIDE_LIBRARY_LOCAL;
ED_object_constraint_dependency_tag_update(bmain, ob_dst, con);
constraint_dependency_tag_update(bmain, ob_dst, con);
WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_ADDED, ob_dst);
}
void ED_object_constraint_copy_for_pose(Main *bmain,
Object *ob_dst,
bPoseChannel *pchan,
bConstraint *con)
void constraint_copy_for_pose(Main *bmain, Object *ob_dst, bPoseChannel *pchan, bConstraint *con)
{
bConstraint *copy_con = BKE_constraint_copy_for_pose(ob_dst, pchan, con);
copy_con->flag |= CONSTRAINT_OVERRIDE_LIBRARY_LOCAL;
ED_object_constraint_dependency_tag_update(bmain, ob_dst, con);
constraint_dependency_tag_update(bmain, ob_dst, con);
WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_ADDED, ob_dst);
}
@ -1431,14 +1428,14 @@ void ED_object_constraint_copy_for_pose(Main *bmain,
static int constraint_delete_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, 0);
if (con == nullptr) {
return OPERATOR_CANCELLED;
}
ListBase *lb = ED_object_constraint_list_from_constraint(ob, con, nullptr);
ListBase *lb = constraint_list_from_constraint(ob, con, nullptr);
/* Store name temporarily for report. */
char name[MAX_NAME];
@ -1447,7 +1444,7 @@ static int constraint_delete_exec(bContext *C, wmOperator *op)
/* free the constraint */
if (BKE_constraint_remove_ex(lb, ob, con)) {
/* Needed to set the flags on pose-bones correctly. */
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
/* relations */
DEG_relations_tag_update(bmain);
@ -1503,7 +1500,7 @@ static int constraint_apply_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, 0);
if (con == nullptr) {
@ -1511,7 +1508,7 @@ static int constraint_apply_exec(bContext *C, wmOperator *op)
}
bPoseChannel *pchan;
ListBase *constraints = ED_object_constraint_list_from_constraint(ob, con, &pchan);
ListBase *constraints = constraint_list_from_constraint(ob, con, &pchan);
/* Store name temporarily for report. */
char name[MAX_NAME];
@ -1537,7 +1534,7 @@ static int constraint_apply_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
/* Needed to set the flags on pose-bones correctly. */
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, ob);
@ -1600,7 +1597,7 @@ void CONSTRAINT_OT_apply(wmOperatorType *ot)
static int constraint_copy_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, 0);
if (con == nullptr) {
@ -1608,7 +1605,7 @@ static int constraint_copy_exec(bContext *C, wmOperator *op)
}
bPoseChannel *pchan;
ListBase *constraints = ED_object_constraint_list_from_constraint(ob, con, &pchan);
ListBase *constraints = constraint_list_from_constraint(ob, con, &pchan);
/* Store name temporarily for report. */
char name[MAX_NAME];
@ -1637,7 +1634,7 @@ static int constraint_copy_exec(bContext *C, wmOperator *op)
BLI_listbase_link_move(constraints, copy_con, new_index - current_index);
/* Needed to set the flags on pose-bones correctly. */
ED_object_constraint_update(bmain, ob);
constraint_update(bmain, ob);
DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_ADDED, ob);
@ -1685,7 +1682,7 @@ void CONSTRAINT_OT_copy(wmOperatorType *ot)
static int constraint_copy_to_selected_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, obact, 0);
if (con == nullptr) {
@ -1693,7 +1690,7 @@ static int constraint_copy_to_selected_exec(bContext *C, wmOperator *op)
}
bPoseChannel *pchan;
ED_object_constraint_list_from_constraint(obact, con, &pchan);
constraint_list_from_constraint(obact, con, &pchan);
if (pchan) {
/* Don't do anything if bone doesn't exist or doesn't have any constraints. */
@ -1763,10 +1760,10 @@ static int constraint_copy_to_selected_invoke(bContext *C, wmOperator *op, const
static bool constraint_copy_to_selected_poll(bContext *C)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
Object *obact = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *obact = (ptr.owner_id) ? (Object *)ptr.owner_id : context_active_object(C);
bConstraint *con = static_cast<bConstraint *>(ptr.data);
bPoseChannel *pchan;
ED_object_constraint_list_from_constraint(obact, con, &pchan);
constraint_list_from_constraint(obact, con, &pchan);
if (pchan) {
bool found = false;
@ -1836,18 +1833,18 @@ void CONSTRAINT_OT_copy_to_selected(wmOperatorType *ot)
static int constraint_move_down_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, 0);
if (con && con->next) {
ListBase *conlist = ED_object_constraint_list_from_constraint(ob, con, nullptr);
ListBase *conlist = constraint_list_from_constraint(ob, con, nullptr);
bConstraint *nextCon = con->next;
/* insert the nominated constraint after the one that used to be after it */
BLI_remlink(conlist, con);
BLI_insertlinkafter(conlist, nextCon, con);
ED_object_constraint_update(CTX_data_main(C), ob);
constraint_update(CTX_data_main(C), ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
return OPERATOR_FINISHED;
@ -1892,18 +1889,18 @@ void CONSTRAINT_OT_move_down(wmOperatorType *ot)
static int constraint_move_up_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, 0);
if (con && con->prev) {
ListBase *conlist = ED_object_constraint_list_from_constraint(ob, con, nullptr);
ListBase *conlist = constraint_list_from_constraint(ob, con, nullptr);
bConstraint *prevCon = con->prev;
/* insert the nominated constraint before the one that used to be before it */
BLI_remlink(conlist, con);
BLI_insertlinkbefore(conlist, prevCon, con);
ED_object_constraint_update(CTX_data_main(C), ob);
constraint_update(CTX_data_main(C), ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
return OPERATOR_FINISHED;
@ -1946,7 +1943,7 @@ void CONSTRAINT_OT_move_up(wmOperatorType *ot)
static int constraint_move_to_index_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bConstraint *con = edit_constraint_property_get(C, op, ob, 0);
int new_index = RNA_int_get(op->ptr, "index");
@ -1955,9 +1952,9 @@ static int constraint_move_to_index_exec(bContext *C, wmOperator *op)
}
if (con) {
ED_object_constraint_move_to_index(ob, con, new_index);
constraint_move_to_index(ob, con, new_index);
ED_object_constraint_update(CTX_data_main(C), ob);
constraint_update(CTX_data_main(C), ob);
return OPERATOR_FINISHED;
}
@ -2153,7 +2150,7 @@ void POSE_OT_constraints_copy(wmOperatorType *ot)
static int object_constraint_copy_exec(bContext *C, wmOperator * /*op*/)
{
Main *bmain = CTX_data_main(C);
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
/* copy all constraints from active object to all selected objects */
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) {
@ -2199,7 +2196,7 @@ void OBJECT_OT_constraints_copy(wmOperatorType *ot)
static bool get_new_constraint_target(
bContext *C, int con_type, Object **tar_ob, bPoseChannel **tar_pchan, bool add)
{
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
bPoseChannel *pchanact = BKE_pose_channel_active_if_bonecoll_visible(obact);
bool only_curve = false, only_mesh = false, only_ob = false;
bool found = false;
@ -2336,7 +2333,7 @@ static bool get_new_constraint_target(
/* restore, BKE_object_add sets active */
view_layer->basact = base;
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
/* make our new target the new object */
*tar_ob = obt;
@ -2459,7 +2456,7 @@ static int constraint_add_exec(
/* dummy operator callback */
static int object_constraint_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
int type = RNA_enum_get(op->ptr, "type");
short with_targets = 0;
@ -2481,7 +2478,7 @@ static int object_constraint_add_exec(bContext *C, wmOperator *op)
/* dummy operator callback */
static int pose_constraint_add_exec(bContext *C, wmOperator *op)
{
Object *ob = BKE_object_pose_armature_get(ED_object_active_context(C));
Object *ob = BKE_object_pose_armature_get(context_active_object(C));
int type = RNA_enum_get(op->ptr, "type");
short with_targets = 0;
@ -2497,7 +2494,7 @@ static int pose_constraint_add_exec(bContext *C, wmOperator *op)
with_targets = 1;
}
return constraint_add_exec(C, op, ob, ED_object_constraint_active_list(ob), type, with_targets);
return constraint_add_exec(C, op, ob, constraint_active_list(ob), type, with_targets);
}
/* ------------------ */
@ -2699,7 +2696,7 @@ static int pose_ik_add_exec(bContext *C, wmOperator *op)
/* add the constraint - all necessary checks should have
* been done by the invoke() callback already... */
return constraint_add_exec(
C, op, ob, ED_object_constraint_active_list(ob), CONSTRAINT_TYPE_KINEMATIC, with_targets);
C, op, ob, constraint_active_list(ob), CONSTRAINT_TYPE_KINEMATIC, with_targets);
}
void POSE_OT_ik_add(wmOperatorType *ot)
@ -2782,3 +2779,5 @@ void POSE_OT_ik_clear(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -40,6 +40,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* All possible data to transfer.
* Note some are 'fake' ones, i.e. they are not hold by real CDLayers. */
/* Not shared with modifier, since we use a usual enum here, not a multi-choice one. */
@ -147,7 +149,7 @@ static const EnumPropertyItem *dt_layers_select_src_itemf(bContext *C,
RNA_enum_items_add_value(
&item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ALL_SRC);
Object *ob_src = ED_object_active_context(C);
Object *ob_src = context_active_object(C);
if (ob_src == nullptr) {
RNA_enum_item_end(&item, &totitem);
*r_free = true;
@ -352,7 +354,7 @@ static bool data_transfer_check(bContext * /*C*/, wmOperator *op)
static void data_transfer_exec_preprocess_objects(bContext *C,
wmOperator *op,
Object *ob_src,
blender::Vector<PointerRNA> *ctx_objects,
Vector<PointerRNA> *ctx_objects,
const bool reverse_transfer)
{
CTX_data_selected_editable_objects(C, ctx_objects);
@ -419,10 +421,10 @@ static bool data_transfer_exec_is_object_valid(wmOperator *op,
static int data_transfer_exec(bContext *C, wmOperator *op)
{
Object *ob_src = ED_object_active_context(C);
Object *ob_src = context_active_object(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
blender::Vector<PointerRNA> ctx_objects;
Vector<PointerRNA> ctx_objects;
bool changed = false;
@ -548,7 +550,7 @@ static int data_transfer_exec(bContext *C, wmOperator *op)
* it cannot check for all possible invalid cases. */
static bool data_transfer_poll(bContext *C)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ID *data = static_cast<ID *>((ob) ? ob->data : nullptr);
return (ob != nullptr && ob->type == OB_MESH && data != nullptr);
}
@ -818,7 +820,7 @@ static bool datalayout_transfer_poll(bContext *C)
static int datalayout_transfer_exec(bContext *C, wmOperator *op)
{
Object *ob_act = ED_object_active_context(C);
Object *ob_act = context_active_object(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
DataTransferModifierData *dtmd;
@ -852,7 +854,7 @@ static int datalayout_transfer_exec(bContext *C, wmOperator *op)
else {
Object *ob_src = ob_act;
blender::Vector<PointerRNA> ctx_objects;
Vector<PointerRNA> ctx_objects;
const int data_type = RNA_enum_get(op->ptr, "data_type");
const bool use_delete = RNA_boolean_get(op->ptr, "use_delete");
@ -949,3 +951,5 @@ void OBJECT_OT_datalayout_transfer(wmOperatorType *ot)
"How to match source and destination layers");
RNA_def_property_enum_funcs_runtime(prop, nullptr, nullptr, dt_layers_select_dst_itemf);
}
} // namespace blender::ed::object

View File

@ -47,6 +47,8 @@
#include "MEM_guardedalloc.h"
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name Internal Transform Get/Apply
*
@ -300,7 +302,7 @@ struct XFormObjectData_GPencil {
GPencilPointCoordinates elem_array[0];
};
XFormObjectData *ED_object_data_xform_create_ex(ID *id, bool is_edit_mode)
XFormObjectData *data_xform_create_ex(ID *id, bool is_edit_mode)
{
XFormObjectData *xod_base = nullptr;
if (id == nullptr) {
@ -339,7 +341,7 @@ XFormObjectData *ED_object_data_xform_create_ex(ID *id, bool is_edit_mode)
XFormObjectData_Mesh *xod = static_cast<XFormObjectData_Mesh *>(
MEM_mallocN(sizeof(*xod) + (sizeof(*xod->elem_array) * elem_array_len), __func__));
memset(xod, 0x0, sizeof(*xod));
blender::MutableSpan(reinterpret_cast<blender::float3 *>(xod->elem_array), mesh->verts_num)
MutableSpan(reinterpret_cast<float3 *>(xod->elem_array), mesh->verts_num)
.copy_from(mesh->vert_positions());
xod_base = &xod->base;
@ -482,17 +484,17 @@ XFormObjectData *ED_object_data_xform_create_ex(ID *id, bool is_edit_mode)
return xod_base;
}
XFormObjectData *ED_object_data_xform_create(ID *id)
XFormObjectData *data_xform_create(ID *id)
{
return ED_object_data_xform_create_ex(id, false);
return data_xform_create_ex(id, false);
}
XFormObjectData *ED_object_data_xform_create_from_edit_mode(ID *id)
XFormObjectData *data_xform_create_from_edit_mode(ID *id)
{
return ED_object_data_xform_create_ex(id, true);
return data_xform_create_ex(id, true);
}
void ED_object_data_xform_destroy(XFormObjectData *xod_base)
void data_xform_destroy(XFormObjectData *xod_base)
{
switch (GS(xod_base->id->name)) {
case ID_ME: {
@ -523,9 +525,8 @@ void ED_object_data_xform_destroy(XFormObjectData *xod_base)
MEM_freeN(xod_base);
}
void ED_object_data_xform_by_mat4(XFormObjectData *xod_base, const float mat[4][4])
void data_xform_by_mat4(XFormObjectData *xod_base, const float mat[4][4])
{
using namespace blender;
switch (GS(xod_base->id->name)) {
case ID_ME: {
Mesh *mesh = (Mesh *)xod_base->id;
@ -642,7 +643,7 @@ void ED_object_data_xform_by_mat4(XFormObjectData *xod_base, const float mat[4][
}
}
void ED_object_data_xform_restore(XFormObjectData *xod_base)
void data_xform_restore(XFormObjectData *xod_base)
{
switch (GS(xod_base->id->name)) {
case ID_ME: {
@ -660,7 +661,7 @@ void ED_object_data_xform_restore(XFormObjectData *xod_base)
}
else {
mesh->vert_positions_for_write().copy_from(
{reinterpret_cast<const blender::float3 *>(xod->elem_array), mesh->verts_num});
{reinterpret_cast<const float3 *>(xod->elem_array), mesh->verts_num});
mesh->tag_positions_changed();
}
@ -743,7 +744,7 @@ void ED_object_data_xform_restore(XFormObjectData *xod_base)
}
}
void ED_object_data_xform_tag_update(XFormObjectData *xod_base)
void data_xform_tag_update(XFormObjectData *xod_base)
{
switch (GS(xod_base->id->name)) {
case ID_ME: {
@ -797,3 +798,5 @@ void ED_object_data_xform_tag_update(XFormObjectData *xod_base)
}
/** \} */
} // namespace blender::ed::object

View File

@ -105,7 +105,7 @@
#include "object_intern.hh" /* own include */
using blender::Vector;
namespace blender::ed::object {
static CLG_LogRef LOG = {"ed.object.edit"};
@ -118,16 +118,16 @@ static ListBase selected_objects_get(bContext *C);
/** \name Internal Utilities
* \{ */
Object *ED_object_context(const bContext *C)
Object *context_object(const bContext *C)
{
return static_cast<Object *>(CTX_data_pointer_get_type(C, "object", &RNA_Object).data);
}
Object *ED_object_active_context(const bContext *C)
Object *context_active_object(const bContext *C)
{
Object *ob = nullptr;
if (C) {
ob = ED_object_context(C);
ob = context_object(C);
if (!ob) {
ob = CTX_data_active_object(C);
}
@ -135,8 +135,9 @@ Object *ED_object_active_context(const bContext *C)
return ob;
}
Vector<Object *> ED_object_array_in_mode_or_selected(
bContext *C, bool (*filter_fn)(const Object *ob, void *user_data), void *filter_user_data)
Vector<Object *> objects_in_mode_or_selected(bContext *C,
bool (*filter_fn)(const Object *ob, void *user_data),
void *filter_user_data)
{
ScrArea *area = CTX_wm_area(C);
const Scene *scene = CTX_data_scene(C);
@ -214,10 +215,10 @@ Vector<Object *> ED_object_array_in_mode_or_selected(
/** \name Object Index Lookup/Creation
* \{ */
int ED_object_in_mode_to_index(const Scene *scene,
ViewLayer *view_layer,
const eObjectMode mode,
const Object *ob)
int object_in_mode_to_index(const Scene *scene,
ViewLayer *view_layer,
const eObjectMode mode,
const Object *ob)
{
BLI_assert(ob != nullptr);
/* NOTE: the `v3d` is always nullptr because the purpose of this function is to return
@ -236,10 +237,10 @@ int ED_object_in_mode_to_index(const Scene *scene,
return index;
}
Object *ED_object_in_mode_from_index(const Scene *scene,
ViewLayer *view_layer,
const eObjectMode mode,
int index)
Object *object_in_mode_from_index(const Scene *scene,
ViewLayer *view_layer,
const eObjectMode mode,
int index)
{
BLI_assert(index >= 0);
Object *ob = nullptr;
@ -283,7 +284,7 @@ static int object_hide_view_clear_exec(bContext *C, wmOperator *op)
changed = true;
if (select) {
/* We cannot call `ED_object_base_select` because
/* We cannot call `base_select` because
* base is not selectable while it is hidden. */
base->flag |= BASE_SELECTED;
BKE_scene_object_base_flag_sync_from_base(base);
@ -336,14 +337,14 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op)
if (!unselected) {
if (base->flag & BASE_SELECTED) {
ED_object_base_select(base, BA_DESELECT);
base_select(base, BA_DESELECT);
base->flag |= BASE_HIDDEN;
changed = true;
}
}
else {
if (!(base->flag & BASE_SELECTED)) {
ED_object_base_select(base, BA_DESELECT);
base_select(base, BA_DESELECT);
base->flag |= BASE_HIDDEN;
changed = true;
}
@ -422,7 +423,7 @@ static int object_hide_collection_exec(bContext *C, wmOperator *op)
#define COLLECTION_INVALID_INDEX -1
void ED_collection_hide_menu_draw(const bContext *C, uiLayout *layout)
void collection_hide_menu_draw(const bContext *C, uiLayout *layout)
{
const Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
@ -478,7 +479,7 @@ static int object_hide_collection_invoke(bContext *C, wmOperator *op, const wmEv
uiPopupMenu *pup = UI_popup_menu_begin(C, title, ICON_OUTLINER_COLLECTION);
uiLayout *layout = UI_popup_menu_layout(pup);
ED_collection_hide_menu_draw(C, layout);
collection_hide_menu_draw(C, layout);
UI_popup_menu_end(C, pup);
@ -551,10 +552,10 @@ static bool mesh_needs_keyindex(Main *bmain, const Mesh *mesh)
* \param load_data: Flush the edit-mode data back to the object.
* \param free_data: Free the edit-mode data.
*/
static bool ED_object_editmode_load_free_ex(Main *bmain,
Object *obedit,
const bool load_data,
const bool free_data)
static bool editmode_load_free_ex(Main *bmain,
Object *obedit,
const bool load_data,
const bool free_data)
{
BLI_assert(load_data || free_data);
@ -693,16 +694,16 @@ static bool ED_object_editmode_load_free_ex(Main *bmain,
return true;
}
bool ED_object_editmode_load(Main *bmain, Object *obedit)
bool editmode_load(Main *bmain, Object *obedit)
{
return ED_object_editmode_load_free_ex(bmain, obedit, true, false);
return editmode_load_free_ex(bmain, obedit, true, false);
}
bool ED_object_editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag)
bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag)
{
const bool free_data = (flag & EM_FREEDATA) != 0;
if (ED_object_editmode_load_free_ex(bmain, obedit, true, free_data) == false) {
if (editmode_load_free_ex(bmain, obedit, true, free_data) == false) {
/* in rare cases (background mode) its possible active object
* is flagged for editmode, without 'obedit' being set #35489. */
if (UNLIKELY(obedit && obedit->mode & OB_MODE_EDIT)) {
@ -740,20 +741,20 @@ bool ED_object_editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int f
return (obedit->mode & OB_MODE_EDIT) == 0;
}
bool ED_object_editmode_exit(bContext *C, int flag)
bool editmode_exit(bContext *C, int flag)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *obedit = CTX_data_edit_object(C);
return ED_object_editmode_exit_ex(bmain, scene, obedit, flag);
return editmode_exit_ex(bmain, scene, obedit, flag);
}
bool ED_object_editmode_free_ex(Main *bmain, Object *obedit)
bool editmode_free_ex(Main *bmain, Object *obedit)
{
return ED_object_editmode_load_free_ex(bmain, obedit, false, true);
return editmode_load_free_ex(bmain, obedit, false, true);
}
bool ED_object_editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag)
bool editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag)
{
BKE_view_layer_synced_ensure(scene, view_layer);
Object *obedit = BKE_view_layer_edit_object_get(view_layer);
@ -767,21 +768,21 @@ bool ED_object_editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view
LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer)) {
Object *ob = base->object;
if ((ob->type == obedit_type) && (ob->mode & OB_MODE_EDIT)) {
changed |= ED_object_editmode_exit_ex(bmain, scene, base->object, flag);
changed |= editmode_exit_ex(bmain, scene, base->object, flag);
}
}
return changed;
}
bool ED_object_editmode_exit_multi(bContext *C, int flag)
bool editmode_exit_multi(bContext *C, int flag)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
return ED_object_editmode_exit_multi_ex(bmain, scene, view_layer, flag);
return editmode_exit_multi_ex(bmain, scene, view_layer, flag);
}
bool ED_object_editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag)
bool editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag)
{
bool ok = false;
@ -898,7 +899,7 @@ bool ED_object_editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag
return (ob->mode & OB_MODE_EDIT) != 0;
}
bool ED_object_editmode_enter(bContext *C, int flag)
bool editmode_enter(bContext *C, int flag)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
@ -906,7 +907,7 @@ bool ED_object_editmode_enter(bContext *C, int flag)
/* Active layer checked here for view3d,
* callers that don't want view context can call the extended version. */
Object *ob = CTX_data_active_object(C);
return ED_object_editmode_enter_ex(bmain, scene, ob, flag);
return editmode_enter_ex(bmain, scene, ob, flag);
}
static int editmode_toggle_exec(bContext *C, wmOperator *op)
@ -922,29 +923,29 @@ static int editmode_toggle_exec(bContext *C, wmOperator *op)
wmMsgBus *mbus = CTX_wm_message_bus(C);
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, obact, eObjectMode(mode_flag), op->reports)) {
if (!mode_compat_set(C, obact, eObjectMode(mode_flag), op->reports)) {
return OPERATOR_CANCELLED;
}
}
if (!is_mode_set) {
ED_object_editmode_enter_ex(bmain, scene, obact, 0);
editmode_enter_ex(bmain, scene, obact, 0);
if (obact->mode & mode_flag) {
FOREACH_SELECTED_OBJECT_BEGIN (view_layer, v3d, ob) {
if ((ob != obact) && (ob->type == obact->type)) {
ED_object_editmode_enter_ex(bmain, scene, ob, EM_NO_CONTEXT);
editmode_enter_ex(bmain, scene, ob, EM_NO_CONTEXT);
}
}
FOREACH_SELECTED_OBJECT_END;
}
}
else {
ED_object_editmode_exit_ex(bmain, scene, obact, EM_FREEDATA);
editmode_exit_ex(bmain, scene, obact, EM_FREEDATA);
if ((obact->mode & mode_flag) == 0) {
FOREACH_OBJECT_BEGIN (scene, view_layer, ob) {
if ((ob != obact) && (ob->type == obact->type)) {
ED_object_editmode_exit_ex(bmain, scene, ob, EM_FREEDATA);
editmode_exit_ex(bmain, scene, ob, EM_FREEDATA);
}
}
FOREACH_OBJECT_END;
@ -1019,7 +1020,7 @@ static int posemode_exec(bContext *C, wmOperator *op)
bool is_mode_set = (obact->mode & mode_flag) != 0;
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, obact, eObjectMode(mode_flag), op->reports)) {
if (!mode_compat_set(C, obact, eObjectMode(mode_flag), op->reports)) {
return OPERATOR_CANCELLED;
}
}
@ -1032,7 +1033,7 @@ static int posemode_exec(bContext *C, wmOperator *op)
BKE_view_layer_synced_ensure(scene, view_layer);
Object *obedit = BKE_view_layer_edit_object_get(view_layer);
if (obact == obedit) {
ED_object_editmode_exit_ex(bmain, scene, obedit, EM_FREEDATA);
editmode_exit_ex(bmain, scene, obedit, EM_FREEDATA);
is_mode_set = false;
}
}
@ -1093,7 +1094,7 @@ void OBJECT_OT_posemode_toggle(wmOperatorType *ot)
/** \name Force Field Toggle Operator
* \{ */
void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object)
void check_force_modifiers(Main *bmain, Scene *scene, Object *object)
{
PartDeflect *pd = object->pd;
ModifierData *md = BKE_modifiers_findby_type(object, eModifierType_Surface);
@ -1104,7 +1105,7 @@ void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object)
!ELEM(pd->forcefield, 0, PFIELD_GUIDE, PFIELD_TEXTURE))
{
if (ELEM(object->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVES_LEGACY)) {
ED_object_modifier_add(nullptr, bmain, scene, object, nullptr, eModifierType_Surface);
modifier_add(nullptr, bmain, scene, object, nullptr, eModifierType_Surface);
}
}
}
@ -1112,7 +1113,7 @@ void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object)
if (!pd || (pd->shape != PFIELD_SHAPE_SURFACE) ||
ELEM(pd->forcefield, 0, PFIELD_GUIDE, PFIELD_TEXTURE))
{
ED_object_modifier_remove(nullptr, bmain, scene, object, md);
modifier_remove(nullptr, bmain, scene, object, md);
}
}
}
@ -1133,7 +1134,7 @@ static int forcefield_toggle_exec(bContext *C, wmOperator * /*op*/)
ob->pd->forcefield = 0;
}
ED_object_check_force_modifiers(CTX_data_main(C), CTX_data_scene(C), ob);
check_force_modifiers(CTX_data_main(C), CTX_data_scene(C), ob);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@ -1177,7 +1178,7 @@ static eAnimvizCalcRange object_path_convert_range(eObjectPathCalcRange range)
return ANIMVIZ_CALC_RANGE_FULL;
}
void ED_objects_recalculate_paths_selected(bContext *C, Scene *scene, eObjectPathCalcRange range)
void motion_paths_recalc_selected(bContext *C, Scene *scene, eObjectPathCalcRange range)
{
ListBase selected_objects = {nullptr, nullptr};
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) {
@ -1185,12 +1186,12 @@ void ED_objects_recalculate_paths_selected(bContext *C, Scene *scene, eObjectPat
}
CTX_DATA_END;
ED_objects_recalculate_paths(C, scene, range, &selected_objects);
motion_paths_recalc(C, scene, range, &selected_objects);
BLI_freelistN(&selected_objects);
}
void ED_objects_recalculate_paths_visible(bContext *C, Scene *scene, eObjectPathCalcRange range)
void motion_paths_recalc_visible(bContext *C, Scene *scene, eObjectPathCalcRange range)
{
ListBase visible_objects = {nullptr, nullptr};
CTX_DATA_BEGIN (C, Object *, ob, visible_objects) {
@ -1198,7 +1199,7 @@ void ED_objects_recalculate_paths_visible(bContext *C, Scene *scene, eObjectPath
}
CTX_DATA_END;
ED_objects_recalculate_paths(C, scene, range, &visible_objects);
motion_paths_recalc(C, scene, range, &visible_objects);
BLI_freelistN(&visible_objects);
}
@ -1213,10 +1214,10 @@ static bool has_pose_motion_paths(Object *ob)
return ob->pose && (ob->pose->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS) != 0;
}
void ED_objects_recalculate_paths(bContext *C,
Scene *scene,
eObjectPathCalcRange range,
ListBase *ld_objects)
void motion_paths_recalc(bContext *C,
Scene *scene,
eObjectPathCalcRange range,
ListBase *ld_objects)
{
/* Transform doesn't always have context available to do update. */
if (C == nullptr) {
@ -1323,7 +1324,7 @@ static int object_calculate_paths_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* calculate the paths for objects that have them (and are tagged to get refreshed) */
ED_objects_recalculate_paths_selected(C, scene, OBJECT_PATH_CALC_RANGE_FULL);
motion_paths_recalc_selected(C, scene, OBJECT_PATH_CALC_RANGE_FULL);
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW_ANIMVIZ, nullptr);
@ -1373,7 +1374,7 @@ void OBJECT_OT_paths_calculate(wmOperatorType *ot)
static bool object_update_paths_poll(bContext *C)
{
if (ED_operator_object_active_editable(C)) {
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
return (ob->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS) != 0;
}
@ -1395,7 +1396,7 @@ static int object_update_paths_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* calculate the paths for objects that have them (and are tagged to get refreshed) */
ED_objects_recalculate_paths_selected(C, scene, OBJECT_PATH_CALC_RANGE_FULL);
motion_paths_recalc_selected(C, scene, OBJECT_PATH_CALC_RANGE_FULL);
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW_ANIMVIZ, nullptr);
@ -1440,7 +1441,7 @@ static int object_update_all_paths_exec(bContext *C, wmOperator * /*op*/)
return OPERATOR_CANCELLED;
}
ED_objects_recalculate_paths_visible(C, scene, OBJECT_PATH_CALC_RANGE_FULL);
motion_paths_recalc_visible(C, scene, OBJECT_PATH_CALC_RANGE_FULL);
WM_event_add_notifier(C, NC_OBJECT | ND_POSE | ND_TRANSFORM, nullptr);
@ -1468,7 +1469,7 @@ void OBJECT_OT_paths_update_visible(wmOperatorType *ot)
/** \name Clear Motion Paths Operator
* \{ */
/* Helper for ED_objects_clear_paths() */
/* Helper for motion_paths_clear() */
static void object_clear_mpath(Object *ob)
{
if (ob->mpath) {
@ -1481,7 +1482,7 @@ static void object_clear_mpath(Object *ob)
}
}
void ED_objects_clear_paths(bContext *C, bool only_selected)
void motion_paths_clear(bContext *C, bool only_selected)
{
if (only_selected) {
/* Loop over all selected + editable objects in scene. */
@ -1505,7 +1506,7 @@ static int object_clear_paths_exec(bContext *C, wmOperator *op)
bool only_selected = RNA_boolean_get(op->ptr, "only_selected");
/* use the backend function for this */
ED_objects_clear_paths(C, only_selected);
motion_paths_clear(C, only_selected);
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, nullptr);
@ -1555,7 +1556,6 @@ void OBJECT_OT_paths_clear(wmOperatorType *ot)
static int shade_smooth_exec(bContext *C, wmOperator *op)
{
using namespace blender;
const bool use_smooth = STREQ(op->idname, "OBJECT_OT_shade_smooth");
const bool use_smooth_by_angle = STREQ(op->idname, "OBJECT_OT_shade_smooth_by_angle");
Main *bmain = CTX_data_main(C);
@ -1731,7 +1731,7 @@ static const EnumPropertyItem *object_mode_set_itemf(bContext *C,
const Object *ob = CTX_data_active_object(C);
if (ob) {
while (input->identifier) {
if (ED_object_mode_compat_test(ob, eObjectMode(input->value))) {
if (mode_compat_test(ob, eObjectMode(input->value))) {
RNA_enum_item_add(&item, &totitem, input);
}
input++;
@ -1768,7 +1768,7 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
mode = OB_MODE_EDIT_GPENCIL_LEGACY;
}
if (!ED_object_mode_compat_test(ob, mode)) {
if (!mode_compat_test(ob, mode)) {
return OPERATOR_PASS_THROUGH;
}
@ -1792,7 +1792,7 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
*/
if (toggle == false) {
if (ob->mode != mode) {
ED_object_mode_set_ex(C, mode, true, op->reports);
mode_set_ex(C, mode, true, op->reports);
}
}
else {
@ -1801,14 +1801,14 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
* otherwise there is nothing to do. */
if (mode == OB_MODE_OBJECT) {
if (ob->mode != OB_MODE_OBJECT) {
if (ED_object_mode_set_ex(C, OB_MODE_OBJECT, true, op->reports)) {
if (mode_set_ex(C, OB_MODE_OBJECT, true, op->reports)) {
/* Store old mode so we know what to go back to. */
ob->restore_mode = mode_prev;
}
}
else {
if (ob->restore_mode != OB_MODE_OBJECT) {
ED_object_mode_set_ex(C, eObjectMode(ob->restore_mode), true, op->reports);
mode_set_ex(C, eObjectMode(ob->restore_mode), true, op->reports);
}
}
}
@ -1816,17 +1816,17 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
/* Non-object modes, enter the 'mode' unless it's already set,
* in that case use restore mode. */
if (ob->mode != mode) {
if (ED_object_mode_set_ex(C, mode, true, op->reports)) {
if (mode_set_ex(C, mode, true, op->reports)) {
/* Store old mode so we know what to go back to. */
ob->restore_mode = mode_prev;
}
}
else {
if (ob->restore_mode != OB_MODE_OBJECT) {
ED_object_mode_set_ex(C, eObjectMode(ob->restore_mode), true, op->reports);
mode_set_ex(C, eObjectMode(ob->restore_mode), true, op->reports);
}
else {
ED_object_mode_set_ex(C, OB_MODE_OBJECT, true, op->reports);
mode_set_ex(C, OB_MODE_OBJECT, true, op->reports);
}
}
}
@ -2269,3 +2269,5 @@ void OBJECT_OT_link_to_collection(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -51,9 +51,11 @@
#include "object_intern.hh"
namespace blender::ed::object {
/******************************** API ****************************/
GpencilModifierData *ED_object_gpencil_modifier_add(
GpencilModifierData *gpencil_modifier_add(
ReportList *reports, Main *bmain, Scene * /*scene*/, Object *ob, const char *name, int type)
{
GpencilModifierData *new_md = nullptr;
@ -118,10 +120,7 @@ static bool gpencil_object_modifier_remove(Main *bmain,
return true;
}
bool ED_object_gpencil_modifier_remove(ReportList *reports,
Main *bmain,
Object *ob,
GpencilModifierData *md)
bool gpencil_modifier_remove(ReportList *reports, Main *bmain, Object *ob, GpencilModifierData *md)
{
bool sort_depsgraph = false;
bool ok;
@ -139,7 +138,7 @@ bool ED_object_gpencil_modifier_remove(ReportList *reports,
return true;
}
void ED_object_gpencil_modifier_clear(Main *bmain, Object *ob)
void gpencil_modifier_clear(Main *bmain, Object *ob)
{
GpencilModifierData *md = static_cast<GpencilModifierData *>(ob->greasepencil_modifiers.first);
bool sort_depsgraph = false;
@ -162,9 +161,7 @@ void ED_object_gpencil_modifier_clear(Main *bmain, Object *ob)
DEG_relations_tag_update(bmain);
}
bool ED_object_gpencil_modifier_move_up(ReportList * /*reports*/,
Object *ob,
GpencilModifierData *md)
bool gpencil_modifier_move_up(ReportList * /*reports*/, Object *ob, GpencilModifierData *md)
{
if (md->prev) {
BLI_remlink(&ob->greasepencil_modifiers, md);
@ -174,9 +171,7 @@ bool ED_object_gpencil_modifier_move_up(ReportList * /*reports*/,
return true;
}
bool ED_object_gpencil_modifier_move_down(ReportList * /*reports*/,
Object *ob,
GpencilModifierData *md)
bool gpencil_modifier_move_down(ReportList * /*reports*/, Object *ob, GpencilModifierData *md)
{
if (md->next) {
BLI_remlink(&ob->greasepencil_modifiers, md);
@ -186,10 +181,10 @@ bool ED_object_gpencil_modifier_move_down(ReportList * /*reports*/,
return true;
}
bool ED_object_gpencil_modifier_move_to_index(ReportList *reports,
Object *ob,
GpencilModifierData *md,
const int index)
bool gpencil_modifier_move_to_index(ReportList *reports,
Object *ob,
GpencilModifierData *md,
const int index)
{
BLI_assert(md != nullptr);
BLI_assert(index >= 0);
@ -203,7 +198,7 @@ bool ED_object_gpencil_modifier_move_to_index(ReportList *reports,
if (md_index < index) {
/* Move modifier down in list. */
for (; md_index < index; md_index++) {
if (!ED_object_gpencil_modifier_move_down(reports, ob, md)) {
if (!gpencil_modifier_move_down(reports, ob, md)) {
break;
}
}
@ -211,7 +206,7 @@ bool ED_object_gpencil_modifier_move_to_index(ReportList *reports,
else {
/* Move modifier up in list. */
for (; md_index > index; md_index--) {
if (!ED_object_gpencil_modifier_move_up(reports, ob, md)) {
if (!gpencil_modifier_move_up(reports, ob, md)) {
break;
}
}
@ -253,12 +248,12 @@ static bool gpencil_modifier_apply_obdata(
return true;
}
bool ED_object_gpencil_modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Object *ob,
GpencilModifierData *md,
int /*mode*/)
bool gpencil_modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Object *ob,
GpencilModifierData *md,
int /*mode*/)
{
if (ob->type == OB_GPENCIL_LEGACY) {
@ -291,7 +286,7 @@ bool ED_object_gpencil_modifier_apply(Main *bmain,
return true;
}
bool ED_object_gpencil_modifier_copy(ReportList *reports, Object *ob, GpencilModifierData *md)
bool gpencil_modifier_copy(ReportList *reports, Object *ob, GpencilModifierData *md)
{
GpencilModifierData *nmd;
const GpencilModifierTypeInfo *mti = BKE_gpencil_modifier_get_info(
@ -315,7 +310,7 @@ bool ED_object_gpencil_modifier_copy(ReportList *reports, Object *ob, GpencilMod
return true;
}
void ED_object_gpencil_modifier_copy_to_object(Object *ob_dst, GpencilModifierData *md)
void gpencil_modifier_copy_to_object(Object *ob_dst, GpencilModifierData *md)
{
BKE_object_copy_gpencil_modifier(ob_dst, md);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob_dst);
@ -328,10 +323,10 @@ static int gpencil_modifier_add_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
int type = RNA_enum_get(op->ptr, "type");
if (!ED_object_gpencil_modifier_add(op->reports, bmain, scene, ob, nullptr, type)) {
if (!gpencil_modifier_add(op->reports, bmain, scene, ob, nullptr, type)) {
return OPERATOR_CANCELLED;
}
@ -345,7 +340,7 @@ static const EnumPropertyItem *gpencil_modifier_add_itemf(bContext *C,
PropertyRNA * /*prop*/,
bool *r_free)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
EnumPropertyItem *item = nullptr;
const EnumPropertyItem *md_item, *group_item = nullptr;
const GpencilModifierTypeInfo *mti;
@ -422,7 +417,7 @@ static bool gpencil_edit_modifier_poll_generic(bContext *C,
{
Main *bmain = CTX_data_main(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", rna_type);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : context_active_object(C);
GpencilModifierData *mod = static_cast<GpencilModifierData *>(ptr.data); /* May be nullptr. */
if (!ob || !BKE_id_is_editable(bmain, &ob->id)) {
@ -543,7 +538,7 @@ static GpencilModifierData *gpencil_edit_modifier_property_get(wmOperator *op,
static int gpencil_modifier_remove_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
GpencilModifierData *md = gpencil_edit_modifier_property_get(op, ob, 0);
if (md == nullptr) {
@ -554,7 +549,7 @@ static int gpencil_modifier_remove_exec(bContext *C, wmOperator *op)
char name[MAX_NAME];
STRNCPY(name, md->name);
if (!ED_object_gpencil_modifier_remove(op->reports, bmain, ob, md)) {
if (!gpencil_modifier_remove(op->reports, bmain, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -596,10 +591,10 @@ void OBJECT_OT_gpencil_modifier_remove(wmOperatorType *ot)
static int gpencil_modifier_move_up_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
GpencilModifierData *md = gpencil_edit_modifier_property_get(op, ob, 0);
if (!md || !ED_object_gpencil_modifier_move_up(op->reports, ob, md)) {
if (!md || !gpencil_modifier_move_up(op->reports, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -637,10 +632,10 @@ void OBJECT_OT_gpencil_modifier_move_up(wmOperatorType *ot)
static int gpencil_modifier_move_down_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
GpencilModifierData *md = gpencil_edit_modifier_property_get(op, ob, 0);
if (!md || !ED_object_gpencil_modifier_move_down(op->reports, ob, md)) {
if (!md || !gpencil_modifier_move_down(op->reports, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -678,10 +673,10 @@ void OBJECT_OT_gpencil_modifier_move_down(wmOperatorType *ot)
static int gpencil_modifier_move_to_index_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
GpencilModifierData *md = gpencil_edit_modifier_property_get(op, ob, 0);
int index = RNA_int_get(op->ptr, "index");
if (!(md && ED_object_gpencil_modifier_move_to_index(op->reports, ob, md, index))) {
if (!(md && gpencil_modifier_move_to_index(op->reports, ob, md, index))) {
return OPERATOR_CANCELLED;
}
@ -722,7 +717,7 @@ static int gpencil_modifier_apply_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
GpencilModifierData *md = gpencil_edit_modifier_property_get(op, ob, 0);
int apply_as = RNA_enum_get(op->ptr, "apply_as");
const bool do_report = RNA_boolean_get(op->ptr, "report");
@ -738,7 +733,7 @@ static int gpencil_modifier_apply_exec(bContext *C, wmOperator *op)
STRNCPY(name, md->name); /* Store name temporarily since the modifier is removed. */
}
if (!ED_object_gpencil_modifier_apply(bmain, op->reports, depsgraph, ob, md, apply_as)) {
if (!gpencil_modifier_apply(bmain, op->reports, depsgraph, ob, md, apply_as)) {
return OPERATOR_CANCELLED;
}
@ -802,10 +797,10 @@ void OBJECT_OT_gpencil_modifier_apply(wmOperatorType *ot)
static int gpencil_modifier_copy_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
GpencilModifierData *md = gpencil_edit_modifier_property_get(op, ob, 0);
if (!md || !ED_object_gpencil_modifier_copy(op->reports, ob, md)) {
if (!md || !gpencil_modifier_copy(op->reports, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -843,7 +838,7 @@ void OBJECT_OT_gpencil_modifier_copy(wmOperatorType *ot)
static int gpencil_modifier_copy_to_selected_exec(bContext *C, wmOperator *op)
{
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
GpencilModifierData *md = gpencil_edit_modifier_property_get(op, obact, 0);
if (!md) {
@ -895,7 +890,7 @@ static int gpencil_modifier_copy_to_selected_invoke(bContext *C,
static bool gpencil_modifier_copy_to_selected_poll(bContext *C)
{
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
/* This could have a performance impact in the worst case, where there are many objects selected
* and none of them pass the check. But that should be uncommon, and this operator is only
@ -955,7 +950,7 @@ static bool time_segment_name_exists_fn(void *arg, const char *name)
static int time_segment_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
TimeGpencilModifierData *gpmd = (TimeGpencilModifierData *)gpencil_edit_modifier_property_get(
op, ob, eGpencilModifierType_Time);
if (gpmd == nullptr) {
@ -1020,7 +1015,7 @@ void GPENCIL_OT_time_segment_add(wmOperatorType *ot)
static int time_segment_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
TimeGpencilModifierData *gpmd = (TimeGpencilModifierData *)gpencil_edit_modifier_property_get(
op, ob, eGpencilModifierType_Time);
@ -1099,7 +1094,7 @@ enum {
static int time_segment_move_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
TimeGpencilModifierData *gpmd = (TimeGpencilModifierData *)gpencil_edit_modifier_property_get(
op, ob, eGpencilModifierType_Time);
@ -1195,7 +1190,7 @@ static bool dash_segment_name_exists_fn(void *arg, const char *name)
static int dash_segment_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
DashGpencilModifierData *dmd = (DashGpencilModifierData *)gpencil_edit_modifier_property_get(
op, ob, eGpencilModifierType_Dash);
@ -1261,7 +1256,7 @@ void GPENCIL_OT_segment_add(wmOperatorType *ot)
static int dash_segment_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
DashGpencilModifierData *dmd = (DashGpencilModifierData *)gpencil_edit_modifier_property_get(
op, ob, eGpencilModifierType_Dash);
@ -1341,7 +1336,7 @@ enum {
static int dash_segment_move_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
DashGpencilModifierData *dmd = (DashGpencilModifierData *)gpencil_edit_modifier_property_get(
op, ob, eGpencilModifierType_Dash);
@ -1417,3 +1412,5 @@ void GPENCIL_OT_segment_move(wmOperatorType *ot)
ot->prop = RNA_def_enum(ot->srna, "type", segment_move, 0, "Type", "");
}
} // namespace blender::ed::object

View File

@ -54,6 +54,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
static int return_editmesh_indexar(BMEditMesh *em,
int *r_indexar_num,
int **r_indexar,
@ -995,3 +997,5 @@ void OBJECT_OT_hook_select(wmOperatorType *ot)
RNA_def_enum_funcs(prop, hook_mod_itemf);
RNA_def_property_flag(prop, PROP_ENUM_NO_TRANSLATE);
}
} // namespace blender::ed::object

View File

@ -15,6 +15,8 @@ struct StructRNA;
struct wmOperator;
struct wmOperatorType;
namespace blender::ed::object {
/* add hook menu */
enum eObject_Hook_Add_Mode {
OBJECT_ADDHOOK_NEWOB = 1,
@ -345,12 +347,16 @@ void OBJECT_OT_bake(wmOperatorType *ot);
/* object_bake_simulation.cc */
namespace bake_simulation {
void OBJECT_OT_simulation_nodes_cache_calculate_to_frame(wmOperatorType *ot);
void OBJECT_OT_simulation_nodes_cache_bake(wmOperatorType *ot);
void OBJECT_OT_simulation_nodes_cache_delete(wmOperatorType *ot);
void OBJECT_OT_geometry_node_bake_single(wmOperatorType *ot);
void OBJECT_OT_geometry_node_bake_delete_single(wmOperatorType *ot);
} // namespace bake_simulation
/* `object_random.cc` */
void TRANSFORM_OT_vertex_random(wmOperatorType *ot);
@ -369,8 +375,6 @@ void OBJECT_OT_quadriflow_remesh(wmOperatorType *ot);
void OBJECT_OT_data_transfer(wmOperatorType *ot);
void OBJECT_OT_datalayout_transfer(wmOperatorType *ot);
namespace blender::ed::object {
void object_modifier_add_asset_register();
}
} // namespace blender::ed::object

View File

@ -25,6 +25,8 @@
#include "RNA_define.hh"
#include "RNA_prototypes.h"
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name Create New Light Linking Receiver/Blocker Collection Operators
* \{ */
@ -33,7 +35,7 @@ template<LightLinkingType link_type>
static int light_linking_collection_new_exec(bContext *C, wmOperator * /*op*/)
{
Main *bmain = CTX_data_main(C);
Object *object = ED_object_active_context(C);
Object *object = context_active_object(C);
BKE_light_linking_collection_new(bmain, object, link_type);
@ -81,7 +83,7 @@ static int light_linking_select_exec(bContext *C, wmOperator * /*op*/)
{
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
Object *emitter = ED_object_active_context(C);
Object *emitter = context_active_object(C);
BKE_light_linking_select_receivers_of_emitter(scene, view_layer, emitter, link_type);
@ -131,7 +133,7 @@ static int light_linking_link_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *emitter = ED_object_active_context(C);
Object *emitter = context_active_object(C);
const eCollectionLightLinkingState link_state = eCollectionLightLinkingState(
RNA_enum_get(op->ptr, "link_state"));
@ -271,3 +273,5 @@ void OBJECT_OT_light_linking_unlink_from_collection(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -49,6 +49,8 @@
#include "ED_object.hh" /* own include */
#include "object_intern.hh"
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name High Level Mode Operations
* \{ */
@ -100,7 +102,7 @@ static const char *object_mode_op_string(eObjectMode mode)
return nullptr;
}
bool ED_object_mode_compat_test(const Object *ob, eObjectMode mode)
bool mode_compat_test(const Object *ob, eObjectMode mode)
{
if (mode == OB_MODE_OBJECT) {
return true;
@ -154,7 +156,7 @@ bool ED_object_mode_compat_test(const Object *ob, eObjectMode mode)
return false;
}
bool ED_object_mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports)
bool mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports)
{
bool ok;
if (!ELEM(ob->mode, mode, OB_MODE_OBJECT)) {
@ -184,7 +186,7 @@ bool ED_object_mode_compat_set(bContext *C, Object *ob, eObjectMode mode, Report
*
* \{ */
bool ED_object_mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports)
bool mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports)
{
wmWindowManager *wm = CTX_wm_manager(C);
const Scene *scene = CTX_data_scene(C);
@ -204,7 +206,7 @@ bool ED_object_mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportL
return true;
}
if (!ED_object_mode_compat_test(ob, mode)) {
if (!mode_compat_test(ob, mode)) {
return false;
}
@ -228,10 +230,10 @@ bool ED_object_mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportL
return true;
}
bool ED_object_mode_set(bContext *C, eObjectMode mode)
bool mode_set(bContext *C, eObjectMode mode)
{
/* Don't do undo push by default, since this may be called by lower level code. */
return ED_object_mode_set_ex(C, mode, true, nullptr);
return mode_set_ex(C, mode, true, nullptr);
}
/**
@ -247,7 +249,7 @@ static bool ed_object_mode_generic_exit_ex(
if (only_test) {
return true;
}
ED_object_editmode_exit_ex(bmain, scene, ob, EM_FREEDATA);
editmode_exit_ex(bmain, scene, ob, EM_FREEDATA);
}
}
else if (ob->mode & OB_MODE_VERTEX_PAINT) {
@ -358,10 +360,7 @@ static void ed_object_posemode_set_for_weight_paint_ex(bContext *C,
}
}
void ED_object_posemode_set_for_weight_paint(bContext *C,
Main *bmain,
Object *ob,
const bool is_mode_set)
void posemode_set_for_weight_paint(bContext *C, Main *bmain, Object *ob, const bool is_mode_set)
{
if (ob->type == OB_GPENCIL_LEGACY) {
GpencilVirtualModifierData virtual_modifier_data;
@ -388,12 +387,12 @@ void ED_object_posemode_set_for_weight_paint(bContext *C,
}
}
void ED_object_mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob)
void mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob)
{
ed_object_mode_generic_exit_ex(bmain, depsgraph, scene, ob, false);
}
bool ED_object_mode_generic_has_data(Depsgraph *depsgraph, const Object *ob)
bool mode_generic_has_data(Depsgraph *depsgraph, const Object *ob)
{
return ed_object_mode_generic_exit_ex(nullptr, depsgraph, nullptr, (Object *)ob, true);
}
@ -456,7 +455,7 @@ static bool object_transfer_mode_to_base(bContext *C, wmOperator *op, Base *base
}
const eObjectMode last_mode = (eObjectMode)ob_src->mode;
if (!ED_object_mode_compat_test(ob_dst, last_mode)) {
if (!mode_compat_test(ob_dst, last_mode)) {
return false;
}
@ -464,7 +463,7 @@ static bool object_transfer_mode_to_base(bContext *C, wmOperator *op, Base *base
ED_undo_group_begin(C);
if (ED_object_mode_set_ex(C, OB_MODE_OBJECT, true, op->reports)) {
if (mode_set_ex(C, OB_MODE_OBJECT, true, op->reports)) {
Object *ob_dst_orig = DEG_get_original_object(ob_dst);
BKE_view_layer_synced_ensure(scene, view_layer);
Base *base = BKE_view_layer_base_find(view_layer, ob_dst_orig);
@ -475,7 +474,7 @@ static bool object_transfer_mode_to_base(bContext *C, wmOperator *op, Base *base
ED_undo_push(C, "Change Active");
ob_dst_orig = DEG_get_original_object(ob_dst);
ED_object_mode_set_ex(C, last_mode, true, op->reports);
mode_set_ex(C, last_mode, true, op->reports);
if (RNA_boolean_get(op->ptr, "use_flash_on_transfer")) {
object_overlay_mode_transfer_animation_start(C, ob_dst);
@ -546,3 +545,5 @@ void OBJECT_OT_transfer_mode(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -105,8 +105,7 @@
#include "object_intern.hh"
using blender::float3;
using blender::Span;
namespace blender::ed::object {
static CLG_LogRef LOG = {"ed.object"};
@ -159,7 +158,7 @@ static void object_force_modifier_bind_simple_options(Depsgraph *depsgraph,
md_eval->mode = mode;
}
ModifierData *ED_object_modifier_add(
ModifierData *modifier_add(
ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
{
ModifierData *md = nullptr, *new_md = nullptr;
@ -265,11 +264,11 @@ static bool object_has_modifier(const Object *ob, const ModifierData *exclude, M
return false;
}
bool ED_object_iter_other(Main *bmain,
Object *orig_ob,
const bool include_orig,
bool (*callback)(Object *ob, void *callback_data),
void *callback_data)
bool iter_other(Main *bmain,
Object *orig_ob,
const bool include_orig,
bool (*callback)(Object *ob, void *callback_data),
void *callback_data)
{
ID *ob_data_id = static_cast<ID *>(orig_ob->data);
int users = ob_data_id->us;
@ -309,7 +308,7 @@ static bool object_has_modifier_cb(Object *ob, void *data)
return object_has_modifier(ob, nullptr, type);
}
bool ED_object_multires_update_totlevels_cb(Object *ob, void *totlevel_v)
bool multires_update_totlevels(Object *ob, void *totlevel_v)
{
int totlevel = *((char *)totlevel_v);
@ -329,7 +328,7 @@ static bool object_modifier_safe_to_delete(Main *bmain,
ModifierType type)
{
return (!object_has_modifier(ob, exclude, type) &&
!ED_object_iter_other(bmain, ob, false, object_has_modifier_cb, &type));
!iter_other(bmain, ob, false, object_has_modifier_cb, &type));
}
static bool object_modifier_remove(
@ -390,8 +389,7 @@ static bool object_modifier_remove(
return true;
}
bool ED_object_modifier_remove(
ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
{
bool sort_depsgraph = false;
@ -408,7 +406,7 @@ bool ED_object_modifier_remove(
return true;
}
void ED_object_modifier_clear(Main *bmain, Scene *scene, Object *ob)
void modifier_clear(Main *bmain, Scene *scene, Object *ob)
{
ModifierData *md = static_cast<ModifierData *>(ob->modifiers.first);
bool sort_depsgraph = false;
@ -454,10 +452,7 @@ static bool object_modifier_check_move_before(ReportList *reports,
return true;
}
bool ED_object_modifier_move_up(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md)
bool modifier_move_up(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md)
{
if (object_modifier_check_move_before(reports, error_type, md, md->prev)) {
BLI_listbase_swaplinks(&ob->modifiers, md, md->prev);
@ -492,10 +487,7 @@ static bool object_modifier_check_move_after(ReportList *reports,
return true;
}
bool ED_object_modifier_move_down(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md)
bool modifier_move_down(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md)
{
if (object_modifier_check_move_after(reports, error_type, md, md->next)) {
BLI_listbase_swaplinks(&ob->modifiers, md, md->next);
@ -505,12 +497,12 @@ bool ED_object_modifier_move_down(ReportList *reports,
return false;
}
bool ED_object_modifier_move_to_index(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md,
const int index,
bool allow_partial)
bool modifier_move_to_index(ReportList *reports,
eReportType error_type,
Object *ob,
ModifierData *md,
const int index,
bool allow_partial)
{
BLI_assert(md != nullptr);
@ -573,7 +565,7 @@ bool ED_object_modifier_move_to_index(ReportList *reports,
return true;
}
void ED_object_modifier_link(bContext *C, Object *ob_dst, Object *ob_src)
void modifier_link(bContext *C, Object *ob_dst, Object *ob_src)
{
BKE_object_link_modifiers(ob_dst, ob_src);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob_dst);
@ -583,10 +575,7 @@ void ED_object_modifier_link(bContext *C, Object *ob_dst, Object *ob_src)
DEG_relations_tag_update(bmain);
}
void ED_object_modifier_copy_to_object(bContext *C,
Object *ob_dst,
Object *ob_src,
ModifierData *md)
void modifier_copy_to_object(bContext *C, Object *ob_dst, Object *ob_src, ModifierData *md)
{
BKE_object_copy_modifier(CTX_data_main(C), CTX_data_scene(C), ob_dst, ob_src, md);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob_dst);
@ -596,15 +585,14 @@ void ED_object_modifier_copy_to_object(bContext *C,
DEG_relations_tag_update(bmain);
}
bool ED_object_modifier_convert_psys_to_mesh(ReportList * /*reports*/,
Main *bmain,
Depsgraph *depsgraph,
Scene *scene,
ViewLayer *view_layer,
Object *ob,
ModifierData *md)
bool convert_psys_to_mesh(ReportList * /*reports*/,
Main *bmain,
Depsgraph *depsgraph,
Scene *scene,
ViewLayer *view_layer,
Object *ob,
ModifierData *md)
{
using namespace blender;
int cvert = 0;
if (md->type != eModifierType_ParticleSystem) {
@ -671,8 +659,8 @@ bool ED_object_modifier_convert_psys_to_mesh(ReportList * /*reports*/,
&mesh->edge_data, CD_PROP_INT32_2D, CD_CONSTRUCT, mesh->edges_num, ".edge_verts");
CustomData_add_layer(&mesh->fdata_legacy, CD_MFACE, CD_SET_DEFAULT, 0);
blender::MutableSpan<float3> positions = mesh->vert_positions_for_write();
blender::MutableSpan<int2> edges = mesh->edges_for_write();
MutableSpan<float3> positions = mesh->vert_positions_for_write();
MutableSpan<int2> edges = mesh->edges_for_write();
bke::MutableAttributeAccessor attributes = mesh->attributes_for_write();
bke::SpanAttributeWriter<bool> select_vert = attributes.lookup_or_add_for_write_span<bool>(
@ -766,7 +754,6 @@ static Mesh *create_applied_mesh_for_modifier(Depsgraph *depsgraph,
const bool build_shapekey_layers,
ReportList *reports)
{
using namespace blender;
Mesh *mesh = ob_eval->runtime->data_orig ?
reinterpret_cast<Mesh *>(ob_eval->runtime->data_orig) :
reinterpret_cast<Mesh *>(ob_eval->data);
@ -919,7 +906,7 @@ static bool modifier_apply_shape(Main *bmain,
return true;
}
static bool meta_data_matches(const std::optional<blender::bke::AttributeMetaData> meta_data,
static bool meta_data_matches(const std::optional<bke::AttributeMetaData> meta_data,
const AttrDomainMask domains,
const eCustomDataMask types)
{
@ -937,7 +924,6 @@ static bool meta_data_matches(const std::optional<blender::bke::AttributeMetaDat
static void remove_invalid_attribute_strings(Mesh &mesh)
{
using namespace blender;
bke::AttributeAccessor attributes = mesh.attributes();
if (!meta_data_matches(attributes.lookup_meta_data(mesh.active_color_attribute),
ATTR_DOMAIN_MASK_COLOR,
@ -956,7 +942,6 @@ static void remove_invalid_attribute_strings(Mesh &mesh)
static bool modifier_apply_obdata(
ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, ModifierData *md_eval)
{
using namespace blender;
const ModifierTypeInfo *mti = BKE_modifier_get_info((ModifierType)md_eval->type);
if (mti->is_disabled && mti->is_disabled(scene, md_eval, false)) {
@ -1134,14 +1119,14 @@ static bool modifier_apply_obdata(
return true;
}
bool ED_object_modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Scene *scene,
Object *ob,
ModifierData *md,
int mode,
bool keep_modifier)
bool modifier_apply(Main *bmain,
ReportList *reports,
Depsgraph *depsgraph,
Scene *scene,
Object *ob,
ModifierData *md,
int mode,
bool keep_modifier)
{
if (BKE_object_is_in_editmode(ob)) {
BKE_report(reports, RPT_ERROR, "Modifiers cannot be applied in edit mode");
@ -1224,7 +1209,7 @@ bool ED_object_modifier_apply(Main *bmain,
return true;
}
bool ED_object_modifier_copy(
bool modifier_copy(
ReportList * /*reports*/, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
{
if (md->type == eModifierType_ParticleSystem) {
@ -1258,10 +1243,10 @@ static int modifier_add_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
int type = RNA_enum_get(op->ptr, "type");
if (!ED_object_modifier_add(op->reports, bmain, scene, ob, nullptr, type)) {
if (!modifier_add(op->reports, bmain, scene, ob, nullptr, type)) {
return OPERATOR_CANCELLED;
}
@ -1275,7 +1260,7 @@ static const EnumPropertyItem *modifier_add_itemf(bContext *C,
PropertyRNA * /*prop*/,
bool *r_free)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
if (!ob) {
return rna_enum_object_modifier_type_items;
@ -1358,7 +1343,7 @@ bool edit_modifier_poll_generic(bContext *C,
{
Main *bmain = CTX_data_main(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", rna_type);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : context_active_object(C);
ModifierData *mod = static_cast<ModifierData *>(ptr.data); /* May be nullptr. */
if (mod == nullptr && ob != nullptr) {
@ -1505,7 +1490,7 @@ static int modifier_remove_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);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
int mode_orig = ob->mode;
@ -1517,7 +1502,7 @@ static int modifier_remove_exec(bContext *C, wmOperator *op)
char name[MAX_NAME];
STRNCPY(name, md->name);
if (!ED_object_modifier_remove(op->reports, bmain, scene, ob, md)) {
if (!modifier_remove(op->reports, bmain, scene, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -1573,10 +1558,10 @@ void OBJECT_OT_modifier_remove(wmOperatorType *ot)
static int modifier_move_up_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
if (!md || !ED_object_modifier_move_up(op->reports, RPT_WARNING, ob, md)) {
if (!md || !modifier_move_up(op->reports, RPT_WARNING, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -1618,10 +1603,10 @@ void OBJECT_OT_modifier_move_up(wmOperatorType *ot)
static int modifier_move_down_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
if (!md || !ED_object_modifier_move_down(op->reports, RPT_WARNING, ob, md)) {
if (!md || !modifier_move_down(op->reports, RPT_WARNING, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -1663,11 +1648,11 @@ void OBJECT_OT_modifier_move_down(wmOperatorType *ot)
static int modifier_move_to_index_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
int index = RNA_int_get(op->ptr, "index");
if (!(md && ED_object_modifier_move_to_index(op->reports, RPT_WARNING, ob, md, index, true))) {
if (!(md && modifier_move_to_index(op->reports, RPT_WARNING, ob, md, index, true))) {
return OPERATOR_CANCELLED;
}
@ -1715,7 +1700,7 @@ static bool modifier_apply_poll(bContext *C)
Scene *scene = CTX_data_scene(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
Object *ob = (ptr.owner_id != nullptr) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *ob = (ptr.owner_id != nullptr) ? (Object *)ptr.owner_id : context_active_object(C);
ModifierData *md = static_cast<ModifierData *>(ptr.data); /* May be nullptr. */
if (ID_IS_OVERRIDE_LIBRARY(ob) || ((ob->data != nullptr) && ID_IS_OVERRIDE_LIBRARY(ob->data))) {
@ -1739,7 +1724,7 @@ static int modifier_apply_exec_ex(bContext *C, wmOperator *op, int apply_as, boo
Main *bmain = CTX_data_main(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
const bool do_report = RNA_boolean_get(op->ptr, "report");
@ -1757,7 +1742,7 @@ static int modifier_apply_exec_ex(bContext *C, wmOperator *op, int apply_as, boo
const ModifierTypeInfo *mti = BKE_modifier_get_info((ModifierType)md->type);
if (do_single_user && ID_REAL_USERS(ob->data) > 1) {
ED_object_single_obdata_user(bmain, scene, ob);
single_obdata_user_make(bmain, scene, ob);
BKE_main_id_newptr_and_tag_clear(bmain);
WM_event_add_notifier(C, NC_WINDOW, nullptr);
DEG_relations_tag_update(bmain);
@ -1770,9 +1755,7 @@ static int modifier_apply_exec_ex(bContext *C, wmOperator *op, int apply_as, boo
STRNCPY(name, md->name); /* Store name temporarily since the modifier is removed. */
}
if (!ED_object_modifier_apply(
bmain, op->reports, depsgraph, scene, ob, md, apply_as, keep_modifier))
{
if (!modifier_apply(bmain, op->reports, depsgraph, scene, ob, md, apply_as, keep_modifier)) {
return OPERATOR_CANCELLED;
}
@ -1807,7 +1790,7 @@ static int modifier_apply_invoke(bContext *C, wmOperator *op, const wmEvent *eve
int retval;
if (edit_modifier_invoke_properties_with_hover(C, op, event, &retval)) {
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
Object *ob = (ptr.owner_id != nullptr) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *ob = (ptr.owner_id != nullptr) ? (Object *)ptr.owner_id : context_active_object(C);
if ((ob->data != nullptr) && ID_REAL_USERS(ob->data) > 1) {
PropertyRNA *prop = RNA_struct_find_property(op->ptr, "single_user");
@ -1931,12 +1914,10 @@ static int modifier_convert_exec(bContext *C, wmOperator *op)
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
if (!md || !ED_object_modifier_convert_psys_to_mesh(
op->reports, bmain, depsgraph, scene, view_layer, ob, md))
{
if (!md || !convert_psys_to_mesh(op->reports, bmain, depsgraph, scene, view_layer, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -1979,10 +1960,10 @@ static int modifier_copy_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
if (!md || !ED_object_modifier_copy(op->reports, bmain, scene, ob, md)) {
if (!md || !modifier_copy(op->reports, bmain, scene, ob, md)) {
return OPERATOR_CANCELLED;
}
@ -2025,7 +2006,7 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot)
static int modifier_set_active_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
/* If there is no modifier set for this operator, clear the active modifier field. */
@ -2070,7 +2051,7 @@ static int modifier_copy_to_selected_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
ModifierData *md = edit_modifier_property_get(op, obact, 0);
if (!md) {
@ -2142,7 +2123,7 @@ static int modifier_copy_to_selected_invoke(bContext *C, wmOperator *op, const w
static bool modifier_copy_to_selected_poll(bContext *C)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier);
Object *obact = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *obact = (ptr.owner_id) ? (Object *)ptr.owner_id : context_active_object(C);
ModifierData *md = static_cast<ModifierData *>(ptr.data);
/* This just mirrors the check in #BKE_object_copy_modifier,
@ -2219,7 +2200,7 @@ static bool multires_poll(bContext *C)
static int multires_higher_levels_delete_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(
op, ob, eModifierType_Multires);
@ -2229,8 +2210,7 @@ static int multires_higher_levels_delete_exec(bContext *C, wmOperator *op)
multiresModifier_del_levels(mmd, scene, ob, 1);
ED_object_iter_other(
CTX_data_main(C), ob, true, ED_object_multires_update_totlevels_cb, &mmd->totlvl);
iter_other(CTX_data_main(C), ob, true, multires_update_totlevels, &mmd->totlvl);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@ -2289,7 +2269,7 @@ static EnumPropertyItem prop_multires_subdivide_mode_type[] = {
static int multires_subdivide_exec(bContext *C, wmOperator *op)
{
Object *object = ED_object_active_context(C);
Object *object = context_active_object(C);
MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(
op, object, eModifierType_Multires);
@ -2301,8 +2281,7 @@ static int multires_subdivide_exec(bContext *C, wmOperator *op)
op->ptr, "mode");
multiresModifier_subdivide(object, mmd, subdivide_mode);
ED_object_iter_other(
CTX_data_main(C), object, true, ED_object_multires_update_totlevels_cb, &mmd->totlvl);
iter_other(CTX_data_main(C), object, true, multires_update_totlevels, &mmd->totlvl);
DEG_id_tag_update(&object->id, ID_RECALC_GEOMETRY);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, object);
@ -2354,7 +2333,7 @@ void OBJECT_OT_multires_subdivide(wmOperatorType *ot)
static int multires_reshape_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Object *ob = ED_object_active_context(C), *secondob = nullptr;
Object *ob = context_active_object(C), *secondob = nullptr;
MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(
op, ob, eModifierType_Multires);
@ -2423,7 +2402,7 @@ void OBJECT_OT_multires_reshape(wmOperatorType *ot)
static int multires_external_save_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
Mesh *mesh = (ob) ? static_cast<Mesh *>(ob->data) : static_cast<Mesh *>(op->customdata);
char filepath[FILE_MAX];
const bool relative = RNA_boolean_get(op->ptr, "relative_path");
@ -2451,7 +2430,7 @@ static int multires_external_save_exec(bContext *C, wmOperator *op)
static int multires_external_save_invoke(bContext *C, wmOperator *op, const wmEvent * /*event*/)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
char filepath[FILE_MAX];
@ -2516,7 +2495,7 @@ void OBJECT_OT_multires_external_save(wmOperatorType *ot)
static int multires_external_pack_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
if (!CustomData_external_test(&mesh->corner_data, CD_MDISPS)) {
@ -2551,7 +2530,7 @@ void OBJECT_OT_multires_external_pack(wmOperatorType *ot)
static int multires_base_apply_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
Object *object = ED_object_active_context(C);
Object *object = context_active_object(C);
MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(
op, object, eModifierType_Multires);
@ -2559,11 +2538,11 @@ static int multires_base_apply_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
blender::ed::sculpt_paint::undo::push_multires_mesh_begin(C, op->type->name);
ed::sculpt_paint::undo::push_multires_mesh_begin(C, op->type->name);
multiresModifier_base_apply(depsgraph, object, mmd);
blender::ed::sculpt_paint::undo::push_multires_mesh_end(C, op->type->name);
ed::sculpt_paint::undo::push_multires_mesh_end(C, op->type->name);
DEG_id_tag_update(&object->id, ID_RECALC_GEOMETRY);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, object);
@ -2603,7 +2582,7 @@ void OBJECT_OT_multires_base_apply(wmOperatorType *ot)
static int multires_unsubdivide_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
Object *object = ED_object_active_context(C);
Object *object = context_active_object(C);
MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(
op, object, eModifierType_Multires);
@ -2655,7 +2634,7 @@ void OBJECT_OT_multires_unsubdivide(wmOperatorType *ot)
static int multires_rebuild_subdiv_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
Object *object = ED_object_active_context(C);
Object *object = context_active_object(C);
MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(
op, object, eModifierType_Multires);
@ -2902,16 +2881,16 @@ void OBJECT_OT_skin_radii_equalize(wmOperatorType *ot)
static void skin_armature_bone_create(Object *skin_ob,
const Span<float3> positions,
const blender::int2 *edges,
const int2 *edges,
bArmature *arm,
BLI_bitmap *edges_visited,
const blender::GroupedSpan<int> emap,
const GroupedSpan<int> emap,
EditBone *parent_bone,
int parent_v)
{
for (int i = 0; i < emap[parent_v].size(); i++) {
int endx = emap[parent_v][i];
const blender::int2 &edge = edges[endx];
const int2 &edge = edges[endx];
/* ignore edge if already visited */
if (BLI_BITMAP_TEST(edges_visited, endx)) {
@ -2919,7 +2898,7 @@ static void skin_armature_bone_create(Object *skin_ob,
}
BLI_BITMAP_ENABLE(edges_visited, endx);
int v = blender::bke::mesh::edge_other_vert(edge, parent_v);
int v = bke::mesh::edge_other_vert(edge, parent_v);
EditBone *bone = ED_armature_ebone_add(arm, "Bone");
@ -2936,8 +2915,8 @@ static void skin_armature_bone_create(Object *skin_ob,
/* add bDeformGroup */
bDeformGroup *dg = BKE_object_defgroup_add_name(skin_ob, bone->name);
if (dg != nullptr) {
ED_vgroup_vert_add(skin_ob, dg, parent_v, 1, WEIGHT_REPLACE);
ED_vgroup_vert_add(skin_ob, dg, v, 1, WEIGHT_REPLACE);
blender::ed::object::vgroup_vert_add(skin_ob, dg, parent_v, 1, WEIGHT_REPLACE);
blender::ed::object::vgroup_vert_add(skin_ob, dg, v, 1, WEIGHT_REPLACE);
}
skin_armature_bone_create(skin_ob, positions, edges, arm, edges_visited, emap, bone, v);
@ -2948,7 +2927,7 @@ static Object *modifier_skin_armature_create(Depsgraph *depsgraph, Main *bmain,
{
Mesh *mesh = static_cast<Mesh *>(skin_ob->data);
const Span<float3> me_positions = mesh->vert_positions();
const Span<blender::int2> me_edges = mesh->edges();
const Span<int2> me_edges = mesh->edges();
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
Object *ob_eval = DEG_get_evaluated_object(depsgraph, skin_ob);
@ -2973,9 +2952,9 @@ static Object *modifier_skin_armature_create(Depsgraph *depsgraph, Main *bmain,
MVertSkin *mvert_skin = static_cast<MVertSkin *>(
CustomData_get_layer_for_write(&mesh->vert_data, CD_MVERT_SKIN, mesh->verts_num));
blender::Array<int> vert_to_edge_offsets;
blender::Array<int> vert_to_edge_indices;
const blender::GroupedSpan<int> emap = blender::bke::mesh::build_vert_to_edge_map(
Array<int> vert_to_edge_offsets;
Array<int> vert_to_edge_indices;
const GroupedSpan<int> emap = bke::mesh::build_vert_to_edge_map(
me_edges, mesh->verts_num, vert_to_edge_offsets, vert_to_edge_indices);
BLI_bitmap *edges_visited = BLI_BITMAP_NEW(mesh->edges_num, "edge_visited");
@ -3086,7 +3065,7 @@ static int correctivesmooth_bind_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
CorrectiveSmoothModifierData *csmd = (CorrectiveSmoothModifierData *)edit_modifier_property_get(
op, ob, eModifierType_CorrectiveSmooth);
@ -3164,7 +3143,7 @@ static bool meshdeform_poll(bContext *C)
static int meshdeform_bind_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
MeshDeformModifierData *mmd = (MeshDeformModifierData *)edit_modifier_property_get(
op, ob, eModifierType_MeshDeform);
@ -3238,7 +3217,7 @@ static bool explode_poll(bContext *C)
static int explode_refresh_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ExplodeModifierData *emd = (ExplodeModifierData *)edit_modifier_property_get(
op, ob, eModifierType_Explode);
@ -3365,7 +3344,7 @@ static void oceanbake_endjob(void *customdata)
static int ocean_bake_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
OceanModifierData *omd = (OceanModifierData *)edit_modifier_property_get(
op, ob, eModifierType_Ocean);
Scene *scene = CTX_data_scene(C);
@ -3493,7 +3472,7 @@ static bool laplaciandeform_poll(bContext *C)
static int laplaciandeform_bind_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
LaplacianDeformModifierData *lmd = (LaplacianDeformModifierData *)edit_modifier_property_get(
op, ob, eModifierType_LaplacianDeform);
@ -3570,7 +3549,7 @@ static bool surfacedeform_bind_poll(bContext *C)
static int surfacedeform_bind_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)edit_modifier_property_get(
op, ob, eModifierType_SurfaceDeform);
@ -3636,7 +3615,7 @@ void OBJECT_OT_surfacedeform_bind(wmOperatorType *ot)
static int geometry_nodes_input_attribute_toggle_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
char modifier_name[MAX_NAME];
RNA_string_get(op->ptr, "modifier_name", modifier_name);
@ -3694,7 +3673,7 @@ void OBJECT_OT_geometry_nodes_input_attribute_toggle(wmOperatorType *ot)
static int geometry_node_tree_copy_assign_exec(bContext *C, wmOperator * /*op*/)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ModifierData *md = BKE_object_active_modifier(ob);
if (!(md && md->type == eModifierType_Nodes)) {
return OPERATOR_CANCELLED;
@ -3742,8 +3721,6 @@ void OBJECT_OT_geometry_node_tree_copy_assign(wmOperatorType *ot)
/** \name Dash Modifier
* \{ */
namespace blender::ed::greasepencil {
static bool dash_modifier_segment_poll(bContext *C)
{
return edit_modifier_poll_generic(C, &RNA_GreasePencilDashModifierData, 0, false, false);
@ -3751,7 +3728,7 @@ static bool dash_modifier_segment_poll(bContext *C)
static int dash_modifier_segment_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
auto *dmd = reinterpret_cast<GreasePencilDashModifierData *>(
edit_modifier_property_get(op, ob, eModifierType_GreasePencilDash));
@ -3780,7 +3757,7 @@ static int dash_modifier_segment_add_exec(bContext *C, wmOperator *op)
DNA_struct_default_get(GreasePencilDashModifierSegment),
sizeof(GreasePencilDashModifierSegment));
BLI_uniquename_cb(
[&](const blender::StringRef name) {
[&](const StringRef name) {
for (const GreasePencilDashModifierSegment &ds : dmd->segments()) {
if (STREQ(ds.name, name.data())) {
return true;
@ -3810,8 +3787,6 @@ static int dash_modifier_segment_add_invoke(bContext *C, wmOperator *op, const w
return OPERATOR_CANCELLED;
}
} // namespace blender::ed::greasepencil
void OBJECT_OT_grease_pencil_dash_modifier_segment_add(wmOperatorType *ot)
{
/* identifiers */
@ -3820,22 +3795,20 @@ void OBJECT_OT_grease_pencil_dash_modifier_segment_add(wmOperatorType *ot)
ot->idname = "OBJECT_OT_grease_pencil_dash_modifier_segment_add";
/* api callbacks */
ot->poll = blender::ed::greasepencil::dash_modifier_segment_poll;
ot->invoke = blender::ed::greasepencil::dash_modifier_segment_add_invoke;
ot->exec = blender::ed::greasepencil::dash_modifier_segment_add_exec;
ot->poll = dash_modifier_segment_poll;
ot->invoke = dash_modifier_segment_add_invoke;
ot->exec = dash_modifier_segment_add_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
edit_modifier_properties(ot);
}
namespace blender::ed::greasepencil {
static void dash_modifier_segment_free(GreasePencilDashModifierSegment * /*ds*/) {}
static int dash_modifier_segment_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
auto *dmd = reinterpret_cast<GreasePencilDashModifierData *>(
edit_modifier_property_get(op, ob, eModifierType_GreasePencilDash));
@ -3847,11 +3820,11 @@ static int dash_modifier_segment_remove_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
blender::dna::array::remove_index(&dmd->segments_array,
&dmd->segments_num,
&dmd->segment_active_index,
dmd->segment_active_index,
dash_modifier_segment_free);
dna::array::remove_index(&dmd->segments_array,
&dmd->segments_num,
&dmd->segment_active_index,
dmd->segment_active_index,
dash_modifier_segment_free);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY | ID_RECALC_SYNC_TO_EVAL);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@ -3869,8 +3842,6 @@ static int dash_modifier_segment_remove_invoke(bContext *C,
return OPERATOR_CANCELLED;
}
} // namespace blender::ed::greasepencil
void OBJECT_OT_grease_pencil_dash_modifier_segment_remove(wmOperatorType *ot)
{
/* identifiers */
@ -3879,9 +3850,9 @@ void OBJECT_OT_grease_pencil_dash_modifier_segment_remove(wmOperatorType *ot)
ot->idname = "OBJECT_OT_grease_pencil_dash_modifier_segment_remove";
/* api callbacks */
ot->poll = blender::ed::greasepencil::dash_modifier_segment_poll;
ot->invoke = blender::ed::greasepencil::dash_modifier_segment_remove_invoke;
ot->exec = blender::ed::greasepencil::dash_modifier_segment_remove_exec;
ot->poll = dash_modifier_segment_poll;
ot->invoke = dash_modifier_segment_remove_invoke;
ot->exec = dash_modifier_segment_remove_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
@ -3891,8 +3862,6 @@ void OBJECT_OT_grease_pencil_dash_modifier_segment_remove(wmOperatorType *ot)
ot->srna, "index", 0, 0, INT_MAX, "Index", "Index of the segment to remove", 0, INT_MAX);
}
namespace blender::ed::greasepencil {
enum class DashSegmentMoveDirection {
Up = -1,
Down = 1,
@ -3900,7 +3869,7 @@ enum class DashSegmentMoveDirection {
static int dash_modifier_segment_move_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
auto *dmd = reinterpret_cast<GreasePencilDashModifierData *>(
edit_modifier_property_get(op, ob, eModifierType_GreasePencilDash));
@ -3955,12 +3924,8 @@ static int dash_modifier_segment_move_invoke(bContext *C,
return OPERATOR_CANCELLED;
}
} // namespace blender::ed::greasepencil
void OBJECT_OT_grease_pencil_dash_modifier_segment_move(wmOperatorType *ot)
{
using blender::ed::greasepencil::DashSegmentMoveDirection;
static const EnumPropertyItem segment_move[] = {
{int(DashSegmentMoveDirection::Up), "UP", 0, "Up", ""},
{int(DashSegmentMoveDirection::Down), "DOWN", 0, "Down", ""},
@ -3973,9 +3938,9 @@ void OBJECT_OT_grease_pencil_dash_modifier_segment_move(wmOperatorType *ot)
ot->idname = "OBJECT_OT_grease_pencil_dash_modifier_segment_move";
/* api callbacks */
ot->poll = blender::ed::greasepencil::dash_modifier_segment_poll;
ot->invoke = blender::ed::greasepencil::dash_modifier_segment_move_invoke;
ot->exec = blender::ed::greasepencil::dash_modifier_segment_move_exec;
ot->poll = dash_modifier_segment_poll;
ot->invoke = dash_modifier_segment_move_invoke;
ot->exec = dash_modifier_segment_move_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
@ -3990,8 +3955,6 @@ void OBJECT_OT_grease_pencil_dash_modifier_segment_move(wmOperatorType *ot)
/** \name Time Modifier
* \{ */
namespace blender::ed::greasepencil {
static bool time_modifier_segment_poll(bContext *C)
{
return edit_modifier_poll_generic(C, &RNA_GreasePencilTimeModifier, 0, false, false);
@ -3999,7 +3962,7 @@ static bool time_modifier_segment_poll(bContext *C)
static int time_modifier_segment_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
auto *tmd = reinterpret_cast<GreasePencilTimeModifierData *>(
edit_modifier_property_get(op, ob, eModifierType_GreasePencilTime));
@ -4028,7 +3991,7 @@ static int time_modifier_segment_add_exec(bContext *C, wmOperator *op)
DNA_struct_default_get(GreasePencilTimeModifierSegment),
sizeof(GreasePencilTimeModifierSegment));
BLI_uniquename_cb(
[&](const blender::StringRef name) {
[&](const StringRef name) {
for (const GreasePencilTimeModifierSegment &segment : tmd->segments()) {
if (STREQ(segment.name, name.data())) {
return true;
@ -4058,8 +4021,6 @@ static int time_modifier_segment_add_invoke(bContext *C, wmOperator *op, const w
return OPERATOR_CANCELLED;
}
} // namespace blender::ed::greasepencil
void OBJECT_OT_grease_pencil_time_modifier_segment_add(wmOperatorType *ot)
{
/* identifiers */
@ -4068,22 +4029,20 @@ void OBJECT_OT_grease_pencil_time_modifier_segment_add(wmOperatorType *ot)
ot->idname = "OBJECT_OT_grease_pencil_time_modifier_segment_add";
/* api callbacks */
ot->poll = blender::ed::greasepencil::time_modifier_segment_poll;
ot->invoke = blender::ed::greasepencil::time_modifier_segment_add_invoke;
ot->exec = blender::ed::greasepencil::time_modifier_segment_add_exec;
ot->poll = time_modifier_segment_poll;
ot->invoke = time_modifier_segment_add_invoke;
ot->exec = time_modifier_segment_add_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
edit_modifier_properties(ot);
}
namespace blender::ed::greasepencil {
static void time_modifier_segment_free(GreasePencilTimeModifierSegment * /*ds*/) {}
static int time_modifier_segment_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
auto *tmd = reinterpret_cast<GreasePencilTimeModifierData *>(
edit_modifier_property_get(op, ob, eModifierType_GreasePencilTime));
@ -4095,11 +4054,11 @@ static int time_modifier_segment_remove_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
blender::dna::array::remove_index(&tmd->segments_array,
&tmd->segments_num,
&tmd->segment_active_index,
tmd->segment_active_index,
time_modifier_segment_free);
dna::array::remove_index(&tmd->segments_array,
&tmd->segments_num,
&tmd->segment_active_index,
tmd->segment_active_index,
time_modifier_segment_free);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY | ID_RECALC_SYNC_TO_EVAL);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@ -4117,8 +4076,6 @@ static int time_modifier_segment_remove_invoke(bContext *C,
return OPERATOR_CANCELLED;
}
} // namespace blender::ed::greasepencil
void OBJECT_OT_grease_pencil_time_modifier_segment_remove(wmOperatorType *ot)
{
/* identifiers */
@ -4127,9 +4084,9 @@ void OBJECT_OT_grease_pencil_time_modifier_segment_remove(wmOperatorType *ot)
ot->idname = "OBJECT_OT_grease_pencil_time_modifier_segment_remove";
/* api callbacks */
ot->poll = blender::ed::greasepencil::time_modifier_segment_poll;
ot->invoke = blender::ed::greasepencil::time_modifier_segment_remove_invoke;
ot->exec = blender::ed::greasepencil::time_modifier_segment_remove_exec;
ot->poll = time_modifier_segment_poll;
ot->invoke = time_modifier_segment_remove_invoke;
ot->exec = time_modifier_segment_remove_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
@ -4139,8 +4096,6 @@ void OBJECT_OT_grease_pencil_time_modifier_segment_remove(wmOperatorType *ot)
ot->srna, "index", 0, 0, INT_MAX, "Index", "Index of the segment to remove", 0, INT_MAX);
}
namespace blender::ed::greasepencil {
enum class TimeSegmentMoveDirection {
Up = -1,
Down = 1,
@ -4148,7 +4103,7 @@ enum class TimeSegmentMoveDirection {
static int time_modifier_segment_move_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
auto *tmd = reinterpret_cast<GreasePencilTimeModifierData *>(
edit_modifier_property_get(op, ob, eModifierType_GreasePencilTime));
@ -4203,12 +4158,8 @@ static int time_modifier_segment_move_invoke(bContext *C,
return OPERATOR_CANCELLED;
}
} // namespace blender::ed::greasepencil
void OBJECT_OT_grease_pencil_time_modifier_segment_move(wmOperatorType *ot)
{
using blender::ed::greasepencil::TimeSegmentMoveDirection;
static const EnumPropertyItem segment_move[] = {
{int(TimeSegmentMoveDirection::Up), "UP", 0, "Up", ""},
{int(TimeSegmentMoveDirection::Down), "DOWN", 0, "Down", ""},
@ -4221,9 +4172,9 @@ void OBJECT_OT_grease_pencil_time_modifier_segment_move(wmOperatorType *ot)
ot->idname = "OBJECT_OT_grease_pencil_time_modifier_segment_move";
/* api callbacks */
ot->poll = blender::ed::greasepencil::time_modifier_segment_poll;
ot->invoke = blender::ed::greasepencil::time_modifier_segment_move_invoke;
ot->exec = blender::ed::greasepencil::time_modifier_segment_move_exec;
ot->poll = time_modifier_segment_poll;
ot->invoke = time_modifier_segment_move_invoke;
ot->exec = time_modifier_segment_move_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
@ -4233,3 +4184,5 @@ void OBJECT_OT_grease_pencil_time_modifier_segment_move(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -27,9 +27,10 @@
/* ************************** registration **********************************/
void ED_operatortypes_object()
namespace blender::ed::object {
void operatortypes_object()
{
using namespace blender::ed::object;
WM_operatortype_append(OBJECT_OT_location_clear);
WM_operatortype_append(OBJECT_OT_rotation_clear);
WM_operatortype_append(OBJECT_OT_scale_clear);
@ -264,11 +265,11 @@ void ED_operatortypes_object()
WM_operatortype_append(OBJECT_OT_bake_image);
WM_operatortype_append(OBJECT_OT_bake);
WM_operatortype_append(OBJECT_OT_simulation_nodes_cache_calculate_to_frame);
WM_operatortype_append(OBJECT_OT_simulation_nodes_cache_bake);
WM_operatortype_append(OBJECT_OT_simulation_nodes_cache_delete);
WM_operatortype_append(OBJECT_OT_geometry_node_bake_single);
WM_operatortype_append(OBJECT_OT_geometry_node_bake_delete_single);
WM_operatortype_append(bake_simulation::OBJECT_OT_simulation_nodes_cache_calculate_to_frame);
WM_operatortype_append(bake_simulation::OBJECT_OT_simulation_nodes_cache_bake);
WM_operatortype_append(bake_simulation::OBJECT_OT_simulation_nodes_cache_delete);
WM_operatortype_append(bake_simulation::OBJECT_OT_geometry_node_bake_single);
WM_operatortype_append(bake_simulation::OBJECT_OT_geometry_node_bake_delete_single);
WM_operatortype_append(OBJECT_OT_drop_named_material);
WM_operatortype_append(OBJECT_OT_drop_geometry_nodes);
WM_operatortype_append(OBJECT_OT_unlink_data);
@ -304,7 +305,7 @@ void ED_operatortypes_object()
object_modifier_add_asset_register();
}
void ED_operatormacros_object()
void operatormacros_object()
{
wmOperatorType *ot;
wmOperatorTypeMacro *otmacro;
@ -338,7 +339,7 @@ static bool object_mode_poll(bContext *C)
return (!ob || ob->mode == OB_MODE_OBJECT);
}
void ED_keymap_object(wmKeyConfig *keyconf)
void keymap_object(wmKeyConfig *keyconf)
{
wmKeyMap *keymap;
@ -350,3 +351,5 @@ void ED_keymap_object(wmKeyConfig *keyconf)
keymap = WM_keymap_ensure(keyconf, "Object Mode", SPACE_EMPTY, RGN_TYPE_WINDOW);
keymap->poll = object_mode_poll;
}
} // namespace blender::ed::object

View File

@ -28,7 +28,7 @@
#include "object_intern.hh"
using blender::Vector;
namespace blender::ed::object {
/**
* Generic randomize vertices function
@ -106,7 +106,7 @@ static int object_rand_verts_exec(bContext *C, wmOperator *op)
mode |= TX_VERT_USE_NORMAL;
}
if (ED_object_edit_report_if_shape_key_is_locked(ob_iter, op->reports)) {
if (shape_key_report_if_locked(ob_iter, op->reports)) {
continue;
}
@ -175,3 +175,5 @@ void TRANSFORM_OT_vertex_random(wmOperatorType *ot)
/* Set generic modal callbacks. */
WM_operator_type_modal_from_exec_for_object_edit_coords(ot);
}
} // namespace blender::ed::object

View File

@ -95,6 +95,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* ------------------------------------------------------------------- */
/** \name Make Vertex Parent Operator
* \{ */
@ -343,7 +345,7 @@ EnumPropertyItem prop_clear_parent_types[] = {
{0, nullptr, 0, nullptr, nullptr},
};
/* Helper for ED_object_parent_clear() - Remove deform-modifiers associated with parent */
/* Helper for parent_clear() - Remove deform-modifiers associated with parent */
static void object_remove_parent_deform_modifiers(Object *ob, const Object *par)
{
if (ELEM(par->type, OB_ARMATURE, OB_LATTICE, OB_CURVES_LEGACY)) {
@ -384,7 +386,7 @@ static void object_remove_parent_deform_modifiers(Object *ob, const Object *par)
}
}
void ED_object_parent_clear(Object *ob, const int type)
void parent_clear(Object *ob, const int type)
{
if (ob->parent == nullptr) {
return;
@ -433,7 +435,7 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
const int type = RNA_enum_get(op->ptr, "type");
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) {
ED_object_parent_clear(ob, type);
parent_clear(ob, type);
}
CTX_DATA_END;
@ -466,7 +468,7 @@ void OBJECT_OT_parent_clear(wmOperatorType *ot)
/** \name Make Parent Operator
* \{ */
void ED_object_parent(Object *ob, Object *par, const int type, const char *substr)
void parent_set(Object *ob, Object *par, const int type, const char *substr)
{
/* Always clear parentinv matrix for sake of consistency, see #41950. */
unit_m4(ob->parentinv);
@ -506,15 +508,15 @@ EnumPropertyItem prop_make_parent_types[] = {
{0, nullptr, 0, nullptr, nullptr},
};
bool ED_object_parent_set(ReportList *reports,
const bContext *C,
Scene *scene,
Object *const ob,
Object *const par,
int partype,
const bool xmirror,
const bool keep_transform,
const int vert_par[3])
bool parent_set(ReportList *reports,
const bContext *C,
Scene *scene,
Object *const ob,
Object *const par,
int partype,
const bool xmirror,
const bool keep_transform,
const int vert_par[3])
{
Main *bmain = CTX_data_main(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
@ -557,9 +559,8 @@ bool ED_object_parent_set(ReportList *reports,
/* if follow, add F-Curve for ctime (i.e. "eval_time") so that path-follow works */
if (partype == PAR_FOLLOW) {
/* get or create F-Curve */
bAction *act = blender::animrig::id_action_ensure(bmain, &cu->id);
FCurve *fcu = blender::animrig::action_fcurve_ensure(
bmain, act, nullptr, nullptr, "eval_time", 0);
bAction *act = animrig::id_action_ensure(bmain, &cu->id);
FCurve *fcu = animrig::action_fcurve_ensure(bmain, act, nullptr, nullptr, "eval_time", 0);
/* setup dummy 'generator' modifier here to get 1-1 correspondence still working */
if (!fcu->bezt && !fcu->fpt && !fcu->modifiers.first) {
@ -640,7 +641,7 @@ bool ED_object_parent_set(ReportList *reports,
switch (partype) {
case PAR_CURVE: /* curve deform */
if (BKE_modifiers_is_deformed_by_curve(ob) != par) {
md = ED_object_modifier_add(reports, bmain, scene, ob, nullptr, eModifierType_Curve);
md = modifier_add(reports, bmain, scene, ob, nullptr, eModifierType_Curve);
if (md) {
((CurveModifierData *)md)->object = par;
}
@ -653,8 +654,7 @@ bool ED_object_parent_set(ReportList *reports,
break;
case PAR_LATTICE: /* lattice deform */
if (BKE_modifiers_is_deformed_by_lattice(ob) != par) {
md = ED_object_modifier_add(
reports, bmain, scene, ob, nullptr, eModifierType_Lattice);
md = modifier_add(reports, bmain, scene, ob, nullptr, eModifierType_Lattice);
if (md) {
((LatticeModifierData *)md)->object = par;
}
@ -662,8 +662,7 @@ bool ED_object_parent_set(ReportList *reports,
break;
default: /* armature deform */
if (BKE_modifiers_is_deformed_by_armature(ob) != par) {
md = ED_object_modifier_add(
reports, bmain, scene, ob, nullptr, eModifierType_Armature);
md = modifier_add(reports, bmain, scene, ob, nullptr, eModifierType_Armature);
if (md) {
((ArmatureModifierData *)md)->object = par;
}
@ -814,20 +813,20 @@ static bool parent_set_nonvertex_parent(bContext *C, ParentingContext *parenting
{
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) {
if (ob == parenting_context->par) {
/* ED_object_parent_set() will fail (and thus return false), but this case shouldn't break
* this loop. It's expected that the active object is also selected. */
/* parent_set() will fail (and thus return false), but this case
* shouldn't break this loop. It's expected that the active object is also selected. */
continue;
}
if (!ED_object_parent_set(parenting_context->reports,
C,
parenting_context->scene,
ob,
parenting_context->par,
parenting_context->partype,
parenting_context->xmirror,
parenting_context->keep_transform,
nullptr))
if (!parent_set(parenting_context->reports,
C,
parenting_context->scene,
ob,
parenting_context->par,
parenting_context->partype,
parenting_context->xmirror,
parenting_context->keep_transform,
nullptr))
{
return false;
}
@ -845,21 +844,21 @@ static bool parent_set_vertex_parent_with_kdtree(bContext *C,
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) {
if (ob == parenting_context->par) {
/* ED_object_parent_set() will fail (and thus return false), but this case shouldn't break
* this loop. It's expected that the active object is also selected. */
/* parent_set() will fail (and thus return false), but this case
* shouldn't break this loop. It's expected that the active object is also selected. */
continue;
}
parent_set_vert_find(tree, ob, vert_par, parenting_context->is_vertex_tri);
if (!ED_object_parent_set(parenting_context->reports,
C,
parenting_context->scene,
ob,
parenting_context->par,
parenting_context->partype,
parenting_context->xmirror,
parenting_context->keep_transform,
vert_par))
if (!parent_set(parenting_context->reports,
C,
parenting_context->scene,
ob,
parenting_context->par,
parenting_context->partype,
parenting_context->xmirror,
parenting_context->keep_transform,
vert_par))
{
return false;
}
@ -893,7 +892,7 @@ static int parent_set_exec(bContext *C, wmOperator *op)
ParentingContext parenting_context{};
parenting_context.reports = op->reports;
parenting_context.scene = CTX_data_scene(C);
parenting_context.par = ED_object_active_context(C);
parenting_context.par = context_active_object(C);
parenting_context.partype = partype;
parenting_context.is_vertex_tri = partype == PAR_VERTEX_TRI;
parenting_context.xmirror = RNA_boolean_get(op->ptr, "xmirror");
@ -920,7 +919,7 @@ static int parent_set_exec(bContext *C, wmOperator *op)
static int parent_set_invoke_menu(bContext *C, wmOperatorType *ot)
{
Object *parent = ED_object_active_context(C);
Object *parent = context_active_object(C);
uiPopupMenu *pup = UI_popup_menu_begin(C, IFACE_("Set Parent To"), ICON_NONE);
uiLayout *layout = UI_popup_menu_layout(pup);
@ -1081,7 +1080,7 @@ void OBJECT_OT_parent_set(wmOperatorType *ot)
static int parent_noinv_set_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *par = ED_object_active_context(C);
Object *par = context_active_object(C);
const bool keep_transform = RNA_boolean_get(op->ptr, "keep_transform");
@ -1261,7 +1260,7 @@ static const EnumPropertyItem prop_make_track_types[] = {
static int track_set_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
const int type = RNA_enum_get(op->ptr, "type");
@ -1503,7 +1502,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
bool is_cycle = false;
bool is_lib = false;
ob_src = ED_object_active_context(C);
ob_src = context_active_object(C);
/* avoid searching all collections in source object each time */
if (type == MAKE_LINKS_GROUP) {
@ -1620,7 +1619,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
break;
}
case MAKE_LINKS_SHADERFX:
ED_object_shaderfx_link(ob_dst, ob_src);
shaderfx_link(ob_dst, ob_src);
DEG_id_tag_update(&ob_dst->id,
ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION);
break;
@ -1834,7 +1833,7 @@ static void single_object_users(
BKE_main_collection_sync_remap(bmain);
}
void ED_object_single_user(Main *bmain, Scene *scene, Object *ob)
void object_single_user_make(Main *bmain, Scene *scene, Object *ob)
{
FOREACH_SCENE_OBJECT_BEGIN (scene, ob_iter) {
ob_iter->flag &= ~OB_DONE;
@ -2005,7 +2004,7 @@ static void single_obdata_users(
}
}
void ED_object_single_obdata_user(Main *bmain, Scene *scene, Object *ob)
void single_obdata_user_make(Main *bmain, Scene *scene, Object *ob)
{
FOREACH_SCENE_OBJECT_BEGIN (scene, ob_iter) {
ob_iter->flag &= ~OB_DONE;
@ -2172,7 +2171,7 @@ static bool make_local_all__instance_indirect_unused(Main *bmain,
BKE_collection_object_add(bmain, collection, ob);
BKE_view_layer_synced_ensure(scene, view_layer);
base = BKE_view_layer_base_find(view_layer, ob);
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION);
changed = true;
@ -2512,7 +2511,7 @@ static int make_override_library_exec(bContext *C, wmOperator *op)
if (is_override_instancing_object) {
/* Remove the instance empty from this scene, the items now have an overridden collection
* instead. */
ED_object_base_free_and_unlink(bmain, scene, obact);
base_free_and_unlink(bmain, scene, obact);
}
else {
/* Remove the found root ID from the view layer. */
@ -2556,7 +2555,7 @@ static int make_override_library_invoke(bContext *C, wmOperator *op, const wmEve
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obact = ED_object_active_context(C);
Object *obact = context_active_object(C);
/* Sanity checks. */
if (!scene || ID_IS_LINKED(scene) || !obact) {
@ -2578,7 +2577,7 @@ static int make_override_library_invoke(bContext *C, wmOperator *op, const wmEve
return OPERATOR_CANCELLED;
}
blender::VectorSet<Collection *> potential_root_collections;
VectorSet<Collection *> potential_root_collections;
LISTBASE_FOREACH (Collection *, collection, &bmain->collections) {
/* Only check for linked collections from the same library, in the current view-layer. */
if (!ID_IS_LINKED(&collection->id) || collection->id.lib != obact->id.lib ||
@ -2926,9 +2925,7 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot)
/** \name Drop Named Material on Object Operator
* \{ */
std::string ED_object_ot_drop_named_material_tooltip(bContext *C,
const char *name,
const int mval[2])
std::string drop_named_material_tooltip(bContext *C, const char *name, const int mval[2])
{
int mat_slot = 0;
Object *ob = ED_view3d_give_material_slot_under_cursor(C, mval, &mat_slot);
@ -2997,9 +2994,7 @@ void OBJECT_OT_drop_named_material(wmOperatorType *ot)
/** \name Drop Geometry Nodes on Object Operator
* \{ */
std::string ED_object_ot_drop_geometry_nodes_tooltip(bContext *C,
PointerRNA *properties,
const int mval[2])
std::string drop_geometry_nodes_tooltip(bContext *C, PointerRNA *properties, const int mval[2])
{
const Object *ob = ED_view3d_give_object_under_cursor(C, mval);
if (ob == nullptr) {
@ -3059,7 +3054,7 @@ static int drop_geometry_nodes_invoke(bContext *C, wmOperator *op, const wmEvent
return OPERATOR_CANCELLED;
}
NodesModifierData *nmd = (NodesModifierData *)ED_object_modifier_add(
NodesModifierData *nmd = (NodesModifierData *)modifier_add(
op->reports, bmain, scene, ob, node_tree->id.name + 2, eModifierType_Nodes);
if (!nmd) {
BKE_report(op->reports, RPT_ERROR, "Could not add geometry nodes modifier");
@ -3162,3 +3157,5 @@ void OBJECT_OT_unlink_data(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -62,9 +62,7 @@
#include "object_intern.hh" /* own include */
using blender::float3;
using blender::IndexRange;
using blender::Span;
namespace blender::ed::object {
/* TODO(sebpa): unstable, can lead to unrecoverable errors. */
// #define USE_MESH_CURVATURE
@ -107,8 +105,6 @@ static bool object_remesh_poll(bContext *C)
static int voxel_remesh_exec(bContext *C, wmOperator *op)
{
using namespace blender;
using namespace blender::ed;
Object *ob = CTX_data_active_object(C);
Mesh *mesh = static_cast<Mesh *>(ob->data);
@ -448,7 +444,7 @@ static int voxel_size_edit_invoke(bContext *C, wmOperator *op, const wmEvent *ev
op->customdata = cd;
/* Select the front facing face of the mesh bounding box. */
const blender::Bounds<float3> bounds = *mesh->bounds_min_max();
const Bounds<float3> bounds = *mesh->bounds_min_max();
BoundBox bb;
BKE_boundbox_init_from_minmax(&bb, bounds.min, bounds.max);
@ -664,7 +660,7 @@ static bool mesh_is_manifold_consistent(Mesh *mesh)
* flip
*/
const Span<float3> positions = mesh->vert_positions();
const Span<blender::int2> edges = mesh->edges();
const Span<int2> edges = mesh->edges();
const Span<int> corner_verts = mesh->corner_verts();
const Span<int> corner_edges = mesh->corner_edges();
@ -821,8 +817,6 @@ static Mesh *remesh_symmetry_mirror(Object *ob, Mesh *mesh, eSymmetryAxes symmet
static void quadriflow_start_job(void *customdata, wmJobWorkerStatus *worker_status)
{
using namespace blender;
using namespace blender::ed;
QuadriFlowJob *qj = static_cast<QuadriFlowJob *>(customdata);
qj->stop = &worker_status->stop;
@ -885,7 +879,7 @@ static void quadriflow_start_job(void *customdata, wmJobWorkerStatus *worker_sta
}
if (qj->preserve_attributes) {
blender::bke::mesh_remesh_reproject_attributes(*mesh, *new_mesh);
bke::mesh_remesh_reproject_attributes(*mesh, *new_mesh);
}
BKE_mesh_nomain_to_mesh(new_mesh, mesh, ob);
@ -1204,3 +1198,5 @@ void OBJECT_OT_quadriflow_remesh(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -64,11 +64,13 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name Public Object Selection API
* \{ */
void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
void base_select(Base *base, eObjectSelect_Mode mode)
{
if (mode == BA_INVERT) {
mode = (base->flag & BASE_SELECTED) != 0 ? BA_DESELECT : BA_SELECT;
@ -92,7 +94,7 @@ void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
}
}
void ED_object_base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer)
void base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer)
{
WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
@ -102,15 +104,15 @@ void ED_object_base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_la
}
}
void ED_object_base_activate(bContext *C, Base *base)
void base_activate(bContext *C, Base *base)
{
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
view_layer->basact = base;
ED_object_base_active_refresh(CTX_data_main(C), scene, view_layer);
base_active_refresh(CTX_data_main(C), scene, view_layer);
}
void ED_object_base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
void base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
{
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
@ -122,13 +124,13 @@ void ED_object_base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
Object *ob = base->object;
if (((ob->mode & OB_MODE_EDIT) == 0) || (obedit->type != ob->type)) {
Main *bmain = CTX_data_main(C);
ED_object_editmode_exit_multi_ex(bmain, scene, view_layer, EM_FREEDATA);
editmode_exit_multi_ex(bmain, scene, view_layer, EM_FREEDATA);
}
}
ED_object_base_activate(C, base);
base_activate(C, base);
}
bool ED_object_base_deselect_all_ex(
bool base_deselect_all_ex(
const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible)
{
if (action == SEL_TOGGLE) {
@ -154,23 +156,23 @@ bool ED_object_base_deselect_all_ex(
switch (action) {
case SEL_SELECT:
if ((base->flag & BASE_SELECTED) == 0) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
}
break;
case SEL_DESELECT:
if ((base->flag & BASE_SELECTED) != 0) {
ED_object_base_select(base, BA_DESELECT);
base_select(base, BA_DESELECT);
changed = true;
}
break;
case SEL_INVERT:
if ((base->flag & BASE_SELECTED) != 0) {
ED_object_base_select(base, BA_DESELECT);
base_select(base, BA_DESELECT);
changed = true;
}
else {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
}
break;
@ -184,12 +186,9 @@ bool ED_object_base_deselect_all_ex(
return changed;
}
bool ED_object_base_deselect_all(const Scene *scene,
ViewLayer *view_layer,
View3D *v3d,
int action)
bool base_deselect_all(const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action)
{
return ED_object_base_deselect_all_ex(scene, view_layer, v3d, action, nullptr);
return base_deselect_all_ex(scene, view_layer, v3d, action, nullptr);
}
/** \} */
@ -209,7 +208,7 @@ static int get_base_select_priority(Base *base)
return 1;
}
Base *ED_object_find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id)
Base *find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id)
{
BLI_assert(OB_DATA_SUPPORT_ID(GS(id->name)));
@ -243,7 +242,7 @@ Base *ED_object_find_first_by_data_id(const Scene *scene, ViewLayer *view_layer,
return base_best;
}
bool ED_object_jump_to_object(bContext *C, Object *ob, const bool /*reveal_hidden*/)
bool jump_to_object(bContext *C, Object *ob, const bool /*reveal_hidden*/)
{
const Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
@ -260,26 +259,23 @@ bool ED_object_jump_to_object(bContext *C, Object *ob, const bool /*reveal_hidde
if (BKE_view_layer_active_base_get(view_layer) != base || !(base->flag & BASE_SELECTED)) {
/* Select if not selected. */
if (!(base->flag & BASE_SELECTED)) {
ED_object_base_deselect_all(scene, view_layer, v3d, SEL_DESELECT);
base_deselect_all(scene, view_layer, v3d, SEL_DESELECT);
if (BASE_VISIBLE(v3d, base)) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
}
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);
base_activate(C, base);
}
return true;
}
bool ED_object_jump_to_bone(bContext *C,
Object *ob,
const char *bone_name,
const bool reveal_hidden)
bool jump_to_bone(bContext *C, Object *ob, const char *bone_name, const bool reveal_hidden)
{
/* Verify it's a valid armature object. */
if (ob == nullptr || ob->type != OB_ARMATURE) {
@ -289,13 +285,13 @@ bool ED_object_jump_to_bone(bContext *C,
bArmature *arm = static_cast<bArmature *>(ob->data);
/* Activate the armature object. */
if (!ED_object_jump_to_object(C, ob, reveal_hidden)) {
if (!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);
mode_set(C, OB_MODE_POSE);
}
if (ob->mode == OB_MODE_EDIT && arm->edbo != nullptr) {
@ -385,12 +381,12 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op)
extend = RNA_boolean_get(op->ptr, "extend");
if (extend == 0) {
ED_object_base_deselect_all(scene, view_layer, v3d, SEL_DESELECT);
base_deselect_all(scene, 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);
base_select(base, BA_SELECT);
}
}
CTX_DATA_END;
@ -463,7 +459,7 @@ static bool object_select_all_by_obdata(bContext *C, void *obdata)
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -487,7 +483,7 @@ static bool object_select_all_by_material(bContext *C, Material *mat)
mat1 = BKE_object_material_get(ob, a);
if (mat1 == mat) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -511,7 +507,7 @@ static bool object_select_all_by_instance_collection(bContext *C, Object *ob)
base->object->instance_collection :
nullptr;
if (instance_collection == instance_collection_other) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -531,7 +527,7 @@ static bool object_select_all_by_particle(bContext *C, Object *ob)
/* Loop through other particles. */
LISTBASE_FOREACH (ParticleSystem *, psys, &base->object->particlesystem) {
if (psys->part == psys_act->part) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
break;
}
@ -554,7 +550,7 @@ static bool object_select_all_by_library(bContext *C, Library *lib)
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -571,7 +567,7 @@ static bool object_select_all_by_library_obdata(bContext *C, Library *lib)
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -581,7 +577,7 @@ static bool object_select_all_by_library_obdata(bContext *C, Library *lib)
return changed;
}
void ED_object_select_linked_by_id(bContext *C, ID *id)
void select_linked_by_id(bContext *C, ID *id)
{
int idtype = GS(id->name);
bool changed = false;
@ -615,7 +611,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
extend = RNA_boolean_get(op->ptr, "extend");
if (extend == 0) {
ED_object_base_deselect_all(scene, view_layer, v3d, SEL_DESELECT);
base_deselect_all(scene, view_layer, v3d, SEL_DESELECT);
}
BKE_view_layer_synced_ensure(scene, view_layer);
@ -757,7 +753,7 @@ static bool select_grouped_children(bContext *C, Object *ob, const bool recursiv
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);
base_select(base, BA_SELECT);
changed = true;
}
@ -789,8 +785,8 @@ static bool select_grouped_parent(bContext *C)
/* can be nullptr if parent in other scene */
if (baspar && BASE_SELECTABLE(v3d, baspar)) {
ED_object_base_select(baspar, BA_SELECT);
ED_object_base_activate(C, baspar);
base_select(baspar, BA_SELECT);
base_activate(C, baspar);
changed = true;
}
return changed;
@ -825,7 +821,7 @@ static bool select_grouped_collection(bContext *C, Object *ob)
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -869,7 +865,7 @@ static bool select_grouped_object_hooks(bContext *C, Object *ob)
BKE_view_layer_synced_ensure(scene, view_layer);
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -886,7 +882,7 @@ static bool select_grouped_siblings(bContext *C, Object *ob)
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -903,7 +899,7 @@ static bool select_grouped_lighttype(bContext *C, Object *ob)
if (base->object->type == OB_LAMP) {
Light *la_test = static_cast<Light *>(base->object->data);
if ((la->type == la_test->type) && ((base->flag & BASE_SELECTED) == 0)) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -917,7 +913,7 @@ static bool select_grouped_type(bContext *C, Object *ob)
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -931,7 +927,7 @@ static bool select_grouped_index_object(bContext *C, Object *ob)
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);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -947,7 +943,7 @@ static bool select_grouped_color(bContext *C, Object *ob)
if (((base->flag & BASE_SELECTED) == 0) &&
compare_v3v3(base->object->color, ob->color, 0.005f))
{
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
}
}
@ -991,7 +987,7 @@ static bool select_grouped_keyingset(bContext *C, Object * /*ob*/, ReportList *r
LISTBASE_FOREACH (KS_Path *, ksp, &ks->paths) {
/* if id matches, select then stop looping (match found) */
if (ksp->id == (ID *)base->object) {
ED_object_base_select(base, BA_SELECT);
base_select(base, BA_SELECT);
changed = true;
break;
}
@ -1015,7 +1011,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
extend = RNA_boolean_get(op->ptr, "extend");
if (extend == 0) {
changed = ED_object_base_deselect_all(scene, view_layer, v3d, SEL_DESELECT);
changed = base_deselect_all(scene, view_layer, v3d, SEL_DESELECT);
}
BKE_view_layer_synced_ensure(scene, view_layer);
@ -1115,7 +1111,7 @@ static int object_select_all_exec(bContext *C, wmOperator *op)
int action = RNA_enum_get(op->ptr, "action");
bool any_visible = false;
bool changed = ED_object_base_deselect_all_ex(scene, view_layer, v3d, action, &any_visible);
bool changed = base_deselect_all_ex(scene, view_layer, v3d, action, &any_visible);
if (changed) {
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
@ -1179,7 +1175,7 @@ static int object_select_same_collection_exec(bContext *C, wmOperator *op)
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);
base_select(base, BA_SELECT);
}
}
}
@ -1244,13 +1240,13 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op)
Base *secbase = BKE_view_layer_base_find(view_layer, ob);
if (secbase) {
ED_object_base_select(secbase, BA_SELECT);
base_select(secbase, BA_SELECT);
}
}
}
if (extend == false) {
ED_object_base_select(primbase, BA_DESELECT);
base_select(primbase, BA_DESELECT);
}
}
CTX_DATA_END;
@ -1310,7 +1306,7 @@ static bool object_select_more_less(bContext *C, const bool select)
}
}
blender::Vector<PointerRNA> ctx_base_list;
Vector<PointerRNA> ctx_base_list;
CTX_data_selectable_bases(C, &ctx_base_list);
CTX_DATA_BEGIN (C, Object *, ob, selected_objects) {
@ -1336,7 +1332,7 @@ static bool object_select_more_less(bContext *C, const bool select)
Base *base = static_cast<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, eObjectSelect_Mode(select_mode));
base_select(base, eObjectSelect_Mode(select_mode));
changed = true;
}
}
@ -1418,7 +1414,7 @@ static int object_select_random_exec(bContext *C, wmOperator *op)
const float randfac = RNA_float_get(op->ptr, "ratio");
const int seed = WM_operator_properties_select_random_seed_increment_get(op);
blender::Vector<PointerRNA> ctx_data_list;
Vector<PointerRNA> ctx_data_list;
CTX_data_selectable_bases(C, &ctx_data_list);
int elem_map_len = 0;
Base **elem_map = static_cast<Base **>(
@ -1431,7 +1427,7 @@ static int object_select_random_exec(bContext *C, wmOperator *op)
BLI_array_randomize(elem_map, sizeof(*elem_map), elem_map_len, seed);
const int count_select = elem_map_len * randfac;
for (int i = 0; i < count_select; i++) {
ED_object_base_select(elem_map[i], eObjectSelect_Mode(select));
base_select(elem_map[i], eObjectSelect_Mode(select));
}
MEM_freeN(elem_map);
@ -1464,3 +1460,5 @@ void OBJECT_OT_select_random(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -49,11 +49,13 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name Public API
* \{ */
ShaderFxData *ED_object_shaderfx_add(
ShaderFxData *shaderfx_add(
ReportList *reports, Main *bmain, Scene * /*scene*/, Object *ob, const char *name, int type)
{
ShaderFxData *new_fx = nullptr;
@ -128,7 +130,7 @@ static bool object_shaderfx_remove(Main *bmain,
return true;
}
bool ED_object_shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, ShaderFxData *fx)
bool shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, ShaderFxData *fx)
{
bool sort_depsgraph = false;
bool ok;
@ -146,7 +148,7 @@ bool ED_object_shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, Sha
return true;
}
void ED_object_shaderfx_clear(Main *bmain, Object *ob)
void shaderfx_clear(Main *bmain, Object *ob)
{
ShaderFxData *fx = static_cast<ShaderFxData *>(ob->shader_fx.first);
bool sort_depsgraph = false;
@ -169,7 +171,7 @@ void ED_object_shaderfx_clear(Main *bmain, Object *ob)
DEG_relations_tag_update(bmain);
}
int ED_object_shaderfx_move_up(ReportList * /*reports*/, Object *ob, ShaderFxData *fx)
int shaderfx_move_up(ReportList * /*reports*/, Object *ob, ShaderFxData *fx)
{
if (fx->prev) {
BLI_remlink(&ob->shader_fx, fx);
@ -179,7 +181,7 @@ int ED_object_shaderfx_move_up(ReportList * /*reports*/, Object *ob, ShaderFxDat
return 1;
}
int ED_object_shaderfx_move_down(ReportList * /*reports*/, Object *ob, ShaderFxData *fx)
int shaderfx_move_down(ReportList * /*reports*/, Object *ob, ShaderFxData *fx)
{
if (fx->next) {
BLI_remlink(&ob->shader_fx, fx);
@ -189,10 +191,7 @@ int ED_object_shaderfx_move_down(ReportList * /*reports*/, Object *ob, ShaderFxD
return 1;
}
bool ED_object_shaderfx_move_to_index(ReportList *reports,
Object *ob,
ShaderFxData *fx,
const int index)
bool shaderfx_move_to_index(ReportList *reports, Object *ob, ShaderFxData *fx, const int index)
{
BLI_assert(fx != nullptr);
BLI_assert(index >= 0);
@ -206,7 +205,7 @@ bool ED_object_shaderfx_move_to_index(ReportList *reports,
if (fx_index < index) {
/* Move shaderfx down in list. */
for (; fx_index < index; fx_index++) {
if (!ED_object_shaderfx_move_down(reports, ob, fx)) {
if (!shaderfx_move_down(reports, ob, fx)) {
break;
}
}
@ -214,7 +213,7 @@ bool ED_object_shaderfx_move_to_index(ReportList *reports,
else {
/* Move shaderfx up in list. */
for (; fx_index > index; fx_index--) {
if (!ED_object_shaderfx_move_up(reports, ob, fx)) {
if (!shaderfx_move_up(reports, ob, fx)) {
break;
}
}
@ -226,7 +225,7 @@ bool ED_object_shaderfx_move_to_index(ReportList *reports,
return true;
}
void ED_object_shaderfx_link(Object *dst, Object *src)
void shaderfx_link(Object *dst, Object *src)
{
BLI_freelistN(&dst->shader_fx);
BKE_shaderfx_copy(&dst->shader_fx, &src->shader_fx);
@ -235,7 +234,7 @@ void ED_object_shaderfx_link(Object *dst, Object *src)
WM_main_add_notifier(NC_OBJECT | ND_SHADERFX, dst);
}
void ED_object_shaderfx_copy(Object *dst, ShaderFxData *fx)
void shaderfx_copy(Object *dst, ShaderFxData *fx)
{
ShaderFxData *nfx = BKE_shaderfx_new(fx->type);
STRNCPY(nfx->name, fx->name);
@ -258,7 +257,7 @@ static bool edit_shaderfx_poll_generic(bContext *C,
const bool is_liboverride_allowed)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "shaderfx", rna_type);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : context_active_object(C);
ShaderFxData *fx = static_cast<ShaderFxData *>(ptr.data); /* May be nullptr. */
if (!ED_operator_object_active_editable_ex(C, ob)) {
@ -304,10 +303,10 @@ static int shaderfx_add_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
int type = RNA_enum_get(op->ptr, "type");
if (!ED_object_shaderfx_add(op->reports, bmain, scene, ob, nullptr, type)) {
if (!shaderfx_add(op->reports, bmain, scene, ob, nullptr, type)) {
return OPERATOR_CANCELLED;
}
@ -321,7 +320,7 @@ static const EnumPropertyItem *shaderfx_add_itemf(bContext *C,
PropertyRNA * /*prop*/,
bool *r_free)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
EnumPropertyItem *item = nullptr;
const EnumPropertyItem *fx_item, *group_item = nullptr;
const ShaderFxTypeInfo *mti;
@ -476,7 +475,7 @@ static ShaderFxData *edit_shaderfx_property_get(wmOperator *op, Object *ob, int
static int shaderfx_remove_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ShaderFxData *fx = edit_shaderfx_property_get(op, ob, 0);
if (!fx) {
return OPERATOR_CANCELLED;
@ -486,7 +485,7 @@ static int shaderfx_remove_exec(bContext *C, wmOperator *op)
char name[MAX_NAME];
STRNCPY(name, fx->name);
if (!ED_object_shaderfx_remove(op->reports, bmain, ob, fx)) {
if (!shaderfx_remove(op->reports, bmain, ob, fx)) {
return OPERATOR_CANCELLED;
}
@ -532,10 +531,10 @@ void OBJECT_OT_shaderfx_remove(wmOperatorType *ot)
static int shaderfx_move_up_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ShaderFxData *fx = edit_shaderfx_property_get(op, ob, 0);
if (!fx || !ED_object_shaderfx_move_up(op->reports, ob, fx)) {
if (!fx || !shaderfx_move_up(op->reports, ob, fx)) {
return OPERATOR_CANCELLED;
}
@ -577,10 +576,10 @@ void OBJECT_OT_shaderfx_move_up(wmOperatorType *ot)
static int shaderfx_move_down_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ShaderFxData *fx = edit_shaderfx_property_get(op, ob, 0);
if (!fx || !ED_object_shaderfx_move_down(op->reports, ob, fx)) {
if (!fx || !shaderfx_move_down(op->reports, ob, fx)) {
return OPERATOR_CANCELLED;
}
@ -622,11 +621,11 @@ void OBJECT_OT_shaderfx_move_down(wmOperatorType *ot)
static int shaderfx_move_to_index_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ShaderFxData *fx = edit_shaderfx_property_get(op, ob, 0);
int index = RNA_int_get(op->ptr, "index");
if (!fx || !ED_object_shaderfx_move_to_index(op->reports, ob, fx, index)) {
if (!fx || !shaderfx_move_to_index(op->reports, ob, fx, index)) {
return OPERATOR_CANCELLED;
}
@ -669,7 +668,7 @@ void OBJECT_OT_shaderfx_move_to_index(wmOperatorType *ot)
static int shaderfx_copy_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
ShaderFxData *fx = edit_shaderfx_property_get(op, ob, 0);
if (!fx) {
return OPERATOR_CANCELLED;
@ -717,3 +716,5 @@ void OBJECT_OT_shaderfx_copy(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -51,11 +51,13 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name Shape Key Lock Checks
* \{ */
bool ED_object_edit_report_if_shape_key_is_locked(const Object *obedit, ReportList *reports)
bool shape_key_report_if_locked(const Object *obedit, ReportList *reports)
{
KeyBlock *key_block;
@ -84,7 +86,7 @@ bool ED_object_edit_report_if_shape_key_is_locked(const Object *obedit, ReportLi
return false;
}
bool ED_object_report_if_active_shape_key_is_locked(Object *ob, ReportList *reports)
bool shape_key_report_if_active_locked(Object *ob, ReportList *reports)
{
const KeyBlock *kb = BKE_keyblock_from_object(ob);
@ -113,7 +115,7 @@ static bool object_is_any_shape_key_locked(Object *ob)
return false;
}
bool ED_object_report_if_any_shape_key_is_locked(Object *ob, ReportList *reports)
bool shape_key_report_if_any_locked(Object *ob, ReportList *reports)
{
if (object_is_any_shape_key_locked(ob)) {
if (reports) {
@ -291,7 +293,7 @@ static bool object_shape_key_mirror(
static bool shape_key_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
ID *data = static_cast<ID *>((ob) ? ob->data : nullptr);
return (ob != nullptr && !ID_IS_LINKED(ob) && !ID_IS_OVERRIDE_LIBRARY(ob) && data != nullptr &&
@ -300,7 +302,7 @@ static bool shape_key_poll(bContext *C)
static bool shape_key_exists_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
return (shape_key_poll(C) &&
/* check a keyblock exists */
@ -309,14 +311,14 @@ static bool shape_key_exists_poll(bContext *C)
static bool shape_key_mode_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
return (shape_key_poll(C) && ob->mode != OB_MODE_EDIT);
}
static bool shape_key_mode_exists_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
return (shape_key_mode_poll(C) &&
/* check a keyblock exists */
@ -326,7 +328,7 @@ static bool shape_key_mode_exists_poll(bContext *C)
static bool shape_key_move_poll(bContext *C)
{
/* Same as shape_key_mode_exists_poll above, but ensure we have at least two shapes! */
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Key *key = BKE_key_from_object(ob);
return (shape_key_mode_poll(C) && key != nullptr && key->totkey > 1);
@ -340,7 +342,7 @@ static bool shape_key_move_poll(bContext *C)
static int shape_key_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
const bool from_mix = RNA_boolean_get(op->ptr, "from_mix");
ED_object_shape_key_add(C, ob, from_mix);
@ -382,11 +384,11 @@ void OBJECT_OT_shape_key_add(wmOperatorType *ot)
static int shape_key_remove_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
bool changed = false;
if (RNA_boolean_get(op->ptr, "all")) {
if (ED_object_report_if_any_shape_key_is_locked(ob, op->reports)) {
if (shape_key_report_if_any_locked(ob, op->reports)) {
return OPERATOR_CANCELLED;
}
@ -398,7 +400,7 @@ static int shape_key_remove_exec(bContext *C, wmOperator *op)
changed = BKE_object_shapekey_free(bmain, ob);
}
else {
if (ED_object_report_if_active_shape_key_is_locked(ob, op->reports)) {
if (shape_key_report_if_active_locked(ob, op->reports)) {
return OPERATOR_CANCELLED;
}
@ -474,7 +476,7 @@ void OBJECT_OT_shape_key_remove(wmOperatorType *ot)
static int shape_key_clear_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Key *key = BKE_key_from_object(ob);
KeyBlock *kb = BKE_keyblock_from_object(ob);
@ -510,7 +512,7 @@ void OBJECT_OT_shape_key_clear(wmOperatorType *ot)
/* starting point and step size could be optional */
static int shape_key_retime_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Key *key = BKE_key_from_object(ob);
KeyBlock *kb = BKE_keyblock_from_object(ob);
float cfra = 0.0f;
@ -553,11 +555,11 @@ void OBJECT_OT_shape_key_retime(wmOperatorType *ot)
static int shape_key_mirror_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
int totmirr = 0, totfail = 0;
bool use_topology = RNA_boolean_get(op->ptr, "use_topology");
if (ED_object_report_if_active_shape_key_is_locked(ob, op->reports)) {
if (shape_key_report_if_active_locked(ob, op->reports)) {
return OPERATOR_CANCELLED;
}
@ -608,7 +610,7 @@ enum {
static int shape_key_move_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
Key *key = BKE_key_from_object(ob);
const int type = RNA_enum_get(op->ptr, "type");
@ -752,3 +754,5 @@ void OBJECT_OT_shape_key_lock(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -80,10 +80,7 @@
#include "object_intern.hh"
using blender::Array;
using blender::float2;
using blender::float3;
using blender::Vector;
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name Clear Transformation Utilities
@ -332,13 +329,13 @@ static int object_clear_transform_generic_exec(bContext *C,
if (use_transform_skip_children) {
BKE_scene_graph_evaluated_ensure(depsgraph, bmain);
xcs = ED_object_xform_skip_child_container_create();
ED_object_xform_skip_child_container_item_ensure_from_array(
xcs = xform_skip_child_container_create();
xform_skip_child_container_item_ensure_from_array(
xcs, scene, view_layer, objects.data(), objects.size());
}
if (use_transform_data_origin) {
BKE_scene_graph_evaluated_ensure(depsgraph, bmain);
xds = ED_object_data_xform_container_create();
xds = data_xform_container_create();
}
/* get KeyingSet to use */
@ -346,26 +343,26 @@ static int object_clear_transform_generic_exec(bContext *C,
for (Object *ob : objects) {
if (use_transform_data_origin) {
ED_object_data_xform_container_item_ensure(xds, ob);
data_xform_container_item_ensure(xds, ob);
}
/* run provided clearing function */
clear_func(ob, clear_delta);
blender::animrig::autokeyframe_object(C, scene, ob, ks);
animrig::autokeyframe_object(C, scene, ob, ks);
/* tag for updates */
DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
}
if (use_transform_skip_children) {
ED_object_xform_skip_child_container_update_all(xcs, bmain, depsgraph);
ED_object_xform_skip_child_container_destroy(xcs);
object_xform_skip_child_container_update_all(xcs, bmain, depsgraph);
object_xform_skip_child_container_destroy(xcs);
}
if (use_transform_data_origin) {
ED_object_data_xform_container_update_all(xds, bmain, depsgraph);
ED_object_data_xform_container_destroy(xds);
data_xform_container_update_all(xds, bmain, depsgraph);
data_xform_container_destroy(xds);
}
/* this is needed so children are also updated */
@ -649,10 +646,8 @@ static bool apply_objects_internal_need_single_user(bContext *C)
return (ID_REAL_USERS(ob->data) > CTX_DATA_COUNT(C, selected_editable_objects));
}
static void transform_positions(blender::MutableSpan<blender::float3> positions,
const blender::float4x4 &matrix)
static void transform_positions(MutableSpan<float3> positions, const float4x4 &matrix)
{
using namespace blender;
threading::parallel_for(positions.index_range(), 1024, [&](const IndexRange range) {
for (float3 &position : positions.slice(range)) {
position = math::transform_point(matrix, position);
@ -668,7 +663,6 @@ static int apply_objects_internal(bContext *C,
bool do_props,
bool do_single_user)
{
using namespace blender;
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
@ -841,7 +835,7 @@ static int apply_objects_internal(bContext *C,
if (make_single_user) {
/* Make single user. */
ED_object_single_obdata_user(bmain, scene, obact);
single_obdata_user_make(bmain, scene, obact);
BKE_main_id_newptr_and_tag_clear(bmain);
WM_event_add_notifier(C, NC_WINDOW, nullptr);
DEG_relations_tag_update(bmain);
@ -1031,7 +1025,7 @@ static int apply_objects_internal(bContext *C,
BKE_object_apply_mat4(ob, _mat, false, true);
}
else {
Object ob_temp = blender::dna::shallow_copy(*ob);
Object ob_temp = dna::shallow_copy(*ob);
BKE_object_apply_mat4(&ob_temp, _mat, false, true);
if (apply_loc) {
@ -1155,7 +1149,7 @@ static int object_transform_apply_exec(bContext *C, wmOperator *op)
static int object_transform_apply_invoke(bContext *C, wmOperator *op, const wmEvent * /*event*/)
{
Object *ob = ED_object_active_context(C);
Object *ob = context_active_object(C);
bool can_handle_multiuser = apply_objects_internal_can_multiuser(C);
bool need_single_user = can_handle_multiuser && apply_objects_internal_need_single_user(C);
@ -1263,7 +1257,7 @@ enum {
ORIGIN_TO_CENTER_OF_MASS_VOLUME,
};
static float3 arithmetic_mean(const blender::Span<blender::float3> values)
static float3 arithmetic_mean(const Span<float3> values)
{
if (values.is_empty()) {
return float3(0);
@ -1272,10 +1266,8 @@ static float3 arithmetic_mean(const blender::Span<blender::float3> values)
return std::accumulate(values.begin(), values.end(), float3(0)) / values.size();
}
static void translate_positions(blender::MutableSpan<blender::float3> positions,
const blender::float3 &translation)
static void translate_positions(MutableSpan<float3> positions, const float3 &translation)
{
using namespace blender;
threading::parallel_for(positions.index_range(), 2048, [&](const IndexRange range) {
for (float3 &position : positions.slice(range)) {
position += translation;
@ -1285,7 +1277,6 @@ static void translate_positions(blender::MutableSpan<blender::float3> positions,
static int object_origin_set_exec(bContext *C, wmOperator *op)
{
using namespace blender;
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *obact = CTX_data_active_object(C);
@ -1473,7 +1464,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
/* done */
}
else if (around == V3D_AROUND_CENTER_BOUNDS) {
if (std::optional<blender::Bounds<blender::float3>> bounds = BKE_curve_minmax(cu, true)) {
if (std::optional<Bounds<float3>> bounds = BKE_curve_minmax(cu, true)) {
cent = math::midpoint(bounds->min, bounds->max);
}
}
@ -1504,7 +1495,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
/* Get from bounding-box. */
Curve *cu = static_cast<Curve *>(ob->data);
std::optional<blender::Bounds<blender::float3>> bounds = BKE_curve_minmax(cu, true);
std::optional<Bounds<float3>> bounds = BKE_curve_minmax(cu, true);
if (!bounds && (centermode != ORIGIN_TO_CURSOR)) {
/* Do nothing. */
@ -1596,7 +1587,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
/* done */
}
else if (around == V3D_AROUND_CENTER_BOUNDS) {
if (std::optional<blender::Bounds<blender::float3>> bounds = BKE_lattice_minmax(lt)) {
if (std::optional<Bounds<float3>> bounds = BKE_lattice_minmax(lt)) {
cent = math::midpoint(bounds->min, bounds->max);
}
}
@ -1689,7 +1680,6 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
}
}
else if (ob->type == OB_CURVES) {
using namespace blender;
Curves &curves_id = *static_cast<Curves *>(ob->data);
bke::CurvesGeometry &curves = curves_id.geometry.wrap();
if (ELEM(centermode, ORIGIN_TO_CENTER_OF_MASS_SURFACE, ORIGIN_TO_CENTER_OF_MASS_VOLUME) ||
@ -2036,13 +2026,13 @@ static void object_apply_rotation(Object *ob, const float rmat[3][3])
static void object_apply_location(Object *ob, const float loc[3])
{
/* quick but weak */
Object ob_prev = blender::dna::shallow_copy(*ob);
Object ob_prev = dna::shallow_copy(*ob);
float mat[4][4];
copy_m4_m4(mat, ob->object_to_world().ptr());
copy_v3_v3(mat[3], loc);
BKE_object_apply_mat4(ob, mat, true, true);
copy_v3_v3(mat[3], ob->loc);
*ob = blender::dna::shallow_copy(ob_prev);
*ob = dna::shallow_copy(ob_prev);
copy_v3_v3(ob->loc, mat[3]);
}
@ -2361,3 +2351,5 @@ void OBJECT_OT_transform_axis_target(wmOperatorType *ot)
#undef USE_RELATIVE_ROTATION
/** \} */
} // namespace blender::ed::object

View File

@ -34,13 +34,13 @@
#include "MEM_guardedalloc.h"
namespace blender::ed::object {
/* -------------------------------------------------------------------- */
/** \name Active Element Center
* \{ */
bool ED_object_calc_active_center_for_editmode(Object *obedit,
const bool select_only,
float r_center[3])
bool calc_active_center_for_editmode(Object *obedit, const bool select_only, float r_center[3])
{
switch (obedit->type) {
case OB_MESH: {
@ -97,9 +97,7 @@ bool ED_object_calc_active_center_for_editmode(Object *obedit,
return false;
}
bool ED_object_calc_active_center_for_posemode(Object *ob,
const bool select_only,
float r_center[3])
bool calc_active_center_for_posemode(Object *ob, const bool select_only, float r_center[3])
{
bPoseChannel *pchan = BKE_pose_channel_active_if_bonecoll_visible(ob);
if (pchan && (!select_only || (pchan->bone->flag & BONE_SELECTED))) {
@ -109,17 +107,17 @@ bool ED_object_calc_active_center_for_posemode(Object *ob,
return false;
}
bool ED_object_calc_active_center(Object *ob, const bool select_only, float r_center[3])
bool calc_active_center(Object *ob, const bool select_only, float r_center[3])
{
if (ob->mode & OB_MODE_EDIT) {
if (ED_object_calc_active_center_for_editmode(ob, select_only, r_center)) {
if (calc_active_center_for_editmode(ob, select_only, r_center)) {
mul_m4_v3(ob->object_to_world().ptr(), r_center);
return true;
}
return false;
}
if (ob->mode & OB_MODE_POSE) {
if (ED_object_calc_active_center_for_posemode(ob, select_only, r_center)) {
if (calc_active_center_for_posemode(ob, select_only, r_center)) {
mul_m4_v3(ob->object_to_world().ptr(), r_center);
return true;
}
@ -158,7 +156,7 @@ struct XFormObjectSkipChild {
int mode;
};
XFormObjectSkipChild_Container *ED_object_xform_skip_child_container_create()
XFormObjectSkipChild_Container *xform_skip_child_container_create()
{
XFormObjectSkipChild_Container *xcs = static_cast<XFormObjectSkipChild_Container *>(
MEM_callocN(sizeof(*xcs), __func__));
@ -168,12 +166,11 @@ XFormObjectSkipChild_Container *ED_object_xform_skip_child_container_create()
return xcs;
}
void ED_object_xform_skip_child_container_item_ensure_from_array(
XFormObjectSkipChild_Container *xcs,
const Scene *scene,
ViewLayer *view_layer,
Object **objects,
uint objects_len)
void xform_skip_child_container_item_ensure_from_array(XFormObjectSkipChild_Container *xcs,
const Scene *scene,
ViewLayer *view_layer,
Object **objects,
uint objects_len)
{
GSet *objects_in_transdata = BLI_gset_ptr_new_ex(__func__, objects_len);
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
@ -187,7 +184,7 @@ void ED_object_xform_skip_child_container_item_ensure_from_array(
if (ob->parent != nullptr) {
if (!BLI_gset_haskey(objects_in_transdata, ob)) {
if (BLI_gset_haskey(objects_in_transdata, ob->parent)) {
ED_object_xform_skip_child_container_item_ensure(
object_xform_skip_child_container_item_ensure(
xcs, ob, nullptr, XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM);
}
}
@ -203,7 +200,7 @@ void ED_object_xform_skip_child_container_item_ensure_from_array(
}
if (ob_parent_recurse) {
ED_object_xform_skip_child_container_item_ensure(
object_xform_skip_child_container_item_ensure(
xcs, ob, ob_parent_recurse, XFORM_OB_SKIP_CHILD_PARENT_APPLY);
}
}
@ -221,7 +218,7 @@ void ED_object_xform_skip_child_container_item_ensure_from_array(
else if (ob->parent != nullptr) {
if (BLI_gset_haskey(objects_in_transdata, ob->parent)) {
if (!BLI_gset_haskey(objects_in_transdata, ob)) {
ED_object_xform_skip_child_container_item_ensure(
object_xform_skip_child_container_item_ensure(
xcs, ob, nullptr, XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM);
}
}
@ -230,16 +227,16 @@ void ED_object_xform_skip_child_container_item_ensure_from_array(
BLI_gset_free(objects_in_transdata, nullptr);
}
void ED_object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs)
void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs)
{
BLI_ghash_free(xcs->obchild_in_obmode_map, nullptr, MEM_freeN);
MEM_freeN(xcs);
}
void ED_object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs,
Object *ob,
Object *ob_parent_recurse,
int mode)
void object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs,
Object *ob,
Object *ob_parent_recurse,
int mode)
{
void **xf_p;
if (!BLI_ghash_ensure_p(xcs->obchild_in_obmode_map, ob, &xf_p)) {
@ -258,9 +255,9 @@ void ED_object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Conta
}
}
void ED_object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs,
Main *bmain,
Depsgraph *depsgraph)
void object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs,
Main *bmain,
Depsgraph *depsgraph)
{
BKE_scene_graph_evaluated_ensure(depsgraph, bmain);
@ -343,7 +340,7 @@ struct XFormObjectData_Extra {
XFormObjectData *xod;
};
void ED_object_data_xform_container_item_ensure(XFormObjectData_Container *xds, Object *ob)
void data_xform_container_item_ensure(XFormObjectData_Container *xds, Object *ob)
{
if (xds->obdata_in_obmode_map == nullptr) {
xds->obdata_in_obmode_map = BLI_ghash_ptr_new(__func__);
@ -356,14 +353,14 @@ void ED_object_data_xform_container_item_ensure(XFormObjectData_Container *xds,
copy_m4_m4(xf->obmat_orig, ob->object_to_world().ptr());
xf->ob = ob;
/* Result may be nullptr, that's OK. */
xf->xod = ED_object_data_xform_create(static_cast<ID *>(ob->data));
xf->xod = data_xform_create(static_cast<ID *>(ob->data));
*xf_p = xf;
}
}
void ED_object_data_xform_container_update_all(XFormObjectData_Container *xds,
Main *bmain,
Depsgraph *depsgraph)
void data_xform_container_update_all(XFormObjectData_Container *xds,
Main *bmain,
Depsgraph *depsgraph)
{
if (xds->obdata_in_obmode_map == nullptr) {
return;
@ -385,7 +382,7 @@ void ED_object_data_xform_container_update_all(XFormObjectData_Container *xds,
mul_m4_m4m4(dmat, imat, ob_eval->object_to_world().ptr());
invert_m4(dmat);
ED_object_data_xform_by_mat4(xf->xod, dmat);
data_xform_by_mat4(xf->xod, dmat);
if (xf->ob->type == OB_ARMATURE) {
/* TODO: none of the current flags properly update armatures, needs investigation. */
DEG_id_tag_update(id, 0);
@ -401,12 +398,12 @@ static void trans_obdata_in_obmode_free_elem(void *xf_p)
{
XFormObjectData_Extra *xf = static_cast<XFormObjectData_Extra *>(xf_p);
if (xf->xod) {
ED_object_data_xform_destroy(xf->xod);
data_xform_destroy(xf->xod);
}
MEM_freeN(xf);
}
XFormObjectData_Container *ED_object_data_xform_container_create()
XFormObjectData_Container *data_xform_container_create()
{
XFormObjectData_Container *xds = static_cast<XFormObjectData_Container *>(
MEM_callocN(sizeof(*xds), __func__));
@ -414,7 +411,7 @@ XFormObjectData_Container *ED_object_data_xform_container_create()
return xds;
}
void ED_object_data_xform_container_destroy(XFormObjectData_Container *xds)
void data_xform_container_destroy(XFormObjectData_Container *xds)
{
BLI_ghash_free(xds->obdata_in_obmode_map, nullptr, trans_obdata_in_obmode_free_elem);
MEM_freeN(xds);
@ -439,7 +436,7 @@ static bool object_parent_in_set(GSet *objects_set, Object *ob)
return false;
}
void ED_object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4])
void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4])
{
/* Filter out objects that have parents in `objects_set`. */
{
@ -488,3 +485,5 @@ void ED_object_xform_array_m4(Object **objects, uint objects_len, const float ma
}
/** \} */
} // namespace blender::ed::object

View File

@ -65,10 +65,7 @@
#include "object_intern.hh"
using blender::float3;
using blender::MutableSpan;
using blender::Span;
using blender::Vector;
namespace blender::ed::object {
static bool vertex_group_supported_poll_ex(bContext *C, const Object *ob);
@ -87,7 +84,7 @@ static bool object_array_for_wpaint_filter(const Object *ob, void *user_data)
static Vector<Object *> object_array_for_wpaint(bContext *C)
{
return ED_object_array_in_mode_or_selected(C, object_array_for_wpaint_filter, C);
return objects_in_mode_or_selected(C, object_array_for_wpaint_filter, C);
}
static bool vertex_group_use_vert_sel(Object *ob)
@ -116,7 +113,7 @@ static Lattice *vgroup_edit_lattice(Object *ob)
/** \name Public Utility Functions
* \{ */
bool ED_vgroup_sync_from_pose(Object *ob)
bool vgroup_sync_from_pose(Object *ob)
{
Object *armobj = BKE_object_pose_armature_get(ob);
if (armobj && (armobj->mode & OB_MODE_POSE)) {
@ -132,12 +129,12 @@ bool ED_vgroup_sync_from_pose(Object *ob)
return false;
}
void ED_vgroup_data_clamp_range(ID *id, const int total)
void vgroup_data_clamp_range(ID *id, const int total)
{
MDeformVert **dvert_arr;
int dvert_tot;
if (ED_vgroup_parray_alloc(id, &dvert_arr, &dvert_tot, false)) {
if (vgroup_parray_alloc(id, &dvert_arr, &dvert_tot, false)) {
for (int i = 0; i < dvert_tot; i++) {
MDeformVert *dv = dvert_arr[i];
for (int j = 0; j < dv->totweight; j++) {
@ -150,12 +147,8 @@ void ED_vgroup_data_clamp_range(ID *id, const int total)
}
}
bool ED_vgroup_parray_alloc(ID *id,
MDeformVert ***dvert_arr,
int *dvert_tot,
const bool use_vert_sel)
bool vgroup_parray_alloc(ID *id, MDeformVert ***dvert_arr, int *dvert_tot, const bool use_vert_sel)
{
using namespace blender;
*dvert_tot = 0;
*dvert_arr = nullptr;
@ -260,19 +253,19 @@ bool ED_vgroup_parray_alloc(ID *id,
return false;
}
void ED_vgroup_parray_mirror_sync(Object *ob,
MDeformVert **dvert_array,
const int dvert_tot,
const bool *vgroup_validmap,
const int vgroup_tot)
void vgroup_parray_mirror_sync(Object *ob,
MDeformVert **dvert_array,
const int dvert_tot,
const bool *vgroup_validmap,
const int vgroup_tot)
{
BMEditMesh *em = BKE_editmesh_from_object(ob);
MDeformVert **dvert_array_all = nullptr;
int dvert_tot_all;
/* get an array of all verts, not only selected */
if (ED_vgroup_parray_alloc(
static_cast<ID *>(ob->data), &dvert_array_all, &dvert_tot_all, false) == false)
if (vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array_all, &dvert_tot_all, false) ==
false)
{
BLI_assert(0);
return;
@ -305,15 +298,15 @@ void ED_vgroup_parray_mirror_sync(Object *ob,
MEM_freeN(dvert_array_all);
}
void ED_vgroup_parray_mirror_assign(Object *ob, MDeformVert **dvert_array, const int dvert_tot)
void vgroup_parray_mirror_assign(Object *ob, MDeformVert **dvert_array, const int dvert_tot)
{
BMEditMesh *em = BKE_editmesh_from_object(ob);
MDeformVert **dvert_array_all = nullptr;
int dvert_tot_all;
/* get an array of all verts, not only selected */
if (ED_vgroup_parray_alloc(
static_cast<ID *>(ob->data), &dvert_array_all, &dvert_tot_all, false) == false)
if (vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array_all, &dvert_tot_all, false) ==
false)
{
BLI_assert(0);
return;
@ -337,12 +330,12 @@ void ED_vgroup_parray_mirror_assign(Object *ob, MDeformVert **dvert_array, const
MEM_freeN(dvert_array_all);
}
void ED_vgroup_parray_remove_zero(MDeformVert **dvert_array,
const int dvert_tot,
const bool *vgroup_validmap,
const int vgroup_tot,
const float epsilon,
const bool keep_single)
void vgroup_parray_remove_zero(MDeformVert **dvert_array,
const int dvert_tot,
const bool *vgroup_validmap,
const int vgroup_tot,
const float epsilon,
const bool keep_single)
{
MDeformVert *dv;
@ -371,7 +364,7 @@ void ED_vgroup_parray_remove_zero(MDeformVert **dvert_array,
}
}
bool ED_vgroup_array_copy(Object *ob, Object *ob_from)
bool vgroup_array_copy(Object *ob, Object *ob_from)
{
MDeformVert **dvert_array_from = nullptr, **dvf;
MDeformVert **dvert_array = nullptr, **dv;
@ -394,14 +387,14 @@ bool ED_vgroup_array_copy(Object *ob, Object *ob_from)
/* In case we copy vgroup between two objects using same data,
* we only have to care about object side of things. */
if (ob->data != ob_from->data) {
ED_vgroup_parray_alloc(
vgroup_parray_alloc(
static_cast<ID *>(ob_from->data), &dvert_array_from, &dvert_tot_from, false);
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
if ((dvert_array == nullptr) && (dvert_array_from != nullptr) &&
BKE_object_defgroup_data_create(static_cast<ID *>(ob->data)))
{
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
new_vgroup = true;
}
@ -432,7 +425,7 @@ bool ED_vgroup_array_copy(Object *ob, Object *ob_from)
if (defbase_tot_from < defbase_tot) {
/* correct vgroup indices because the number of vgroups is being reduced. */
blender::Array<int> remap(defbase_tot + 1);
Array<int> remap(defbase_tot + 1);
for (i = 0; i <= defbase_tot_from; i++) {
remap[i] = i;
}
@ -463,10 +456,10 @@ bool ED_vgroup_array_copy(Object *ob, Object *ob_from)
return true;
}
void ED_vgroup_parray_to_weight_array(const MDeformVert **dvert_array,
const int dvert_tot,
float *dvert_weights,
const int def_nr)
void vgroup_parray_to_weight_array(const MDeformVert **dvert_array,
const int dvert_tot,
float *dvert_weights,
const int def_nr)
{
for (int i = 0; i < dvert_tot; i++) {
const MDeformVert *dv = dvert_array[i];
@ -474,11 +467,11 @@ void ED_vgroup_parray_to_weight_array(const MDeformVert **dvert_array,
}
}
void ED_vgroup_parray_from_weight_array(MDeformVert **dvert_array,
const int dvert_tot,
const float *dvert_weights,
const int def_nr,
const bool remove_zero)
void vgroup_parray_from_weight_array(MDeformVert **dvert_array,
const int dvert_tot,
const float *dvert_weights,
const int def_nr,
const bool remove_zero)
{
int i;
@ -567,7 +560,7 @@ static void ED_mesh_defvert_mirror_update_ob(Object *ob, int def_nr, int vidx)
}
}
void ED_vgroup_vert_active_mirror(Object *ob, int def_nr)
void vgroup_vert_active_mirror(Object *ob, int def_nr)
{
Mesh *mesh = static_cast<Mesh *>(ob->data);
BMEditMesh *em = mesh->runtime->edit_mesh;
@ -644,7 +637,6 @@ static bool vgroup_normalize_active_vertex(Object *ob, eVGroupSelect subset_type
static void vgroup_copy_active_to_sel(Object *ob, eVGroupSelect subset_type)
{
using namespace blender;
Mesh *mesh = static_cast<Mesh *>(ob->data);
BMEditMesh *em = mesh->runtime->edit_mesh;
MDeformVert *dvert_act;
@ -717,11 +709,11 @@ static const EnumPropertyItem WT_vertex_group_select_item[] = {
{0, nullptr, 0, nullptr, nullptr},
};
const EnumPropertyItem *ED_object_vgroup_selection_itemf_helper(const bContext *C,
PointerRNA * /*ptr*/,
PropertyRNA * /*prop*/,
bool *r_free,
const uint selection_mask)
const EnumPropertyItem *vgroup_selection_itemf_helper(const bContext *C,
PointerRNA * /*ptr*/,
PropertyRNA * /*prop*/,
bool *r_free,
const uint selection_mask)
{
Object *ob;
EnumPropertyItem *item = nullptr;
@ -768,7 +760,7 @@ static const EnumPropertyItem *rna_vertex_group_with_single_itemf(bContext *C,
PropertyRNA *prop,
bool *r_free)
{
return ED_object_vgroup_selection_itemf_helper(C, ptr, prop, r_free, WT_VGROUP_MASK_ALL);
return vgroup_selection_itemf_helper(C, ptr, prop, r_free, WT_VGROUP_MASK_ALL);
}
static const EnumPropertyItem *rna_vertex_group_select_itemf(bContext *C,
@ -776,7 +768,7 @@ static const EnumPropertyItem *rna_vertex_group_select_itemf(bContext *C,
PropertyRNA *prop,
bool *r_free)
{
return ED_object_vgroup_selection_itemf_helper(
return vgroup_selection_itemf_helper(
C, ptr, prop, r_free, WT_VGROUP_MASK_ALL & ~(1 << WT_VGROUP_ACTIVE));
}
@ -808,12 +800,12 @@ static void vgroup_operator_subset_select_props(wmOperatorType *ot, bool use_act
*
* Wrap lower level `BKE` functions.
*
* \note that operations on many vertices should use #ED_vgroup_parray_alloc.
* \note that operations on many vertices should use #vgroup_parray_alloc.
* \{ */
/* for Mesh in Object mode */
/* allows editmode for Lattice */
static void ED_vgroup_nr_vert_add(
static void vgroup_nr_vert_add(
Object *ob, const int def_nr, const int vertnum, const float weight, const int assignmode)
{
/* Add the vert to the deform group with the specified number. */
@ -877,7 +869,7 @@ static void ED_vgroup_nr_vert_add(
}
}
void ED_vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, int assignmode)
void vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, int assignmode)
{
/* add the vert to the deform group with the
* specified assign mode
@ -901,11 +893,11 @@ void ED_vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight,
/* call another function to do the work
*/
ED_vgroup_nr_vert_add(ob, def_nr, vertnum, weight, assignmode);
vgroup_nr_vert_add(ob, def_nr, vertnum, weight, assignmode);
}
}
void ED_vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum)
void vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum)
{
/* This routine removes the vertex from the specified
* deform group.
@ -989,7 +981,7 @@ static float get_vert_def_nr(Object *ob, const int def_nr, const int vertnum)
return -1;
}
float ED_vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum)
float vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum)
{
const ListBase *defbase = BKE_object_defgroup_list(ob);
const int def_nr = BLI_findindex(defbase, dg);
@ -1001,7 +993,7 @@ float ED_vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum)
return get_vert_def_nr(ob, def_nr, vertnum);
}
void ED_vgroup_select_by_name(Object *ob, const char *name)
void vgroup_select_by_name(Object *ob, const char *name)
{
/* NOTE: `actdef == 0` signals on painting to create a new one,
* if a bone in pose-mode is selected. */
@ -1017,7 +1009,6 @@ void ED_vgroup_select_by_name(Object *ob, const char *name)
/* only in editmode */
static void vgroup_select_verts(Object *ob, int select)
{
using namespace blender;
const int def_nr = BKE_object_defgroup_active_index_get(ob) - 1;
const ListBase *defbase = BKE_object_defgroup_list(ob);
@ -1107,7 +1098,7 @@ static void vgroup_select_verts(Object *ob, int select)
}
else if (ob->type == OB_GREASE_PENCIL) {
GreasePencil *grease_pencil = static_cast<GreasePencil *>(ob->data);
blender::bke::greasepencil::select_from_group(*grease_pencil, def_group->name, bool(select));
bke::greasepencil::select_from_group(*grease_pencil, def_group->name, bool(select));
DEG_id_tag_update(&grease_pencil->id, ID_RECALC_GEOMETRY);
}
}
@ -1146,7 +1137,7 @@ static void vgroup_duplicate(Object *ob)
icdg = BKE_object_defgroup_active_index_get(ob) - 1;
/* TODO(@ideasman42): we might want to allow only copy selected verts here? */
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
if (dvert_array) {
for (i = 0; i < dvert_tot; i++) {
@ -1178,7 +1169,7 @@ static bool vgroup_normalize(Object *ob)
return false;
}
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
float weight_max = 0.0f;
@ -1238,7 +1229,7 @@ static void vgroup_levels_subset(Object *ob,
(((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 :
false;
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
@ -1262,7 +1253,7 @@ static void vgroup_levels_subset(Object *ob,
}
if (use_mirror && use_vert_sel) {
ED_vgroup_parray_mirror_sync(ob, dvert_array, dvert_tot, vgroup_validmap, vgroup_tot);
vgroup_parray_mirror_sync(ob, dvert_array, dvert_tot, vgroup_validmap, vgroup_tot);
}
MEM_freeN(dvert_array);
@ -1287,7 +1278,7 @@ static bool vgroup_normalize_all(Object *ob,
return false;
}
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
const ListBase *defbase = BKE_object_defgroup_list(ob);
@ -1498,7 +1489,7 @@ static void vgroup_invert_subset(Object *ob,
(((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 :
false;
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
for (int i = 0; i < dvert_tot; i++) {
@ -1527,12 +1518,11 @@ static void vgroup_invert_subset(Object *ob,
}
if (use_mirror && use_vert_sel) {
ED_vgroup_parray_mirror_sync(ob, dvert_array, dvert_tot, vgroup_validmap, vgroup_tot);
vgroup_parray_mirror_sync(ob, dvert_array, dvert_tot, vgroup_validmap, vgroup_tot);
}
if (auto_remove) {
ED_vgroup_parray_remove_zero(
dvert_array, dvert_tot, vgroup_validmap, vgroup_tot, 0.0f, false);
vgroup_parray_remove_zero(dvert_array, dvert_tot, vgroup_validmap, vgroup_tot, 0.0f, false);
}
MEM_freeN(dvert_array);
@ -1547,12 +1537,11 @@ static void vgroup_smooth_subset(Object *ob,
const int repeat,
const float fac_expand)
{
using namespace blender;
const float ifac = 1.0f - fac;
MDeformVert **dvert_array = nullptr;
int dvert_tot = 0;
blender::Array<int, 32> vgroup_subset_map(subset_count);
blender::Array<float, 32> vgroup_subset_weights(subset_count);
Array<int, 32> vgroup_subset_map(subset_count);
Array<float, 32> vgroup_subset_weights(subset_count);
const bool use_mirror = (ob->type == OB_MESH) ?
(((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 :
false;
@ -1577,18 +1566,18 @@ static void vgroup_smooth_subset(Object *ob,
STACK_DECLARE(verts_used);
BKE_object_defgroup_subset_to_index_array(vgroup_validmap, vgroup_tot, vgroup_subset_map.data());
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, false);
vgroup_subset_weights.fill(0.0f);
blender::Array<int> vert_to_edge_offsets;
blender::Array<int> vert_to_edge_indices;
blender::GroupedSpan<int> emap;
Array<int> vert_to_edge_offsets;
Array<int> vert_to_edge_indices;
GroupedSpan<int> emap;
if (bm) {
BM_mesh_elem_table_ensure(bm, BM_VERT);
BM_mesh_elem_index_ensure(bm, BM_VERT);
}
else {
emap = blender::bke::mesh::build_vert_to_edge_map(
emap = bke::mesh::build_vert_to_edge_map(
mesh->edges(), mesh->verts_num, vert_to_edge_offsets, vert_to_edge_indices);
}
@ -1632,7 +1621,7 @@ static void vgroup_smooth_subset(Object *ob,
const VArray<bool> select_vert = *attributes.lookup_or_default<bool>(
".select_vert", bke::AttrDomain::Point, false);
const blender::Span<int2> edges = mesh->edges();
const Span<int2> edges = mesh->edges();
for (int i = 0; i < dvert_tot; i++) {
if (IS_ME_VERT_WRITE(i)) {
for (int j = 0; j < emap[i].size(); j++) {
@ -1651,7 +1640,7 @@ static void vgroup_smooth_subset(Object *ob,
const int def_nr = vgroup_subset_map[subset_index];
int iter;
ED_vgroup_parray_to_weight_array(
vgroup_parray_to_weight_array(
(const MDeformVert **)dvert_array, dvert_tot, weight_accum_prev, def_nr);
memcpy(weight_accum_curr, weight_accum_prev, sizeof(*weight_accum_curr) * dvert_tot);
@ -1709,7 +1698,7 @@ static void vgroup_smooth_subset(Object *ob,
".select_vert", bke::AttrDomain::Point, false);
int j;
const blender::Span<int2> edges = mesh->edges();
const Span<int2> edges = mesh->edges();
/* checked already */
BLI_assert(IS_ME_VERT_WRITE(i));
@ -1738,7 +1727,7 @@ static void vgroup_smooth_subset(Object *ob,
std::swap(weight_accum_curr, weight_accum_prev);
}
ED_vgroup_parray_from_weight_array(dvert_array, dvert_tot, weight_accum_prev, def_nr, true);
vgroup_parray_from_weight_array(dvert_array, dvert_tot, weight_accum_prev, def_nr, true);
}
#undef IS_BM_VERT_READ
@ -1756,8 +1745,8 @@ static void vgroup_smooth_subset(Object *ob,
/* not so efficient to get 'dvert_array' again just so unselected verts are nullptr'd */
if (use_mirror) {
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, true);
ED_vgroup_parray_mirror_sync(ob, dvert_array, dvert_tot, vgroup_validmap, vgroup_tot);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, true);
vgroup_parray_mirror_sync(ob, dvert_array, dvert_tot, vgroup_validmap, vgroup_tot);
if (dvert_array) {
MEM_freeN(dvert_array);
}
@ -1802,7 +1791,7 @@ static int vgroup_limit_total_subset(Object *ob,
const bool use_vert_sel = vertex_group_use_vert_sel(ob);
int remove_tot = 0;
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
int num_to_drop = 0;
@ -1877,17 +1866,17 @@ static void vgroup_clean_subset(Object *ob,
(((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 :
false;
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
if (use_mirror && use_vert_sel) {
/* correct behavior in this case isn't well defined
* for now assume both sides are mirrored correctly,
* so cleaning one side also cleans the other */
ED_vgroup_parray_mirror_assign(ob, dvert_array, dvert_tot);
vgroup_parray_mirror_assign(ob, dvert_array, dvert_tot);
}
ED_vgroup_parray_remove_zero(
vgroup_parray_remove_zero(
dvert_array, dvert_tot, vgroup_validmap, vgroup_tot, epsilon, keep_single);
MEM_freeN(dvert_array);
@ -1906,14 +1895,14 @@ static void vgroup_quantize_subset(Object *ob,
const bool use_mirror = (ob->type == OB_MESH) ?
(((Mesh *)ob->data)->symmetry & ME_SYMMETRY_X) != 0 :
false;
ED_vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
vgroup_parray_alloc(static_cast<ID *>(ob->data), &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
const float steps_fl = steps;
MDeformVert *dv;
if (use_mirror && use_vert_sel) {
ED_vgroup_parray_mirror_assign(ob, dvert_array, dvert_tot);
vgroup_parray_mirror_assign(ob, dvert_array, dvert_tot);
}
for (int i = 0; i < dvert_tot; i++) {
@ -2003,15 +1992,14 @@ static void dvert_mirror_op(MDeformVert *dvert,
}
}
void ED_vgroup_mirror(Object *ob,
const bool mirror_weights,
const bool flip_vgroups,
const bool all_vgroups,
const bool use_topology,
int *r_totmirr,
int *r_totfail)
void vgroup_mirror(Object *ob,
const bool mirror_weights,
const bool flip_vgroups,
const bool all_vgroups,
const bool use_topology,
int *r_totmirr,
int *r_totfail)
{
using namespace blender;
/* TODO: vgroup locking.
* TODO: face masking. */
@ -2232,7 +2220,6 @@ static void vgroup_delete_active(Object *ob)
/* only in editmode */
static void vgroup_assign_verts(Object *ob, const float weight)
{
using namespace blender;
const int def_nr = BKE_object_defgroup_active_index_get(ob) - 1;
const ListBase *defbase = BKE_object_defgroup_list(ob);
@ -2316,7 +2303,7 @@ static void vgroup_assign_verts(Object *ob, const float weight)
GreasePencil *grease_pencil = static_cast<GreasePencil *>(ob->data);
const bDeformGroup *defgroup = static_cast<const bDeformGroup *>(
BLI_findlink(BKE_object_defgroup_list(ob), def_nr));
blender::bke::greasepencil::assign_to_vertex_group(*grease_pencil, defgroup->name, weight);
bke::greasepencil::assign_to_vertex_group(*grease_pencil, defgroup->name, weight);
}
}
@ -2350,7 +2337,7 @@ static bool vertex_group_supported_poll_ex(bContext *C, const Object *ob)
static bool vertex_group_supported_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
return vertex_group_supported_poll_ex(C, ob);
}
@ -2371,13 +2358,13 @@ static bool vertex_group_poll_ex(bContext *C, Object *ob)
static bool vertex_group_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
return vertex_group_poll_ex(C, ob);
}
static bool UNUSED_FUNCTION(vertex_group_poll_edit)(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
if (!vertex_group_supported_poll_ex(C, ob)) {
return false;
@ -2391,7 +2378,7 @@ static bool vertex_group_vert_poll_ex(bContext *C,
const bool needs_select,
const short ob_type_flag)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
if (!vertex_group_supported_poll_ex(C, ob)) {
return false;
@ -2444,7 +2431,7 @@ static bool vertex_group_mesh_vert_select_poll(bContext *C)
/* editmode _or_ weight paint vertex sel and active group unlocked */
static bool vertex_group_vert_select_unlocked_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
if (!vertex_group_supported_poll_ex(C, ob)) {
return false;
@ -2468,7 +2455,7 @@ static bool vertex_group_vert_select_unlocked_poll(bContext *C)
static bool vertex_group_vert_select_mesh_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
if (!vertex_group_supported_poll_ex(C, ob)) {
return false;
@ -2490,7 +2477,7 @@ static bool vertex_group_vert_select_mesh_poll(bContext *C)
static int vertex_group_add_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
BKE_object_defgroup_add(ob);
DEG_relations_tag_update(CTX_data_main(C));
@ -2524,7 +2511,7 @@ void OBJECT_OT_vertex_group_add(wmOperatorType *ot)
static int vertex_group_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
if (RNA_boolean_get(op->ptr, "all")) {
BKE_object_defgroup_remove_all(ob);
@ -2578,7 +2565,7 @@ void OBJECT_OT_vertex_group_remove(wmOperatorType *ot)
static int vertex_group_assign_exec(bContext *C, wmOperator * /*op*/)
{
ToolSettings *ts = CTX_data_tool_settings(C);
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
vgroup_assign_verts(ob, ts->vgroup_weight);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
@ -2615,7 +2602,7 @@ void OBJECT_OT_vertex_group_assign(wmOperatorType *ot)
static int vertex_group_assign_new_exec(bContext *C, wmOperator *op)
{
/* create new group... */
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
BKE_object_defgroup_add(ob);
/* assign selection to new group */
@ -2651,7 +2638,7 @@ static int vertex_group_remove_from_exec(bContext *C, wmOperator *op)
const bool use_all_groups = RNA_boolean_get(op->ptr, "use_all_groups");
const bool use_all_verts = RNA_boolean_get(op->ptr, "use_all_verts");
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
if (use_all_groups) {
if (BKE_object_defgroup_clear_all(ob, true) == false) {
@ -2708,7 +2695,7 @@ void OBJECT_OT_vertex_group_remove_from(wmOperatorType *ot)
static int vertex_group_select_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
if (!ob || ID_IS_LINKED(ob) || ID_IS_OVERRIDE_LIBRARY(ob)) {
return OPERATOR_CANCELLED;
@ -2744,7 +2731,7 @@ void OBJECT_OT_vertex_group_select(wmOperatorType *ot)
static int vertex_group_deselect_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
vgroup_select_verts(ob, 0);
DEG_id_tag_update(static_cast<ID *>(ob->data), ID_RECALC_SYNC_TO_EVAL | ID_RECALC_SELECT);
@ -2776,7 +2763,7 @@ void OBJECT_OT_vertex_group_deselect(wmOperatorType *ot)
static int vertex_group_copy_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
vgroup_duplicate(ob);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
@ -2810,7 +2797,7 @@ void OBJECT_OT_vertex_group_copy(wmOperatorType *ot)
static int vertex_group_levels_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
float offset = RNA_float_get(op->ptr, "offset");
float gain = RNA_float_get(op->ptr, "gain");
@ -2861,7 +2848,7 @@ void OBJECT_OT_vertex_group_levels(wmOperatorType *ot)
static int vertex_group_normalize_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
bool changed;
changed = vgroup_normalize(ob);
@ -2927,7 +2914,7 @@ static eVGroupSelect normalize_vertex_group_target(Object *ob)
static int vertex_group_normalize_all_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
eVGroupSelect target_group = normalize_vertex_group_target(ob);
@ -3103,7 +3090,7 @@ void OBJECT_OT_vertex_group_lock(wmOperatorType *ot)
static int vertex_group_invert_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
bool auto_assign = RNA_boolean_get(op->ptr, "auto_assign");
bool auto_remove = RNA_boolean_get(op->ptr, "auto_remove");
@ -3282,7 +3269,7 @@ void OBJECT_OT_vertex_group_clean(wmOperatorType *ot)
static int vertex_group_quantize_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
const int steps = RNA_int_get(op->ptr, "steps");
eVGroupSelect subset_type = static_cast<eVGroupSelect>(
@ -3393,16 +3380,16 @@ void OBJECT_OT_vertex_group_limit_total(wmOperatorType *ot)
static int vertex_group_mirror_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
int totmirr = 0, totfail = 0;
ED_vgroup_mirror(ob,
RNA_boolean_get(op->ptr, "mirror_weights"),
RNA_boolean_get(op->ptr, "flip_group_names"),
RNA_boolean_get(op->ptr, "all_groups"),
RNA_boolean_get(op->ptr, "use_topology"),
&totmirr,
&totfail);
vgroup_mirror(ob,
RNA_boolean_get(op->ptr, "mirror_weights"),
RNA_boolean_get(op->ptr, "flip_group_names"),
RNA_boolean_get(op->ptr, "all_groups"),
RNA_boolean_get(op->ptr, "use_topology"),
&totmirr,
&totfail);
ED_mesh_report_mirror(op, totmirr, totfail);
@ -3451,13 +3438,13 @@ void OBJECT_OT_vertex_group_mirror(wmOperatorType *ot)
static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *op)
{
Object *obact = ED_object_context(C);
Object *obact = context_object(C);
int changed_tot = 0;
int fail = 0;
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) {
if (obact != ob && BKE_object_supports_vertex_groups(ob)) {
if (ED_vgroup_array_copy(ob, obact)) {
if (vgroup_array_copy(ob, obact)) {
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob);
@ -3505,7 +3492,7 @@ void OBJECT_OT_vertex_group_copy_to_selected(wmOperatorType *ot)
static int set_active_group_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
int nr = RNA_enum_get(op->ptr, "group");
BLI_assert(nr + 1 >= 0);
@ -3526,7 +3513,7 @@ static const EnumPropertyItem *vgroup_itemf(bContext *C,
return rna_enum_dummy_NULL_items;
}
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
EnumPropertyItem tmp = {0, "", 0, "", ""};
EnumPropertyItem *item = nullptr;
bDeformGroup *def;
@ -3745,7 +3732,7 @@ enum {
static int vertex_group_sort_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
char *name_array;
int ret;
int sort_type = RNA_enum_get(op->ptr, "sort_type");
@ -3810,7 +3797,7 @@ void OBJECT_OT_vertex_group_sort(wmOperatorType *ot)
static int vgroup_move_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
bDeformGroup *def;
char *name_array;
int dir = RNA_enum_get(op->ptr, "direction");
@ -3878,7 +3865,6 @@ void OBJECT_OT_vertex_group_move(wmOperatorType *ot)
static void vgroup_copy_active_to_sel_single(Object *ob, const int def_nr)
{
using namespace blender;
MDeformVert *dvert_act;
Mesh *mesh = static_cast<Mesh *>(ob->data);
@ -3961,7 +3947,7 @@ static bool check_vertex_group_accessible(wmOperator *op, Object *ob, int def_nr
static int vertex_weight_paste_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
const int def_nr = RNA_int_get(op->ptr, "weight_group");
if (!check_vertex_group_accessible(op, ob, def_nr)) {
@ -4012,7 +3998,7 @@ void OBJECT_OT_vertex_weight_paste(wmOperatorType *ot)
static int vertex_weight_delete_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
const int def_nr = RNA_int_get(op->ptr, "weight_group");
if (!check_vertex_group_accessible(op, ob, def_nr)) {
@ -4062,7 +4048,7 @@ void OBJECT_OT_vertex_weight_delete(wmOperatorType *ot)
static int vertex_weight_set_active_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
const int wg_index = RNA_int_get(op->ptr, "weight_group");
if (wg_index != -1) {
@ -4109,7 +4095,7 @@ void OBJECT_OT_vertex_weight_set_active(wmOperatorType *ot)
static int vertex_weight_normalize_active_vertex_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
ToolSettings *ts = CTX_data_tool_settings(C);
eVGroupSelect subset_type = static_cast<eVGroupSelect>(ts->vgroupsubset);
bool changed;
@ -4148,7 +4134,7 @@ void OBJECT_OT_vertex_weight_normalize_active_vertex(wmOperatorType *ot)
static int vertex_weight_copy_exec(bContext *C, wmOperator * /*op*/)
{
Object *ob = ED_object_context(C);
Object *ob = context_object(C);
ToolSettings *ts = CTX_data_tool_settings(C);
eVGroupSelect subset_type = static_cast<eVGroupSelect>(ts->vgroupsubset);
@ -4176,3 +4162,5 @@ void OBJECT_OT_vertex_weight_copy(wmOperatorType *ot)
}
/** \} */
} // namespace blender::ed::object

View File

@ -34,6 +34,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
/* Volume Add */
static Object *object_volume_add(bContext *C, wmOperator *op, const char *name)
@ -41,10 +43,9 @@ static Object *object_volume_add(bContext *C, wmOperator *op, const char *name)
ushort local_view_bits;
float loc[3], rot[3];
ED_object_add_generic_get_opts(
C, op, 'Z', loc, rot, nullptr, nullptr, &local_view_bits, nullptr);
add_generic_get_opts(C, op, 'Z', loc, rot, nullptr, nullptr, &local_view_bits, nullptr);
return ED_object_add_type(C, OB_VOLUME, name, loc, rot, false, local_view_bits);
return add_type(C, OB_VOLUME, name, loc, rot, false, local_view_bits);
}
static int object_volume_add_exec(bContext *C, wmOperator *op)
@ -66,7 +67,7 @@ void OBJECT_OT_volume_add(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
ED_object_add_generic_props(ot, false);
add_generic_props(ot, false);
}
/* Volume Import */
@ -174,5 +175,7 @@ void OBJECT_OT_volume_import(wmOperatorType *ot)
"Detect Sequences",
"Automatically detect animated sequences in selected volume files (based on file names)");
ED_object_add_generic_props(ot, false);
add_generic_props(ot, false);
}
} // namespace blender::ed::object

View File

@ -27,6 +27,8 @@
#include "object_intern.hh"
namespace blender::ed::object {
static void object_warp_calc_view_matrix(float r_mat_view[4][4],
float r_center_view[3],
Object *obedit,
@ -169,7 +171,7 @@ static int object_warp_verts_exec(bContext *C, wmOperator *op)
float min, max;
if (ED_object_edit_report_if_shape_key_is_locked(obedit, op->reports)) {
if (shape_key_report_if_locked(obedit, op->reports)) {
return OPERATOR_CANCELLED;
}
@ -299,3 +301,5 @@ void TRANSFORM_OT_vertex_warp(wmOperatorType *ot)
ot->srna, "center", 3, nullptr, -FLT_MAX, FLT_MAX, "Center", "", -FLT_MAX, FLT_MAX);
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
}
} // namespace blender::ed::object

View File

@ -55,7 +55,7 @@
static int surface_slot_add_exec(bContext *C, wmOperator * /*op*/)
{
DynamicPaintModifierData *pmd = nullptr;
Object *cObject = ED_object_context(C);
Object *cObject = blender::ed::object::context_object(C);
DynamicPaintCanvasSettings *canvas;
DynamicPaintSurface *surface;
@ -98,7 +98,7 @@ void DPAINT_OT_surface_slot_add(wmOperatorType *ot)
static int surface_slot_remove_exec(bContext *C, wmOperator * /*op*/)
{
DynamicPaintModifierData *pmd = nullptr;
Object *obj_ctx = ED_object_context(C);
Object *obj_ctx = blender::ed::object::context_object(C);
DynamicPaintCanvasSettings *canvas;
DynamicPaintSurface *surface;
int id = 0;
@ -146,7 +146,7 @@ void DPAINT_OT_surface_slot_remove(wmOperatorType *ot)
static int type_toggle_exec(bContext *C, wmOperator *op)
{
Object *cObject = ED_object_context(C);
Object *cObject = blender::ed::object::context_object(C);
Scene *scene = CTX_data_scene(C);
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)BKE_modifiers_findby_type(
cObject, eModifierType_DynamicPaint);
@ -207,7 +207,7 @@ void DPAINT_OT_type_toggle(wmOperatorType *ot)
static int output_toggle_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
DynamicPaintSurface *surface;
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)BKE_modifiers_findby_type(
ob, eModifierType_DynamicPaint);
@ -461,7 +461,7 @@ static void dpaint_bake_startjob(void *customdata, wmJobWorkerStatus *worker_sta
static int dynamicpaint_bake_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Object *ob_ = ED_object_context(C);
Object *ob_ = blender::ed::object::context_object(C);
Object *object_eval = DEG_get_evaluated_object(depsgraph, ob_);
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);

View File

@ -5537,7 +5537,7 @@ static int particle_edit_toggle_exec(bContext *C, wmOperator *op)
const bool is_mode_set = (ob->mode & mode_flag) != 0;
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, eObjectMode(mode_flag), op->reports)) {
if (!blender::ed::object::mode_compat_set(C, ob, eObjectMode(mode_flag), op->reports)) {
return OPERATOR_CANCELLED;
}
}

View File

@ -68,7 +68,7 @@ static float I[4][4] = {
static int particle_system_add_exec(bContext *C, wmOperator * /*op*/)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
Scene *scene = CTX_data_scene(C);
if (!scene || !ob) {
@ -101,7 +101,7 @@ void OBJECT_OT_particle_system_add(wmOperatorType *ot)
static int particle_system_remove_exec(bContext *C, wmOperator * /*op*/)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
int mode_orig;
@ -639,7 +639,7 @@ static int disconnect_hair_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
ParticleSystem *psys = nullptr;
const bool all = RNA_boolean_get(op->ptr, "all");
@ -936,7 +936,7 @@ static int connect_hair_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
ParticleSystem *psys = nullptr;
const bool all = RNA_boolean_get(op->ptr, "all");
bool any_connected = false;
@ -1222,7 +1222,7 @@ static bool copy_particle_systems_poll(bContext *C)
return false;
}
ob = ED_object_active_context(C);
ob = blender::ed::object::context_active_object(C);
if (BLI_listbase_is_empty(&ob->particlesystem)) {
return false;
}
@ -1236,7 +1236,7 @@ static int copy_particle_systems_exec(bContext *C, wmOperator *op)
const bool remove_target_particles = RNA_boolean_get(op->ptr, "remove_target_particles");
const bool use_active = RNA_boolean_get(op->ptr, "use_active");
Scene *scene = CTX_data_scene(C);
Object *ob_from = ED_object_active_context(C);
Object *ob_from = blender::ed::object::context_active_object(C);
ParticleSystem *psys_from = nullptr;
if (use_active) {
@ -1328,7 +1328,7 @@ static bool duplicate_particle_systems_poll(bContext *C)
if (!ED_operator_object_active_local_editable(C)) {
return false;
}
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
if (BLI_listbase_is_empty(&ob->particlesystem)) {
return false;
}
@ -1339,7 +1339,7 @@ static int duplicate_particle_systems_exec(bContext *C, wmOperator *op)
{
const bool duplicate_settings = RNA_boolean_get(op->ptr, "use_duplicate_settings");
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
/* Context pointer is only valid in the Properties Editor. */
ParticleSystem *psys = static_cast<ParticleSystem *>(
CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data);

View File

@ -134,7 +134,7 @@ static bool fluid_initjob(
{
FluidModifierData *fmd = nullptr;
FluidDomainSettings *fds;
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
fmd = (FluidModifierData *)BKE_modifiers_findby_type(ob, eModifierType_Fluid);
if (!fmd) {
@ -594,7 +594,7 @@ static int fluid_free_exec(bContext *C, wmOperator *op)
{
FluidModifierData *fmd = nullptr;
FluidDomainSettings *fds;
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
Scene *scene = CTX_data_scene(C);
/*
@ -659,7 +659,7 @@ static int fluid_pause_exec(bContext *C, wmOperator *op)
{
FluidModifierData *fmd = nullptr;
FluidDomainSettings *fds;
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
/*
* Get modifier data

View File

@ -61,7 +61,7 @@ static bool ED_operator_rigidbody_con_active_poll(bContext *C)
}
if (ED_operator_object_active_editable(C)) {
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return (ob && ob->rigidbody_constraint);
}
return false;

View File

@ -61,7 +61,7 @@ static bool ED_operator_rigidbody_active_poll(bContext *C)
}
if (ED_operator_object_active_editable(C)) {
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return (ob && ob->rigidbody_object);
}
@ -76,7 +76,7 @@ static bool ED_operator_rigidbody_add_poll(bContext *C)
}
if (ED_operator_object_active_editable(C)) {
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return (ob && ob->type == OB_MESH);
}
@ -107,7 +107,7 @@ static int rigidbody_object_add_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
int type = RNA_enum_get(op->ptr, "type");
bool changed;
@ -154,7 +154,7 @@ static int rigidbody_object_remove_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
bool changed = false;
/* apply to active object */

View File

@ -124,7 +124,7 @@ static bool object_array_for_shading_edit_mode_enabled_filter(const Object *ob,
static Vector<Object *> object_array_for_shading_edit_mode_enabled(bContext *C)
{
return ED_object_array_in_mode_or_selected(
return blender::ed::object::objects_in_mode_or_selected(
C, object_array_for_shading_edit_mode_enabled_filter, C);
}
@ -141,7 +141,7 @@ static bool object_array_for_shading_edit_mode_disabled_filter(const Object *ob,
static Vector<Object *> object_array_for_shading_edit_mode_disabled(bContext *C)
{
return ED_object_array_in_mode_or_selected(
return blender::ed::object::objects_in_mode_or_selected(
C, object_array_for_shading_edit_mode_disabled_filter, C);
}
@ -172,7 +172,7 @@ static bool object_materials_supported_poll_ex(bContext *C, const Object *ob)
static bool object_materials_supported_poll(bContext *C)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
return object_materials_supported_poll_ex(C, ob);
}
@ -185,7 +185,7 @@ static bool object_materials_supported_poll(bContext *C)
static int material_slot_add_exec(bContext *C, wmOperator * /*op*/)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (!ob) {
return OPERATOR_CANCELLED;
@ -229,7 +229,7 @@ void OBJECT_OT_material_slot_add(wmOperatorType *ot)
static int material_slot_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
if (!ob) {
return OPERATOR_CANCELLED;
@ -532,7 +532,7 @@ void OBJECT_OT_material_slot_deselect(wmOperatorType *ot)
static int material_slot_copy_exec(bContext *C, wmOperator * /*op*/)
{
Main *bmain = CTX_data_main(C);
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
Material ***matar_obdata;
if (!ob || !(matar_obdata = BKE_object_material_array_p(ob))) {
@ -592,7 +592,7 @@ void OBJECT_OT_material_slot_copy(wmOperatorType *ot)
static int material_slot_move_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Object *ob = blender::ed::object::context_object(C);
uint *slot_remap;
int index_pair[2];

View File

@ -295,7 +295,7 @@ bool ED_operator_region_outliner_active(bContext *C)
bool ED_operator_outliner_active_no_editobject(bContext *C)
{
if (ed_spacetype_test(C, SPACE_OUTLINER)) {
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
Object *obedit = CTX_data_edit_object(C);
if (ob && ob == obedit) {
return false;
@ -406,7 +406,7 @@ static bool ed_object_hidden(const Object *ob)
bool ED_operator_object_active(bContext *C)
{
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return ((ob != nullptr) && !ed_object_hidden(ob));
}
@ -432,7 +432,7 @@ bool ED_operator_object_active_editable_ex(bContext *C, const Object *ob)
bool ED_operator_object_active_editable(bContext *C)
{
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return ED_operator_object_active_editable_ex(C, ob);
}
@ -443,20 +443,20 @@ bool ED_operator_object_active_local_editable_ex(bContext *C, const Object *ob)
bool ED_operator_object_active_local_editable(bContext *C)
{
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return ED_operator_object_active_editable_ex(C, ob) && !ID_IS_OVERRIDE_LIBRARY(ob);
}
bool ED_operator_object_active_editable_mesh(bContext *C)
{
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return ((ob != nullptr) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob) && (ob->type == OB_MESH) &&
!ID_IS_LINKED(ob->data) && !ID_IS_OVERRIDE_LIBRARY(ob->data));
}
bool ED_operator_object_active_editable_font(bContext *C)
{
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
return ((ob != nullptr) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob) && (ob->type == OB_FONT) &&
!ID_IS_LINKED(ob->data) && !ID_IS_OVERRIDE_LIBRARY(ob->data));
}
@ -521,14 +521,14 @@ static bool ed_operator_posemode_exclusive_ex(bContext *C, Object *obact)
bool ED_operator_posemode_exclusive(bContext *C)
{
Object *obact = ED_object_active_context(C);
Object *obact = blender::ed::object::context_active_object(C);
return ed_operator_posemode_exclusive_ex(C, obact);
}
bool ED_operator_object_active_local_editable_posemode_exclusive(bContext *C)
{
Object *obact = ED_object_active_context(C);
Object *obact = blender::ed::object::context_active_object(C);
if (!ed_operator_posemode_exclusive_ex(C, obact)) {
return false;

View File

@ -145,7 +145,7 @@ static void workspace_change_update(WorkSpace *workspace_new,
eObjectMode mode_new = workspace_new->object_mode;
if (mode_old != mode_new) {
ED_object_mode_set(C, mode_new);
blender::ed::object::mode_set(C, mode_new);
}
#endif
}
@ -208,7 +208,7 @@ bool ED_workspace_change(WorkSpace *workspace_new, bContext *C, wmWindowManager
/* Automatic mode switching. */
if (workspace_new->object_mode != workspace_old->object_mode) {
ED_object_mode_set(C, eObjectMode(workspace_new->object_mode));
blender::ed::object::mode_set(C, eObjectMode(workspace_new->object_mode));
}
return true;

View File

@ -315,7 +315,7 @@ static int curves_sculptmode_toggle_exec(bContext *C, wmOperator *op)
const bool is_mode_set = ob->mode == OB_MODE_SCULPT_CURVES;
if (is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, OB_MODE_SCULPT_CURVES, op->reports)) {
if (!object::mode_compat_set(C, ob, OB_MODE_SCULPT_CURVES, op->reports)) {
return OPERATOR_CANCELLED;
}
}

View File

@ -258,7 +258,7 @@ static int grease_pencil_draw_mode_toggle_exec(bContext *C, wmOperator *op)
const bool is_mode_set = ob->mode == OB_MODE_PAINT_GREASE_PENCIL;
if (is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, OB_MODE_PAINT_GREASE_PENCIL, op->reports)) {
if (!object::mode_compat_set(C, ob, OB_MODE_PAINT_GREASE_PENCIL, op->reports)) {
return OPERATOR_CANCELLED;
}
}

View File

@ -973,6 +973,7 @@ static bool texture_paint_toggle_poll(bContext *C)
static int texture_paint_toggle_exec(bContext *C, wmOperator *op)
{
using namespace blender::ed;
wmMsgBus *mbus = CTX_wm_message_bus(C);
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
@ -981,7 +982,7 @@ static int texture_paint_toggle_exec(bContext *C, wmOperator *op)
const bool is_mode_set = (ob->mode & mode_flag) != 0;
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, static_cast<eObjectMode>(mode_flag), op->reports)) {
if (!object::mode_compat_set(C, ob, eObjectMode(mode_flag), op->reports)) {
return OPERATOR_CANCELLED;
}
}

View File

@ -6646,7 +6646,7 @@ static void default_paint_slot_color_get(int layer_type, Material *ma, float col
static bool proj_paint_add_slot(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
Scene *scene = CTX_data_scene(C);
Material *ma;
Image *ima = nullptr;
@ -6817,7 +6817,7 @@ static int texture_paint_add_texture_paint_slot_invoke(bContext *C,
wmOperator *op,
const wmEvent * /*event*/)
{
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
Material *ma = BKE_object_material_get(ob, ob->actcol);
int type = get_texture_layer_type(op, "type");
@ -6841,7 +6841,7 @@ static void texture_paint_add_texture_paint_slot_ui(bContext *C, wmOperator *op)
uiLayout *layout = op->layout;
uiLayoutSetPropSep(layout, true);
uiLayoutSetPropDecorate(layout, false);
Object *ob = ED_object_active_context(C);
Object *ob = blender::ed::object::context_active_object(C);
ePaintCanvasSource slot_type = PAINT_CANVAS_SOURCE_IMAGE;
if (ob->mode == OB_MODE_SCULPT) {

View File

@ -336,7 +336,7 @@ void mode_enter_generic(
/* weight paint specific */
ED_mesh_mirror_spatial_table_end(ob);
ED_vgroup_sync_from_pose(ob);
blender::ed::object::vgroup_sync_from_pose(ob);
}
else {
BLI_assert(0);
@ -822,7 +822,7 @@ static int vpaint_mode_toggle_exec(bContext *C, wmOperator *op)
ToolSettings *ts = scene->toolsettings;
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, (eObjectMode)mode_flag, op->reports)) {
if (!blender::ed::object::mode_compat_set(C, ob, (eObjectMode)mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}

View File

@ -1661,7 +1661,7 @@ static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op)
ToolSettings *ts = scene->toolsettings;
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, (eObjectMode)mode_flag, op->reports)) {
if (!blender::ed::object::mode_compat_set(C, ob, (eObjectMode)mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
@ -1679,7 +1679,7 @@ static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op)
}
/* Prepare armature posemode. */
ED_object_posemode_set_for_weight_paint(C, bmain, ob, is_mode_set);
blender::ed::object::posemode_set_for_weight_paint(C, bmain, ob, is_mode_set);
if (ob->type == OB_MESH) {
/* Weight-paint works by overriding colors in mesh,

View File

@ -514,7 +514,7 @@ static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
const bool is_mode_set = (ob->mode & mode_flag) != 0;
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, eObjectMode(mode_flag), op->reports)) {
if (!object::mode_compat_set(C, ob, eObjectMode(mode_flag), op->reports)) {
return OPERATOR_CANCELLED;
}
}

View File

@ -1883,10 +1883,10 @@ static void sculpt_undosys_step_decode(
/* Pass. */
}
else {
ED_object_mode_generic_exit(bmain, depsgraph, scene, ob);
object::mode_generic_exit(bmain, depsgraph, scene, ob);
/* Sculpt needs evaluated state.
* NOTE: needs to be done here, as #ED_object_mode_generic_exit will usually invalidate
* NOTE: needs to be done here, as #object::mode_generic_exit will usually invalidate
* (some) evaluated data. */
BKE_scene_graph_evaluated_ensure(depsgraph, bmain);

View File

@ -95,7 +95,7 @@ void ED_spacetypes_init()
asset::operatortypes_asset();
ED_operatortypes_gpencil_legacy();
ED_operatortypes_grease_pencil();
ED_operatortypes_object();
object::operatortypes_object();
ED_operatortypes_lattice();
ED_operatortypes_mesh();
ED_operatortypes_geometry();
@ -148,6 +148,7 @@ void ED_spacetypes_init()
void ED_spacemacros_init()
{
using namespace blender::ed;
/* Macros must go last since they reference other operators.
* They need to be registered after python operators too. */
ED_operatormacros_armature();
@ -155,7 +156,7 @@ void ED_spacemacros_init()
ED_operatormacros_uvedit();
ED_operatormacros_metaball();
ED_operatormacros_node();
ED_operatormacros_object();
object::operatormacros_object();
ED_operatormacros_file();
ED_operatormacros_graph();
ED_operatormacros_action();
@ -180,12 +181,13 @@ void ED_spacemacros_init()
void ED_spacetypes_keymap(wmKeyConfig *keyconf)
{
using namespace blender::ed;
ED_keymap_screen(keyconf);
ED_keymap_anim(keyconf);
ED_keymap_animchannels(keyconf);
ED_keymap_gpencil_legacy(keyconf);
ED_keymap_grease_pencil(keyconf);
ED_keymap_object(keyconf);
object::keymap_object(keyconf);
ED_keymap_lattice(keyconf);
ED_keymap_mesh(keyconf);
ED_keymap_uvedit(keyconf);

View File

@ -1021,7 +1021,7 @@ static void image_undosys_step_decode(
}
if (us->paint_mode == PaintMode::Texture3D) {
ED_object_mode_set_ex(C, OB_MODE_TEXTURE_PAINT, false, nullptr);
blender::ed::object::mode_set_ex(C, OB_MODE_TEXTURE_PAINT, false, nullptr);
}
/* Refresh texture slots. */

View File

@ -114,7 +114,7 @@ static int mouse_nla_tracks(bContext *C, bAnimContext *ac, int track_index, shor
/* set selection status */
if (selectmode == SELECT_INVERT) {
/* swap select */
ED_object_base_select(base, BA_INVERT);
blender::ed::object::base_select(base, blender::ed::object::BA_INVERT);
if (adt) {
adt->flag ^= ADT_UI_SELECTED;
@ -125,21 +125,21 @@ static int mouse_nla_tracks(bContext *C, bAnimContext *ac, int track_index, shor
/* TODO: should this deselect all other types of tracks too? */
BKE_view_layer_synced_ensure(ac->scene, view_layer);
LISTBASE_FOREACH (Base *, b, BKE_view_layer_object_bases_get(view_layer)) {
ED_object_base_select(b, BA_DESELECT);
blender::ed::object::base_select(b, blender::ed::object::BA_DESELECT);
if (b->object->adt) {
b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE);
}
}
/* select object now */
ED_object_base_select(base, BA_SELECT);
blender::ed::object::base_select(base, blender::ed::object::BA_SELECT);
if (adt) {
adt->flag |= ADT_UI_SELECTED;
}
}
/* change active object - regardless of whether it is now selected [#37883] */
ED_object_base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */
blender::ed::object::base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */
if ((adt) && (adt->flag & ADT_UI_SELECTED)) {
adt->flag |= ADT_UI_ACTIVE;

View File

@ -823,7 +823,7 @@ static int collection_instance_exec(bContext *C, wmOperator * /*op*/)
GSET_ITER (collections_to_edit_iter, data.collections_to_edit) {
Collection *collection = static_cast<Collection *>(
BLI_gsetIterator_getKey(&collections_to_edit_iter));
Object *ob = ED_object_add_type(
Object *ob = object::add_type(
C, OB_EMPTY, collection->id.name + 2, scene->cursor.location, nullptr, false, 0);
ob->instance_collection = collection;
ob->transflag |= OB_DUPLICOLLECTION;

View File

@ -386,7 +386,7 @@ static void parent_drop_set_parents(bContext *C,
continue;
}
if (ED_object_parent_set(
if (object::parent_set(
reports, C, scene, object, parent, parent_type, false, keep_transform, nullptr))
{
parent_set = true;
@ -435,7 +435,7 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
op->reports,
static_cast<wmDragID *>(drag->ids.first),
par,
PAR_OBJECT,
object::PAR_OBJECT,
event->modifier & KM_ALT);
return OPERATOR_FINISHED;
@ -518,8 +518,9 @@ static int parent_clear_invoke(bContext *C, wmOperator * /*op*/, const wmEvent *
if (GS(drag_id->id->name) == ID_OB) {
Object *object = (Object *)drag_id->id;
ED_object_parent_clear(
object, (event->modifier & KM_ALT) ? CLEAR_PARENT_KEEP_TRANSFORM : CLEAR_PARENT_ALL);
object::parent_clear(object,
(event->modifier & KM_ALT) ? object::CLEAR_PARENT_KEEP_TRANSFORM :
object::CLEAR_PARENT_ALL);
}
}
@ -587,7 +588,7 @@ static int scene_drop_invoke(bContext *C, wmOperator * /*op*/, const wmEvent *ev
BKE_view_layer_synced_ensure(scene, view_layer);
Base *base = BKE_view_layer_base_find(view_layer, ob);
if (base) {
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
}
}
@ -924,7 +925,7 @@ static void datastack_drop_link(bContext *C, StackDropData *drop_data)
switch (drop_data->drag_tselem->type) {
case TSE_MODIFIER_BASE:
ED_object_modifier_link(C, ob_dst, drop_data->ob_parent);
object::modifier_link(C, ob_dst, drop_data->ob_parent);
break;
case TSE_CONSTRAINT_BASE: {
ListBase *src;
@ -945,7 +946,7 @@ static void datastack_drop_link(bContext *C, StackDropData *drop_data)
dst = &ob_dst->constraints;
}
ED_object_constraint_link(bmain, ob_dst, dst, src);
object::constraint_link(bmain, ob_dst, dst, src);
break;
}
case TSE_GPENCIL_EFFECT_BASE:
@ -953,7 +954,7 @@ static void datastack_drop_link(bContext *C, StackDropData *drop_data)
return;
}
ED_object_shaderfx_link(ob_dst, drop_data->ob_parent);
object::shaderfx_link(ob_dst, drop_data->ob_parent);
break;
}
}
@ -968,28 +969,28 @@ static void datastack_drop_copy(bContext *C, StackDropData *drop_data)
switch (drop_data->drag_tselem->type) {
case TSE_MODIFIER:
if (drop_data->ob_parent->type == OB_GPENCIL_LEGACY && ob_dst->type == OB_GPENCIL_LEGACY) {
ED_object_gpencil_modifier_copy_to_object(
object::gpencil_modifier_copy_to_object(
ob_dst, static_cast<GpencilModifierData *>(drop_data->drag_directdata));
}
else if (drop_data->ob_parent->type != OB_GPENCIL_LEGACY &&
ob_dst->type != OB_GPENCIL_LEGACY)
{
ED_object_modifier_copy_to_object(C,
ob_dst,
drop_data->ob_parent,
static_cast<ModifierData *>(drop_data->drag_directdata));
object::modifier_copy_to_object(C,
ob_dst,
drop_data->ob_parent,
static_cast<ModifierData *>(drop_data->drag_directdata));
}
break;
case TSE_CONSTRAINT:
if (tselem->type == TSE_POSE_CHANNEL) {
ED_object_constraint_copy_for_pose(
object::constraint_copy_for_pose(
bmain,
ob_dst,
static_cast<bPoseChannel *>(drop_data->drop_te->directdata),
static_cast<bConstraint *>(drop_data->drag_directdata));
}
else {
ED_object_constraint_copy_for_object(
object::constraint_copy_for_object(
bmain, ob_dst, static_cast<bConstraint *>(drop_data->drag_directdata));
}
break;
@ -998,7 +999,7 @@ static void datastack_drop_copy(bContext *C, StackDropData *drop_data)
return;
}
ED_object_shaderfx_copy(ob_dst, static_cast<ShaderFxData *>(drop_data->drag_directdata));
object::shaderfx_copy(ob_dst, static_cast<ShaderFxData *>(drop_data->drag_directdata));
break;
}
}
@ -1024,17 +1025,17 @@ static void datastack_drop_reorder(bContext *C, ReportList *reports, StackDropDa
if (ob->type == OB_GPENCIL_LEGACY) {
index = outliner_get_insert_index(
drag_te, drop_te, insert_type, &ob->greasepencil_modifiers);
ED_object_gpencil_modifier_move_to_index(
object::gpencil_modifier_move_to_index(
reports, ob, static_cast<GpencilModifierData *>(drop_data->drag_directdata), index);
}
else {
index = outliner_get_insert_index(drag_te, drop_te, insert_type, &ob->modifiers);
ED_object_modifier_move_to_index(reports,
RPT_WARNING,
ob,
static_cast<ModifierData *>(drop_data->drag_directdata),
index,
true);
object::modifier_move_to_index(reports,
RPT_WARNING,
ob,
static_cast<ModifierData *>(drop_data->drag_directdata),
index,
true);
}
break;
case TSE_CONSTRAINT:
@ -1045,13 +1046,13 @@ static void datastack_drop_reorder(bContext *C, ReportList *reports, StackDropDa
else {
index = outliner_get_insert_index(drag_te, drop_te, insert_type, &ob->constraints);
}
ED_object_constraint_move_to_index(
object::constraint_move_to_index(
ob, static_cast<bConstraint *>(drop_data->drag_directdata), index);
break;
case TSE_GPENCIL_EFFECT:
index = outliner_get_insert_index(drag_te, drop_te, insert_type, &ob->shader_fx);
ED_object_shaderfx_move_to_index(
object::shaderfx_move_to_index(
reports, ob, static_cast<ShaderFxData *>(drop_data->drag_directdata), index);
}
}

View File

@ -90,16 +90,16 @@ static void do_outliner_item_editmode_toggle(bContext *C, Scene *scene, Base *ba
bool changed = false;
if (BKE_object_is_in_editmode(ob)) {
changed = ED_object_editmode_exit_ex(bmain, scene, ob, EM_FREEDATA);
changed = object::editmode_exit_ex(bmain, scene, ob, object::EM_FREEDATA);
if (changed) {
ED_object_base_select(base, BA_DESELECT);
object::base_select(base, object::BA_DESELECT);
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, nullptr);
}
}
else {
changed = ED_object_editmode_enter_ex(CTX_data_main(C), scene, ob, EM_NO_CONTEXT);
changed = object::editmode_enter_ex(CTX_data_main(C), scene, ob, object::EM_NO_CONTEXT);
if (changed) {
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_MODE, nullptr);
}
}
@ -130,14 +130,14 @@ static void do_outliner_item_posemode_toggle(bContext *C, Scene *scene, Base *ba
if (ob->mode & OB_MODE_POSE) {
changed = ED_object_posemode_exit_ex(bmain, ob);
if (changed) {
ED_object_base_select(base, BA_DESELECT);
object::base_select(base, object::BA_DESELECT);
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, nullptr);
}
}
else {
changed = ED_object_posemode_enter_ex(bmain, ob);
if (changed) {
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_POSE, nullptr);
}
}
@ -165,7 +165,7 @@ static void do_outliner_item_mode_toggle_generic(bContext *C, TreeViewContext *t
const eObjectMode active_mode = (eObjectMode)tvc->obact->mode;
ED_undo_group_begin(C);
if (ED_object_mode_set(C, OB_MODE_OBJECT)) {
if (object::mode_set(C, OB_MODE_OBJECT)) {
BKE_view_layer_synced_ensure(tvc->scene, tvc->view_layer);
Base *base_active = BKE_view_layer_base_find(tvc->view_layer, tvc->obact);
if (base_active != base) {
@ -175,7 +175,7 @@ static void do_outliner_item_mode_toggle_generic(bContext *C, TreeViewContext *t
ED_undo_push(C, "Change Active");
/* Operator call does undo push. */
ED_object_mode_set(C, active_mode);
object::mode_set(C, active_mode);
ED_outliner_select_sync_from_object_tag(C);
}
}
@ -250,7 +250,7 @@ static void do_outliner_object_select_recursive(const Scene *scene,
if (((base->flag & BASE_ENABLED_AND_MAYBE_VISIBLE_IN_VIEWPORT) != 0) &&
BKE_object_is_child_recursive(ob_parent, ob))
{
ED_object_base_select(base, select ? BA_SELECT : BA_DESELECT);
object::base_select(base, select ? object::BA_SELECT : object::BA_DESELECT);
}
}
}
@ -337,7 +337,7 @@ static void tree_element_object_activate(bContext *C,
if (object_mode == OB_MODE_OBJECT) {
Main *bmain = CTX_data_main(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
ED_object_mode_generic_exit(bmain, depsgraph, scene, base->object);
object::mode_generic_exit(bmain, depsgraph, scene, base->object);
}
if (!BKE_object_is_mode_compat(base->object, object_mode)) {
base = nullptr;
@ -350,13 +350,13 @@ static void tree_element_object_activate(bContext *C,
if (set == OL_SETSEL_EXTEND) {
/* swap select */
if (base->flag & BASE_SELECTED) {
ED_object_base_select(base, BA_DESELECT);
object::base_select(base, object::BA_DESELECT);
if (parent_tselem) {
parent_tselem->flag &= ~TSE_SELECTED;
}
}
else {
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
if (parent_tselem) {
parent_tselem->flag |= TSE_SELECTED;
}
@ -378,7 +378,7 @@ static void tree_element_object_activate(bContext *C,
{
BKE_view_layer_base_deselect_all(scene, view_layer);
}
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
if (parent_tselem) {
parent_tselem->flag |= TSE_SELECTED;
}
@ -392,7 +392,7 @@ static void tree_element_object_activate(bContext *C,
if (set != OL_SETSEL_NONE) {
if (!recursive) {
ED_object_base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */
object::base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */
}
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
@ -1472,11 +1472,11 @@ static void do_outliner_item_activate_tree_element(bContext *C,
BKE_view_layer_synced_ensure(tvc->scene, tvc->view_layer);
if (extend) {
eObjectSelect_Mode sel = BA_SELECT;
object::eObjectSelect_Mode sel = object::BA_SELECT;
FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN (gr, object) {
Base *base = BKE_view_layer_base_find(tvc->view_layer, object);
if (base && (base->flag & BASE_SELECTED)) {
sel = BA_DESELECT;
sel = object::BA_DESELECT;
break;
}
}
@ -1485,7 +1485,7 @@ static void do_outliner_item_activate_tree_element(bContext *C,
FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN (gr, object) {
Base *base = BKE_view_layer_base_find(tvc->view_layer, object);
if (base) {
ED_object_base_select(base, sel);
object::base_select(base, sel);
}
}
FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
@ -1498,7 +1498,7 @@ static void do_outliner_item_activate_tree_element(bContext *C,
/* Object may not be in this scene */
if (base != nullptr) {
if ((base->flag & BASE_SELECTED) == 0) {
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
}
}
}

View File

@ -221,12 +221,12 @@ static void outliner_select_sync_to_object(ViewLayer *view_layer,
if (base && (base->flag & BASE_SELECTABLE)) {
if (tselem->flag & TSE_SELECTED) {
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
add_selected_item(selected_objects, base);
}
else if (!is_object_selected(selected_objects, base)) {
ED_object_base_select(base, BA_DESELECT);
object::base_select(base, object::BA_DESELECT);
}
}
}

View File

@ -96,12 +96,6 @@ namespace blender::ed::outliner {
static CLG_LogRef LOG = {"ed.outliner.tools"};
using namespace blender::ed::outliner;
using blender::Map;
using blender::Set;
using blender::Vector;
/* -------------------------------------------------------------------- */
/** \name ID/Library/Data Set/Un-link Utilities
* \{ */
@ -891,7 +885,7 @@ static void object_select_fn(bContext *C,
Base *base = BKE_view_layer_base_find(view_layer, ob);
if (base) {
ED_object_base_select(base, BA_SELECT);
object::base_select(base, object::BA_SELECT);
}
}
@ -956,7 +950,7 @@ static void outliner_object_delete_fn(bContext *C, ReportList *reports, Scene *s
/* Check also library later. */
if ((ob->mode & OB_MODE_EDIT) && BKE_object_is_in_editmode(ob)) {
ED_object_editmode_exit_ex(bmain, scene, ob, EM_FREEDATA);
object::editmode_exit_ex(bmain, scene, ob, object::EM_FREEDATA);
}
BKE_id_delete(bmain, ob);
}
@ -1334,7 +1328,7 @@ static void id_override_library_create_hierarchy(
* instead. */
if (success && data_idroot.is_override_instancing_object) {
BLI_assert(GS(data_idroot.id_instance_hint->name) == ID_OB);
ED_object_base_free_and_unlink(
object::base_free_and_unlink(
&bmain, scene, reinterpret_cast<Object *>(data_idroot.id_instance_hint));
}
@ -1605,7 +1599,7 @@ static void id_select_linked_fn(bContext *C,
{
ID *id = tselem->id;
ED_object_select_linked_by_id(C, id);
object::select_linked_by_id(C, id);
}
static void singleuser_action_fn(bContext *C,
@ -2214,7 +2208,7 @@ static void data_select_linked_fn(int event,
bContext *C = (bContext *)C_v;
ID *id = static_cast<ID *>(ptr.data);
ED_object_select_linked_by_id(C, id);
object::select_linked_by_id(C, id);
}
}
}
@ -2228,12 +2222,12 @@ static void constraint_fn(int event, TreeElement *te, TreeStoreElem * /*tselem*/
if (event == OL_CONSTRAINTOP_ENABLE) {
constraint->flag &= ~CONSTRAINT_OFF;
ED_object_constraint_update(bmain, ob);
object::constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
}
else if (event == OL_CONSTRAINTOP_DISABLE) {
constraint->flag |= CONSTRAINT_OFF;
ED_object_constraint_update(bmain, ob);
object::constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
}
else if (event == OL_CONSTRAINTOP_DELETE) {
@ -2251,7 +2245,7 @@ static void constraint_fn(int event, TreeElement *te, TreeStoreElem * /*tselem*/
BKE_constraints_active_set(&ob->constraints, nullptr);
/* Needed to set the flags on pose-bones correctly. */
ED_object_constraint_update(bmain, ob);
object::constraint_update(bmain, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, ob);
te->store_elem->flag &= ~TSE_SELECTED;
@ -2285,13 +2279,13 @@ static void modifier_fn(int event, TreeElement *te, TreeStoreElem * /*tselem*/,
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
}
else if (event == OL_MODIFIER_OP_DELETE) {
ED_object_modifier_remove(data->reports, bmain, scene, ob, md);
object::modifier_remove(data->reports, bmain, scene, ob, md);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER | NA_REMOVED, ob);
te->store_elem->flag &= ~TSE_SELECTED;
}
else if (event == OL_MODIFIER_OP_APPLY) {
ED_object_modifier_apply(
bmain, data->reports, depsgraph, scene, ob, md, MODIFIER_APPLY_DATA, false);
object::modifier_apply(
bmain, data->reports, depsgraph, scene, ob, md, object::MODIFIER_APPLY_DATA, false);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@ -2413,7 +2407,7 @@ static void object_batch_delete_hierarchy_tag_fn(bContext *C,
/* pass */
}
if (obedit == base->object) {
ED_object_editmode_exit(C, EM_FREEDATA);
object::editmode_exit(C, object::EM_FREEDATA);
}
Main *bmain = CTX_data_main(C);

View File

@ -590,7 +590,7 @@ static std::string view3d_mat_drop_tooltip(bContext *C,
xy[0] - region->winrct.xmin,
xy[1] - region->winrct.ymin,
};
return ED_object_ot_drop_named_material_tooltip(C, name, mval);
return blender::ed::object::drop_named_material_tooltip(C, name, mval);
}
static bool view3d_world_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
@ -717,7 +717,7 @@ static std::string view3d_geometry_nodes_drop_tooltip(bContext *C,
{
ARegion *region = CTX_wm_region(C);
int mval[2] = {xy[0] - region->winrct.xmin, xy[1] - region->winrct.ymin};
return ED_object_ot_drop_geometry_nodes_tooltip(C, drop->ptr, mval);
return blender::ed::object::drop_geometry_nodes_tooltip(C, drop->ptr, mval);
}
static void view3d_ob_drop_matrix_from_snap(V3DSnapCursorState *snap_state,

View File

@ -1254,7 +1254,7 @@ static void do_view3d_vgroup_buttons(bContext *C, void * /*arg*/, int event)
ViewLayer *view_layer = CTX_data_view_layer(C);
BKE_view_layer_synced_ensure(scene, view_layer);
Object *ob = BKE_view_layer_active_object_get(view_layer);
ED_vgroup_vert_active_mirror(ob, event - B_VGRP_PNL_EDIT_SINGLE);
blender::ed::object::vgroup_vert_active_mirror(ob, event - B_VGRP_PNL_EDIT_SINGLE);
DEG_id_tag_update(static_cast<ID *>(ob->data), ID_RECALC_GEOMETRY);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
}
@ -1757,7 +1757,7 @@ static void view3d_panel_transform(const bContext *C, Panel *panel)
static void hide_collections_menu_draw(const bContext *C, Menu *menu)
{
ED_collection_hide_menu_draw(C, menu->layout);
blender::ed::object::collection_hide_menu_draw(C, menu->layout);
}
void view3d_buttons_register(ARegionType *art)
@ -1800,7 +1800,7 @@ static int view3d_object_mode_menu_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
if (((ob->mode & OB_MODE_EDIT) == 0) && ELEM(ob->type, OB_ARMATURE)) {
ED_object_mode_set(C, (ob->mode == OB_MODE_OBJECT) ? OB_MODE_POSE : OB_MODE_OBJECT);
blender::ed::object::mode_set(C, (ob->mode == OB_MODE_OBJECT) ? OB_MODE_POSE : OB_MODE_OBJECT);
return OPERATOR_CANCELLED;
}

Some files were not shown because too many files have changed in this diff Show More