# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . bl_info = { "name" : "Legolizer", "author" : "Alberrvfx, Al-Dezel", "description" : " Convert all your 3D models into Lego brick style.", "blender" : (4, 0, 0), "version" : (2, 0, 1), "location" : "", "warning" : "", "doc_url": "", "tracker_url": "", "category" : "3D View" } import bpy import bpy.utils.previews import os from bpy.app.handlers import persistent addon_keymaps = {} _icons = None visual_scripting_editor = {'sna_new_variable': False, } def property_exists(prop_path, glob, loc): try: eval(prop_path, glob, loc) return True except: return False def find_user_keyconfig(key): km, kmi = addon_keymaps[key] for item in bpy.context.window_manager.keyconfigs.user.keymaps[km.name].keymap_items: found_item = False if kmi.idname == item.idname: found_item = True for name in dir(kmi.properties): if not name in ["bl_rna", "rna_type"] and not name[0] == "_": if name in kmi.properties and name in item.properties and not kmi.properties[name] == item.properties[name]: found_item = False if found_item: return item print(f"Couldn't find keymap item for {key}, using addon keymap instead. This won't be saved across sessions!") return kmi def ShowMessageBoxer(title, icon, message): scene = bpy.context.scene # Access the 2D cursor location cursor_location = scene.cursor.location def draw(self, context): self.layout.label(text=message) bpy.context.window_manager.popup_menu(draw, title=title, icon=icon) def sna_update_sna_legolizer_material_9D59F(self, context): sna_updated_prop = self.sna_legolizer_material bpy.data.node_groups[bpy.context.object.modifiers.active.node_group.name].nodes['Set Material'].inputs[2].default_value = sna_updated_prop bpy.context.view_layer.objects.active.update_tag(refresh={'DATA'}, ) def sna_update_sna_landscape_material_E64B9(self, context): sna_updated_prop = self.sna_landscape_material bpy.data.node_groups[bpy.context.object.modifiers.active.node_group.name].nodes['Switch'].inputs[23].default_value = sna_updated_prop bpy.context.view_layer.objects.active.update_tag(refresh={'DATA'}, ) class SNA_OT_Operator_88521(bpy.types.Operator): bl_idname = "sna.operator_88521" bl_label = "Operator" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not False def execute(self, context): for i_F4E5A in range(len(bpy.context.screen.areas)): if (bpy.context.screen.areas[i_F4E5A].type == 'PROPERTIES'): for i_EE2BD in range(len(bpy.context.screen.areas[i_F4E5A].regions)): if (bpy.context.screen.areas[i_F4E5A].regions[i_EE2BD].type == 'WINDOW'): area_07961 = bpy.context.screen.areas[i_F4E5A] region_07961 = bpy.context.screen.areas[i_F4E5A].regions[i_EE2BD] with bpy.context.temp_override(area=area_07961, region=region_07961, ): bpy.context.scene.cycles.bake_type = 'DIFFUSE' bpy.context.scene.render.bake.use_pass_direct = False bpy.context.scene.render.bake.use_pass_indirect = False bpy.context.scene.render.bake.margin = 4 bpy.ops.object.bake('INVOKE_DEFAULT', type='DIFFUSE') bpy.ops.object.light_add('INVOKE_DEFAULT', type='SUN', location=(1.0, 1.0, 10.0)) bpy.ops.object.delete() if bpy.context and bpy.context.screen: for a in bpy.context.screen.areas: a.tag_redraw() return {"FINISHED"} def invoke(self, context, event): return self.execute(context) def sna_function_interface_7D9FC(layout_function, ): op = layout_function.operator('sna.operator_88521', text='Bake', icon_value=192, emboss=True, depress=False) class SNA_PT_LEGOLIZER_D7609(bpy.types.Panel): bl_label = 'Legolizer' bl_idname = 'SNA_PT_LEGOLIZER_D7609' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_context = '' bl_category = 'Legolizer' bl_order = 0 bl_ui_units_x=0 @classmethod def poll(cls, context): return not (False) def draw_header(self, context): layout = self.layout def draw(self, context): layout = self.layout col_CDA22 = layout.column(heading='', align=False) col_CDA22.alert = False col_CDA22.enabled = bool(len(bpy.context.view_layer.objects.selected)) col_CDA22.active = True col_CDA22.use_property_split = False col_CDA22.use_property_decorate = False col_CDA22.scale_x = 1.0 col_CDA22.scale_y = 1.0 col_CDA22.alignment = 'Expand'.upper() if not True: col_CDA22.operator_context = "EXEC_DEFAULT" op = col_CDA22.operator('sna.operator_79c5b', text='Legolize', icon_value=0, emboss=True, depress=False) op = col_CDA22.operator('sna.operator002_5e694', text='Lego Landscape Generator', icon_value=0, emboss=True, depress=False) col_3E229 = layout.column(heading='', align=False) col_3E229.alert = False col_3E229.enabled = True col_3E229.active = True col_3E229.use_property_split = False col_3E229.use_property_decorate = False col_3E229.scale_x = 1.0 col_3E229.scale_y = 1.149999976158142 col_3E229.alignment = 'Expand'.upper() if not True: col_3E229.operator_context = "EXEC_DEFAULT" if (not bpy.context.scene.sna_new_property): col_70AAD = col_3E229.column(heading='', align=False) col_70AAD.alert = False col_70AAD.enabled = True col_70AAD.active = True col_70AAD.use_property_split = False col_70AAD.use_property_decorate = False col_70AAD.scale_x = 1.0 col_70AAD.scale_y = 1.0 col_70AAD.alignment = 'Expand'.upper() if not True: col_70AAD.operator_context = "EXEC_DEFAULT" op = col_70AAD.operator('sna.add_legolizer_setup_b16ae', text='Add Setup', icon_value=0, emboss=True, depress=True) col_70AAD.separator(factor=2.049999952316284) class SNA_OT_Operator_79C5B(bpy.types.Operator): bl_idname = "sna.operator_79c5b" bl_label = "Operator" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not False def execute(self, context): if property_exists("bpy.data.node_groups['Legolizer']", globals(), locals()): modifier_EC83B = bpy.context.active_object.modifiers.new(name='Legolizer', type='NODES', ) modifier_EC83B.node_group = bpy.data.node_groups['Legolizer'] else: before_data = list(bpy.data.node_groups) bpy.ops.wm.append(directory=os.path.join(os.path.dirname(__file__), 'assets', 'Legolizer_Full_Version3 main.blend') + r'\NodeTree', filename='Legolizer', link=False) new_data = list(filter(lambda d: not d in before_data, list(bpy.data.node_groups))) appended_54BCA = None if not new_data else new_data[0] modifier_45945 = bpy.context.active_object.modifiers.new(name='Legolizer', type='NODES', ) modifier_45945.node_group = appended_54BCA sna_legolizer_function_AA320() bpy.context.view_layer.objects.active.modifiers['Legolizer']['Input_6'] = bpy.context.view_layer.objects.active.data.uv_layers.active.name bpy.context.view_layer.objects.active.active_material.node_tree.nodes['Attribute'].attribute_name = bpy.context.view_layer.objects.active.data.uv_layers.active.name return {"FINISHED"} def invoke(self, context, event): return self.execute(context) class SNA_OT_Operator002_5E694(bpy.types.Operator): bl_idname = "sna.operator002_5e694" bl_label = "Operator.002" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not False def execute(self, context): if property_exists("bpy.data.node_groups['Lego_Landscape_Generator']", globals(), locals()): modifier_095E3 = bpy.context.active_object.modifiers.new(name='Lego_Landscape_Generator', type='NODES', ) modifier_095E3.node_group = bpy.data.node_groups['Lego_Landscape_Generator'] else: before_data = list(bpy.data.node_groups) bpy.ops.wm.append(directory=os.path.join(os.path.dirname(__file__), 'assets', 'Legolizer_Full_Version3 main.blend') + r'\NodeTree', filename='Lego_Landscape_Generator', link=False) new_data = list(filter(lambda d: not d in before_data, list(bpy.data.node_groups))) appended_1A324 = None if not new_data else new_data[0] modifier_3345B = bpy.context.active_object.modifiers.new(name='Lego_Landscape_Generator', type='NODES', ) modifier_3345B.node_group = appended_1A324 sna_landscape_material_function_5D422() return {"FINISHED"} def invoke(self, context, event): return self.execute(context) class SNA_AddonPreferences_2E6BD(bpy.types.AddonPreferences): bl_idname = 'legolizer' def draw(self, context): if not (False): layout = self.layout row_A16F5 = layout.row(heading='', align=False) row_A16F5.alert = False row_A16F5.enabled = True row_A16F5.active = True row_A16F5.use_property_split = False row_A16F5.use_property_decorate = False row_A16F5.scale_x = 1.0 row_A16F5.scale_y = 1.0 row_A16F5.alignment = 'Expand'.upper() if not True: row_A16F5.operator_context = "EXEC_DEFAULT" op = row_A16F5.operator('wm.url_open', text='Alberrvfx (Blender Market)', icon_value=72, emboss=True, depress=False) op.url = 'https://blendermarket.com/creators/alberrvfx' op = row_A16F5.operator('wm.url_open', text='Addon Developer (Al-Dezel)', icon_value=72, emboss=True, depress=False) op.url = 'https://blendermarket.com/creators/13lfh3mn4gnlm7q_umj3vf34yueooo8q8' col_ACBFB = layout.column(heading='', align=True) col_ACBFB.alert = False col_ACBFB.enabled = True col_ACBFB.active = True col_ACBFB.use_property_split = False col_ACBFB.use_property_decorate = False col_ACBFB.scale_x = 1.0 col_ACBFB.scale_y = 1.0 col_ACBFB.alignment = 'Expand'.upper() if not True: col_ACBFB.operator_context = "EXEC_DEFAULT" col_ACBFB.prop(find_user_keyconfig('27F5F'), 'type', text='Apply Legolizer Shortcut', full_event=True) col_ACBFB.prop(find_user_keyconfig('94A0F'), 'type', text='Apply Lego Landscape Gen. Shortcut', full_event=True) col_ACBFB.prop(find_user_keyconfig('4D60F'), 'type', text='Add Set Up Shortcut', full_event=True) class SNA_OT_Material_Properties_A10D8(bpy.types.Operator): bl_idname = "sna.material_properties_a10d8" bl_label = "Material Properties" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not False def execute(self, context): ShowMessageBoxer('Info', 'NONE', 'The properties of the Materials will appear if you select the object that has the Material applied to it.') return {"FINISHED"} def invoke(self, context, event): return self.execute(context) class SNA_OT_Geometry_Properties_87F4A(bpy.types.Operator): bl_idname = "sna.geometry_properties_87f4a" bl_label = "Geometry Properties" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not False def execute(self, context): ShowMessageBoxer('Info', 'NONE', 'The properties of the Geometry node will appear if you select the object that has the Geo Modifier applied to it.') return {"FINISHED"} def invoke(self, context, event): return self.execute(context) @persistent def load_post_handler_E1A6F(dummy): visual_scripting_editor['sna_new_variable'] = False class SNA_OT_Add_Legolizer_Setup_B16Ae(bpy.types.Operator): bl_idname = "sna.add_legolizer_setup_b16ae" bl_label = "Add Legolizer Setup?" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not visual_scripting_editor['sna_new_variable'] def execute(self, context): before_data = list(bpy.data.node_groups) bpy.ops.wm.append(directory=os.path.join(os.path.dirname(__file__), 'assets', 'Legolizer_Full_Version.blend') + r'\NodeTree', filename='Legolizer', link=False) new_data = list(filter(lambda d: not d in before_data, list(bpy.data.node_groups))) appended_67BC6 = None if not new_data else new_data[0] bpy.ops.object.move_to_collection('INVOKE_DEFAULT', collection_index=0, is_new=True, new_collection_name='Bricks') bpy.ops.object.hide_view_set() bpy.context.view_layer.layer_collection.children['Bricks'].exclude = True visual_scripting_editor['sna_new_variable'] = True before_data = list(bpy.data.node_groups) bpy.ops.wm.append(directory=os.path.join(os.path.dirname(__file__), 'assets', 'Legolizer_Full_Version.blend') + r'\NodeTree', filename='Lego_Landscape_Generator', link=False) new_data = list(filter(lambda d: not d in before_data, list(bpy.data.node_groups))) appended_34A26 = None if not new_data else new_data[0] bpy.ops.object.delete() bpy.context.scene.sna_new_property = True before_data = list(bpy.data.materials) bpy.ops.wm.append(directory=os.path.join(os.path.dirname(__file__), 'assets', 'Legolizer_Full_Version.blend') + r'\Material', filename='PBR_Plastic_Material', link=False) new_data = list(filter(lambda d: not d in before_data, list(bpy.data.materials))) appended_2A67E = None if not new_data else new_data[0] before_data = list(bpy.data.materials) bpy.ops.wm.append(directory=os.path.join(os.path.dirname(__file__), 'assets', 'Legolizer_Full_Version3 main.blend') + r'\Material', filename='PBR_Trans_Plastic_Material_v03', link=False) new_data = list(filter(lambda d: not d in before_data, list(bpy.data.materials))) appended_85DEE = None if not new_data else new_data[0] before_data = list(bpy.data.materials) bpy.ops.wm.append(directory=os.path.join(os.path.dirname(__file__), 'assets', 'Legolizer_Full_Version.blend') + r'\Material', filename='legolizer_tools', link=False) new_data = list(filter(lambda d: not d in before_data, list(bpy.data.materials))) appended_3381B = None if not new_data else new_data[0] ShowMessageBoxer('Info', 'INFO', 'Completed') return {"FINISHED"} def invoke(self, context, event): return context.window_manager.invoke_confirm(self, event) def sna_landscape_material_function_5D422(): if False: bpy.context.scene.sna_landscape_material = bpy.data.node_groups[bpy.context.object.modifiers.active.node_group.name].nodes['Switch'].inputs[23].default_value def sna_legolizer_function_AA320(): if False: bpy.context.scene.sna_legolizer_material = bpy.data.node_groups[bpy.context.object.modifiers.active.node_group.name].nodes['Set Material'].inputs[2].default_value class SNA_OT_Operator001_67831(bpy.types.Operator): bl_idname = "sna.operator001_67831" bl_label = "Operator.001" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not False def execute(self, context): bpy.ops.object.mode_set('INVOKE_DEFAULT', mode='EDIT') bpy.ops.mesh.select_all('INVOKE_DEFAULT', action='SELECT') bpy.ops.uv.smart_project(angle_limit=66.0, margin_method='SCALED', island_margin=0.0010000000474974513, area_weight=0.0, correct_aspect=True, scale_to_bounds=False) bpy.ops.object.mode_set('INVOKE_DEFAULT', mode='OBJECT') return {"FINISHED"} def invoke(self, context, event): return self.execute(context) class SNA_OT_Operator_E20D3(bpy.types.Operator): bl_idname = "sna.operator_e20d3" bl_label = "Operator" bl_description = "" bl_options = {"REGISTER", "UNDO"} @classmethod def poll(cls, context): if bpy.app.version >= (3, 0, 0) and True: cls.poll_message_set('') return not False def execute(self, context): exec('bpy.ops.node.add_node(use_transform=True, type="ShaderNodeTexImage")') image_0DB6A = bpy.data.images.new(name=bpy.context.active_object.name, width=bpy.context.scene.sna_resolution_width, height=bpy.context.scene.sna_resolution_height, alpha=True, ) bpy.ops.transform.translate('INVOKE_DEFAULT', ) bpy.context.scene.render.engine = 'CYCLES' bpy.context.scene.cycles.device = 'GPU' bpy.context.scene.cycles.samples = 10 return {"FINISHED"} def invoke(self, context, event): return self.execute(context) class SNA_PT_BAKE_79642(bpy.types.Panel): bl_label = 'Bake' bl_idname = 'SNA_PT_BAKE_79642' bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' bl_context = '' bl_category = 'Bake Legolizer' bl_order = 1 bl_ui_units_x=0 @classmethod def poll(cls, context): return not (False) def draw_header(self, context): layout = self.layout def draw(self, context): layout = self.layout col_F1A82 = layout.column(heading='', align=False) col_F1A82.alert = False col_F1A82.enabled = True col_F1A82.active = True col_F1A82.use_property_split = False col_F1A82.use_property_decorate = False col_F1A82.scale_x = 1.0 col_F1A82.scale_y = 1.5 col_F1A82.alignment = 'Expand'.upper() if not True: col_F1A82.operator_context = "EXEC_DEFAULT" op = col_F1A82.operator('sna.operator_e20d3', text='Add Texture', icon_value=126, emboss=True, depress=False) op = col_F1A82.operator('sna.operator001_67831', text='Smart UV', icon_value=128, emboss=True, depress=False) layout_function = col_F1A82 sna_function_interface_7D9FC(layout_function, ) col_7419D = layout.column(heading='', align=False) col_7419D.alert = False col_7419D.enabled = True col_7419D.active = True col_7419D.use_property_split = False col_7419D.use_property_decorate = False col_7419D.scale_x = 1.0 col_7419D.scale_y = 1.2000000476837158 col_7419D.alignment = 'Center'.upper() if not True: col_7419D.operator_context = "EXEC_DEFAULT" col_7419D.label(text='Resolution', icon_value=0) col_7419D.prop(bpy.context.scene, 'sna_resolution_width', text='Resolution Width', icon_value=0, emboss=True) col_7419D.prop(bpy.context.scene, 'sna_resolution_height', text='Resolution Height', icon_value=0, emboss=True) class SNA_PT_MATERIAL_PROPERTIES_63A83(bpy.types.Panel): bl_label = 'Material Properties' bl_idname = 'SNA_PT_MATERIAL_PROPERTIES_63A83' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_context = '' bl_order = 2 bl_options = {'DEFAULT_CLOSED'} bl_parent_id = 'SNA_PT_LEGOLIZER_D7609' bl_ui_units_x=0 @classmethod def poll(cls, context): return not (False) def draw_header(self, context): layout = self.layout def draw(self, context): layout = self.layout box_5AE89 = layout.box() box_5AE89.alert = False box_5AE89.enabled = True box_5AE89.active = True box_5AE89.use_property_split = False box_5AE89.use_property_decorate = False box_5AE89.alignment = 'Expand'.upper() box_5AE89.scale_x = 1.0 box_5AE89.scale_y = 1.0 if not True: box_5AE89.operator_context = "EXEC_DEFAULT" if (bpy.context.view_layer.objects.active and bpy.context.object.active_material): if bpy.context.object.active_material.use_nodes: for i_53F1C in range(len(bpy.context.active_object.active_material.node_tree.nodes)): if (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].type == 'GROUP'): box_5AE89.separator(factor=0.10000000149011612) col_9F17B = box_5AE89.column(heading='', align=False) col_9F17B.alert = False col_9F17B.enabled = True col_9F17B.active = True col_9F17B.use_property_split = False col_9F17B.use_property_decorate = False col_9F17B.scale_x = 1.0 col_9F17B.scale_y = 1.0 col_9F17B.alignment = 'Center'.upper() if not True: col_9F17B.operator_context = "EXEC_DEFAULT" for i_99B79 in range(len(bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs)): row_7FA06 = col_9F17B.row(heading='', align=True) row_7FA06.alert = False row_7FA06.enabled = True row_7FA06.active = True row_7FA06.use_property_split = False row_7FA06.use_property_decorate = False row_7FA06.scale_x = 1.0 row_7FA06.scale_y = 1.0 row_7FA06.alignment = 'Expand'.upper() if not True: row_7FA06.operator_context = "EXEC_DEFAULT" row_7FA06.label(text=bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].name, icon_value=0) if ((bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'VALUE') or (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'RGB') or (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'VECTOR') or (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'STRING') or (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'BOOLEAN') or (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'INT') or (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'RGBA') or (bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79].type == 'SHADER')): row_7FA06.prop(bpy.context.active_object.active_material.node_tree.nodes[i_53F1C].inputs[i_99B79], 'default_value', text='', icon_value=0, emboss=True, expand=False) row_1B3AF = box_5AE89.row(heading='', align=False) row_1B3AF.alert = False row_1B3AF.enabled = True row_1B3AF.active = True row_1B3AF.use_property_split = False row_1B3AF.use_property_decorate = False row_1B3AF.scale_x = 1.0 row_1B3AF.scale_y = 1.0 row_1B3AF.alignment = 'Center'.upper() if not True: row_1B3AF.operator_context = "EXEC_DEFAULT" row_1B3AF.label(text='Material Properties', icon_value=0) op = row_1B3AF.operator('sna.material_properties_a10d8', text='', icon_value=1, emboss=False, depress=False) class SNA_PT_PROPERTIES_1DA39(bpy.types.Panel): bl_label = 'Properties' bl_idname = 'SNA_PT_PROPERTIES_1DA39' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_context = '' bl_order = 1 bl_parent_id = 'SNA_PT_LEGOLIZER_D7609' bl_ui_units_x=0 @classmethod def poll(cls, context): return not ((not ((len(bpy.context.active_object.modifiers) > 0) and bool(len(bpy.context.view_layer.objects.selected))))) def draw_header(self, context): layout = self.layout def draw(self, context): layout = self.layout box_A3043 = layout.box() box_A3043.alert = False box_A3043.enabled = True box_A3043.active = True box_A3043.use_property_split = False box_A3043.use_property_decorate = False box_A3043.alignment = 'Expand'.upper() box_A3043.scale_x = 1.0 box_A3043.scale_y = 1.0 if not True: box_A3043.operator_context = "EXEC_DEFAULT" if (len(bpy.context.active_object.modifiers) > 0): if (bpy.context.active_object.modifiers.active.name == 'Legolizer'): col_F7B09 = box_A3043.column(heading='', align=False) col_F7B09.alert = False col_F7B09.enabled = True col_F7B09.active = True col_F7B09.use_property_split = False col_F7B09.use_property_decorate = False col_F7B09.scale_x = 1.0 col_F7B09.scale_y = 1.0 col_F7B09.alignment = 'Expand'.upper() if not True: col_F7B09.operator_context = "EXEC_DEFAULT" row_D7469 = col_F7B09.row(heading='', align=False) row_D7469.alert = False row_D7469.enabled = True row_D7469.active = True row_D7469.use_property_split = False row_D7469.use_property_decorate = False row_D7469.scale_x = 1.0 row_D7469.scale_y = 0.949999988079071 row_D7469.alignment = 'Center'.upper() if not True: row_D7469.operator_context = "EXEC_DEFAULT" row_D7469.label(text='Legolizer', icon_value=0) col_F7B09.prop(bpy.context.scene, 'sna_legolizer_material', text='Material', icon_value=0, emboss=True) attr_C45D9 = '["' + str('Input_5' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_C45D9, text='Brick Size (Render)', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_E30E8 = '["' + str('Input_2' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_E30E8, text='Brick Size (Viewport)', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_533AF = '["' + str('Input_46' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_533AF, text='Mesh Resolution', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_2308D = '["' + str('Input_29' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_2308D, text='Brick Length X', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_56D47 = '["' + str('Input_30' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_56D47, text='Brick Length Y', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_5BBD2 = '["' + str('Input_31' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_5BBD2, text='Brick Length Z', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_FED9E = '["' + str('Input_10' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_FED9E, text='Fill Volume', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_3700D = '["' + str('Input_6' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_3700D, text='UV´s Name', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_DCF90 = '["' + str('Input_8' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_DCF90, text='LAYERS DESINTEGRATION', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_C7F28 = '["' + str('Input_9' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_C7F28, text='Animate Layers', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_D11ED = '["' + str('Input_44' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_D11ED, text='Randomness', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_F5B3C = '["' + str('Input_43' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_F5B3C, text='Animation Axis', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_58C85 = '["' + str('Input_45' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_58C85, text='Switch Direction', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_1EB3A = '["' + str('Input_47' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_1EB3A, text='Seed', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_A9DB5 = '["' + str('Input_25' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_A9DB5, text='Animation Speed', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_1BC78 = '["' + str('Input_32' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_1BC78, text='LEGO BRICKS ASSEMBLY', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_A3B13 = '["' + str('Input_38' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_A3B13, text='Anim. Effector', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_36233 = '["' + str('Input_40' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_36233, text='Animate Assembly', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_E7A47 = '["' + str('Input_35' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_E7A47, text='Randomness', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_B380A = '["' + str('Input_37' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_B380A, text='Spread Max. Distance', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_9A02E = '["' + str('Input_42' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_9A02E, text='Animation Axis', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_D9D9B = '["' + str('Input_39' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_D9D9B, text='Switch Direction', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_EA9D3 = '["' + str('Input_48' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_EA9D3, text='Seed', icon_value=0, emboss=True) col_F7B09.separator(factor=0.5) attr_FEF16 = '["' + str('Input_41' + '"]') col_F7B09.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_FEF16, text='Animation Speed', icon_value=0, emboss=True) else: if (bpy.context.active_object.modifiers.active.name == 'Lego_Landscape_Generator'): col_258B7 = box_A3043.column(heading='', align=False) col_258B7.alert = False col_258B7.enabled = True col_258B7.active = True col_258B7.use_property_split = False col_258B7.use_property_decorate = False col_258B7.scale_x = 1.0 col_258B7.scale_y = 1.0 col_258B7.alignment = 'Expand'.upper() if not True: col_258B7.operator_context = "EXEC_DEFAULT" row_9BF52 = col_258B7.row(heading='', align=False) row_9BF52.alert = False row_9BF52.enabled = True row_9BF52.active = True row_9BF52.use_property_split = False row_9BF52.use_property_decorate = False row_9BF52.scale_x = 1.0 row_9BF52.scale_y = 0.949999988079071 row_9BF52.alignment = 'Center'.upper() if not True: row_9BF52.operator_context = "EXEC_DEFAULT" row_9BF52.label(text='Lego_Landscape_Generator', icon_value=0) col_258B7.prop(bpy.context.scene, 'sna_landscape_material', text='Material', icon_value=0, emboss=True) attr_3DD35 = '["' + str('Input_2' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_3DD35, text='Brick Length X', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_FD116 = '["' + str('Input_3' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_FD116, text='Brick Length Y', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_7E942 = '["' + str('Input_4' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_7E942, text='Brick Length Z', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_9808F = '["' + str('Input_8' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_9808F, text='Landscape Size', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_4476E = '["' + str('Input_40' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_4476E, text='Biome Toggle', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_622A9 = '["' + str('Input_12' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_622A9, text='Scale', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_9DCE5 = '["' + str('Input_11' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_9DCE5, text='Seed', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_F166A = '["' + str('Input_10' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_F166A, text='Base Level', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_CFFC7 = '["' + str('Input_13' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_CFFC7, text='Depression', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_A2D6E = '["' + str('Input_42' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_A2D6E, text='Maximum Height', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_7041F = '["' + str('Input_14' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_7041F, text='Micro-relief', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_A591F = '["' + str('Socket_2' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_A591F, text='Rotate', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_9B939 = '["' + str('Input_43' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_9B939, text='Material Replace', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_54B13 = '["' + str('Input_17' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_54B13, text='LANDSCAPE ANIMATION', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_CA5F6 = '["' + str('Input_16' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_CA5F6, text='Animate Landscape', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_5F8CE = '["' + str('Input_19' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_5F8CE, text='Switch Direction', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_B33FE = '["' + str('Input_18' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_B33FE, text='Animation Speed', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_5394A = '["' + str('Input_36' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_5394A, text='LAYER DESINTEGRATION', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_BE2B6 = '["' + str('Input_30' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_BE2B6, text='Animate Layers', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_A0D48 = '["' + str('Input_31' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_A0D48, text='Randomness', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_B3B38 = '["' + str('Input_32' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_B3B38, text='Animation Axis', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_B19C2 = '["' + str('Input_33' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_B19C2, text='Switch Direction', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_DEAF4 = '["' + str('Input_34' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_DEAF4, text='Seed', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_247D8 = '["' + str('Input_35' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_247D8, text='Animation Speed', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_33F3D = '["' + str('Input_23' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_33F3D, text='BRICKS ASSEMBLY', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_80F00 = '["' + str('Input_38' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_80F00, text='Anim. Effector', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_6353D = '["' + str('Input_24' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_6353D, text='Animate Assembly', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_5996A = '["' + str('Input_37' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_5996A, text='Randomness', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_36F9C = '["' + str('Input_25' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_36F9C, text='Spread Max. Distance', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_95ECF = '["' + str('Input_26' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_95ECF, text='Animation Axis', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_FBB2C = '["' + str('Input_27' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_FBB2C, text='Switch Direction', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_B5DAF = '["' + str('Input_28' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_B5DAF, text='Seed', icon_value=0, emboss=True) col_258B7.separator(factor=0.5) attr_75D9A = '["' + str('Input_29' + '"]') col_258B7.prop(bpy.context.view_layer.objects.active.modifiers[bpy.context.active_object.modifiers.active.name], attr_75D9A, text='Animation Speed', icon_value=0, emboss=True) else: box_A3043.label(text='Please Select Legolizer/Landscape Modifier', icon_value=0) else: box_A3043.label(text='Please Add Legolizer/Landscape Modifier', icon_value=0) def register(): global _icons _icons = bpy.utils.previews.new() bpy.types.Scene.sna_new_property = bpy.props.BoolProperty(name='New Property', description='', default=False) bpy.types.Scene.sna_resolution_width = bpy.props.IntProperty(name='Resolution Width', description='', default=1024, subtype='NONE') bpy.types.Scene.sna_aldezel_properties = bpy.props.StringProperty(name='Al-Dezel Properties', description='Al-Dezel Properties', default='', subtype='NONE', maxlen=0) bpy.types.Scene.sna_resolution_height = bpy.props.IntProperty(name='Resolution Height', description='', default=1024, subtype='NONE') bpy.types.Scene.sna_legolizer_material = bpy.props.PointerProperty(name='Legolizer Material', description='', type=bpy.types.Material, update=sna_update_sna_legolizer_material_9D59F) bpy.types.Scene.sna_landscape_material = bpy.props.PointerProperty(name='Landscape Material', description='', type=bpy.types.Material, update=sna_update_sna_landscape_material_E64B9) bpy.utils.register_class(SNA_OT_Operator_88521) bpy.utils.register_class(SNA_PT_LEGOLIZER_D7609) bpy.utils.register_class(SNA_OT_Operator_79C5B) bpy.utils.register_class(SNA_OT_Operator002_5E694) bpy.utils.register_class(SNA_AddonPreferences_2E6BD) bpy.utils.register_class(SNA_OT_Material_Properties_A10D8) bpy.utils.register_class(SNA_OT_Geometry_Properties_87F4A) bpy.app.handlers.load_post.append(load_post_handler_E1A6F) bpy.utils.register_class(SNA_OT_Add_Legolizer_Setup_B16Ae) bpy.utils.register_class(SNA_OT_Operator001_67831) bpy.utils.register_class(SNA_OT_Operator_E20D3) bpy.utils.register_class(SNA_PT_BAKE_79642) bpy.utils.register_class(SNA_PT_MATERIAL_PROPERTIES_63A83) bpy.utils.register_class(SNA_PT_PROPERTIES_1DA39) kc = bpy.context.window_manager.keyconfigs.addon km = kc.keymaps.new(name='Window', space_type='EMPTY') kmi = km.keymap_items.new('sna.operator_79c5b', 'L', 'PRESS', ctrl=False, alt=False, shift=False, repeat=False) addon_keymaps['27F5F'] = (km, kmi) kc = bpy.context.window_manager.keyconfigs.addon km = kc.keymaps.new(name='Window', space_type='EMPTY') kmi = km.keymap_items.new('sna.operator002_5e694', 'P', 'PRESS', ctrl=False, alt=False, shift=False, repeat=False) addon_keymaps['94A0F'] = (km, kmi) kc = bpy.context.window_manager.keyconfigs.addon km = kc.keymaps.new(name='Window', space_type='EMPTY') kmi = km.keymap_items.new('sna.add_legolizer_setup_b16ae', 'A', 'PRESS', ctrl=True, alt=False, shift=True, repeat=False) addon_keymaps['4D60F'] = (km, kmi) def unregister(): global _icons bpy.utils.previews.remove(_icons) wm = bpy.context.window_manager kc = wm.keyconfigs.addon for km, kmi in addon_keymaps.values(): km.keymap_items.remove(kmi) addon_keymaps.clear() del bpy.types.Scene.sna_landscape_material del bpy.types.Scene.sna_legolizer_material del bpy.types.Scene.sna_resolution_height del bpy.types.Scene.sna_aldezel_properties del bpy.types.Scene.sna_resolution_width del bpy.types.Scene.sna_new_property bpy.utils.unregister_class(SNA_OT_Operator_88521) bpy.utils.unregister_class(SNA_PT_LEGOLIZER_D7609) bpy.utils.unregister_class(SNA_OT_Operator_79C5B) bpy.utils.unregister_class(SNA_OT_Operator002_5E694) bpy.utils.unregister_class(SNA_AddonPreferences_2E6BD) bpy.utils.unregister_class(SNA_OT_Material_Properties_A10D8) bpy.utils.unregister_class(SNA_OT_Geometry_Properties_87F4A) bpy.app.handlers.load_post.remove(load_post_handler_E1A6F) bpy.utils.unregister_class(SNA_OT_Add_Legolizer_Setup_B16Ae) bpy.utils.unregister_class(SNA_OT_Operator001_67831) bpy.utils.unregister_class(SNA_OT_Operator_E20D3) bpy.utils.unregister_class(SNA_PT_BAKE_79642) bpy.utils.unregister_class(SNA_PT_MATERIAL_PROPERTIES_63A83) bpy.utils.unregister_class(SNA_PT_PROPERTIES_1DA39)