Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-09-03 18:50:39 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-09-03 19:04:01 +0300
commitb3b59e3b5657ad95ecca4b8c47c3b20c7e55da35 (patch)
tree32419a05239b2007320e087f79510b96a3ccddb3 /source
parente5c8f096f8649250a828d63f5e28577b7ef51677 (diff)
Transform: support snap to children with 'Affect Parents'
Resolves T69398
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/transform/transform_conversions.c7
-rw-r--r--source/blender/editors/transform/transform_snap_object.c5
-rw-r--r--source/blender/makesdna/DNA_object_types.h6
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 */