[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27359] trunk/blender: mtex buffer copy & paste back for materials.
Campbell Barton
ideasman42 at gmail.com
Tue Mar 9 10:17:45 CET 2010
Revision: 27359
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27359
Author: campbellbarton
Date: 2010-03-09 10:17:45 +0100 (Tue, 09 Mar 2010)
Log Message:
-----------
mtex buffer copy & paste back for materials.
Modified Paths:
--------------
trunk/blender/release/scripts/ui/properties_texture.py
trunk/blender/source/blender/blenkernel/BKE_material.h
trunk/blender/source/blender/blenkernel/intern/material.c
trunk/blender/source/blender/editors/render/render_intern.h
trunk/blender/source/blender/editors/render/render_ops.c
trunk/blender/source/blender/editors/render/render_shading.c
trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c
Modified: trunk/blender/release/scripts/ui/properties_texture.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_texture.py 2010-03-09 08:31:41 UTC (rev 27358)
+++ trunk/blender/release/scripts/ui/properties_texture.py 2010-03-09 09:17:45 UTC (rev 27359)
@@ -23,6 +23,16 @@
narrowui = 180
+class TEXTURE_MT_specials(bpy.types.Menu):
+ bl_label = "Texture Specials"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("material.mtex_copy", icon='COPYDOWN')
+ layout.operator("material.mtex_paste", icon='PASTEDOWN')
+
+
def active_node_mat(mat):
if mat:
mat_node = mat.active_node_material
@@ -103,6 +113,7 @@
col = row.column(align=True)
col.operator("texture.slot_move", text="", icon='TRIA_UP').type = 'UP'
col.operator("texture.slot_move", text="", icon='TRIA_DOWN').type = 'DOWN'
+ col.menu("TEXTURE_MT_specials", icon='DOWNARROW_HLT', text="")
if wide_ui:
split = layout.split(percentage=0.65)
@@ -958,6 +969,8 @@
classes = [
+ TEXTURE_MT_specials,
+
TEXTURE_PT_context_texture,
TEXTURE_PT_preview,
Modified: trunk/blender/source/blender/blenkernel/BKE_material.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_material.h 2010-03-09 08:31:41 UTC (rev 27358)
+++ trunk/blender/source/blender/blenkernel/BKE_material.h 2010-03-09 09:17:45 UTC (rev 27359)
@@ -83,6 +83,10 @@
void copy_matcopybuf(struct Material *ma);
void paste_matcopybuf(struct Material *ma);
+void clear_mat_mtex_copybuf(void);
+void copy_mat_mtex_copybuf(struct ID *id);
+void paste_mat_mtex_copybuf(struct ID *id);
+
#ifdef __cplusplus
}
#endif
Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c 2010-03-09 08:31:41 UTC (rev 27358)
+++ trunk/blender/source/blender/blenkernel/intern/material.c 2010-03-09 09:17:45 UTC (rev 27359)
@@ -1247,6 +1247,7 @@
void clear_matcopybuf(void)
{
memset(&matcopybuf, 0, sizeof(Material));
+ matcopied= 0;
}
void free_matcopybuf(void)
@@ -1273,6 +1274,8 @@
matcopybuf.nodetree= NULL;
}
// default_mtex(&mtexcopybuf);
+
+ matcopied= 0;
}
void copy_matcopybuf(Material *ma)
@@ -1346,3 +1349,70 @@
scrarea_queue_winredraw(curarea);
*/
}
+
+
+static short mtexcopied=0; /* must be reset on file load */
+static MTex mtexcopybuf;
+
+void clear_mat_mtex_copybuf(void)
+{ /* use for file reload */
+ mtexcopied= 0;
+}
+
+void copy_mat_mtex_copybuf(ID *id)
+{
+ MTex **mtex= NULL;
+
+ switch(GS(id->name)) {
+ case ID_MA:
+ mtex= &(((Material *)id)->mtex[(int)((Material *)id)->texact]);
+ break;
+ case ID_LA:
+ // la->mtex[(int)la->texact] // TODO
+ break;
+ case ID_WO:
+ // mtex= wrld->mtex[(int)wrld->texact]; // TODO
+ break;
+ }
+
+ if(mtex && *mtex) {
+ memcpy(&mtexcopybuf, *mtex, sizeof(MTex));
+ mtexcopied= 1;
+ }
+ else {
+ mtexcopied= 0;
+ }
+}
+
+void paste_mat_mtex_copybuf(ID *id)
+{
+ MTex **mtex= NULL;
+
+ if(mtexcopied == 0 || mtexcopybuf.tex==NULL)
+ return;
+
+ switch(GS(id->name)) {
+ case ID_MA:
+ mtex= &(((Material *)id)->mtex[(int)((Material *)id)->texact]);
+ break;
+ case ID_LA:
+ // la->mtex[(int)la->texact] // TODO
+ break;
+ case ID_WO:
+ // mtex= wrld->mtex[(int)wrld->texact]; // TODO
+ break;
+ }
+
+ if(mtex) {
+ if(*mtex==NULL) {
+ *mtex= MEM_mallocN(sizeof(MTex), "mtex copy");
+ }
+ else if((*mtex)->tex) {
+ (*mtex)->tex->id.us--;
+ }
+
+ memcpy(*mtex, &mtexcopybuf, sizeof(MTex));
+
+ id_us_plus((ID *)mtexcopybuf.tex);
+ }
+}
Modified: trunk/blender/source/blender/editors/render/render_intern.h
===================================================================
--- trunk/blender/source/blender/editors/render/render_intern.h 2010-03-09 08:31:41 UTC (rev 27358)
+++ trunk/blender/source/blender/editors/render/render_intern.h 2010-03-09 09:17:45 UTC (rev 27359)
@@ -48,6 +48,9 @@
void MATERIAL_OT_copy(struct wmOperatorType *ot);
void MATERIAL_OT_paste(struct wmOperatorType *ot);
+void MATERIAL_OT_mtex_copy(struct wmOperatorType *ot);
+void MATERIAL_OT_mtex_paste(struct wmOperatorType *ot);
+
void SCENE_OT_render_layer_add(struct wmOperatorType *ot);
void SCENE_OT_render_layer_remove(struct wmOperatorType *ot);
Modified: trunk/blender/source/blender/editors/render/render_ops.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_ops.c 2010-03-09 08:31:41 UTC (rev 27358)
+++ trunk/blender/source/blender/editors/render/render_ops.c 2010-03-09 09:17:45 UTC (rev 27359)
@@ -55,6 +55,9 @@
WM_operatortype_append(MATERIAL_OT_copy);
WM_operatortype_append(MATERIAL_OT_paste);
+
+ WM_operatortype_append(MATERIAL_OT_mtex_copy);
+ WM_operatortype_append(MATERIAL_OT_mtex_paste);
WM_operatortype_append(SCENE_OT_render_layer_add);
WM_operatortype_append(SCENE_OT_render_layer_remove);
Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c 2010-03-09 08:31:41 UTC (rev 27358)
+++ trunk/blender/source/blender/editors/render/render_shading.c 2010-03-09 09:17:45 UTC (rev 27359)
@@ -820,3 +820,59 @@
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
+static int copy_material_mtex_exec(bContext *C, wmOperator *op)
+{
+ Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
+
+ if(ma==NULL)
+ return OPERATOR_CANCELLED;
+
+ copy_mat_mtex_copybuf(&ma->id);
+
+ WM_event_add_notifier(C, NC_MATERIAL, ma);
+
+ return OPERATOR_FINISHED;
+}
+
+void MATERIAL_OT_mtex_copy(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Copy Material Texture Settings";
+ ot->idname= "MATERIAL_OT_mtex_copy";
+ ot->description="Copy the material texture settings and nodes";
+
+ /* api callbacks */
+ ot->exec= copy_material_mtex_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+static int paste_material_mtex_exec(bContext *C, wmOperator *op)
+{
+ Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
+
+ if(ma==NULL)
+ return OPERATOR_CANCELLED;
+
+ paste_mat_mtex_copybuf(&ma->id);
+
+ WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING_DRAW, ma);
+
+ return OPERATOR_FINISHED;
+}
+
+void MATERIAL_OT_mtex_paste(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Paste Material Texture Settings";
+ ot->idname= "MATERIAL_OT_mtex_paste";
+ ot->description="Copy the material texture settings and nodes";
+
+ /* api callbacks */
+ ot->exec= paste_material_mtex_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
Modified: trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c 2010-03-09 08:31:41 UTC (rev 27358)
+++ trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c 2010-03-09 09:17:45 UTC (rev 27359)
@@ -54,6 +54,7 @@
#include "BKE_utildefines.h"
#include "BKE_packedFile.h"
#include "BKE_sequencer.h" /* free seq clipboard */
+#include "BKE_material.h" /* clear_matcopybuf */
#include "BLI_blenlib.h"
@@ -154,8 +155,9 @@
UI_init();
}
- // clear_matcopybuf(); /* XXX */
-
+ clear_matcopybuf();
+ clear_mat_mtex_copybuf();
+
// glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
// init_node_butfuncs();
More information about the Bf-blender-cvs
mailing list