Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/addon/version_update.py
| Show All 15 Lines | |||||
| # <pep8 compliant> | # <pep8 compliant> | ||||
| import bpy | import bpy | ||||
| from bpy.app.handlers import persistent | from bpy.app.handlers import persistent | ||||
| def check_is_new_shading_material(material): | |||||
| if not material.node_tree: | |||||
| return False | |||||
| for node in material.node_tree.nodes: | |||||
campbellbarton: Would use `obj` since `object` is a python class. | |||||
| if node.shading_compatibility == {'NEW_SHADING'}: | |||||
campbellbartonUnsubmitted Not Done Inline ActionsShould be if 'NEW_SHADING' in node.shading_compatibility: campbellbarton: Should be `if 'NEW_SHADING' in node.shading_compatibility:` | |||||
| return True | |||||
| return False | |||||
| def foreach_notree_node(nodetree, callback, traversed): | |||||
| if nodetree in traversed: | |||||
| return | |||||
| traversed.add(nodetree) | |||||
| for node in nodetree.nodes: | |||||
| callback(node) | |||||
| if node.bl_idname == 'ShaderNodeGroup': | |||||
| foreach_notree_node(node.node_tree, callback, traversed) | |||||
| def foreach_cycles_node(callback): | |||||
| traversed = set() | |||||
| for material in bpy.data.materials: | |||||
| if check_is_new_shading_material(material): | |||||
| foreach_notree_node(material.node_tree, | |||||
| callback, | |||||
| traversed) | |||||
| def mapping_node_order_flip(node): | |||||
| """ | |||||
| Flip euler order of mapping shader node | |||||
| """ | |||||
| if node.bl_idname == 'ShaderNodeMapping': | |||||
| rot = node.rotation.copy() | |||||
| rot.order = 'ZYX' | |||||
| quat = rot.to_quaternion() | |||||
| node.rotation = quat.to_euler('XYZ') | |||||
| @persistent | @persistent | ||||
| def do_versions(self): | def do_versions(self): | ||||
| # We don't modify startup file because it assumes to | # We don't modify startup file because it assumes to | ||||
| # have all the default values only. | # have all the default values only. | ||||
| if not bpy.data.is_saved: | if not bpy.data.is_saved: | ||||
| return | return | ||||
| # Clamp Direct/Indirect separation in 270 | # Clamp Direct/Indirect separation in 270 | ||||
| Show All 20 Lines | if bpy.data.version <= (2, 72, 0): | ||||
| for scene in bpy.data.scenes: | for scene in bpy.data.scenes: | ||||
| cscene = scene.cycles | cscene = scene.cycles | ||||
| if (cscene.get("no_caustics", False) and | if (cscene.get("no_caustics", False) and | ||||
| not cscene.is_property_set("caustics_reflective") and | not cscene.is_property_set("caustics_reflective") and | ||||
| not cscene.is_property_set("caustics_refractive")): | not cscene.is_property_set("caustics_refractive")): | ||||
| cscene.caustics_reflective = False | cscene.caustics_reflective = False | ||||
| cscene.caustics_refractive = False | cscene.caustics_refractive = False | ||||
| # Euler order was ZYX in previous versions. | |||||
| if bpy.data.version <= (2, 73, 4): | |||||
| foreach_cycles_node(mapping_node_order_flip) | |||||
Would use obj since object is a python class.