I’m developing a plug-in that uses the persistent id of materials to distinguish materials. I found that the persistent_id of the same material in different files is different. This situation is reported by the user and I don’t know how these files have been created. I tried copy file and ‘Save as’，failed to reproduce this problem.
A persistent ID is unique within a single model so that it will be the same if you reopen that model. But it is not unique or matched between different models. For that you need a Globally Unique ID (GUID). Saved components have a GUID. I don’t think materials get a GUID.
So, what you will need to do is generate custom UUIDs and attach them to your materials in attribute dictionaries.
# Within your extension submodule ... MATL_DICT ||= Module.nesting.name.gsub('::','_') << '_material' def assign_material_uuid(matl) require 'securerandom' unless defined?(SecureRandom) uuid = SecureRandom.uuid matl.set_attribute(MATL_DICT, 'uuid', uuid) return uuid end def get_material_uuid(matl) require 'securerandom' unless defined?(SecureRandom) uuid = matl.get_attribute(MATL_DICT, 'uuid', nil) uuid.nil? ? assign_material_uuid(matl) : uuid end def has_material_uuid?(matl) require 'securerandom' unless defined?(SecureRandom) matl.get_attribute(MATL_DICT, 'uuid', nil) ? true : false end