Wo ist der Fehler in meinem Python-Skript für Blender?
import bpy

# Funktion zum Erstellen eines Materials
def create_material(name, base_color):
  material = bpy.data.materials.new(name=name)
  material.use_nodes = True
  material.node_tree.nodes["Principled BSDF"].inputs["Base Color"].default_value = base_color
  return material

# Funktion zum Erstellen eines Rechtecks
def create_rectangle(name, location, scale, material):
  bpy.ops.mesh.primitive_cube_add(size=1, location=location)
  rectangle = bpy.context.active_object
  rectangle.name = name
  rectangle.scale = scale
  rectangle.data.materials.append(material)
  return rectangle

# Szene zurücksetzen
bpy.ops.wm.read_factory_settings(use_empty=True)

# Farben für die verschiedenen Seiten der Handyhülle
case_colors = [
  (1.0, 0.8, 0.6, 1.0), # Vorderseite (Beispiel: hellbraun)
  (0.8, 0.8, 0.8, 1.0), # Rückseite (Beispiel: hellgrau)
  (0.0, 0.0, 0.0, 1.0), # Seiten (Beispiel: schwarz)
]

# Farben für Graphen und PCM
graphene_color = (0.0, 1.0, 0.0, 1.0) # Grün
pcm_color = (0.0, 0.0, 1.0, 1.0) # Blau
epoxy_color = (1.0, 1.0, 1.0, 1.0) # Weiß für Epoxidharz

# Länge, Breite und Dicke der Handyhülle
length = 0.15
width = 0.07
thickness = 0.02

# Ursprungskoordinaten
origin = (0, 0, 0)

# Material für Graphen erstellen
graphene_material = create_material("Graphene_Material", graphene_color)

# Material für PCM erstellen
pcm_material = create_material("PCM_Material", pcm_color)

# Material für Epoxidharz erstellen
epoxy_material = create_material("Epoxy_Material", epoxy_color)

# Schleife zum Erstellen der Seiten der Handyhülle mit verschiedenen Farben
for i, color in enumerate(case_colors):
  # Material für die Handyhülle erstellen und zuweisen
  case_material = create_material(f"Case_Material_{i}", color)
  # Handyhüllen-Rechteck erstellen
  create_rectangle(f"HandyHuelle_{i}", origin, (length if i == 0 else width, width if i == 0 else thickness, thickness if i == 0 else width), case_material)

# Graphen in der Mitte platzieren
create_rectangle("Graphene", (origin[0] + length / 2, origin[1] + width / 2, origin[2] + thickness / 2), (width,), graphene_material)

# PCM auf der Innenseite platzieren mit Epoxidharz-Beschichtung
pcm_rectangle = create_rectangle("PCM", (origin[0] + length / 2, origin[1] + width / 2, origin[2] + thickness / 2), (width,), pcm_material)

# Material der Epoxidharz-Beschichtung zuweisen
epoxy_material_node = pcm_material.node_tree.nodes.new(type='ShaderNodeBsdfPrincipled')
epoxy_material_node.location = (-300, 0) # Position des Materialknotens für Epoxidharz
epoxy_material_node.material = bpy.data.materials.get("Epoxy_Material")

# Material der Epoxidharz-Beschichtung verbinden
pcm_material.node_tree.links.new(pcm_material.node_tree.nodes["Material Output"].inputs['Surface'], epoxy_material_node.outputs['BSDF'])

Mir fällt da an sich kein Fehler auf, aber Blender meint:

Python: Traceback (most recent call last):
  File "\Text", line 57, in <module>
  File "\Text", line 13, in create_rectangle
  AttributeError: 'Context' object has no attribute 'active_object'

Hilfe. :D

MfG aus der Nachbarschaft.

Blender 3D, Code, Programmiersprache, Python

Meistgelesene Beiträge zum Thema Python