[Bf-blender-cvs] [2b07c31fcf7] blender2.8: Fix proportional edit-mode w/ multi-object editing
Campbell Barton
noreply at git.blender.org
Mon Nov 26 04:23:15 CET 2018
Commit: 2b07c31fcf77ae82c5ea980f4d6343ef55643746
Author: Campbell Barton
Date: Mon Nov 26 14:20:51 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB2b07c31fcf77ae82c5ea980f4d6343ef55643746
Fix proportional edit-mode w/ multi-object editing
D3992 by @Al
===================================================================
M source/blender/editors/transform/transform_conversions.c
===================================================================
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 2ea9f6acb64..0fca84074f5 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -169,52 +169,62 @@ static int trans_data_compare_rdist(const void *a, const void *b)
else return 0;
}
+static void sort_trans_data_dist_container(const TransInfo *t, TransDataContainer *tc)
+{
+ TransData *start = tc->data;
+ int i;
+
+ for (i = 0; i < tc->data_len && start->flag & TD_SELECTED; i++) {
+ start++;
+ }
+
+ if (i < tc->data_len) {
+ if (t->flag & T_PROP_CONNECTED) {
+ qsort(start, tc->data_len - i, sizeof(TransData), trans_data_compare_dist);
+ }
+ else {
+ qsort(start, tc->data_len - i, sizeof(TransData), trans_data_compare_rdist);
+ }
+ }
+}
void sort_trans_data_dist(TransInfo *t)
{
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
- TransData *start = tc->data;
- int i;
+ sort_trans_data_dist_container(t, tc);
+ }
+}
- for (i = 0; i < tc->data_len && start->flag & TD_SELECTED; i++) {
- start++;
+static void sort_trans_data_container(TransDataContainer *tc)
+{
+ TransData *sel, *unsel;
+ TransData temp;
+ unsel = tc->data;
+ sel = tc->data;
+ sel += tc->data_len - 1;
+ while (sel > unsel) {
+ while (unsel->flag & TD_SELECTED) {
+ unsel++;
+ if (unsel == sel) {
+ return;
+ }
}
-
- if (i < tc->data_len) {
- if (t->flag & T_PROP_CONNECTED)
- qsort(start, tc->data_len - i, sizeof(TransData), trans_data_compare_dist);
- else
- qsort(start, tc->data_len - i, sizeof(TransData), trans_data_compare_rdist);
+ while (!(sel->flag & TD_SELECTED)) {
+ sel--;
+ if (unsel == sel) {
+ return;
+ }
}
+ temp = *unsel;
+ *unsel = *sel;
+ *sel = temp;
+ sel--;
+ unsel++;
}
}
-
static void sort_trans_data(TransInfo *t)
{
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
- TransData *sel, *unsel;
- TransData temp;
- unsel = tc->data;
- sel = tc->data;
- sel += tc->data_len - 1;
- while (sel > unsel) {
- while (unsel->flag & TD_SELECTED) {
- unsel++;
- if (unsel == sel) {
- return;
- }
- }
- while (!(sel->flag & TD_SELECTED)) {
- sel--;
- if (unsel == sel) {
- return;
- }
- }
- temp = *unsel;
- *unsel = *sel;
- *sel = temp;
- sel--;
- unsel++;
- }
+ sort_trans_data_container(tc);
}
}
More information about the Bf-blender-cvs
mailing list