[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31492] branches/soc-2010-nicolasbishop: = = Ptex ==

Nicholas Bishop nicholasbishop at gmail.com
Sat Aug 21 06:45:29 CEST 2010


Revision: 31492
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31492
Author:   nicholasbishop
Date:     2010-08-21 06:45:28 +0200 (Sat, 21 Aug 2010)

Log Message:
-----------
== Ptex ==

* Added subface hiding and subface masking to ptex edit mode
* Added hotkeys and menu items (HKEY and alt+HKEY for hiding and unhiding, MKEY and alt+MKEY for masking and unmasking)

Modified Paths:
--------------
    branches/soc-2010-nicolasbishop/release/scripts/ui/space_view3d.py
    branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_intern.h
    branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ops.c
    branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c
    branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c
    branches/soc-2010-nicolasbishop/source/blender/makesdna/DNA_meshdata_types.h

Modified: branches/soc-2010-nicolasbishop/release/scripts/ui/space_view3d.py
===================================================================
--- branches/soc-2010-nicolasbishop/release/scripts/ui/space_view3d.py	2010-08-21 04:06:07 UTC (rev 31491)
+++ branches/soc-2010-nicolasbishop/release/scripts/ui/space_view3d.py	2010-08-21 04:45:28 UTC (rev 31492)
@@ -936,7 +936,24 @@
         layout.operator("paint.vertex_color_set")
         layout.operator("paint.vertex_color_dirt")
 
+        # hiding
+        prop = layout.operator("ptex.subface_flag_set", text="Hide Selected")
+        prop.flag = 'HIDDEN'
+        prop = layout.operator("ptex.subface_flag_set", text="Show All")
+        prop.flag = 'HIDDEN'
+        prop.set = 0
+        prop.ignore_hidden = 0
+        prop.ignore_unselected = 0
 
+        # masking
+        prop = layout.operator("ptex.subface_flag_set", text="Mask Selected")
+        prop.flag = 'MASKED'
+        prop = layout.operator("ptex.subface_flag_set", text="Unmask Selected")
+        prop.flag = 'MASKED'
+        prop.set = 0
+
+
+
 class VIEW3D_MT_hook(bpy.types.Menu):
     bl_label = "Hooks"
 

Modified: branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_intern.h	2010-08-21 04:06:07 UTC (rev 31491)
+++ branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_intern.h	2010-08-21 04:45:28 UTC (rev 31492)
@@ -259,6 +259,7 @@
 void PTEX_OT_face_resolution_set(struct wmOperatorType *ot);
 void PTEX_OT_subface_select(struct wmOperatorType *ot);
 void PTEX_OT_select_all(struct wmOperatorType *ot);
+void PTEX_OT_subface_flag_set(struct wmOperatorType *ot);
 
 /* paint_overlay.c */
 int paint_sample_overlay(PaintStroke *stroke, float col[3], float co[2]);

Modified: branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ops.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ops.c	2010-08-21 04:06:07 UTC (rev 31491)
+++ branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ops.c	2010-08-21 04:45:28 UTC (rev 31492)
@@ -19,6 +19,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include "DNA_meshdata_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 
@@ -226,6 +227,7 @@
 	WM_operatortype_append(PTEX_OT_face_resolution_set);
 	WM_operatortype_append(PTEX_OT_subface_select);
 	WM_operatortype_append(PTEX_OT_select_all);
+	WM_operatortype_append(PTEX_OT_subface_flag_set);
 
 	/* face-select */
 	WM_operatortype_append(PAINT_OT_face_select_linked);
@@ -429,15 +431,33 @@
 	RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_vertex_paint_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", WM_RADIALCONTROL_STRENGTH);
 	WM_keymap_verify_item(keymap, "PAINT_OT_vertex_paint", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "PAINT_OT_sample_color", RIGHTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap,
+			"PAINT_OT_vertex_color_set",KKEY, KM_PRESS, KM_SHIFT, 0);
 
+	/* ptex edit mode */
 	WM_keymap_add_item(keymap, "PTEX_OT_subface_select", RIGHTMOUSE, KM_PRESS, 0, 0);
 	kmi = WM_keymap_add_item(keymap, "PTEX_OT_subface_select", RIGHTMOUSE, KM_PRESS, KM_SHIFT, 0);
 	RNA_boolean_set(kmi->ptr, "extend", 1);
 	WM_keymap_add_item(keymap, "PTEX_OT_select_all", AKEY, KM_PRESS, 0, 0);
 
