From 912fdcacab3bcfb927696f92b4b36bb53452c6f2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 12 Feb 2010 11:34:25 +0000 Subject: button to save edited textures in texture paint --- release/scripts/op/image.py | 44 ++++++++++++++++++++++++++++++++++++++ release/scripts/ui/space_view3d.py | 34 ++++++++++++++++------------- 2 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 release/scripts/op/image.py (limited to 'release') diff --git a/release/scripts/op/image.py b/release/scripts/op/image.py new file mode 100644 index 00000000000..f38385de994 --- /dev/null +++ b/release/scripts/op/image.py @@ -0,0 +1,44 @@ +# ##### 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy + +class SaveDirty(bpy.types.Operator): + '''Select object matching a naming pattern''' + bl_idname = "image.save_dirty" + bl_label = "Save Dirty" + bl_register = True + bl_undo = True + + def execute(self, context): + unique_paths = set() + for image in bpy.data.images: + if image.dirty: + path = bpy.utils.expandpath(image.filename) + if "\\" not in path and "/" not in path: + self.report({'WARNING'}, "Invalid path: " + path) + elif path in unique_paths: + self.report({'WARNING'}, "Path used by more then one image: " + path) + else: + unique_paths.add(path) + image.save(path=path) + return {'FINISHED'} + +bpy.types.register(SaveDirty) \ No newline at end of file diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py index e33234a153c..2718bf37db2 100644 --- a/release/scripts/ui/space_view3d.py +++ b/release/scripts/ui/space_view3d.py @@ -65,21 +65,25 @@ class VIEW3D_HT_header(bpy.types.Header): row_sub.prop(toolsettings, "mesh_selection_mode", text="", index=2, icon='FACESEL') ''' - - # Particle edit - if obj and obj.mode == 'PARTICLE_EDIT': - row.prop(toolsettings.particle_edit, "selection_mode", text="", expand=True, toggle=True) - - # Occlude geometry - if obj and view.viewport_shading in ('SOLID', 'SHADED', 'TEXTURED') and (obj.mode == 'PARTICLE_EDIT' or (obj.mode == 'EDIT' and obj.type == 'MESH')): - row.prop(view, "occlude_geometry", text="") - - # Proportional editing - if obj and obj.mode in ('OBJECT', 'EDIT', 'PARTICLE_EDIT'): - row = layout.row(align=True) - row.prop(toolsettings, "proportional_editing", text="", icon_only=True) - if toolsettings.proportional_editing != 'DISABLED': - row.prop(toolsettings, "proportional_editing_falloff", text="", icon_only=True) + if obj: + # Particle edit + if obj.mode == 'PARTICLE_EDIT': + row.prop(toolsettings.particle_edit, "selection_mode", text="", expand=True, toggle=True) + + # Occlude geometry + if view.viewport_shading in ('SOLID', 'SHADED', 'TEXTURED') and (obj.mode == 'PARTICLE_EDIT' or (obj.mode == 'EDIT' and obj.type == 'MESH')): + row.prop(view, "occlude_geometry", text="") + + # Proportional editing + if obj.mode in ('OBJECT', 'EDIT', 'PARTICLE_EDIT'): + row = layout.row(align=True) + row.prop(toolsettings, "proportional_editing", text="", icon_only=True) + if toolsettings.proportional_editing != 'DISABLED': + row.prop(toolsettings, "proportional_editing_falloff", text="", icon_only=True) + + # paint save + if mode_string == 'PAINT_TEXTURE': + row.operator("image.save_dirty", text="Save Edited") # Snap row = layout.row(align=True) -- cgit v1.2.3