Fixed a crash switching to brush texture nodes

Also removed some python code to check for node materials within the material and texture properties. It seems to go fine without it, and this should be handled by context instead.
This commit is contained in:
Matt Ebb 2010-03-17 22:54:55 +00:00
parent 634b750cbb
commit 045d33dae0
4 changed files with 34 additions and 51 deletions

@ -23,18 +23,6 @@ from rna_prop_ui import PropertyPanel
narrowui = 180
def active_node_mat(mat):
# TODO, 2.4x has a pipeline section, for 2.5 we need to communicate
# which settings from node-materials are used
if mat:
mat_node = mat.active_node_material
if mat_node:
return mat_node
else:
return mat
return None
class MATERIAL_MT_sss_presets(bpy.types.Menu):
bl_label = "SSS Presets"
@ -148,14 +136,14 @@ class MATERIAL_PT_shading(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
wide_ui = context.region.width > narrowui
if mat.type in ('SURFACE', 'WIRE'):
@ -259,14 +247,14 @@ class MATERIAL_PT_options(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
wide_ui = context.region.width > narrowui
split = layout.split()
@ -305,14 +293,14 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
wide_ui = context.region.width > narrowui
split = layout.split()
@ -342,14 +330,14 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
wide_ui = context.region.width > narrowui
split = layout.split()
@ -413,14 +401,14 @@ class MATERIAL_PT_specular(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
wide_ui = context.region.width > narrowui
layout.active = (not mat.shadeless)
@ -483,12 +471,12 @@ class MATERIAL_PT_sss(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw_header(self, context):
mat = active_node_mat(context.material)
mat = context.material
sss = mat.subsurface_scattering
self.layout.active = (not mat.shadeless)
@ -497,7 +485,7 @@ class MATERIAL_PT_sss(MaterialButtonsPanel):
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
sss = mat.subsurface_scattering
wide_ui = context.region.width > narrowui
@ -535,19 +523,19 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw_header(self, context):
raym = active_node_mat(context.material).raytrace_mirror
raym = context.material.raytrace_mirror
self.layout.prop(raym, "enabled", text="")
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
raym = mat.raytrace_mirror
wide_ui = context.region.width > narrowui
@ -594,19 +582,19 @@ class MATERIAL_PT_transp(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw_header(self, context):
mat = active_node_mat(context.material)
mat = context.material
self.layout.prop(mat, "transparency", text="")
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
rayt = mat.raytrace_transparency
wide_ui = context.region.width > narrowui
@ -661,19 +649,19 @@ class MATERIAL_PT_transp_game(MaterialButtonsPanel):
COMPAT_ENGINES = {'BLENDER_GAME'}
def poll(self, context):
mat = active_node_mat(context.material)
mat = context.material
engine = context.scene.render.engine
return mat and (engine in self.COMPAT_ENGINES)
def draw_header(self, context):
mat = active_node_mat(context.material)
mat = context.material
self.layout.prop(mat, "transparency", text="")
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
mat = context.material
rayt = mat.raytrace_transparency
wide_ui = context.region.width > narrowui

@ -44,19 +44,8 @@ class TEXTURE_MT_envmap_specials(bpy.types.Menu):
layout.operator("texture.envmap_clear_all", icon='FILE_REFRESH')
def active_node_mat(mat):
if mat:
mat_node = mat.active_node_material
if mat_node:
return mat_node
else:
return mat
return None
def context_tex_datablock(context):
idblock = active_node_mat(context.material)
idblock = context.material
if idblock:
return idblock

@ -55,7 +55,10 @@ class NODE_HT_header(bpy.types.Header):
snode_id = snode.id
id_from = snode.id_from
if id_from:
layout.template_ID(id_from, "active_texture", new="texture.new")
if snode.texture_type == 'BRUSH':
layout.template_ID(id_from, "texture", new="texture.new")
else:
layout.template_ID(id_from, "active_texture", new="texture.new")
if snode_id:
layout.prop(snode_id, "use_nodes")

@ -401,11 +401,13 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
snode->from= (ID*)give_current_material(ob, ob->actcol);
/* from is not set fully for material nodes, should be ID + Node then */
snode->id= &tx->id;
}
}
else if(snode->texfrom==SNODE_TEX_WORLD) {
tx= give_current_world_texture(scene->world);
snode->from= (ID *)scene->world;
snode->id= &tx->id;
}
else {
Brush *brush= NULL;
@ -415,11 +417,12 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
else
brush= paint_brush(&scene->toolsettings->imapaint.paint);
snode->from= (ID *)brush;
tx= give_current_brush_texture(brush);
if (brush) {
snode->from= (ID *)brush;
tx= give_current_brush_texture(brush);
snode->id= &tx->id;
}
}
snode->id= &tx->id;
}
if(snode->id)