UV: Fix overlap problem during uv packing with scale locked islands
If an island overlaps a pinned island, and that pinned island has locked scale, then the pinning information must be copied to the first island so it can be scaled correctly. Reported in #108037 as "2. Use with Merge Overlapped"
This commit is contained in:
parent
a928d6d6b7
commit
de4f456ea2
|
@ -1777,17 +1777,25 @@ class OverlapMerger {
|
|||
sub_params.merge_overlap = false;
|
||||
const float result = pack_islands(sub_islands, sub_params);
|
||||
|
||||
/* Must loop backwards! */
|
||||
/* Must loop backwards, or we will miss sub-sub-islands. */
|
||||
for (int64_t i = merge_trace.size() - 3; i >= 0; i -= 3) {
|
||||
PackIsland *sub_a = merge_trace[i];
|
||||
PackIsland *sub_b = merge_trace[i + 1];
|
||||
PackIsland *merge = merge_trace[i + 2];
|
||||
|
||||
/* Copy `angle`, `pre_translate` and `pre_rotate` from merged island to sub islands. */
|
||||
sub_a->angle = merge->angle;
|
||||
sub_b->angle = merge->angle;
|
||||
sub_a->pre_translate = merge->pre_translate;
|
||||
sub_b->pre_translate = merge->pre_translate;
|
||||
sub_a->pre_rotate_ = merge->pre_rotate_;
|
||||
sub_b->pre_rotate_ = merge->pre_rotate_;
|
||||
|
||||
/* If the merged island is pinned, the sub-islands are also pinned to correct scaling. */
|
||||
if (merge->pinned) {
|
||||
sub_a->pinned = true;
|
||||
sub_b->pinned = true;
|
||||
}
|
||||
delete merge;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue