forked from bartvdbraak/blender
misc small changes and bmesh support for testing script
This commit is contained in:
parent
391a214303
commit
2019f636b0
@ -21,8 +21,8 @@
|
||||
from . import engine
|
||||
|
||||
devices = (
|
||||
("CPU", "CPU", "Use CPU for rendering"),
|
||||
("GPU", "GPU Compute", "Use GPU compute device for rendering, configured in user preferences"))
|
||||
("CPU", "CPU", "Use CPU for rendering"),
|
||||
("GPU", "GPU Compute", "Use GPU compute device for rendering, configured in user preferences"))
|
||||
|
||||
feature_set = (
|
||||
("SUPPORTED", "Supported", "Only use finished and supported features"),
|
||||
|
@ -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,8 +203,12 @@ def defaults_object(obj):
|
||||
mesh.show_normal_vertex = True
|
||||
|
||||
# lame!
|
||||
for face in mesh.faces:
|
||||
face.use_smooth = True
|
||||
if IS_BMESH:
|
||||
for poly in mesh.polygons:
|
||||
poly.use_smooth = True
|
||||
else:
|
||||
for face in mesh.faces:
|
||||
face.use_smooth = True
|
||||
|
||||
|
||||
def defaults_modifier(mod):
|
||||
@ -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()
|
||||
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
|
||||
|
||||
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 = 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
|
||||
|
||||
@ -364,13 +426,19 @@ def modifier_hook_add(scene, obj, use_vgroup=True):
|
||||
# no nice way to add hooks from py api yet
|
||||
# assume object mode, hook first face!
|
||||
mesh = obj.data
|
||||
|
||||
|
||||
if use_vgroup:
|
||||
for v in mesh.vertices:
|
||||
v.select = 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
|
||||
totface = len(obj.data.faces)
|
||||
if IS_BMESH:
|
||||
totface = len(obj.data.polygons)
|
||||
else:
|
||||
totface = len(obj.data.faces)
|
||||
|
||||
mod.frame_start = totface // 2
|
||||
mod.frame_duration = totface
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user