For 循环和 select 按名称
For Loop and select by name
我想将脚本应用于未定义数量的对象。我认为:
for obj in bpy.data.objects:
#do something
是正确的方法。但是我需要一种方法 select 仅使用名称为“Value”.xxx 的对象并获取数字 xxx 以调整脚本中的第 2 行和第 3 行
我的实际脚本:
def num_change(scene, depsgraph):
value_text = bpy.data.objects['Value.001']
mat = bpy.data.materials['Instrument.001']
mat = mat.evaluated_get(depsgraph)
nodes = mat.node_tree.nodes
value = nodes.get("Value")
value_text.data.body = str(round(value.outputs[0].default_value, 2))
您可以使用 dict.items
to fetch the key, value pairs in your object. You can then use re.match
来确认密钥匹配 Value.xxx
并提取数字部分,然后您可以使用它来创建其他密钥。例如:
import re
for k, value_text in bpy.data.objects.items():
m = re.match(r'Value\.(\d{3})$', k)
if m is None:
continue
num = m.group(1)
mat = bpy.data.materials['Instrument.' + num]
除了使用键,您还可以使用名称属性访问对象的名称。其余代码与
建议的相同
for obj in bpy.data.objects:
print(obj.name)
我想将脚本应用于未定义数量的对象。我认为:
for obj in bpy.data.objects:
#do something
是正确的方法。但是我需要一种方法 select 仅使用名称为“Value”.xxx 的对象并获取数字 xxx 以调整脚本中的第 2 行和第 3 行
我的实际脚本:
def num_change(scene, depsgraph):
value_text = bpy.data.objects['Value.001']
mat = bpy.data.materials['Instrument.001']
mat = mat.evaluated_get(depsgraph)
nodes = mat.node_tree.nodes
value = nodes.get("Value")
value_text.data.body = str(round(value.outputs[0].default_value, 2))
您可以使用 dict.items
to fetch the key, value pairs in your object. You can then use re.match
来确认密钥匹配 Value.xxx
并提取数字部分,然后您可以使用它来创建其他密钥。例如:
import re
for k, value_text in bpy.data.objects.items():
m = re.match(r'Value\.(\d{3})$', k)
if m is None:
continue
num = m.group(1)
mat = bpy.data.materials['Instrument.' + num]
除了使用键,您还可以使用名称属性访问对象的名称。其余代码与
for obj in bpy.data.objects:
print(obj.name)