2
$\begingroup$

I'm currently working on new addon for blender 2.8 but I got stuck because I need to find a way to list all the Matcaps and Studio lights installed inside blender.

I'm using this to list all the matcaps and studioligths installed in blender:

import bpy

lights= bpy.context.preferences.studio_lights

list_lights=[]

list_lights.append(tuple(lights))  

print(list_lights)  

and It works that list all the studio ligths and matcaps, but with this structure:

<bpy_struct, StudioLight("basic_1.exr")>, StudioLight("03_Three_Points.sl")>...

and I would like to have only the name and the type of the light something like this:

['basic_1.exr'], ['03_Three_Points.sl']...

Hopefully someone could bring me some help

Thank you so much in advance

$\endgroup$
2
$\begingroup$

What you are seeing is the string representation of a blender class instance, for example the context scene object.

>> str(C.scene)
'<bpy_struct, Scene("Scene")>'

In this case an object of type bpy.types.StudioLight Of particular interest the name and type property.

>>> for sl in C.preferences.studio_lights:
...     sl.name, sl.type
...     
('Default', 'STUDIO')
('basic_1.exr', 'MATCAP')
('basic_2.exr', 'MATCAP')
('basic_dark.exr', 'MATCAP')
('basic_side.exr', 'MATCAP')

For example to make a dictionary with the type as the key to a list of the names of all of that type:

>>> from collections import defaultdict
>>> studio_lights = defaultdict(list)
>>> for sl in C.preferences.studio_lights:
...     studio_lights[sl.type].append(sl.name)
...     

What types are there?

>>> studio_lights.keys()
dict_keys(['STUDIO', 'MATCAP', 'WORLD'])

All those of type 'MATCAP'

>>> studio_lights['MATCAP']
['basic_1.exr', 'basic_2.exr', 'basic_dark.exr', 'basic_side.exr', 'ceramic_dark.exr', 'ceramic_lightbulb.exr', 'check_normal+y.exr', 'check_reflection.exr', 'check_rim_dark.exr', 'check_rim_light.exr', 'clay_brown.exr', 'clay_muddy.exr', 'clay_studio.exr', 'jade.exr', 'metal_anisotropic.exr', 'metal_carpaint.exr', 'metal_lead.exr', 'metal_shiny.exr', 'pearl.exr', 'resin.exr', 'skin.exr', 'toon.exr']
$\endgroup$
  • $\begingroup$ This help me a lot thank you so much!!!! $\endgroup$ – alceroth Mar 12 at 16:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.