From b3b59e3b5657ad95ecca4b8c47c3b20c7e55da35 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 4 Sep 2019 01:50:39 +1000 Subject: Transform: support snap to children with 'Affect Parents' Resolves T69398 --- source/blender/editors/transform/transform_conversions.c | 7 +++++-- source/blender/editors/transform/transform_snap_object.c | 5 ++++- source/blender/makesdna/DNA_object_types.h | 6 +++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 328cb1d1bbf..611992c1d3c 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -6572,7 +6572,7 @@ static void set_trans_object_base_flags(TransInfo *t) trans_object_base_deps_flag_prepare(view_layer); /* Traverse all bases and set all possible flags. */ for (Base *base = view_layer->object_bases.first; base; base = base->next) { - base->flag_legacy &= ~BA_WAS_SEL; + base->flag_legacy &= ~(BA_WAS_SEL | BA_TRANSFORM_LOCKED_IN_PLACE); if (BASE_SELECTED_EDITABLE(v3d, base)) { Object *ob = base->object; Object *parsel = ob->parent; @@ -6688,7 +6688,8 @@ static void clear_trans_object_base_flags(TransInfo *t) } base->flag_legacy &= ~(BA_WAS_SEL | BA_SNAP_FIX_DEPS_FIASCO | BA_TEMP_TAG | - BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT); + BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT | + BA_TRANSFORM_LOCKED_IN_PLACE); } } @@ -8137,6 +8138,7 @@ static void createTransObject(bContext *C, TransInfo *t) trans_obchild_in_obmode_ensure_object( tdo, ob, ob_parent_recurse, OB_SKIP_CHILD_PARENT_APPLY_TRANSFORM); BLI_ghash_insert(objects_parent_root, ob, ob_parent_recurse); + base->flag_legacy |= BA_TRANSFORM_LOCKED_IN_PLACE; } } } @@ -8157,6 +8159,7 @@ static void createTransObject(bContext *C, TransInfo *t) if (BASE_XFORM_INDIRECT(base_parent) || BLI_gset_haskey(objects_in_transdata, ob->parent)) { trans_obchild_in_obmode_ensure_object(tdo, ob, NULL, OB_SKIP_CHILD_PARENT_IS_XFORM); + base->flag_legacy |= BA_TRANSFORM_LOCKED_IN_PLACE; } else { Object *ob_parent_recurse = BLI_ghash_lookup(objects_parent_root, ob->parent); diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c index d57598babee..d3cf52ce3fd 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -226,7 +226,10 @@ static void iter_snap_objects(SnapObjectContext *sctx, continue; } - if (base->flag_legacy & BA_SNAP_FIX_DEPS_FIASCO) { + if (base->flag_legacy & BA_TRANSFORM_LOCKED_IN_PLACE) { + /* pass */ + } + else if (base->flag_legacy & BA_SNAP_FIX_DEPS_FIASCO) { continue; } diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 5442bb2edba..b4d65aa7ea9 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -607,7 +607,11 @@ enum { /* NOTE: this was used as a proper setting in past, so nullify before using */ #define BA_TEMP_TAG (1 << 5) -/* #define BA_FROMSET (1 << 7) */ /*UNUSED*/ +/** + * Even if this is is tagged for transform, this flag means it's being locked in place. + * Use for #SCE_XFORM_SKIP_CHILDREN. + */ +#define BA_TRANSFORM_LOCKED_IN_PLACE (1 << 7) #define BA_TRANSFORM_CHILD (1 << 8) /* child of a transformed object */ #define BA_TRANSFORM_PARENT (1 << 13) /* parent of a transformed object */ -- cgit v1.2.3