[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