# SPDX-License-Identifier: GPL-2.0-or-later # ---------------------------------------------------------- # Author: Antonio Vazquez (antonioya) # ---------------------------------------------------------- # ---------------------------------------------- # Define Addon info # ---------------------------------------------- bl_info = { "name": "Archimesh", "author": "Antonio Vazquez (antonioya)", "location": "View3D > Add Mesh / Sidebar > Create Tab", "version": (1, 2, 3), "blender": (3, 0, 0), "description": "Generate rooms, doors, windows, and other architecture objects", "doc_url": "{BLENDER_MANUAL_URL}/addons/add_mesh/archimesh.html", "category": "Add Mesh" } import sys import os # ---------------------------------------------- # Import modules # ---------------------------------------------- if "bpy" in locals(): import importlib importlib.reload(achm_room_maker) importlib.reload(achm_door_maker) importlib.reload(achm_window_maker) importlib.reload(achm_roof_maker) importlib.reload(achm_column_maker) importlib.reload(achm_stairs_maker) importlib.reload(achm_kitchen_maker) importlib.reload(achm_shelves_maker) importlib.reload(achm_books_maker) importlib.reload(achm_lamp_maker) importlib.reload(achm_curtain_maker) importlib.reload(achm_venetian_maker) importlib.reload(achm_main_panel) importlib.reload(achm_window_panel) # print("archimesh: Reloaded multifiles") else: from . import achm_books_maker from . import achm_column_maker from . import achm_curtain_maker from . import achm_venetian_maker from . import achm_door_maker from . import achm_kitchen_maker from . import achm_lamp_maker from . import achm_main_panel from . import achm_roof_maker from . import achm_room_maker from . import achm_shelves_maker from . import achm_stairs_maker from . import achm_window_maker from . import achm_window_panel # print("archimesh: Imported multifiles") # noinspection PyUnresolvedReferences import bpy # noinspection PyUnresolvedReferences from bpy.props import ( BoolProperty, FloatVectorProperty, IntProperty, FloatProperty, StringProperty, ) # noinspection PyUnresolvedReferences from bpy.types import ( AddonPreferences, Menu, Scene, VIEW3D_MT_mesh_add, WindowManager, ) # ---------------------------------------------------------- # Decoration assets # ---------------------------------------------------------- class ARCHIMESH_MT_MeshDecorationAdd(Menu): bl_idname = "VIEW3D_MT_mesh_decoration_add" bl_label = "Decoration assets" # noinspection PyUnusedLocal def draw(self, context): self.layout.operator("mesh.archimesh_books", text="Books") self.layout.operator("mesh.archimesh_light", text="Lamp") self.layout.operator("mesh.archimesh_roller", text="Roller curtains") self.layout.operator("mesh.archimesh_venetian", text="Venetian blind") self.layout.operator("mesh.archimesh_japan", text="Japanese curtains") # ---------------------------------------------------------- # Registration # ---------------------------------------------------------- class ARCHIMESH_MT_CustomMenuAdd(Menu): bl_idname = "VIEW3D_MT_mesh_custom_menu_add" bl_label = "Archimesh" # noinspection PyUnusedLocal def draw(self, context): self.layout.operator_context = 'INVOKE_REGION_WIN' self.layout.operator("mesh.archimesh_room", text="Room") self.layout.operator("mesh.archimesh_door", text="Door") self.layout.operator("mesh.archimesh_window", text="Rail Window") self.layout.operator("mesh.archimesh_winpanel", text="Panel Window") self.layout.operator("mesh.archimesh_kitchen", text="Cabinet") self.layout.operator("mesh.archimesh_shelves", text="Shelves") self.layout.operator("mesh.archimesh_column", text="Column") self.layout.operator("mesh.archimesh_stairs", text="Stairs") self.layout.operator("mesh.archimesh_roof", text="Roof") self.layout.menu("VIEW3D_MT_mesh_decoration_add", text="Decoration props", icon="GROUP") # -------------------------------------------------------------- # Register all operators and panels # -------------------------------------------------------------- # Define menu # noinspection PyUnusedLocal def AchmMenu_func(self, context): layout = self.layout layout.separator() self.layout.menu("VIEW3D_MT_mesh_custom_menu_add", icon="GROUP") classes = ( ARCHIMESH_MT_CustomMenuAdd, ARCHIMESH_MT_MeshDecorationAdd, achm_room_maker.ARCHIMESH_OT_Room, achm_room_maker.ARCHIMESH_PT_RoomGenerator, achm_room_maker.ARCHIMESH_OT_ExportRoom, achm_room_maker.ARCHIMESH_OT_ImportRoom, achm_door_maker.ARCHIMESH_OT_Door, achm_door_maker.ARCHIMESH_PT_DoorObjectgenerator, achm_window_maker.ARCHIMESH_OT_Windows, achm_window_maker.ARCHIMESH_PT_WindowObjectgenerator, achm_roof_maker.ARCHIMESH_OT_Roof, achm_column_maker.ARCHIMESH_OT_Column, achm_stairs_maker.ARCHIMESH_OT_Stairs, achm_kitchen_maker.ARCHIMESH_OT_Kitchen, achm_kitchen_maker.ARCHIMESH_OT_ExportInventory, achm_shelves_maker.ARCHIMESH_OT_Shelves, achm_books_maker.ARCHIMESH_OT_Books, achm_lamp_maker.ARCHIMESH_PT_Lamp, achm_curtain_maker.ARCHIMESH_OT_Roller, achm_curtain_maker.ARCHIMESH_OT_Japan, achm_venetian_maker.ARCHIMESH_OT_Venetian, achm_venetian_maker.ARCHIMESH_PT_VenetianObjectgenerator, achm_main_panel.ARCHIMESH_PT_Main, achm_main_panel.ARCHIMESH_OT_Hole, achm_main_panel.ARCHIMESH_OT_Pencil, achm_main_panel.ARCHIMESH_OT_HintDisplay, achm_window_panel.ARCHIMESH_PT_Win, achm_window_panel.ARCHIMESH_PT_WindowEdit ) def register(): from bpy.utils import register_class for cls in classes: register_class(cls) VIEW3D_MT_mesh_add.append(AchmMenu_func) # Define properties Scene.archimesh_select_only = BoolProperty( name="Only selected", description="Apply auto holes only to selected objects", default=False, ) Scene.archimesh_ceiling = BoolProperty( name="Ceiling", description="Create a ceiling", default=False, ) Scene.archimesh_floor = BoolProperty( name="Floor", description="Create a floor automatically", default=False, ) Scene.archimesh_merge = BoolProperty( name="Close walls", description="Close walls to create a full closed room", default=False, ) Scene.archimesh_text_color = FloatVectorProperty( name="Hint color", description="Color for the text and lines", default=(0.173, 0.545, 1.0, 1.0), min=0.1, max=1, subtype='COLOR', size=4, ) Scene.archimesh_walltext_color = FloatVectorProperty( name="Hint color", description="Color for the wall label", default=(1, 0.8, 0.1, 1.0), min=0.1, max=1, subtype='COLOR', size=4, ) Scene.archimesh_font_size = IntProperty( name="Text Size", description="Text size for hints", default=14, min=10, max=150, ) Scene.archimesh_wfont_size = IntProperty( name="Text Size", description="Text size for wall labels", default=16, min=10, max=150, ) Scene.archimesh_hint_space = FloatProperty( name='Separation', min=0, max=5, default=0.1, precision=2, description='Distance from object to display hint', ) Scene.archimesh_gl_measure = BoolProperty( name="Measures", description="Display measures", default=True, ) Scene.archimesh_gl_name = BoolProperty( name="Names", description="Display names", default=True, ) Scene.archimesh_gl_ghost = BoolProperty( name="All", description="Display measures for all objects," " not only selected", default=True, ) # OpenGL flag wm = WindowManager # register internal property wm.archimesh_run_opengl = BoolProperty(default=False) def unregister(): from bpy.utils import unregister_class for cls in reversed(classes): unregister_class(cls) VIEW3D_MT_mesh_add.remove(AchmMenu_func) # Remove properties del Scene.archimesh_select_only del Scene.archimesh_ceiling del Scene.archimesh_floor del Scene.archimesh_merge del Scene.archimesh_text_color del Scene.archimesh_walltext_color del Scene.archimesh_font_size del Scene.archimesh_wfont_size del Scene.archimesh_hint_space del Scene.archimesh_gl_measure del Scene.archimesh_gl_name del Scene.archimesh_gl_ghost # remove OpenGL data achm_main_panel.ARCHIMESH_OT_HintDisplay.handle_remove(achm_main_panel.ARCHIMESH_OT_HintDisplay, bpy.context) wm = bpy.context.window_manager p = 'archimesh_run_opengl' if p in wm: del wm[p] if __name__ == '__main__': register()