diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-04-09 16:54:13 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-04-10 15:49:49 +0400 |
commit | f93bc7693a530632455d3ec7acc4bce54a1f85bc (patch) | |
tree | d0e067438cbc547875b3cb77e53904c5ea2a537d /release/scripts/startup/bl_operators/uvcalc_smart_project.py | |
parent | 19e627cab34a04a3d01b2e3a868b7bf91d56e8f9 (diff) |
Backport revisions for the 2.70a releasev2.70a
d2660a0, 6e99fb0, 58c22d8, 83f2012 + ff21f6a, a7ed1db. cc6b106
7997e38, 9d4b54b, efb48fc, 3fc293c, 29f359c, 77c1d17, 92a539e,
c626462, f48828b, 6452d9f, 765d077, 74518b2, af16d46, 8da4936,
6babbf5, f0106d2, f88776b, ee72cba, 467596d, e21a7b3, eed3974,
71a2ff1, ccf9afd, 44d6c68, 30fdfc3, b69809c, b0a8e4c, bd57ec6,
3b0832d, 2a25676, 3977b76, fb25a86, 9bbb30b, 51abc2b, 0ebade5,
2c0e32f, 3deaf7d, ea01b24, c61eb64, f3db038, a6fb670, eedde31,
b66a954, 7ff123c, f5b79df, 7148c97, 54a8753, fcaa018, 4c73001,
7a21330, 07578be, e9a64e2, fd3de8b, ae792e9, b7712a7 + 3600622,
d9557d0, 6d973b8, 688257d, 4acb57a, 95ac6bc,
Also backported openmp changes to sculpt making it so number
of real CPU cores is used as a number of threads here.
Diffstat (limited to 'release/scripts/startup/bl_operators/uvcalc_smart_project.py')
-rw-r--r-- | release/scripts/startup/bl_operators/uvcalc_smart_project.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/release/scripts/startup/bl_operators/uvcalc_smart_project.py b/release/scripts/startup/bl_operators/uvcalc_smart_project.py index 70df5a9df21..1a8bd44e846 100644 --- a/release/scripts/startup/bl_operators/uvcalc_smart_project.py +++ b/release/scripts/startup/bl_operators/uvcalc_smart_project.py @@ -232,17 +232,28 @@ def islandIntersectUvIsland(source, target, SourceOffset): return 0 # NO INTERSECTION +def rotate_uvs(uv_points, angle): + + if angle != 0.0: + mat = Matrix.Rotation(angle, 2) + for uv in uv_points: + uv[:] = mat * uv + + def optiRotateUvIsland(faces): uv_points = [uv for f in faces for uv in f.uv] angle = geometry.box_fit_2d(uv_points) if angle != 0.0: - mat = Matrix.Rotation(angle, 2) - i = 0 # count the serialized uv/vectors - for f in faces: - for j, k in enumerate(range(i, len(f.v) + i)): - f.uv[j][:] = mat * uv_points[k] - i += len(f.v) + rotate_uvs(uv_points, angle) + + # orient them vertically (could be an option) + minx, miny, maxx, maxy = boundsIsland(faces) + w, h = maxx - minx, maxy - miny + if h < w: + from math import pi + angle = pi / 2.0 + rotate_uvs(uv_points, angle) # Takes an island list and tries to find concave, hollow areas to pack smaller islands into. |