misc small changes and bmesh support for testing script

This commit is contained in:
Campbell Barton 2012-01-17 18:01:16 +00:00
parent 391a214303
commit 2019f636b0
5 changed files with 107 additions and 30 deletions

@ -149,6 +149,7 @@ class CyclesRender_PT_performance(CyclesButtonsPanel, Panel):
sub.prop(cscene, "debug_use_spatial_splits")
sub.prop(cscene, "use_cache")
class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):
bl_label = "Layers"
bl_options = {'DEFAULT_CLOSED'}
@ -708,7 +709,7 @@ def draw_device(self, context):
scene = context.scene
layout = self.layout
if scene.render.engine == "CYCLES":
if scene.render.engine == 'CYCLES':
cscene = scene.cycles
layout.prop(cscene, "feature_set")
@ -719,6 +720,7 @@ def draw_device(self, context):
elif device_type == 'OPENCL' and cscene.feature_set == 'EXPERIMENTAL':
layout.prop(cscene, "device")
def draw_pause(self, context):
layout = self.layout
scene = context.scene
@ -726,7 +728,7 @@ def draw_pause(self, context):
if scene.render.engine == "CYCLES":
view = context.space_data
if view.viewport_shade == "RENDERED":
if view.viewport_shade == 'RENDERED':
cscene = scene.cycles
layout.prop(cscene, "preview_pause", icon="PAUSE", text="")

