Source code for Create_Materials
import bpy
import sys
import os
dir = os.path.dirname(bpy.data.filepath)
if not dir in sys.path:
sys.path.append(dir)
import Atom_Data
import importlib #<-- for end user in case they want to add functionality.
importlib.reload(Atom_Data)
[docs]
def CreateAndAssignMaterials(ref_dict):
"""
Instantiates the materials for the elements present in the molecule.
:param ref_dict: (dict) Dictionary of elements present in the molecule and their data.
:return: (dict) Dictionary of created materials.
"""
d = {}
for key in ref_dict:
d[key] = AssignMaterial(key, ref_dict.get(key).get_color())
d["Xx"] = AssignMaterial("Xx", Atom_Data.Elements.get("Xx").get_color())
d["Yy"] = AssignTransparentMaterial("Yy", (0.0, 1.0, 1.0, 0.5)) # cyan, 50% transparent
return d
[docs]
def AssignMaterial(material_name, material_color):
"""
Creates a material if it does not exist and assigns its name and diffuse color.
:param material_name: (str) Name of the material.
:param material_color: (tuple) RGBA values for the material.
:return: (bpy.types.Material) The created or existing material.
"""
assignment = bpy.data.materials.get(material_name)
if assignment is None:
assignment = bpy.data.materials.new(name=material_name)
assignment.diffuse_color = material_color
return assignment
[docs]
def RemoveAllMaterialsAndMeshes():
"""
Removes all materials and meshes from the Blender scene.
:return: None
"""
# Remove all materials
for mat in bpy.data.materials:
bpy.data.materials.remove(mat)
# Remove all meshes
for mesh in bpy.data.meshes:
bpy.data.meshes.remove(mesh)
[docs]
def AssignTransparentMaterial(material_name, material_color):
assignment = bpy.data.materials.get(material_name)
if assignment is None:
assignment = bpy.data.materials.new(name=material_name)
assignment.use_nodes = True
assignment.blend_method = 'BLEND'
bsdf = assignment.node_tree.nodes.get("Principled BSDF")
if bsdf:
r, g, b, a = material_color
bsdf.inputs["Base Color"].default_value = (r, g, b, 1.0)
bsdf.inputs["Alpha"].default_value = a
return assignment
RemoveAllMaterialsAndMeshes()