-	WM_keymap_add_item(keymap,
-			"PAINT_OT_vertex_color_set",KKEY, KM_PRESS, KM_SHIFT, 0);
+	/* ptex subface hiding */
+	kmi = WM_keymap_add_item(keymap, "PTEX_OT_subface_flag_set", HKEY, KM_PRESS, 0, 0);
+	RNA_enum_set(kmi->ptr, "flag", MPTEX_SUBFACE_HIDDEN);
+	kmi = WM_keymap_add_item(keymap, "PTEX_OT_subface_flag_set", HKEY, KM_PRESS, KM_ALT, 0);
+	RNA_enum_set(kmi->ptr, "flag", MPTEX_SUBFACE_HIDDEN);
+	RNA_boolean_set(kmi->ptr, "ignore_unselected", 0);
+	RNA_boolean_set(kmi->ptr, "ignore_hidden", 0);
+	RNA_boolean_set(kmi->ptr, "set", 0);
 
+	/* ptex subface mask */
+	kmi = WM_keymap_add_item(keymap, "PTEX_OT_subface_flag_set", MKEY, KM_PRESS, 0, 0);
+	RNA_enum_set(kmi->ptr, "flag", MPTEX_SUBFACE_MASKED);
+	kmi = WM_keymap_add_item(keymap, "PTEX_OT_subface_flag_set", MKEY, KM_PRESS, KM_ALT, 0);
+	RNA_enum_set(kmi->ptr, "flag", MPTEX_SUBFACE_MASKED);
+	RNA_boolean_set(kmi->ptr, "ignore_unselected", 0);
+	RNA_boolean_set(kmi->ptr, "ignore_hidden", 0);
+	RNA_boolean_set(kmi->ptr, "set", 0);
+
 	ed_keymap_paint_brush_switch(keymap, "tool_settings.vertex_paint.active_brush_index");
 	ed_keymap_paint_brush_size(keymap, "tool_settings.vertex_paint.brush.size");
 

Modified: branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c	2010-08-21 04:06:07 UTC (rev 31491)
+++ branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c	2010-08-21 04:45:28 UTC (rev 31492)
@@ -254,6 +254,10 @@
 		MPtexSubface *subface = &pt->subfaces[gtf->offset];
 		int u, v, x, y, layersize, res[2];
 
+		/* ignore hidden and masked subfaces */
+		if(subface->flag & (MPTEX_SUBFACE_HIDDEN|MPTEX_SUBFACE_MASKED))
+			continue;
+
 		layersize = pt->channels * ptex_data_size(pt->type);
 
 		res[0] = MAX2(subface->res[0] / (gridsize - 1), 1);
@@ -1029,7 +1033,7 @@
 	return OPERATOR_FINISHED;
 }
 
-static int ptex_select_poll(bContext *C)
+static int ptex_edit_poll(bContext *C)
 {
 	Object *ob = CTX_data_active_object(C);
 
@@ -1049,7 +1053,7 @@
 	
 	/* api callbacks */
 	ot->invoke= ptex_subface_select_invoke;
-	ot->poll= ptex_select_poll;
+	ot->poll= ptex_edit_poll;
 
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1111,10 +1115,65 @@
 	
 	/* api callbacks */
 	ot->exec= ptex_select_all_exec;
-	ot->poll= ptex_select_poll;
+	ot->poll= ptex_edit_poll;
 	
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
 	WM_operator_properties_select_all(ot);
 }
