From 107512e958e5672dd7a809ed8cbc389f790dc7eb Mon Sep 17 00:00:00 2001 From: zeffii Date: Sat, 9 May 2020 16:28:11 +0200 Subject: [PATCH 1/2] add material pointer --- utils/sv_obj_helper.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/sv_obj_helper.py b/utils/sv_obj_helper.py index 625f21b43..ed2e29ea2 100644 --- a/utils/sv_obj_helper.py +++ b/utils/sv_obj_helper.py @@ -246,7 +246,8 @@ class SvObjHelper(): data_kind: StringProperty(name='data kind', default='MESH') # 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) -- GitLab From e95f66e8bfaf6a76cb55a5c0460fdda0aeb269e9 Mon Sep 17 00:00:00 2001 From: zeffii Date: Sat, 9 May 2020 20:10:51 +0200 Subject: [PATCH 2/2] add material_pointer to bmview, and obj helper's iojson_ignoreset --- nodes/viz/viewer_bmesh.py | 6 +++--- utils/sv_obj_helper.py | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/nodes/viz/viewer_bmesh.py b/nodes/viz/viewer_bmesh.py index 6b8869021..d319d6d2e 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 ed2e29ea2..5c1c3607a 100644 --- a/utils/sv_obj_helper.py +++ b/utils/sv_obj_helper.py @@ -245,9 +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='') - material_pointer: bpy.props.PointerProperty(type=bpy.types.Material, poll=lambda s, o: True, update=updateNode) + 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) @@ -306,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): @@ -316,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() -- GitLab