Мой аддон для блендера будет работать в текстовом редакторе, но я продолжаю получать сообщение об ошибке, когда пытаюсь Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Мой аддон для блендера будет работать в текстовом редакторе, но я продолжаю получать сообщение об ошибке, когда пытаюсь

Сообщение Anonymous »

Я получаю эту ошибку
Python: Traceback (последний вызов — последний):
Файл «C:\Users\username\Desktop\blender-4.2.3-windows» -x64\4.2\scripts\addons_core\bl_pkg\bl_extension_ops.py", строка 1388, при выполнении
cmd_batch = self.exec_command_iter(is_modal)
^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
Файл "C:\Users\username\Desktop\blender-4.2.3-windows-x64\4.2\scripts\addons_core\ bl_pkg\bl_extension_ops.py", строка 2452, в exec_command_iter
self.exec_legacy(source_filepath)
Файл "C:\Users\username\Desktop\blender-4.2.3-windows-x64\4.2\scripts \addons_core\bl_pkg\bl_extension_ops.py", строка 2583, в exec_legacy
bpy.types.PREFERENCES_OT_addon_install.execute(self, bpy.context)
Файл "C:\Users\username\Desktop\blender- 4.2.3-windows-x64\4.2\scripts\startup\bl_operators\userpref.py", строка 821, в выполнении
bpy.ops.preferences.addon_enable(module=mod.name )
Файл «C:\Users\username\Desktop\blender-4.2.3-windows-x64\4.2\scripts\modules\bpy\ops.py», строка 109, в call
ret = _op_call(self.idname_py(), kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^
RuntimeError: Ошибка: объект «_RestrictData» не имеет атрибута «материалы»
и вот мой код

Код: Выделить всё

bl_info = {
"name": "Simple shader editor",
"description": "adds a shader with a simple button press",
"author": "John Doe, Jane Doe",
"version": (1, 0),
"blender": (4, 2, 0),
"location": "View3D > Add > Mesh",
"warning": "", # used for warning icon and text in addons panel
"support": "COMMUNITY",
"category": "Add Mesh",
}
import bpy
import mathutils

class SimpleShaderEditor (bpy.types. Panel):
"""Easy Way To Add Shaders"""
bl_label = "Simple Shader Editor"
bl_idname = "Shader_Editor"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "object"
def draw(self, context):
layout = self.layout
obj = context.object
row = layout.row()
row.  label (text="Active object is: "  + obj.name)
row = layout.row()
row.operator("sse_object.remove_shader")
row = layout.row()
row.operator("sse_object.toon_shader")

class toon_shader(bpy.types.Operator):

"""Adds a Toon Shader to the selected object"""
bl_idname = "sse_object.toon_shader"
bl_label = "Adds a Toon Shader to the selected object"
global mat
mat = bpy.data.materials.new(name = "Toon Shader")
mat.use_nodes = True
@classmethod
def poll (cls, context):
return context.active_object is not None

def execute(self, context):
obj = context.object
Toon_Shader_ini()
toon_material = bpy.data.materials.get("Toon Shader")
if obj.data.materials:
# If the object already has materials, replace the first one with the Toon Shader
obj.data.materials[0] = toon_material
else:
# If the object has no materials, append the Toon Shader
obj.data.materials.append(toon_material)
self.report({'INFO'}, "Shader Added!")
return {'FINISHED'}

class Remove_Shader(bpy.types.Operator):
"""Removes any material from the selected object"""
bl_idname = "sse_object.remove_shader"
bl_label = "Remove Material"

@classmethod
def poll (cls, context):
return context.active_object is not None

def execute(self, context):
self.report({'INFO'}, "Shader Removed!")
obj = context.object
obj.data.materials.clear()
return {'FINISHED'}

# Toon Shader code
def Toon_Shader_ini():
toon_shader = mat.node_tree
#start with a clean node tree
for node in toon_shader.nodes:
toon_shader.nodes.remove(node)
toon_shader.color_tag = 'NONE'
toon_shader.description = "Simple Toon Shader"

#toon_shader interface

#initialize toon_shader nodes
#node Material Output
material_output = toon_shader.nodes.new("ShaderNodeOutputMaterial")
material_output.name = "Material Output"
material_output.is_active_output = True
material_output.target = 'ALL'
#Displacement
material_output.inputs[2].default_value = (0.0, 0.0, 0.0)
#Thickness
material_output.inputs[3].default_value = 0.0

#node Principled BSDF
principled_bsdf = toon_shader.nodes.new("ShaderNodeBsdfPrincipled")
principled_bsdf.name = "Principled BSDF"
principled_bsdf.distribution = 'MULTI_GGX'
principled_bsdf.subsurface_method = 'RANDOM_WALK'
#Base Color
principled_bsdf.inputs[0].default_value = (0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0)
#Metallic
principled_bsdf.inputs[1].default_value = 0.0
#Roughness
principled_bsdf.inputs[2].default_value = 0.5
#IOR
principled_bsdf.inputs[3].default_value = 1.5
#Alpha
principled_bsdf.inputs[4].default_value = 1.0
#Normal
principled_bsdf.inputs[5].default_value = (0.0, 0.0, 0.0)
#Subsurface Weight
principled_bsdf.inputs[7].default_value = 0.0
#Subsurface Radius
principled_bsdf.inputs[8].default_value = (1.0, 0.20000000298023224, 0.10000000149011612)
#Subsurface Scale
principled_bsdf.inputs[9].default_value = 0.05000000074505806
#Subsurface Anisotropy
principled_bsdf.inputs[11].default_value = 0.0
#Specular IOR Level
principled_bsdf.inputs[12].default_value = 0.5
#Specular Tint
principled_bsdf.inputs[13].default_value = (1.0, 1.0, 1.0, 1.0)
#Anisotropic
principled_bsdf.inputs[14].default_value = 0.0
#Anisotropic Rotation
principled_bsdf.inputs[15].default_value = 0.0
#Tangent
principled_bsdf.inputs[16].default_value = (0.0, 0.0, 0.0)
#Transmission Weight
principled_bsdf.inputs[17].default_value = 0.0
#Coat Weight
principled_bsdf.inputs[18].default_value = 0.0
#Coat Roughness
principled_bsdf.inputs[19].default_value = 0.029999999329447746
#Coat IOR
principled_bsdf.inputs[20].default_value = 1.5
#Coat Tint
principled_bsdf.inputs[21].default_value = (1.0, 1.0, 1.0,  1.0)
#Coat Normal
principled_bsdf.inputs[22].default_value = (0.0, 0.0, 0.0)
#Sheen Weight
principled_bsdf.inputs[23].default_value = 0.0
#Sheen Roughness
principled_bsdf.inputs[24].default_value = 0.5
#Sheen Tint
principled_bsdf.inputs[25].default_value = (1.0, 1.0, 1.0, 1.0)
#Emission Color
principled_bsdf.inputs[26].default_value = (1.0, 1.0, 1.0, 1.0)
#Emission Strength
principled_bsdf.inputs[27].default_value = 0.0
#Thin Film Thickness
principled_bsdf.inputs[28].default_value = 0.0
#Thin Film IOR
principled_bsdf.inputs[29].default_value = 1.3300000429153442

#node Shader to RGB
shader_to_rgb = toon_shader.nodes.new("ShaderNodeShaderToRGB")
shader_to_rgb.name = "Shader to RGB"

#node Color Ramp
color_ramp = toon_shader.nodes.new("ShaderNodeValToRGB")
color_ramp.name = "Color Ramp"
color_ramp.color_ramp.color_mode = 'RGB'
color_ramp.color_ramp.hue_interpolation = 'NEAR'
color_ramp.color_ramp.interpolation = 'CONSTANT'

#initialize color ramp elements
color_ramp.color_ramp.elements.remove(color_ramp.color_ramp.elements[0])
color_ramp_cre_0 = color_ramp.color_ramp.elements[0]
color_ramp_cre_0.position = 0.0
color_ramp_cre_0.alpha = 1.0
color_ramp_cre_0.color = (0.025554336607456207, 0.004008842166513205, 0.0077217575162649155, 1.0)

color_ramp_cre_1 = color_ramp.color_ramp.elements.new(0.19431838393211365)
color_ramp_cre_1.alpha = 1.0
color_ramp_cre_1.color = (0.099205881357193, 0.010578623972833157, 0.023921657353639603, 1.0)

color_ramp_cre_2 = color_ramp.color_ramp.elements.new(0.3886367678642273)
color_ramp_cre_2.alpha = 1.0
color_ramp_cre_2.color = (0.3910602331161499, 0.03194624185562134, 0.08225385844707489, 1.0)

color_ramp_cre_3 = color_ramp.color_ramp.elements.new(0.650000810623169)
color_ramp_cre_3.alpha = 1.0
color_ramp_cre_3.color = (1.0, 0.07133930176496506, 0.1980886161327362, 1.0)

#node Node
node_1 = toon_shader.nodes.new("NodeFrame")
node_1.name = "Node"
node_1.label_size = 11
node_1.shrink = False

#Set parents
color_ramp.parent = node_1

#Set locations
material_output.location = (844.2685546875, 277.9710693359375)
principled_bsdf.location = (-45.90791320800781, 50.614837646484375)
shader_to_rgb.location = (290.79669189453125, 97.51869201660156)
color_ramp.location = (-67.09164428710938, 55.0496826171875)
node_1.location = (568.9841918945312, 199.96200561523438)

#Set dimensions
material_output.width, material_output.height = 140.0, 100.0
principled_bsdf.width, principled_bsdf.height = 240.0, 100.0
shader_to_rgb.width, shader_to_rgb.height = 140.0, 100.0
color_ramp.width, color_ramp.height = 240.0, 100.0
node_1.width, node_1.height = 300.3999938964844, 266.20001220703125

#initialize toon_shader links
#shader_to_rgb.Color -> color_ramp.Fac
toon_shader.links.new(shader_to_rgb.outputs[0], color_ramp.inputs[0])
#principled_bsdf.BSDF -> shader_to_rgb.Shader
toon_shader.links.new(principled_bsdf.outputs[0], shader_to_rgb.inputs[0])
#color_ramp.Color -> material_output.Surface
toon_shader.links.new(color_ramp.outputs[0], material_output.inputs[0])
return toon_shader

def register():
bpy.utils.register_class (SimpleShaderEditor)
bpy.utils.register_class (Remove_Shader)
bpy.utils.register_class (toon_shader)

def unregister():
bpy.utils.unregister_class (SimpleShaderEditor)
bpy.utils.unregister_class (Remove_Shader)
bpy.utils.unregister_class (toon_shader)

if __name__ == "__main__":
register()

Я пытался добавить метод опроса, а также пробовал добавить сон перед запуском кода. Может кто-нибудь, пожалуйста, помогите, я нигде не могу найти решение

Подробнее здесь: https://stackoverflow.com/questions/791 ... ror-when-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»