Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/op/image.py95
-rw-r--r--release/scripts/ui/space_view3d_toolbar.py11
-rw-r--r--source/blender/makesrna/intern/rna_image.c5
-rw-r--r--source/blender/makesrna/intern/rna_image_api.c12
4 files changed, 117 insertions, 6 deletions
diff --git a/release/scripts/op/image.py b/release/scripts/op/image.py
index f60902e1832..be60bb96313 100644
--- a/release/scripts/op/image.py
+++ b/release/scripts/op/image.py
@@ -42,12 +42,103 @@ class SaveDirty(bpy.types.Operator):
return {'FINISHED'}
+_proj_hack = [""]
+class ProjectEdit(bpy.types.Operator):
+ '''Select object matching a naming pattern'''
+ bl_idname = "image.project_edit"
+ bl_label = "Project Edit"
+ bl_options = {'REGISTER'}
+
+ def execute(self, context):
+ import os
+ import subprocess
+
+ EXT = "tga" # until we have a way to save as another format!
+ EDITOR = "gimp" # until we have a way to set a default image edior
+
+ for image in bpy.data.images:
+ image.tag = True
+
+ bpy.ops.paint.image_from_view()
+
+ image_new = None
+ for image in bpy.data.images:
+ if not image.tag:
+ image_new = image
+ break
+
+ if not image_new:
+ self.report({'ERROR'}, "Could not make new image")
+ return {'CANCELLED'}
+
+ filename = os.path.basename(bpy.data.filename)
+ filename = os.path.splitext(filename)[0]
+
+ if filename.startswith("."): # TODO, have a way to check if the file is saved, assuem .B25.blend
+ filename = os.path.join(os.path.dirname(bpy.data.filename), filename)
+ else:
+ filename = "//" + filename
+
+ obj = context.object
+
+ if obj:
+ filename += "_" + bpy.utils.clean_name(obj.name)
+
+ filename_final = filename + "." + EXT
+ i = 0
+
+ while os.path.exists(bpy.utils.expandpath(filename_final)):
+ filename_final = filename + ("%.3d.%s" % (i, EXT))
+ i += 1
+
+ image_new.name = os.path.basename(filename_final)
+ _proj_hack[0] = image_new.name
+
+ image_new.filename_raw = filename_final # TODO, filename raw is crummy
+ image_new.save()
+
+ subprocess.Popen([EDITOR, bpy.utils.expandpath(filename_final)])
+
+ return {'FINISHED'}
+
+
+class ProjectApply(bpy.types.Operator):
+ '''Select object matching a naming pattern'''
+ bl_idname = "image.project_apply"
+ bl_label = "Project Apply"
+ bl_options = {'REGISTER'}
+
+ def execute(self, context):
+ image_name = _proj_hack[0] # TODO, deal with this nicer
+
+ try:
+ image = bpy.data.images[_proj_hack[0]]
+ except KeyError:
+ self.report({'ERROR'}, "Could not find image '%s'" % image_name)
+ return {'CANCELLED'}
+
+ image.reload()
+ bpy.ops.paint.project_image(image=image_name)
+
+ return {'FINISHED'}
+
+
+classes = [
+ SaveDirty,
+ ProjectEdit,
+ ProjectApply]
+
+
def register():
- bpy.types.register(SaveDirty)
+ register = bpy.types.register
+ for cls in classes:
+ register(cls)
def unregister():
- bpy.types.unregister(SaveDirty)
+ unregister = bpy.types.unregister
+ for cls in classes:
+ unregister(cls)
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_view3d_toolbar.py b/release/scripts/ui/space_view3d_toolbar.py
index 7acb0537316..7996407445f 100644
--- a/release/scripts/ui/space_view3d_toolbar.py
+++ b/release/scripts/ui/space_view3d_toolbar.py
@@ -906,10 +906,15 @@ class VIEW3D_PT_tools_projectpaint(View3DPanel):
sub = col.column()
sub.prop(ipaint, "seam_bleed")
-
+
+ row = col.row(align=True)
+ row.operator("image.project_edit", text="View Edit")
+ row.operator("image.project_apply", text="Apply")
+
sub = col.column()
- col.operator("image.save_dirty", text="Save Edited")
- col.operator("paint.project_image")
+ sub.operator("paint.project_image")
+
+ sub.operator("image.save_dirty", text="Save Edited")
class VIEW3D_MT_tools_projectpaint_clone(bpy.types.Menu):
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index e9eec9bf64a..8996ac078dd 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -280,6 +280,11 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Filename", "Image/Movie file name");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_reload_update");
+ /* eek. this is horrible but needed so we can save to a new name without blanking the data :( */
+ prop= RNA_def_property(srna, "filename_raw", PROP_STRING, PROP_FILEPATH);
+ RNA_def_property_string_sdna(prop, NULL, "name");
+ RNA_def_property_ui_text(prop, "Filename", "Image/Movie file name (without data refreshing)");
+
prop= RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, image_source_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Image_source_itemf");
diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c
index f2dbc7ef23f..ef7fa3360d4 100644
--- a/source/blender/makesrna/intern/rna_image_api.c
+++ b/source/blender/makesrna/intern/rna_image_api.c
@@ -40,6 +40,7 @@
#include "BKE_packedFile.h"
#include "BKE_main.h"
#include "BKE_utildefines.h"
+#include "BKE_global.h" /* grr: G.sce */
#include "IMB_imbuf.h"
@@ -84,12 +85,21 @@ static void rna_Image_save(Image *image, ReportList *reports)
{
ImBuf *ibuf= BKE_image_get_ibuf(image, NULL);
if(ibuf) {
+ char filename[FILE_MAXDIR + FILE_MAXFILE];
+ BLI_strncpy(filename, image->name, sizeof(filename));
+ BLI_convertstringcode(filename, G.sce);
+
if(image->packedfile) {
if (writePackedFile(reports, image->name, image->packedfile, 0) != RET_OK) {
BKE_reportf(reports, RPT_ERROR, "Image \"%s\" could saved packed file to \"%s\"", image->id.name+2, image->name);
}
}
- else if (IMB_saveiff(ibuf, image->name, ibuf->flags)) {
+ else if (IMB_saveiff(ibuf, filename, ibuf->flags)) {
+ image->type= IMA_TYPE_IMAGE;
+
+ if(image->source==IMA_SRC_GENERATED)
+ image->source= IMA_SRC_FILE;
+
ibuf->userflags &= ~IB_BITMAPDIRTY;
}
else {