diff --git a/nodes/viz/viewer_bmesh.py b/nodes/viz/viewer_bmesh.py index 6b886902137e1cedab029ce54893ad951cedf609..d319d6d2e952ee7d62354db9d3cd9132574b3a2f 100644 --- a/nodes/viz/viewer_bmesh.py +++ b/nodes/viz/viewer_bmesh.py @@ -304,7 +304,7 @@ class SvBmeshViewerNodeV28(bpy.types.Node, SverchCustomTreeNode, SvObjHelper): row = layout.row(align=True) # row.alert = warning row.prop(self, 'basedata_name', text='') - row.prop_search(self, 'material', bpy.data, 'materials', text='', icon='MATERIAL_DATA') + row.prop_search(self, 'material_pointer', bpy.data, 'materials', text='', icon='MATERIAL_DATA') #row.operator('node.sv_callback_bmesh_viewer',text='',icon='RESTRICT_SELECT_OFF') def get_geometry_from_sockets(self): @@ -388,7 +388,7 @@ class SvBmeshViewerNodeV28(bpy.types.Node, SverchCustomTreeNode, SvObjHelper): self.to_collection(objs) # truthy if self.material is in .materials - if bpy.data.materials.get(self.material): + if self.material_pointer: self.set_corresponding_materials() self.set_autosmooth(objs) @@ -421,7 +421,7 @@ class SvBmeshViewerNodeV28(bpy.types.Node, SverchCustomTreeNode, SvObjHelper): mat.use_fake_user = True nodes = mat.node_tree.nodes - self.material = mat.name + self.material_pointer = mat if bpy.context.scene.render.engine == 'CYCLES': # add attr node to the left of diffuse BSDF + connect it diff --git a/utils/sv_obj_helper.py b/utils/sv_obj_helper.py index 625f21b435375d6c3f6ba9b003e036a8e85e4143..5c1c3607ad4d41a51d7e9a709fdb5ec49903ae98 100644 --- a/utils/sv_obj_helper.py +++ b/utils/sv_obj_helper.py @@ -245,8 +245,11 @@ class SvObjHelper(): # most importantly, what kind of base data are we making? data_kind: StringProperty(name='data kind', default='MESH') + properties_to_skip_iojson = ['material_pointer'] # to be used if the node has no material input. - material: StringProperty(name='material', default='', update=updateNode) + material: StringProperty(name='material', default='') + material_pointer: bpy.props.PointerProperty( + type=bpy.types.Material, poll=lambda s, o: True, update=updateNode) # to be used as standard toggles for object attributes of same name object_hide_viewport: BoolProperty(name='object hide viewport', default=True) @@ -305,7 +308,7 @@ class SvObjHelper(): row = col.row(align=True) row.scale_y = 1 - row.prop_search(self, 'material', bpy.data, 'materials', text='', icon='MATERIAL_DATA') + row.prop_search(self, 'material_pointer', bpy.data, 'materials', text='', icon='MATERIAL_DATA') tracked_operator(self, row, fn_name='add_material', icon="ZOOM_IN") def draw_ext_object_buttons(self, context, layout): @@ -315,9 +318,9 @@ class SvObjHelper(): tracked_operator(self, row, fn_name='add_material', text='+Material', icon="ZOOM_IN") def set_corresponding_materials(self): - if bpy.data.materials.get(self.material.strip()): + if self.material_pointer: for obj in self.get_children(): - obj.active_material = bpy.data.materials[self.material.strip()] + obj.active_material = self.material_pointer def remove_non_updated_objects(self, obj_index): objs = self.get_children()