@ -4650,7 +4650,8 @@ static int uv_sculpt_brush_poll(bContext *C)
int ret;
Object *obedit = CTX_data_edit_object(C);
SpaceImage *sima= CTX_wm_space_image(C);
ToolSettings *toolsettings = CTX_data_scene(C)->toolsettings;
Scene *scene = CTX_data_scene(C);
ToolSettings *toolsettings = scene->toolsettings;
if(!uv_sculpt_brush(C) || !obedit || obedit->type != OB_MESH)
return 0;
@ -5162,7 +5163,7 @@ static void brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata)
float pixel_size;
float alpha= 0.5f;
ts = CTX_data_scene(C)->toolsettings;
ts = scene->toolsettings;
if(use_zoom && !ts->use_uv_sculpt){
pixel_size = MAX2(size * zoomx, size * zoomy);
@ -5202,14 +5203,16 @@ static void brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata)
static void toggle_paint_cursor(bContext *C, int enable)
{
ToolSettings *settings= CTX_data_scene(C)->toolsettings;
wmWindowManager *wm= CTX_wm_manager(C);
Scene *scene = CTX_data_scene(C);
ToolSettings *settings= scene->toolsettings;
if(settings->imapaint.paintcursor && !enable) {
WM_paint_cursor_end(CTX_wm_manager(C), settings->imapaint.paintcursor);
WM_paint_cursor_end(wm, settings->imapaint.paintcursor);
settings->imapaint.paintcursor = NULL;
}
else if(enable)
settings->imapaint.paintcursor= WM_paint_cursor_activate(CTX_wm_manager(C), image_paint_poll, brush_drawcursor, NULL);
settings->imapaint.paintcursor= WM_paint_cursor_activate(wm, image_paint_poll, brush_drawcursor, NULL);
}
/* enable the paint cursor if it isn't already.

@ -2945,7 +2945,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
prop= RNA_def_property(srna, "use_16bit_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "use_16bit_textures", 1);
RNA_def_property_ui_text(prop, "16 Bit Float Textures", "Use 16 bit per component texture for float images.");
RNA_def_property_ui_text(prop, "16 Bit Float Textures", "Use 16 bit per component texture for float images");
RNA_def_property_update(prop, 0, "rna_userdef_gl_use_16bit_textures");
prop= RNA_def_property(srna, "use_vertex_buffer_objects", PROP_BOOLEAN, PROP_NONE);

@ -31,11 +31,12 @@
import math
USE_QUICK_RENDER = False
IS_BMESH = hasattr(__import__("bpy").types, "LoopColors")
# -----------------------------------------------------------------------------
# utility funcs
def render_gl(context, filepath, shade):
def ctx_viewport_shade(context, shade):
@ -61,15 +62,16 @@ def render_gl(context, filepath, shade):
ctx_viewport_shade(context, shade)
#~ # stop to inspect!
#~ if filepath == "test_cube_shell_solidify_subsurf_wp_wire":
#~ assert(0)
#~ else:
#~ return
bpy.ops.render.opengl(write_still=True,
view_context=True)
# stop to inspect!
#~ if filepath == "test_cube_like_subsurf_single_wp_wire":
#~ assert(0)
def render_gl_all_modes(context, obj, filepath=""):
assert(obj != None)
@ -201,6 +203,10 @@ def defaults_object(obj):
mesh.show_normal_vertex = True
# lame!
if IS_BMESH:
for poly in mesh.polygons:
poly.use_smooth = True
else:
for face in mesh.faces:
face.use_smooth = True
@ -213,6 +219,18 @@ def defaults_modifier(mod):
# -----------------------------------------------------------------------------
# models (utils)
if IS_BMESH:
def mesh_bmesh_poly_elems(poly, elems):
vert_start = poly.loop_start
vert_total = poly.loop_total
return elems[vert_start:vert_start + vert_total]
def mesh_bmesh_poly_vertices(poly):
return [loop.vertex_index
for loop in mesh_bmesh_poly_elems(poly, poly.id_data.loops)]
def mesh_bounds(mesh):
xmin = ymin = zmin = +100000000.0
xmax = ymax = zmax = -100000000.0
@ -231,23 +249,67 @@ def mesh_bounds(mesh):
def mesh_uv_add(obj):
uvs = ((0.0, 0.0),
(0.0, 1.0),
(1.0, 1.0),
(1.0, 0.0))
uv_lay = obj.data.uv_textures.new()
if IS_BMESH:
# XXX, odd that we need to do this. until uvs and texface
# are separated we will need to keep it
uv_loops = obj.data.uv_loop_layers[-1]
uv_list = uv_loops.data[:]
for poly in obj.data.polygons:
poly_uvs = mesh_bmesh_poly_elems(poly, uv_list)
for i, c in enumerate(poly_uvs):
c.uv = uvs[i % 4]
else:
for uv in uv_lay.data:
uv.uv1 = 0.0, 0.0
uv.uv2 = 0.0, 1.0
uv.uv3 = 1.0, 1.0
uv.uv4 = 1.0, 0.0
uv.uv1 = uvs[0]
uv.uv2 = uvs[1]
uv.uv3 = uvs[2]
uv.uv4 = uvs[3]
return uv_lay
def mesh_vcol_add(obj, mode=0):
colors = ((0.0, 0.0, 0.0), # black
(1.0, 0.0, 0.0), # red
(0.0, 1.0, 0.0), # green
(0.0, 0.0, 1.0), # blue
(1.0, 1.0, 0.0), # yellow
(0.0, 1.0, 1.0), # cyan
(1.0, 0.0, 1.0), # magenta
(1.0, 1.0, 1.0), # white
)
def colors_get(i):
return colors[i % len(colors)]
vcol_lay = obj.data.vertex_colors.new()
for col in vcol_lay.data:
col.color1 = 1.0, 0.0, 0.0
col.color2 = 0.0, 1.0, 0.0
col.color3 = 0.0, 0.0, 1.0
col.color4 = 0.0, 0.0, 0.0
mesh = obj.data
if IS_BMESH:
col_list = vcol_lay.data[:]
for poly in mesh.polygons:
face_verts = mesh_bmesh_poly_vertices(poly)
poly_cols = mesh_bmesh_poly_elems(poly, col_list)
for i, c in enumerate(poly_cols):
c.color = colors[i % 4]
else:
for i, col in enumerate(vcol_lay.data):
face_verts = mesh.faces[i].vertices
col.color1 = colors_get(face_verts[0])
col.color2 = colors_get(face_verts[1])
col.color3 = colors_get(face_verts[2])
if len(face_verts) == 4:
col.color4 = colors_get(face_verts[3])
return vcol_lay
@ -371,6 +433,12 @@ def modifier_hook_add(scene, obj, use_vgroup=True):
else:
for v in mesh.vertices:
v.select = False
if IS_BMESH:
face_verts = mesh_bmesh_poly_vertices(mesh.polygons[0])
else:
face_verts = mesh.faces[0].vertices[:]
for i in mesh.faces[0].vertices:
mesh.vertices[i].select = True
@ -406,7 +474,11 @@ def modifier_build_add(scene, obj):
defaults_modifier(mod)
# ensure we display some faces
if IS_BMESH:
totface = len(obj.data.polygons)
else:
totface = len(obj.data.faces)
mod.frame_start = totface // 2
mod.frame_duration = totface