diff --git a/README.md b/README.md index 7350ed12..0bee0251 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ See the link below for further details. ## Change Log |Version|Release Date|Change Log| |---|---|---| -|4.1|2016.11.XX|[1] **Add feature**
- Copy/Paste UV Coordinates (Among same objects)
- Texture Lock
- Mirror UV
- World Scale UV
- Unwrap Constraint
[2] Improve feature - Pack UV (with same UV island packing)
(1) Add option: Allowable center/size deviation option
[3] Fixed bug| +|4.1|2016.11.13|[1] **Add feature**
- Copy/Paste UV Coordinates (Among same objects)
- Texture Lock
- Mirror UV
- World Scale UV
- Unwrap Constraint
[2] Improve feature - Pack UV (with same UV island packing)
(1) Add option: Allowable center/size deviation option
[3] Fixed bug| |4.0|2016.5.14|[1] Rename this add-on
[2] **Add feature**
- Manipulate UV with Bounding Box in UV Editor
- Move UV from 3D View
- Texture Projection
- Pack UV (with same UV island packing)
[3] Improve feature - Copy/Paste UV
(1) N to M copy/paste UV
(2) Copy/Paste UV by selection sequence between specified UV maps
[4] Optimization/Refactoring
[5] Fixed bugs| |3.2|2015.6.20|Improve feature
- Transfer UV
(1) Copy/Paste to multiple meshes
(2) Partially copy/paste UV| |3.1|2015.6.17|Improve feature
- Transfer UV
(1) Improve algorithm| diff --git a/uv_magic_uv/__init__.py b/uv_magic_uv/__init__.py index 603b1bec..e13e11eb 100644 --- a/uv_magic_uv/__init__.py +++ b/uv_magic_uv/__init__.py @@ -21,7 +21,7 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" bl_info = { diff --git a/uv_magic_uv/muv_common.py b/uv_magic_uv/muv_common.py index 32c3fea7..83df3671 100644 --- a/uv_magic_uv/muv_common.py +++ b/uv_magic_uv/muv_common.py @@ -21,7 +21,7 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy @@ -81,4 +81,3 @@ def get_space(area_type, region_type, space_type): break return (area, region, space) - diff --git a/uv_magic_uv/muv_cpuv_ops.py b/uv_magic_uv/muv_cpuv_ops.py index 7a91ac4e..7804a665 100644 --- a/uv_magic_uv/muv_cpuv_ops.py +++ b/uv_magic_uv/muv_cpuv_ops.py @@ -21,7 +21,7 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy diff --git a/uv_magic_uv/muv_cpuv_selseq_ops.py b/uv_magic_uv/muv_cpuv_selseq_ops.py index 2c9afba8..2453578f 100644 --- a/uv_magic_uv/muv_cpuv_selseq_ops.py +++ b/uv_magic_uv/muv_cpuv_selseq_ops.py @@ -18,11 +18,10 @@ # # ##### END GPL LICENSE BLOCK ##### - __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy @@ -40,7 +39,7 @@ class MUV_CPUVSelSeqCopyUV(bpy.types.Operator): bl_label = "Copy UV (Selection Sequence) (Operation)" bl_description = "Copy UV data by selection sequence (Operation)" bl_options = {'REGISTER', 'UNDO'} - + uv_map = bpy.props.StringProperty(options={'HIDDEN'}) def execute(self, context): @@ -56,7 +55,7 @@ def execute(self, context): bm = bmesh.from_edit_mesh(obj.data) if muv_common.check_version(2, 73, 0) >= 0: bm.faces.ensure_lookup_table() - + # get UV layer if self.uv_map == "": if not bm.loops.layers.uv: @@ -164,7 +163,7 @@ def execute(self, context): uv_layer = bm.loops.layers.uv.verify() else: uv_layer = bm.loops.layers.uv[self.uv_map] - + # get selected face dest_uvs = [] dest_pin_uvs = [] @@ -186,7 +185,7 @@ def execute(self, context): "(src:%d, dest:%d)" % (len(props.src_uvs), len(dest_uvs))) return {'CANCELLED'} - + # paste for i, idx in enumerate(dest_face_indices): suv = None @@ -247,4 +246,3 @@ def draw(self, context): layout.operator( MUV_CPUVSelSeqPasteUV.bl_idname, text=m, icon="PLUGIN").uv_map = m - diff --git a/uv_magic_uv/muv_fliprot_ops.py b/uv_magic_uv/muv_fliprot_ops.py index b83957a0..9c9cc544 100644 --- a/uv_magic_uv/muv_fliprot_ops.py +++ b/uv_magic_uv/muv_fliprot_ops.py @@ -18,11 +18,10 @@ # # ##### END GPL LICENSE BLOCK ##### - __author__ = "Nutti " __status__ = "production" __version__ = "4.0" -__date__ = "14 May 2016" +__date__ = "13 Nov 2016" import bpy @@ -58,13 +57,13 @@ def execute(self, context): bm = bmesh.from_edit_mesh(obj.data) if muv_common.check_version(2, 73, 0) >= 0: bm.faces.ensure_lookup_table() - + # get UV layer if not bm.loops.layers.uv: self.report({'WARNING'}, "Object must have more than one UV map") return {'CANCELLED'} uv_layer = bm.loops.layers.uv.verify() - + # get selected face dest_uvs = [] dest_pin_uvs = [] @@ -104,4 +103,3 @@ def execute(self, context): bmesh.update_edit_mesh(obj.data) return {'FINISHED'} - diff --git a/uv_magic_uv/muv_menu.py b/uv_magic_uv/muv_menu.py index e12b4821..22d62d29 100644 --- a/uv_magic_uv/muv_menu.py +++ b/uv_magic_uv/muv_menu.py @@ -21,7 +21,7 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy diff --git a/uv_magic_uv/muv_mirroruv_ops.py b/uv_magic_uv/muv_mirroruv_ops.py index 67763419..cf63b164 100644 --- a/uv_magic_uv/muv_mirroruv_ops.py +++ b/uv_magic_uv/muv_mirroruv_ops.py @@ -21,7 +21,7 @@ __author__ = "Keith (Wahooney) Boshoff, Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy diff --git a/uv_magic_uv/muv_mvuv_ops.py b/uv_magic_uv/muv_mvuv_ops.py index 879a04d2..cda11649 100644 --- a/uv_magic_uv/muv_mvuv_ops.py +++ b/uv_magic_uv/muv_mvuv_ops.py @@ -1,7 +1,27 @@ +# + +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + __author__ = "kgeogeo, mem, Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy @@ -17,7 +37,7 @@ class MUV_MVUV(bpy.types.Operator): bl_idname = "view3d.muv_mvuv" bl_label = "Move the UV from View3D" bl_options = {'REGISTER', 'UNDO'} - + __topology_dict = [] __prev_mouse = Vector((0.0, 0.0)) __offset_uv = Vector((0.0, 0.0)) @@ -59,8 +79,8 @@ def __find_uv(self, context): diff = uva - va first = False - return topology_dict, uvs - + return topology_dict, uvs + @classmethod def poll(cls, context): return (context.edit_object) @@ -112,7 +132,7 @@ def modal(self, context, event): if event.type == cancel_btn and event.value == 'PRESS': for (fidx, vidx), uv in zip(self.__topology_dict, self.__ini_uvs): bm.faces[fidx].loops[vidx][active_uv].uv = uv - return {'FINISHED'} + return {'FINISHED'} # confirmed if event.type == confirm_btn and event.value == 'PRESS': return {'FINISHED'} @@ -123,6 +143,5 @@ def execute(self, context): self.__first_time = True self.__running = True context.window_manager.modal_handler_add(self) - self.__topology_dict, self.__ini_uvs = self.__find_uv(context) - return {'RUNNING_MODAL'} - + self.__topology_dict, self.__ini_uvs = self.__find_uv(context) + return {'RUNNING_MODAL'} diff --git a/uv_magic_uv/muv_packuv_ops.py b/uv_magic_uv/muv_packuv_ops.py index 6eff064e..a91a1a6a 100644 --- a/uv_magic_uv/muv_packuv_ops.py +++ b/uv_magic_uv/muv_packuv_ops.py @@ -21,7 +21,7 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy diff --git a/uv_magic_uv/muv_preferences.py b/uv_magic_uv/muv_preferences.py index 6f3c35d9..0a955538 100644 --- a/uv_magic_uv/muv_preferences.py +++ b/uv_magic_uv/muv_preferences.py @@ -18,11 +18,10 @@ # # ##### END GPL LICENSE BLOCK ##### - __author__ = "Nutti " __status__ = "production" -__version__ = "4.0" -__date__ = "14 May 2016" +__version__ = "4.1" +__date__ = "13 Nov 2016" import bpy @@ -48,4 +47,3 @@ def draw(self, context): layout = self.layout layout.prop(self, "enable_uvbb") layout.prop(self, "enable_texproj") - diff --git a/uv_magic_uv/muv_props.py b/uv_magic_uv/muv_props.py index e8dbdd62..a4582be2 100644 --- a/uv_magic_uv/muv_props.py +++ b/uv_magic_uv/muv_props.py @@ -21,7 +21,8 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" + import bpy from bpy.props import FloatProperty, EnumProperty, BoolProperty @@ -142,4 +143,3 @@ def clear_props(scene): del scene.muv_texproj_tex_magnitude del scene.muv_texproj_tex_image del scene.muv_texproj_tex_transparency - diff --git a/uv_magic_uv/muv_texlock_ops.py b/uv_magic_uv/muv_texlock_ops.py index 03738b06..6a2a2e8d 100644 --- a/uv_magic_uv/muv_texlock_ops.py +++ b/uv_magic_uv/muv_texlock_ops.py @@ -21,7 +21,7 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy @@ -433,4 +433,3 @@ def execute(self, context): bpy.ops.uv.muv_texlock_updater() return {'FINISHED'} - diff --git a/uv_magic_uv/muv_texproj_ops.py b/uv_magic_uv/muv_texproj_ops.py index 209117aa..689155f2 100644 --- a/uv_magic_uv/muv_texproj_ops.py +++ b/uv_magic_uv/muv_texproj_ops.py @@ -20,8 +20,8 @@ __author__ = "Nutti " __status__ = "production" -__version__ = "4.0" -__date__ = "14 May 2016" +__version__ = "4.1" +__date__ = "13 Nov 2016" import bpy @@ -47,12 +47,12 @@ def get_canvas(context, magnitude): PAD_Y = 20 width = context.region.width height = context.region.height - + center_x = width * 0.5 center_y = height * 0.5 len_x = (width - PAD_X * 2.0) * magnitude len_y = (height - PAD_Y * 2.0) * magnitude - + x0 = int(center_x - len_x * 0.5) y0 = int(center_y - len_y * 0.5) x1 = int(center_x + len_x * 0.5) @@ -72,7 +72,7 @@ def rect_to_rect2(rect): def region_to_canvas(region, rg_vec, canvas): """ Convert screen region to canvas - """ + """ cv_rect = rect_to_rect2(canvas) cv_vec = mathutils.Vector() @@ -87,30 +87,30 @@ class MUV_TexProjRenderer(bpy.types.Operator): Operation class: Render selected texture No operation (only rendering texture) """ - + bl_idname = "uv.muv_texproj_renderer" bl_description = "Render selected texture" bl_label = "Texture renderer" __handle = None - + @staticmethod def handle_add(self, context): MUV_TexProjRenderer.__handle = bpy.types.SpaceView3D.draw_handler_add( MUV_TexProjRenderer.draw_texture, (self, context), 'WINDOW', 'POST_PIXEL') - + @staticmethod def handle_remove(self, context): if MUV_TexProjRenderer.__handle is not None: bpy.types.SpaceView3D.draw_handler_remove( MUV_TexProjRenderer.__handle, 'WINDOW') MUV_TexProjRenderer.__handle = None - + @staticmethod def draw_texture(self, context): sc = context.scene - + # no textures are selected if sc.muv_texproj_tex_image == "None": return @@ -140,7 +140,7 @@ def draw_texture(self, context): bgl.GL_TEXTURE_2D, bgl.GL_TEXTURE_MAG_FILTER, bgl.GL_LINEAR) bgl.glTexEnvi( bgl.GL_TEXTURE_ENV, bgl.GL_TEXTURE_ENV_MODE, bgl.GL_MODULATE) - + # render texture bgl.glBegin(bgl.GL_QUADS) bgl.glColor4f(1.0, 1.0, 1.0, sc.muv_texproj_tex_transparency) @@ -154,7 +154,7 @@ class MUV_TexProjStart(bpy.types.Operator): """ Operation class: Start Texture Projection """ - + bl_idname = "uv.muv_texproj_start" bl_label = "Start Texture Projection" bl_description = "Start Texture Projection" @@ -175,7 +175,7 @@ class MUV_TexProjStop(bpy.types.Operator): """ Operation class: Stop Texture Projection """ - + bl_idname = "uv.muv_texproj_stop" bl_label = "Stop Texture Projection" bl_description = "Stop Texture Projection" @@ -196,7 +196,7 @@ class MUV_TexProjProject(bpy.types.Operator): """ Operation class: Project texture """ - + bl_idname = "uv.muv_texproj_project" bl_label = "Project Texture" bl_description = "Project Texture" @@ -210,7 +210,7 @@ def execute(self, context): return {'CANCELLED'} area, region, space = muv_common.get_space( 'VIEW_3D', 'WINDOW', 'VIEW_3D') - + # get faces to be texture projected obj = context.active_object world_mat = obj.matrix_world @@ -263,7 +263,7 @@ class OBJECT_PT_TP(bpy.types.Panel): bl_description = "Texture Projection Menu" bl_space_type = "VIEW_3D" bl_region_type = "UI" - + def draw(self, context): prefs = context.user_preferences.addons["uv_magic_uv"].preferences if prefs.enable_texproj is False: @@ -281,4 +281,3 @@ def draw(self, context): layout.prop(sc, "muv_texproj_tex_magnitude", text="Magnitude") layout.prop(sc, "muv_texproj_tex_transparency", text="Transparency") layout.operator(MUV_TexProjProject.bl_idname, text="Project") - diff --git a/uv_magic_uv/muv_transuv_ops.py b/uv_magic_uv/muv_transuv_ops.py index 11d573a3..f8453466 100644 --- a/uv_magic_uv/muv_transuv_ops.py +++ b/uv_magic_uv/muv_transuv_ops.py @@ -21,7 +21,8 @@ __author__ = "Nutti , Mifth, MaxRobinot" __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" + import bpy import bmesh @@ -127,7 +128,7 @@ def execute(self, context): if i > 0 and i % 2 != 0: sel_faces = [all_sel_faces[i - 1], all_sel_faces[i]] active_face = all_sel_faces[i] - + # parse all faces according to selection history active_face_nor = active_face.normal.copy() if self.invert_normals: @@ -340,4 +341,3 @@ def get_other_verts_edges(face, vert1, vert2, first_edge, uv_layer): break return [face_verts, face_edges, face_loops] - diff --git a/uv_magic_uv/muv_unwrapconst_ops.py b/uv_magic_uv/muv_unwrapconst_ops.py index 64754c65..aff34a9f 100644 --- a/uv_magic_uv/muv_unwrapconst_ops.py +++ b/uv_magic_uv/muv_unwrapconst_ops.py @@ -19,7 +19,8 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" + import bpy import bmesh diff --git a/uv_magic_uv/muv_uvbb_ops.py b/uv_magic_uv/muv_uvbb_ops.py index be362239..26186bb5 100644 --- a/uv_magic_uv/muv_uvbb_ops.py +++ b/uv_magic_uv/muv_uvbb_ops.py @@ -21,7 +21,7 @@ __author__ = "Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" import bpy @@ -259,7 +259,7 @@ class MUV_UVBBCmdExecuter(): def __init__(self): self.__cmd_list = [] self.__cmd_list_redo = [] - + def execute(self, begin=0, end=-1): """ create matrix from history @@ -270,7 +270,7 @@ def execute(self, begin=0, end=-1): if begin <= i and (end == -1 or i <= end): mat = cmd.to_matrix() * mat return mat - + def undo_size(self): """ get history size @@ -319,7 +319,7 @@ def push(self, cmd): class MUV_UVBBRenderer(bpy.types.Operator): """ - Operation class: Render UV bounding box + Operation class: Render UV bounding box """ bl_idname = "uv.muv_uvbb_renderer" @@ -459,7 +459,7 @@ class MUV_UVBBStateTranslating(MUV_UVBBStateBase): """ Custom class: Translating state """ - + __cmd_exec = None def __init__(self, cmd_exec, mouse_view, ctrl_points): @@ -777,4 +777,3 @@ def draw(self, context): layout.prop(sc, "muv_uvbb_cp_size", text="Size") layout.prop(sc, "muv_uvbb_cp_react_size", text="React Size") layout.prop(sc, "muv_uvbb_uniform_scaling", text="Uniform Scaling") - diff --git a/uv_magic_uv/muv_wsuv_ops.py b/uv_magic_uv/muv_wsuv_ops.py index a645cff0..31185399 100644 --- a/uv_magic_uv/muv_wsuv_ops.py +++ b/uv_magic_uv/muv_wsuv_ops.py @@ -21,7 +21,8 @@ __author__ = "McBuff, Nutti " __status__ = "production" __version__ = "4.1" -__date__ = "XX XXX 2016" +__date__ = "13 Nov 2016" + import bpy import bmesh