import bpy from math import pi L1960_Arr_PlainData = [ ["Proj_Empty_01", (0, 0, 2), (0, 0, 0)], ["Proj_Empty_02", (2, 0, 0), ((pi * 90 / 180), 0, (pi * 90 / 180))], ["Proj_Empty_03", (0, 2, 0), ((pi * 90 / 180), 0, (pi * 180 / 180))], ["Proj_Empty_04", (0, 0, -2), ((pi * 180 / 180), 0, 0)], ["Proj_Empty_05", (-2, 0, 0), ((pi * 90 / 180), 0, (pi * -90 / 180))], ["Proj_Empty_06", (0, -2, 0), ((pi * 90 / 180), 0, 0)] ] class MESH_OT_add_auto_cube_projection(bpy.types.Operator): """Check Empty´s for projecting, if not existing create new one´s""" bl_idname = "mesh.add_auto_cube_projection" bl_label = "Add Plain_Axes to scene" bl_options = {"REGISTER", "UNDO"} def execute(self, context): scene = bpy.context.scene oldSelection = bpy.context.selected_objects oldActive = bpy.context.active_object for EmptyData in L1960_Arr_PlainData: EmptyName = EmptyData[0] EmptyLocation = EmptyData[1] EmptyRotation = EmptyData[2] if not scene.objects.get(EmptyName): bpy.ops.object.empty_add(type='PLAIN_AXES', align='WORLD', location=EmptyLocation, scale=(1, 1, 1), rotation=EmptyRotation) empty = bpy.context.active_object empty.name = EmptyName empty.hide_select = True empty.hide_set(True) #Change back to old selection and select old active for obj in oldSelection: obj.select_set(True) bpy.context.view_layer.objects.active = oldActive self.report({'INFO'}, 'Added/Fixed Emptys for Projection to Scene') return {"FINISHED"} class MESH_OT_add_modifier_to_mesh(bpy.types.Operator): """Add Modifier to selected Mesh´s and prepare UV-Maps""" bl_idname = "mesh.add_modifier_to_mesh" bl_label = "Add Modifier to selected Mesh" bl_options = {"REGISTER", "UNDO"} def execute(self, context): newModifierName = "CubeTexModifier" Arr_obj = bpy.context.selected_objects if len(Arr_obj) < 1: self.report({'WARNING'}, 'Select a mesh to add the UVProject-Modifier') return {"CANCELLED"} empty_objs = [emp_obj for emp_obj in bpy.context.scene.objects if emp_obj.name.startswith("Proj_Empty")] if len(empty_objs) < 6: self.report({'WARNING'}, 'Create/Recreate projectors, they need to be set up first!') return {"CANCELLED"}; for obj in Arr_obj: if obj.data.uv_layers.get("UVMap"): obj.data.uv_layers['UVMap'].name = 'UVMap0' if not obj.data.uv_layers.get("UVMap0"): obj.data.uv_layers.new(name = 'UVMap0') if not obj.data.uv_layers.get("UVMap1"): obj.data.uv_layers.new(name = 'UVMap1') if obj.type == "MESH" and newModifierName not in obj.modifiers: obj.modifiers.new(type='UV_PROJECT', name=newModifierName) mod = obj.modifiers[newModifierName] mod.uv_layer = "UVMap1" mod.projector_count = 6 i = 0 for p in mod.projectors: p.object = bpy.data.objects[L1960_Arr_PlainData[i][0]] i = i+1 else: self.report({'INFO'}, 'UVProject-Modifier allready set') return {"FINISHED"} self.report({'INFO'}, 'Added UVProject-Modifier to mesh') return {"FINISHED"}