expre-gen/blender/3.4/scripts/addons/archimesh/__init__.py
2025-10-17 09:47:23 +08:00

280 lines
9.2 KiB
Python

# 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()