+
+int ptex_subface_flag_set_exec(bContext *C, wmOperator *op)
+{
+	Object *ob = CTX_data_active_object(C);
+	Mesh *me = ob->data;
+	MPtex *mptex = CustomData_get_layer(&me->fdata, CD_MPTEX);
+	int flag = RNA_enum_get(op->ptr, "flag");
+	int set = RNA_boolean_get(op->ptr, "set");
+	int ignore_unselected = RNA_boolean_get(op->ptr, "ignore_unselected");
+	int ignore_hidden = RNA_boolean_get(op->ptr, "ignore_hidden");
+	int i, j;
+
+	for(i = 0; i < me->totface; ++i) {
+		for(j = 0; j < mptex[i].totsubface; ++j) {
+			MPtexSubface *subface = &mptex[i].subfaces[j];
+			
+			if((!ignore_unselected || (subface->flag & MPTEX_SUBFACE_SELECTED)) &&
+			   (!ignore_hidden || !(subface->flag & MPTEX_SUBFACE_HIDDEN))) {
+				if(set)
+					subface->flag |= flag;
+				else
+					subface->flag &= ~flag;
+			}
+		}
+	}
+
+	WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+
+	return OPERATOR_FINISHED;
+}
+
+void PTEX_OT_subface_flag_set(wmOperatorType *ot)
+{
+	static EnumPropertyItem flag_items[] = {
+		{MPTEX_SUBFACE_HIDDEN, "HIDDEN", 0, "Hidden", ""},
+		{MPTEX_SUBFACE_MASKED, "MASKED", 0, "Masked", ""},
+		{0, NULL, 0, NULL, NULL}};
+
+	/* identifiers */
+	ot->name= "Set Subface Flags";
+	ot->description= "Set or clear a flag from ptex subfaces";
+	ot->idname= "PTEX_OT_subface_flag_set";
+	
+	/* api callbacks */
+	ot->exec= ptex_subface_flag_set_exec;
+	ot->poll= ptex_active_layer_poll;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	RNA_def_enum(ot->srna, "flag", flag_items, 0, "Flag", "");
+	RNA_def_boolean(ot->srna, "set", 1, "Set", "Set the flag if true, otherwise clear the flag");	
+	RNA_def_boolean(ot->srna, "ignore_unselected", 1, "Ignore Unselected", "Don't change the flags of unselected faces");
+	RNA_def_boolean(ot->srna, "ignore_hidden", 1, "Ignore Hidden", "Don't change the flags of hidden faces");
+}

Modified: branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c
===================================================================
--- branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c	2010-08-21 04:06:07 UTC (rev 31491)
+++ branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c	2010-08-21 04:45:28 UTC (rev 31492)
@@ -1111,7 +1111,7 @@
 		ptex_edit = flags & DM_DRAW_PTEX_TEXELS;
 	}
 
-	if(use_color || ptex_edit) {
+	if(use_color || use_ptex) {
 		glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
 		glEnable(GL_COLOR_MATERIAL);
 	}
@@ -1133,6 +1133,9 @@
 			MPtexSubface *subface = &pt->subfaces[gtf->offset];
 			float u, v, ustep, vstep, vstart = 0;
 
+			if(subface->flag & MPTEX_SUBFACE_HIDDEN)
+				continue;
+
 			if(ptex_edit) {
 				ustep = subface->res[0] >> 1;
 				vstep = subface->res[1] >> 1;
@@ -1154,11 +1157,18 @@
 			if(ptex_edit) {
 				if(subface->flag & MPTEX_SUBFACE_SELECTED)
 					glColor3ub(255, 255, 255);
+				else if(subface->flag & MPTEX_SUBFACE_MASKED)
+					glColor3ub(96, 96, 96);
 				else	 
 					glColor3ub(128, 128, 128);	
 			}
-			else if(use_ptex)
+			else if(use_ptex) {
+				if(subface->flag & MPTEX_SUBFACE_MASKED)
+					glColor3ub(128, 128, 128);
+				else
+					glColor3ub(255, 255, 255);
 				glBindTexture(GL_TEXTURE_2D, buffers->ptex[i]);
+			}
 
 			for(y = 0, v = vstart; y < gridsize-1; y++, v += vstep) {
 				glBegin(GL_QUAD_STRIP);
@@ -1242,7 +1252,7 @@
 		}
 	}
 
-	if(use_color || ptex_edit)
+	if(use_color || use_ptex)
 		glDisable(GL_COLOR_MATERIAL);
 }
 
@@ -1263,7 +1273,7 @@
 		glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf);
 		glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf);
 
-		use_colmat = buffers->color_buf || (flags & DM_DRAW_PTEX_TEXELS);
+		use_colmat = buffers->color_buf || (flags & DM_DRAW_PTEX);
 		if(use_colmat) {
 			glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
 			glGetBooleanv(GL_COLOR_MATERIAL, &colmat);
@@ -1271,6 +1281,8 @@
 		}
 
 		if(buffers->tot_quad) {
+			int skip = 0;
+
 			glVertexPointer(3, GL_FLOAT, sizeof(GridVBO), (void*)offsetof(GridVBO, co));
 			glNormalPointer(GL_FLOAT, sizeof(GridVBO), (void*)offsetof(GridVBO, no));
 			if(buffers->color_buf) {
@@ -1278,39 +1290,55 @@
 				glColorPointer(3, GL_UNSIGNED_BYTE, 0, (void*)0);
 			}
 			if(buffers->uv_buf) {
+				int *grid_indices;
+				CustomData *fdata;
+				GridToFace *gtf;
+				MPtex *mptex, *pt;
+				MPtexSubface *subface;
+				GridToFace *grid_face_map;
+
+				/* note: code here assumes there's only one
+				   ptex subface per node */
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list