From 00fe1f9d27ef81d535c4ebfea11e7793a41fe373 Mon Sep 17 00:00:00 2001 From: Antonioya Date: Sun, 27 Jan 2019 17:34:37 +0100 Subject: Archimesh: Conversion to 2.80 Adapt the script to new Blender version Task T60910 --- archimesh/__init__.py | 187 +++++++++++--------------------- archimesh/achm_books_maker.py | 20 ++-- archimesh/achm_column_maker.py | 106 +++++++++--------- archimesh/achm_curtain_maker.py | 91 ++++++++-------- archimesh/achm_door_maker.py | 42 ++++---- archimesh/achm_gltools.py | 225 +++++++++++++++++++-------------------- archimesh/achm_kitchen_maker.py | 43 ++++---- archimesh/achm_lamp_maker.py | 46 ++++---- archimesh/achm_main_panel.py | 36 +++---- archimesh/achm_roof_maker.py | 22 ++-- archimesh/achm_room_maker.py | 38 +++---- archimesh/achm_shelves_maker.py | 16 +-- archimesh/achm_stairs_maker.py | 18 ++-- archimesh/achm_tools.py | 74 ++++++------- archimesh/achm_venetian_maker.py | 48 ++++----- archimesh/achm_window_maker.py | 72 ++++++------- archimesh/achm_window_panel.py | 48 ++++++--- 17 files changed, 544 insertions(+), 588 deletions(-) (limited to 'archimesh') diff --git a/archimesh/__init__.py b/archimesh/__init__.py index 533dc8bc..a9abe270 100644 --- a/archimesh/__init__.py +++ b/archimesh/__init__.py @@ -29,8 +29,8 @@ bl_info = { "name": "Archimesh", "author": "Antonio Vazquez (antonioya)", "location": "View3D > Add > Mesh > Archimesh", - "version": (1, 1, 4), - "blender": (2, 68, 0), + "version": (1, 2, 0), + "blender": (2, 80, 0), "description": "Generate rooms, doors, windows, and other architecture objects", "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Add_Mesh/Archimesh", "category": "Add Mesh" @@ -53,7 +53,7 @@ if "bpy" in locals(): importlib.reload(achm_kitchen_maker) importlib.reload(achm_shelves_maker) importlib.reload(achm_books_maker) - importlib.reload(achm_light_maker) + importlib.reload(achm_lamp_maker) importlib.reload(achm_curtain_maker) importlib.reload(achm_venetian_maker) importlib.reload(achm_main_panel) @@ -66,7 +66,7 @@ else: from . import achm_venetian_maker from . import achm_door_maker from . import achm_kitchen_maker - from . import achm_light_maker + from . import achm_lamp_maker from . import achm_main_panel from . import achm_roof_maker from . import achm_room_maker @@ -101,129 +101,89 @@ from bpy.types import ( # ---------------------------------------------------------- -class AchmInfoMtMeshDecorationAdd(Menu): +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="Add Books") - self.layout.operator("mesh.archimesh_light", text="Add Lamp") - self.layout.operator("mesh.archimesh_roller", text="Add Roller curtains") - self.layout.operator("mesh.archimesh_venetian", text="Add Venetian blind") - self.layout.operator("mesh.archimesh_japan", text="Add Japanese curtains") + 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 AchmInfoMtMeshCustomMenuAdd(Menu): +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="Add Room") - self.layout.operator("mesh.archimesh_door", text="Add Door") - self.layout.operator("mesh.archimesh_window", text="Add Rail Window") - self.layout.operator("mesh.archimesh_winpanel", text="Add Panel Window") - self.layout.operator("mesh.archimesh_kitchen", text="Add Cabinet") - self.layout.operator("mesh.archimesh_shelves", text="Add Shelves") - self.layout.operator("mesh.archimesh_column", text="Add Column") - self.layout.operator("mesh.archimesh_stairs", text="Add Stairs") - self.layout.operator("mesh.archimesh_roof", text="Add Roof") + 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 # -------------------------------------------------------------- - -# Add-ons Preferences Update Panel - -# Define Panel classes for updating -panels = ( - achm_main_panel.ArchimeshMainPanel, - ) - - -def update_panel(self, context): - message = "Archimesh: Updating Panel locations has failed" - try: - for panel in panels: - if "bl_rna" in panel.__dict__: - bpy.utils.unregister_class(panel) - - for panel in panels: - panel.bl_category = context.preferences.addons[__name__].preferences.category - bpy.utils.register_class(panel) - - except Exception as e: - print("\n[{}]\n{}\n\nError:\n{}".format(__name__, message, e)) - pass - - -class Archi_Pref(AddonPreferences): - # this must match the addon name, use '__package__' - # when defining this in a submodule of a python package. - bl_idname = __name__ - - category: StringProperty( - name="Tab Category", - description="Choose a name for the category of the panel", - default="Create", - update=update_panel - ) - - def draw(self, context): - layout = self.layout - - row = layout.row() - col = row.column() - col.label(text="Tab Category:") - col.prop(self, "category", text="") - - # Define menu # noinspection PyUnusedLocal def AchmMenu_func(self, context): 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(): - bpy.utils.register_class(AchmInfoMtMeshCustomMenuAdd) - bpy.utils.register_class(AchmInfoMtMeshDecorationAdd) - bpy.utils.register_class(achm_room_maker.AchmRoom) - bpy.utils.register_class(achm_room_maker.AchmRoomGeneratorPanel) - bpy.utils.register_class(achm_room_maker.AchmExportRoom) - bpy.utils.register_class(achm_room_maker.AchmImportRoom) - bpy.utils.register_class(achm_door_maker.AchmDoor) - bpy.utils.register_class(achm_door_maker.AchmDoorObjectgeneratorpanel) - bpy.utils.register_class(achm_window_maker.AchmWindows) - bpy.utils.register_class(achm_window_maker.AchmWindowObjectgeneratorpanel) - bpy.utils.register_class(achm_roof_maker.AchmRoof) - bpy.utils.register_class(achm_column_maker.AchmColumn) - bpy.utils.register_class(achm_stairs_maker.AchmStairs) - bpy.utils.register_class(achm_kitchen_maker.AchmKitchen) - bpy.utils.register_class(achm_kitchen_maker.AchmExportInventory) - bpy.utils.register_class(achm_shelves_maker.AchmShelves) - bpy.utils.register_class(achm_books_maker.AchmBooks) - bpy.utils.register_class(achm_light_maker.AchmLamp) - bpy.utils.register_class(achm_curtain_maker.AchmRoller) - bpy.utils.register_class(achm_curtain_maker.AchmJapan) - bpy.utils.register_class(achm_venetian_maker.AchmVenetian) - bpy.utils.register_class(achm_venetian_maker.AchmVenetianObjectgeneratorpanel) - bpy.utils.register_class(achm_main_panel.ArchimeshMainPanel) - bpy.utils.register_class(achm_main_panel.AchmHoleAction) - bpy.utils.register_class(achm_main_panel.AchmPencilAction) - bpy.utils.register_class(achm_main_panel.AchmRunHintDisplayButton) - bpy.utils.register_class(achm_window_panel.AchmWinPanel) - bpy.utils.register_class(achm_window_panel.AchmWindowEditPanel) - bpy.utils.register_class(Archi_Pref) + from bpy.utils import register_class + for cls in classes: + register_class(cls) + VIEW3D_MT_mesh_add.append(AchmMenu_func) - update_panel(None, bpy.context) + # Define properties Scene.archimesh_select_only = BoolProperty( name="Only selected", @@ -304,35 +264,10 @@ def register(): def unregister(): - bpy.utils.unregister_class(AchmInfoMtMeshCustomMenuAdd) - bpy.utils.unregister_class(AchmInfoMtMeshDecorationAdd) - bpy.utils.unregister_class(achm_room_maker.AchmRoom) - bpy.utils.unregister_class(achm_room_maker.AchmRoomGeneratorPanel) - bpy.utils.unregister_class(achm_room_maker.AchmExportRoom) - bpy.utils.unregister_class(achm_room_maker.AchmImportRoom) - bpy.utils.unregister_class(achm_door_maker.AchmDoor) - bpy.utils.unregister_class(achm_door_maker.AchmDoorObjectgeneratorpanel) - bpy.utils.unregister_class(achm_window_maker.AchmWindows) - bpy.utils.unregister_class(achm_window_maker.AchmWindowObjectgeneratorpanel) - bpy.utils.unregister_class(achm_roof_maker.AchmRoof) - bpy.utils.unregister_class(achm_column_maker.AchmColumn) - bpy.utils.unregister_class(achm_stairs_maker.AchmStairs) - bpy.utils.unregister_class(achm_kitchen_maker.AchmKitchen) - bpy.utils.unregister_class(achm_kitchen_maker.AchmExportInventory) - bpy.utils.unregister_class(achm_shelves_maker.AchmShelves) - bpy.utils.unregister_class(achm_books_maker.AchmBooks) - bpy.utils.unregister_class(achm_light_maker.AchmLamp) - bpy.utils.unregister_class(achm_curtain_maker.AchmRoller) - bpy.utils.unregister_class(achm_curtain_maker.AchmJapan) - bpy.utils.unregister_class(achm_venetian_maker.AchmVenetian) - bpy.utils.unregister_class(achm_venetian_maker.AchmVenetianObjectgeneratorpanel) - bpy.utils.unregister_class(achm_main_panel.ArchimeshMainPanel) - bpy.utils.unregister_class(achm_main_panel.AchmHoleAction) - bpy.utils.unregister_class(achm_main_panel.AchmPencilAction) - bpy.utils.unregister_class(achm_main_panel.AchmRunHintDisplayButton) - bpy.utils.unregister_class(achm_window_panel.AchmWinPanel) - bpy.utils.unregister_class(achm_window_panel.AchmWindowEditPanel) - bpy.utils.unregister_class(Archi_Pref) + from bpy.utils import unregister_class + for cls in reversed(classes): + unregister_class(cls) + VIEW3D_MT_mesh_add.remove(AchmMenu_func) # Remove properties @@ -349,7 +284,7 @@ def unregister(): del Scene.archimesh_gl_name del Scene.archimesh_gl_ghost # remove OpenGL data - achm_main_panel.AchmRunHintDisplayButton.handle_remove(achm_main_panel.AchmRunHintDisplayButton, bpy.context) + 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: diff --git a/archimesh/achm_books_maker.py b/archimesh/achm_books_maker.py index beceaa9e..a3468be9 100644 --- a/archimesh/achm_books_maker.py +++ b/archimesh/achm_books_maker.py @@ -38,11 +38,11 @@ from .achm_tools import * # Define UI class # Books # ------------------------------------------------------------------ -class AchmBooks(Operator): +class ARCHIMESH_OT_Books(Operator): bl_idname = "mesh.archimesh_books" bl_label = "Books" bl_description = "Books Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} width: FloatProperty( @@ -58,7 +58,7 @@ class AchmBooks(Operator): description='Bounding book height', ) num: IntProperty( - name='Number of books', min=1, max=100, default=20, + name='Number of books', min=1, max=100, default=5, description='Number total of books', ) @@ -137,7 +137,7 @@ class AchmBooks(Operator): row.prop(self, 'afn', slider=True) box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') if self.crt_mat: @@ -170,7 +170,7 @@ class AchmBooks(Operator): def create_book_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) generate_books(self) @@ -203,7 +203,7 @@ def generate_books(self): mydata = create_book("Book" + str(x), self.width, self.depth, self.height, lastx, myloc.y, myloc.z, - self.crt_mat if bpy.context.scene.render.engine == 'CYCLES' else False, + self.crt_mat if bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'} else False, self.rX, self.rY, self.rZ, self.rot, ox, oy, oz, ot, self.objcol, self.rC) boxes.extend([mydata[0]]) @@ -230,11 +230,11 @@ def generate_books(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) boxes[0].select_set(True) - bpy.context.scene.objects.active = boxes[0] + bpy.context.view_layer.objects.active = boxes[0] return @@ -361,7 +361,7 @@ def create_book(objname, sx, sy, sz, px, py, pz, mat, frx, mybook.location[0] = px mybook.location[1] = py mybook.location[2] = pz + sin(radians(rot)) * sx - bpy.context.scene.objects.link(mybook) + bpy.context.collection.objects.link(mybook) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -369,7 +369,7 @@ def create_book(objname, sx, sy, sz, px, py, pz, mat, frx, # --------------------------------- # Materials and UV Maps # --------------------------------- - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: rgb = objcol # External mat = create_diffuse_material(objname + "_material", True, diff --git a/archimesh/achm_column_maker.py b/archimesh/achm_column_maker.py index ed52ae9c..d1680a9c 100644 --- a/archimesh/achm_column_maker.py +++ b/archimesh/achm_column_maker.py @@ -26,6 +26,7 @@ # noinspection PyUnresolvedReferences import bpy from math import cos, sin, radians, atan, sqrt +from bpy.props import BoolProperty, IntProperty, FloatProperty, FloatVectorProperty from .achm_tools import * @@ -33,11 +34,11 @@ from .achm_tools import * # Define UI class # Columns # ------------------------------------------------------------------ -class AchmColumn(bpy.types.Operator): +class ARCHIMESH_OT_Column(bpy.types.Operator): bl_idname = "mesh.archimesh_column" bl_label = "Column" bl_description = "Columns Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # Define properties @@ -49,185 +50,185 @@ class AchmColumn(bpy.types.Operator): ), description="Type of column", ) - keep_size: bpy.props.BoolProperty( + keep_size: BoolProperty( name="Keep radius equal", description="Keep all radius (top, mid and bottom) to the same size", default=True, ) - rad_top: bpy.props.FloatProperty( + rad_top: FloatProperty( name='Top radius', min=0.001, max=10, default=0.15, precision=3, description='Radius of the column in the top', ) - rad_mid: bpy.props.FloatProperty( + rad_mid: FloatProperty( name='Middle radius', min=0.001, max=10, default=0.15, precision=3, description='Radius of the column in the middle', ) - shift: bpy.props.FloatProperty( + shift: FloatProperty( name='', min=-1, max=1, default=0, precision=3, description='Middle displacement', ) - rad_bottom: bpy.props.FloatProperty( + rad_bottom: FloatProperty( name='Bottom radius', min=0.001, max=10, default=0.15, precision=3, description='Radius of the column in the bottom', ) - col_height: bpy.props.FloatProperty( + col_height: FloatProperty( name='Total height', min=0.001, max=10, default=2.4, precision=3, description='Total height of column, including bases and tops', ) - col_sx: bpy.props.FloatProperty( + col_sx: FloatProperty( name='X size', min=0.001, max=10, default=0.30, precision=3, description='Column size for x axis', ) - col_sy: bpy.props.FloatProperty( + col_sy: FloatProperty( name='Y size', min=0.001, max=10, default=0.30, precision=3, description='Column size for y axis', ) - cir_base: bpy.props.BoolProperty( + cir_base: BoolProperty( name="Include circular base", description="Include a base with circular form", default=False, ) - cir_base_r: bpy.props.FloatProperty( + cir_base_r: FloatProperty( name='Radio', min=0.001, max=10, default=0.08, precision=3, description='Rise up radio of base', ) - cir_base_z: bpy.props.FloatProperty( + cir_base_z: FloatProperty( name='Height', min=0.001, max=10, default=0.05, precision=3, description='Size for z axis', ) - cir_top: bpy.props.BoolProperty( + cir_top: BoolProperty( name="Include circular top", description="Include a top with circular form", default=False, ) - cir_top_r: bpy.props.FloatProperty( + cir_top_r: FloatProperty( name='Radio', min=0.001, max=10, default=0.08, precision=3, description='Rise up radio of top', ) - cir_top_z: bpy.props.FloatProperty( + cir_top_z: FloatProperty( name='Height', min=0.001, max=10, default=0.05, precision=3, description='Size for z axis', ) - box_base: bpy.props.BoolProperty( + box_base: BoolProperty( name="Include rectangular base", description="Include a base with rectangular form", default=True, ) - box_base_x: bpy.props.FloatProperty( + box_base_x: FloatProperty( name='X size', min=0.001, max=10, default=0.40, precision=3, description='Size for x axis', ) - box_base_y: bpy.props.FloatProperty( + box_base_y: FloatProperty( name='Y size', min=0.001, max=10, default=0.40, precision=3, description='Size for y axis', ) - box_base_z: bpy.props.FloatProperty( + box_base_z: FloatProperty( name='Height', min=0.001, max=10, default=0.05, precision=3, description='Size for z axis', ) - box_top: bpy.props.BoolProperty( + box_top: BoolProperty( name="Include rectangular top", description="Include a top with rectangular form", default=True, ) - box_top_x: bpy.props.FloatProperty( + box_top_x: FloatProperty( name='X size', min=0.001, max=10, default=0.40, precision=3, description='Size for x axis', ) - box_top_y: bpy.props.FloatProperty( + box_top_y: FloatProperty( name='Y size', min=0.001, max=10, default=0.40, precision=3, description='Size for y axis', ) - box_top_z: bpy.props.FloatProperty( + box_top_z: FloatProperty( name='Height', min=0.001, max=10, default=0.05, precision=3, description='Size for z axis', ) - arc_top: bpy.props.BoolProperty( + arc_top: BoolProperty( name="Create top arch", description="Include an arch in the top of the column", default=False, ) - arc_radio: bpy.props.FloatProperty( + arc_radio: FloatProperty( name='Arc Radio', min=0.001, max=10, default=1, precision=1, description='Radio of the arch', ) - arc_width: bpy.props.FloatProperty( + arc_width: FloatProperty( name='Thickness', min=0.01, max=10, default=0.15, precision=2, description='Thickness of the arch wall', ) - arc_gap: bpy.props.FloatProperty( + arc_gap: FloatProperty( name='Arc gap', min=0.01, max=10, default=0.25, precision=2, description='Size of the gap in the arch sides', ) - crt_mat: bpy.props.BoolProperty( + crt_mat: BoolProperty( name="Create default Cycles materials", description="Create default materials for Cycles render", default=True, ) - crt_array: bpy.props.BoolProperty( + crt_array: BoolProperty( name="Create array of elements", description="Create a modifier array for all elemnst", default=False, ) - array_num_x: bpy.props.IntProperty( + array_num_x: IntProperty( name='Count X', min=0, max=100, default=3, description='Number of elements in array', ) - array_space_x: bpy.props.FloatProperty( + array_space_x: FloatProperty( name='Distance X', min=0.000, max=10, default=1, precision=3, description='Distance between elements (only arc disabled)', ) - array_num_y: bpy.props.IntProperty( + array_num_y: IntProperty( name='Count Y', min=0, max=100, default=0, description='Number of elements in array', ) - array_space_y: bpy.props.FloatProperty( + array_space_y: FloatProperty( name='Distance Y', min=0.000, max=10, default=1, precision=3, description='Distance between elements (only arc disabled)', ) - array_space_z: bpy.props.FloatProperty( + array_space_z: FloatProperty( name='Distance Z', min=-10, max=10, default=0, precision=3, description='Combined X/Z distance between elements (only arc disabled)', ) - ramp: bpy.props.BoolProperty( + ramp: BoolProperty( name="Deform", description="Deform top base with Z displacement", default=True, ) - array_space_factor: bpy.props.FloatProperty( + array_space_factor: FloatProperty( name='Move Y center', min=0.00, max=1, default=0.0, precision=3, description='Move the center of the arch in Y axis. (0 centered)', @@ -322,7 +323,7 @@ class AchmColumn(bpy.types.Operator): row.prop(self, 'ramp') box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') else: @@ -355,7 +356,7 @@ def create_column_mesh(self): mycolumn = None # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) @@ -374,6 +375,7 @@ def create_column_mesh(self): height = height - self.box_base_z if self.box_top: height = height - self.box_top_z + # ------------------------ # Create circular column # ------------------------ @@ -381,7 +383,7 @@ def create_column_mesh(self): bpy.ops.object.select_all(False) mycolumn = create_circular_column(self, "Column", radio_top, radio_mid, radio_bottom, height) mycolumn.select_set(True) - bpy.context.scene.objects.active = mycolumn + bpy.context.view_layer.objects.active = mycolumn # Subsurf set_smooth(mycolumn) set_modifier_subsurf(mycolumn) @@ -392,7 +394,7 @@ def create_column_mesh(self): mycolumn = create_rectangular_base(self, "Column", self.col_sx, self.col_sy, height) bpy.ops.object.select_all(False) mycolumn.select_set(True) - bpy.context.scene.objects.active = mycolumn + bpy.context.view_layer.objects.active = mycolumn set_normals(mycolumn) # ------------------------ # Circular base @@ -401,7 +403,7 @@ def create_column_mesh(self): cir_bottom = create_torus("Column_cir_bottom", radio_bottom, self.cir_base_r, self.cir_base_z) bpy.ops.object.select_all(False) cir_bottom.select_set(True) - bpy.context.scene.objects.active = cir_bottom + bpy.context.view_layer.objects.active = cir_bottom set_modifier_subsurf(cir_bottom) set_smooth(cir_bottom) cir_bottom.location.x = 0.0 @@ -417,7 +419,7 @@ def create_column_mesh(self): self.box_base_z) bpy.ops.object.select_all(False) box_bottom.select_set(True) - bpy.context.scene.objects.active = box_bottom + bpy.context.view_layer.objects.active = box_bottom box_bottom.parent = mycolumn set_normals(box_bottom) box_bottom.location.x = 0.0 @@ -433,7 +435,7 @@ def create_column_mesh(self): cir_top = create_torus("Column_cir_top", radio_top, self.cir_top_r, self.cir_top_z) bpy.ops.object.select_all(False) cir_top.select_set(True) - bpy.context.scene.objects.active = cir_top + bpy.context.view_layer.objects.active = cir_top set_modifier_subsurf(cir_top) set_smooth(cir_top) cir_top.parent = mycolumn @@ -449,7 +451,7 @@ def create_column_mesh(self): self.box_top_z, self.ramp) bpy.ops.object.select_all(False) box_top.select_set(True) - bpy.context.scene.objects.active = box_top + bpy.context.view_layer.objects.active = box_top set_normals(box_top) box_top.parent = mycolumn box_top.location.x = 0.0 @@ -465,7 +467,7 @@ def create_column_mesh(self): myarc.parent = mycolumn bpy.ops.object.select_all(False) myarc.select_set(True) - bpy.context.scene.objects.active = myarc + bpy.context.view_layer.objects.active = myarc set_normals(myarc) set_modifier_mirror(myarc, "X") myarc.location.x = self.arc_radio + self.arc_gap @@ -530,7 +532,7 @@ def create_column_mesh(self): # ------------------------ # Create materials # ------------------------ - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # Column material mat = create_diffuse_material("Column_material", False, 0.748, 0.734, 0.392, 0.573, 0.581, 0.318) set_material(mycolumn, mat) @@ -555,7 +557,7 @@ def create_column_mesh(self): bpy.ops.object.select_all(False) mycolumn.select_set(True) - bpy.context.scene.objects.active = mycolumn + bpy.context.view_layer.objects.active = mycolumn return @@ -604,7 +606,7 @@ def create_circular_column(self, objname, radio_top, radio_mid, radio_bottom, he myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -676,7 +678,7 @@ def create_torus(objname, radio_inside, radio_outside, height): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -725,7 +727,7 @@ def create_rectangular_base(self, objname, x, y, z, ramp=False): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -791,7 +793,7 @@ def create_arc(objname, radio, gap, thickness, center): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) diff --git a/archimesh/achm_curtain_maker.py b/archimesh/achm_curtain_maker.py index f8d005f2..29740556 100644 --- a/archimesh/achm_curtain_maker.py +++ b/archimesh/achm_curtain_maker.py @@ -28,6 +28,7 @@ import bpy from copy import copy from math import cos, sin, radians from bpy.types import Operator +from bpy.props import BoolProperty, IntProperty, FloatProperty from .achm_tools import * @@ -35,62 +36,62 @@ from .achm_tools import * # Define UI class # Japanese curtains # ------------------------------------------------------------------ -class AchmJapan(Operator): +class ARCHIMESH_OT_Japan(Operator): bl_idname = "mesh.archimesh_japan" bl_label = "Japanese curtains" bl_description = "Japanese curtains Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} - width: bpy.props.FloatProperty( + width: FloatProperty( name='Width', min=0.30, max=4, default=1, precision=3, description='Total width', ) - height: bpy.props.FloatProperty( + height: FloatProperty( name='Height', min=0.20, max=50, default=1.8, precision=3, description='Total height', ) - num: bpy.props.IntProperty( + num: IntProperty( name='Rails', min=2, max=5, default=2, description='Number total of rails', ) - palnum: bpy.props.IntProperty( + palnum: IntProperty( name='Panels', min=1, max=2, default=1, description='Panels by rail', ) - open01: bpy.props.FloatProperty( + open01: FloatProperty( name='Position 01', min=0, max=1, default=0, precision=3, description='Position of the panel', ) - open02: bpy.props.FloatProperty( + open02: FloatProperty( name='Position 02', min=0, max=1, default=0, precision=3, description='Position of the panel', ) - open03: bpy.props.FloatProperty( + open03: FloatProperty( name='Position 03', min=0, max=1, default=0, precision=3, description='Position of the panel', ) - open04: bpy.props.FloatProperty( + open04: FloatProperty( name='Position 04', min=0, max=1, default=0, precision=3, description='Position of the panel', ) - open05: bpy.props.FloatProperty( + open05: FloatProperty( name='Position 05', min=0, max=1, default=0, precision=3, description='Position of the panel', ) # Materials - crt_mat: bpy.props.BoolProperty( + crt_mat: BoolProperty( name="Create default Cycles materials", description="Create default materials for Cycles render", default=True, @@ -134,11 +135,11 @@ class AchmJapan(Operator): row.prop(self, 'open05', slider=True) box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') if self.crt_mat: - box.label("* Remember to verify fabric texture folder") + box.label(text="* Remember to verify fabric texture folder") else: row = layout.row() row.label(text="Warning: Operator does not work in local view mode", icon='ERROR') @@ -163,7 +164,7 @@ class AchmJapan(Operator): def create_japan_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) # Create units @@ -176,26 +177,26 @@ def create_japan_mesh(self): # Define UI class # Roller curtains # ------------------------------------------------------------------ -class AchmRoller(Operator): +class ARCHIMESH_OT_Roller(Operator): bl_idname = "mesh.archimesh_roller" bl_label = "Roller curtains" bl_description = "Roller_curtains Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} - width: bpy.props.FloatProperty( + width: FloatProperty( name='Width', min=0.30, max=4, default=1, precision=3, description='Total width', ) - height: bpy.props.FloatProperty( + height: FloatProperty( name='Height', min=0.01, max=50, default=1.7, precision=3, description='Total height', ) # Materials - crt_mat: bpy.props.BoolProperty( + crt_mat: BoolProperty( name="Create default Cycles materials", description="Create default materials for Cycles render", default=True, @@ -220,11 +221,11 @@ class AchmRoller(Operator): row.prop(self, 'height') box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') if self.crt_mat: - box.label("* Remember to verify fabric texture folder") + box.label(text="* Remember to verify fabric texture folder") else: row = layout.row() row.label(text="Warning: Operator does not work in local view mode", icon='ERROR') @@ -249,7 +250,7 @@ class AchmRoller(Operator): def create_roller_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) generate_roller(self) @@ -356,7 +357,7 @@ def generate_japan(self): posz = -0.008 x = 1 fabricmat = None - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: fabricmat = create_fabric_material("Fabric_material", False, 0.653, 0.485, 0.265, 0.653, 0.485, 0.265) @@ -396,7 +397,7 @@ def generate_japan(self): mycurve2.location.y = -0.01 mycurve2.location.z = 0.005 - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("String_material", False, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.01) set_material(mycurve1, mat) @@ -409,11 +410,11 @@ def generate_japan(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) myrail.select_set(True) - bpy.context.scene.objects.active = myrail + bpy.context.view_layer.objects.active = myrail return @@ -482,7 +483,7 @@ def create_japan_rail(objname, sx, ways, px, py, pz, mat): myobject.location[0] = px myobject.location[1] = py myobject.location[2] = pz - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -490,7 +491,7 @@ def create_japan_rail(objname, sx, ways, px, py, pz, mat): # --------------------------------- # Materials # --------------------------------- - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # External mat = create_diffuse_material(objname + "_material", False, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.15) set_material(myobject, mat) @@ -529,7 +530,7 @@ def create_japan_support(objname, sx, px, py, pz, mat): myobject.location[0] = px myobject.location[1] = py myobject.location[2] = pz - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -537,7 +538,7 @@ def create_japan_support(objname, sx, px, py, pz, mat): # --------------------------------- # Materials # --------------------------------- - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # External mat = create_diffuse_material(objname + "_material", False, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.15) set_material(myobject, mat) @@ -570,7 +571,7 @@ def create_japan_panel(objname, sx, sz, px, py, pz, mat, fabricmat): myobject.location[0] = px myobject.location[1] = py myobject.location[2] = pz - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -578,7 +579,7 @@ def create_japan_panel(objname, sx, sz, px, py, pz, mat, fabricmat): # --------------------------------- # Materials # --------------------------------- - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: unwrap_mesh(myobject, True) # remap UV to use all texture for uv_loop in myobject.data.uv_layers.active.data: @@ -603,7 +604,7 @@ def create_bezier(objname, points, origin, depth=0.001, fill='FULL'): myobject = bpy.data.objects.new(objname, curvedata) myobject.location = origin - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) polyline = curvedata.splines.new('BEZIER') polyline.bezier_points.add(len(points) - 1) @@ -631,7 +632,7 @@ def generate_roller(self): # Roller Top # ------------------ fabricsolid = None - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: fabricsolid = create_diffuse_material("Fabric_solid_material", False, 0.653, 0.485, 0.265) myroller = create_roller_rail("Roller", @@ -647,7 +648,7 @@ def generate_roller(self): # Sides # -------------------------------------------------------------------------------- plastic = None - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: plastic = create_diffuse_material("Plastic_roller_material", False, 0.653, 0.485, 0.265, 0.653, 0.485, 0.265, 0.2) @@ -669,7 +670,7 @@ def generate_roller(self): # Panel # -------------------------------------------------------------------------------- fabricmat = None - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: fabricmat = create_fabric_material("Fabric_translucent_material", False, 0.653, 0.485, 0.265, 0.653, 0.485, 0.265) @@ -707,17 +708,17 @@ def generate_roller(self): mycurve.location.x = self.width + 0.015 mycurve.location.y = 0 mycurve.location.z = -0.38 - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("String_material", False, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.01) set_material(mycurve, mat) # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) myroller.select_set(True) - bpy.context.scene.objects.active = myroller + bpy.context.view_layer.objects.active = myroller return @@ -771,7 +772,7 @@ def create_roller_rail(objname, width, radio, px, py, pz, mat, mymaterial): mymesh = bpy.data.meshes.new(objname) myroll = bpy.data.objects.new(objname, mymesh) - bpy.context.scene.objects.link(myroll) + bpy.context.collection.objects.link(myroll) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -781,7 +782,7 @@ def create_roller_rail(objname, width, radio, px, py, pz, mat, mymaterial): myroll.location.z = pz # Materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(myroll, mymaterial) # Smooth @@ -811,7 +812,7 @@ def create_roller_sides(myroller, side, px, py, pz, mat, plastic): mymesh = bpy.data.meshes.new("Side." + side) myside = bpy.data.objects.new("Side." + side, mymesh) - bpy.context.scene.objects.link(myside) + bpy.context.collection.objects.link(myside) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # Position @@ -825,7 +826,7 @@ def create_roller_sides(myroller, side, px, py, pz, mat, plastic): myside.parent = myroller # Materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(myside, plastic) # Smooth @@ -1103,7 +1104,7 @@ def roller_side(): # myObject: Curve object # -------------------------------------------------------------------- def set_curve_cycle(myobject): - bpy.context.scene.objects.active = myobject + bpy.context.view_layer.objects.active = myobject # go edit mode bpy.ops.object.mode_set(mode='EDIT') # select all faces diff --git a/archimesh/achm_door_maker.py b/archimesh/achm_door_maker.py index f6238200..80a7a241 100644 --- a/archimesh/achm_door_maker.py +++ b/archimesh/achm_door_maker.py @@ -34,11 +34,11 @@ from .achm_tools import * # ------------------------------------------------------------------ # Define operator class to create object # ------------------------------------------------------------------ -class AchmDoor(Operator): +class ARCHIMESH_OT_Door(Operator): bl_idname = "mesh.archimesh_door" bl_label = "Door" bl_description = "Door" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # ----------------------------------------------------- @@ -48,7 +48,7 @@ class AchmDoor(Operator): def draw(self, context): layout = self.layout row = layout.row() - row.label("Use Properties panel (N) to define parms", icon='INFO') + row.label(text="Use Properties panel (N) to define parms", icon='INFO') # ----------------------------------------------------- # Execute @@ -77,7 +77,7 @@ def create_object(self, context): mainmesh = bpy.data.meshes.new("DoorFrane") mainobject = bpy.data.objects.new("DoorFrame", mainmesh) mainobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(mainobject) + bpy.context.collection.objects.link(mainobject) mainobject.DoorObjectGenerator.add() # we shape the main object and create other objects as children @@ -86,7 +86,7 @@ def create_object(self, context): # we select, and activate, main object mainobject.select_set(True) - bpy.context.scene.objects.active = mainobject + bpy.context.view_layer.objects.active = mainobject # ------------------------------------------------------------------------------ @@ -121,7 +121,7 @@ def update_object(self, context): # noinspection PyBroadException try: # clear child data - child.hide = False # must be visible to avoid bug + child.hide_viewport = False # must be visible to avoid bug child.hide_render = False # must be visible to avoid bug old = child.data child.select_set(True) @@ -151,7 +151,7 @@ def update_object(self, context): tmp_mesh.name = oldname # and select, and activate, the main object o.select_set(True) - bpy.context.scene.objects.active = o + bpy.context.view_layer.objects.active = o # ------------------------------------------------------------------------------ @@ -205,7 +205,7 @@ def shape_children(mainobject, update=False): mydoor = make_one_door(mp, mainobject, widthr + mp.frame_size, "1") mydoor.location.x = mp.frame_width / 2 - mp.frame_size - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Door_material", False, 0.8, 0.8, 0.8) set_material(mainobject, mat) @@ -234,9 +234,9 @@ def shape_children(mainobject, update=False): myctrl.location.y = -((mp.frame_thick * 3) / 2) myctrl.location.z = -gap myctrl.display_type = 'BOUNDS' - myctrl.hide = False + myctrl.hide_viewport = False myctrl.hide_render = True - if bpy.context.scene.render.engine == 'CYCLES': + if bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: myctrl.cycles_visibility.camera = False myctrl.cycles_visibility.diffuse = False myctrl.cycles_visibility.glossy = False @@ -257,9 +257,9 @@ def shape_children(mainobject, update=False): myctrlbase.location.y = -0.15 - (mp.frame_thick / 3) myctrlbase.location.z = -0.10 myctrlbase.display_type = 'BOUNDS' - myctrlbase.hide = False + myctrlbase.hide_viewport = False myctrlbase.hide_render = True - if bpy.context.scene.render.engine == 'CYCLES': + if bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: myctrlbase.cycles_visibility.camera = False myctrlbase.cycles_visibility.diffuse = False myctrlbase.cycles_visibility.glossy = False @@ -273,7 +273,7 @@ def shape_children(mainobject, update=False): # deactivate others for o in bpy.data.objects: - if o.select is True and o.name != mainobject.name: + if o.select_get() is True and o.name != mainobject.name: o.select_set(False) @@ -390,18 +390,18 @@ class ObjectProperties(PropertyGroup): # Register bpy.utils.register_class(ObjectProperties) -Object.DoorObjectGenerator = CollectionProperty(type=ObjectProperties) +Object.DoorObjectGenerator= CollectionProperty(type=ObjectProperties) # ------------------------------------------------------------------ # Define panel class to modify object # ------------------------------------------------------------------ -class AchmDoorObjectgeneratorpanel(Panel): +class ARCHIMESH_PT_DoorObjectgenerator(Panel): bl_idname = "OBJECT_PT_door_generator" bl_label = "Door" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' - bl_category = 'Archimesh' + bl_category = 'View' # ----------------------------------------------------- # Verify if visible @@ -459,7 +459,7 @@ class AchmDoorObjectgeneratorpanel(Panel): layout.prop(myobjdat, 'handle') box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(myobjdat, 'crt_mat') else: @@ -536,14 +536,14 @@ def make_one_door(self, myframe, width, openside): if self.handle != "0": handle1 = create_handle(self, mydoor, "Front", width, openside) handle1.select_set(True) - bpy.context.scene.objects.active = handle1 + bpy.context.view_layer.objects.active = handle1 set_smooth(handle1) set_modifier_subsurf(handle1) handle2 = create_handle(self, mydoor, "Back", width, openside) set_smooth(handle2) set_modifier_subsurf(handle2) # Create materials - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # Door material mat = create_diffuse_material("Door_material", False, 0.8, 0.8, 0.8) set_material(mydoor, mat) @@ -602,7 +602,7 @@ def create_door_data(self, myframe, width, openside): myobject = bpy.data.objects.new("Door", mymesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(verts, [], faces) mymesh.update(calc_edges=True) @@ -654,7 +654,7 @@ def create_handle(self, mydoor, pos, frame_width, openside): myobject = bpy.data.objects.new("Handle_" + pos, mymesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(verts, [], faces) mymesh.update(calc_edges=True) diff --git a/archimesh/achm_gltools.py b/archimesh/achm_gltools.py index b2811e50..c53d7a88 100644 --- a/archimesh/achm_gltools.py +++ b/archimesh/achm_gltools.py @@ -26,8 +26,6 @@ # noinspection PyUnresolvedReferences import bpy # noinspection PyUnresolvedReferences -import bgl -# noinspection PyUnresolvedReferences import blf from math import fabs, sqrt, sin, cos # noinspection PyUnresolvedReferences @@ -35,7 +33,12 @@ from mathutils import Vector # noinspection PyUnresolvedReferences from bpy_extras import view3d_utils from .achm_room_maker import get_wall_points +# GPU +import bgl +import gpu +from gpu_extras.batch import batch_for_shader +shader = gpu.shader.from_builtin('2D_UNIFORM_COLOR') # ------------------------------------------------------------- # Handle all draw routines (OpenGL main entry point) @@ -46,68 +49,58 @@ def draw_main(context): rv3d = context.space_data.region_3d scene = context.scene - rgb = scene.archimesh_text_color - rgbw = scene.archimesh_walltext_color + rgba = scene.archimesh_text_color + rgbaw = scene.archimesh_walltext_color fsize = scene.archimesh_font_size wfsize = scene.archimesh_wfont_size space = scene.archimesh_hint_space measure = scene.archimesh_gl_measure dspname = scene.archimesh_gl_name - # Get visible layers - layers = [] - for x in range(0, 20): - if context.scene.layers[x] is True: - layers.extend([x]) bgl.glEnable(bgl.GL_BLEND) # Display selected or all if scene.archimesh_gl_ghost is False: objlist = context.selected_objects else: - objlist = context.scene.objects + objlist = context.view_layer.objects # --------------------------------------- # Generate all OpenGL calls # --------------------------------------- for myobj in objlist: - if myobj.hide is False: - # verify visible layer - for x in range(0, 20): - if myobj.layers[x] is True: - if x in layers: - # ----------------------------------------------------- - # Rooms - # ----------------------------------------------------- - if 'RoomGenerator' in myobj: - op = myobj.RoomGenerator[0] - draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, measure, dspname) - - # ----------------------------------------------------- - # Doors - # ----------------------------------------------------- - if 'DoorObjectGenerator' in myobj: - op = myobj.DoorObjectGenerator[0] - draw_door_data(myobj, op, region, rv3d, rgb, fsize, space, measure) - - # ----------------------------------------------------- - # Window (Rail) - # ----------------------------------------------------- - if 'WindowObjectGenerator' in myobj: - op = myobj.WindowObjectGenerator[0] - draw_window_rail_data(myobj, op, region, rv3d, rgb, fsize, space, measure) - - # ----------------------------------------------------- - # Window (Panel) - # ----------------------------------------------------- - if 'WindowPanelGenerator' in myobj: - op = myobj.WindowPanelGenerator[0] - draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure) - break # avoid unnecessary loops + if myobj.visible_get() is True: + # ----------------------------------------------------- + # Rooms + # ----------------------------------------------------- + if 'RoomGenerator' in myobj: + op = myobj.RoomGenerator[0] + draw_room_data(myobj, op, region, rv3d, rgba, rgbaw, fsize, wfsize, space, measure, dspname) + + # ----------------------------------------------------- + # Doors + # ----------------------------------------------------- + if 'DoorObjectGenerator' in myobj: + op = myobj.DoorObjectGenerator[0] + draw_door_data(myobj, op, region, rv3d, rgba, fsize, space, measure) + + # ----------------------------------------------------- + # Window (Rail) + # ----------------------------------------------------- + if 'WindowObjectGenerator' in myobj: + op = myobj.WindowObjectGenerator[0] + draw_window_rail_data(myobj, op, region, rv3d, rgba, fsize, space, measure) + + # ----------------------------------------------------- + # Window (Panel) + # ----------------------------------------------------- + if 'WindowPanelGenerator' in myobj: + op = myobj.WindowPanelGenerator[0] + draw_window_panel_data(myobj, op, region, rv3d, rgba, fsize, space, measure) + # ----------------------- # restore opengl defaults # ----------------------- bgl.glLineWidth(1) bgl.glDisable(bgl.GL_BLEND) - bgl.glColor4f(0.0, 0.0, 0.0, 1.0) # ------------------------------------------------------------- @@ -115,7 +108,7 @@ def draw_main(context): # # right: Align to right # ------------------------------------------------------------- -def draw_text(x_pos, y_pos, display_text, rgb, fsize, right=False): +def draw_text(x_pos, y_pos, display_text, rgba, fsize, right=False): gap = 12 font_id = 0 blf.size(font_id, fsize, 72) @@ -126,7 +119,7 @@ def draw_text(x_pos, y_pos, display_text, rgb, fsize, right=False): else: newx = x_pos blf.position(font_id, newx, y_pos, 0) - bgl.glColor4f(rgb[0], rgb[1], rgb[2], rgb[3]) + blf.color(font_id, rgba[0], rgba[1], rgba[2], rgba[3]) blf.draw(font_id, display_text) return @@ -135,25 +128,26 @@ def draw_text(x_pos, y_pos, display_text, rgb, fsize, right=False): # Draw an OpenGL line # # ------------------------------------------------------------- -def draw_line(v1, v2): +def draw_line(v1, v2, rgba): + coords = [(v1[0], v1[1]), (v2[0], v2[1])] + batch = batch_for_shader(shader, 'LINES', {"pos": coords}) + # noinspection PyBroadException try: if v1 is not None and v2 is not None: - bgl.glBegin(bgl.GL_LINES) - bgl.glVertex2f(*v1) - bgl.glVertex2f(*v2) - bgl.glEnd() + shader.bind() + shader.uniform_float("color", rgba) + batch.draw(shader) except: pass - # ------------------------------------------------------------- # Draw room information # -# rgb: Color +# rgba: Color # fsize: Font size # ------------------------------------------------------------- -def draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, measure, dspname): +def draw_room_data(myobj, op, region, rv3d, rgba, rgbaw, fsize, wfsize, space, measure, dspname): verts, activefaces, activenormals = get_wall_points(myobj) @@ -201,8 +195,6 @@ def draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, mea # colour + line setup bgl.glEnable(bgl.GL_BLEND) bgl.glLineWidth(1) - bgl.glColor4f(rgb[0], rgb[1], rgb[2], rgb[3]) - # -------------------------------- # Measures # -------------------------------- @@ -215,18 +207,18 @@ def draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, mea txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) # Draw horizontal line - draw_line(screen_point_a, screen_point_b) + draw_line(screen_point_a, screen_point_b, rgba) # Draw vertical line 1 (upper vertical) - draw_line(screen_point_a1, screen_point_a2) + draw_line(screen_point_a1, screen_point_a2, rgba) # Draw vertical line 2 (upper vertical) - draw_line(screen_point_b1, screen_point_b2) + draw_line(screen_point_b1, screen_point_b2, rgba) # Draw vertical line 1 - draw_line(screen_point_a, screen_point_a1) + draw_line(screen_point_a, screen_point_a1, rgba) # Draw vertical line 2 - draw_line(screen_point_b, screen_point_b1) + draw_line(screen_point_b, screen_point_b1, rgba) # -------------------------------- # Wall Number @@ -247,7 +239,7 @@ def draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, mea if op.walls[i].curved is True: txt = "Curved: " - draw_text(txtpoint2d[0], txtpoint2d[1], txt + str(i + 1), rgbw, wfsize) + draw_text(txtpoint2d[0], txtpoint2d[1], txt + str(i + 1), rgbaw, wfsize) return @@ -255,10 +247,10 @@ def draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, mea # ------------------------------------------------------------- # Draw door information # -# rgb: Color +# rgba: Color # fsize: Font size # ------------------------------------------------------------- -def draw_door_data(myobj, op, region, rv3d, rgb, fsize, space, measure): +def draw_door_data(myobj, op, region, rv3d, rgba, fsize, space, measure): # Points a_p1 = get_point(op.glpoint_a, myobj) @@ -312,7 +304,6 @@ def draw_door_data(myobj, op, region, rv3d, rgb, fsize, space, measure): # colour + line setup bgl.glEnable(bgl.GL_BLEND) bgl.glLineWidth(1) - bgl.glColor4f(rgb[0], rgb[1], rgb[2], rgb[3]) # -------------------------------- # Measures @@ -323,43 +314,43 @@ def draw_door_data(myobj, op, region, rv3d, rgb, fsize, space, measure): txtpoint3d = interpolate3d(a_p1, t_p1, fabs(dist / 2)) gap3d = (a_p2[0], txtpoint3d[1], txtpoint3d[2]) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize, True) - draw_line(screen_point_ap2, screen_point_tp2) - draw_line(screen_point_ap3, screen_point_ap1) - draw_line(screen_point_tp3, screen_point_tp1) + draw_line(screen_point_ap2, screen_point_tp2, rgba) + draw_line(screen_point_ap3, screen_point_ap1, rgba) + draw_line(screen_point_tp3, screen_point_tp1, rgba) # Horizontal dist = distance(b_p1, c_p1) txtpoint3d = interpolate3d(b_p1, c_p1, fabs(dist / 2)) gap3d = (txtpoint3d[0], txtpoint3d[1], b_p2[2] + 0.02) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_bp2, screen_point_cp2) - draw_line(screen_point_bp3, screen_point_bp1) - draw_line(screen_point_cp3, screen_point_cp1) + draw_line(screen_point_bp2, screen_point_cp2, rgba) + draw_line(screen_point_bp3, screen_point_bp1, rgba) + draw_line(screen_point_cp3, screen_point_cp1, rgba) # Door size dist = distance(d_p1, e_p1) txtpoint3d = interpolate3d(d_p1, e_p1, fabs(dist / 2)) gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.02) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_dp1, screen_point_ep1) - draw_line(screen_point_dp2, screen_point_dp3) - draw_line(screen_point_ep2, screen_point_ep3) + draw_line(screen_point_dp1, screen_point_ep1, rgba) + draw_line(screen_point_dp2, screen_point_dp3, rgba) + draw_line(screen_point_ep2, screen_point_ep3, rgba) return # ------------------------------------------------------------- # Draw window rail information # -# rgb: Color +# rgba: Color # fsize: Font size # ------------------------------------------------------------- -def draw_window_rail_data(myobj, op, region, rv3d, rgb, fsize, space, measure): +def draw_window_rail_data(myobj, op, region, rv3d, rgba, fsize, space, measure): # Points a_p1 = get_point(op.glpoint_a, myobj) @@ -397,7 +388,6 @@ def draw_window_rail_data(myobj, op, region, rv3d, rgb, fsize, space, measure): # colour + line setup bgl.glEnable(bgl.GL_BLEND) bgl.glLineWidth(1) - bgl.glColor4f(rgb[0], rgb[1], rgb[2], rgb[3]) # -------------------------------- # Measures @@ -408,22 +398,22 @@ def draw_window_rail_data(myobj, op, region, rv3d, rgb, fsize, space, measure): txtpoint3d = interpolate3d(a_p1, t_p1, fabs(dist / 2)) gap3d = (a_p2[0], txtpoint3d[1], txtpoint3d[2]) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize, True) - draw_line(screen_point_ap2, screen_point_tp2) - draw_line(screen_point_ap3, screen_point_ap1) - draw_line(screen_point_tp3, screen_point_tp1) + draw_line(screen_point_ap2, screen_point_tp2, rgba) + draw_line(screen_point_ap3, screen_point_ap1, rgba) + draw_line(screen_point_tp3, screen_point_tp1, rgba) # Horizontal dist = distance(b_p1, c_p1) txtpoint3d = interpolate3d(b_p1, c_p1, fabs(dist / 2)) gap3d = (txtpoint3d[0], txtpoint3d[1], b_p2[2] + 0.02) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_bp2, screen_point_cp2) - draw_line(screen_point_bp3, screen_point_bp1) - draw_line(screen_point_cp3, screen_point_cp1) + draw_line(screen_point_bp2, screen_point_cp2, rgba) + draw_line(screen_point_bp3, screen_point_bp1, rgba) + draw_line(screen_point_cp3, screen_point_cp1, rgba) return @@ -431,10 +421,10 @@ def draw_window_rail_data(myobj, op, region, rv3d, rgb, fsize, space, measure): # ------------------------------------------------------------- # Draw window panel information # -# rgb: Color +# rgba: Color # fsize: Font size # ------------------------------------------------------------- -def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure): +def draw_window_panel_data(myobj, op, region, rv3d, rgba, fsize, space, measure): # Points a_p1 = get_point(op.glpoint_a, myobj) @@ -504,7 +494,6 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure): # colour + line setup bgl.glEnable(bgl.GL_BLEND) bgl.glLineWidth(1) - bgl.glColor4f(rgb[0], rgb[1], rgb[2], rgb[3]) # -------------------------------- # Measures @@ -515,22 +504,22 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure): txtpoint3d = interpolate3d(a_p1, t_p1, fabs(dist / 2)) gap3d = (a_p2[0], txtpoint3d[1], txtpoint3d[2]) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize, True) - draw_line(screen_point_ap2, screen_point_tp2) - draw_line(screen_point_ap3, screen_point_ap1) - draw_line(screen_point_tp3, screen_point_tp1) + draw_line(screen_point_ap2, screen_point_tp2, rgba) + draw_line(screen_point_ap3, screen_point_ap1, rgba) + draw_line(screen_point_tp3, screen_point_tp1, rgba) # Vertical (Left) dist = distance(f_p1, d_p1) txtpoint3d = interpolate3d(f_p1, d_p1, fabs(dist / 2)) gap3d = (f_p2[0], txtpoint3d[1], txtpoint3d[2]) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_fp2, screen_point_dp2) - draw_line(screen_point_fp1, screen_point_fp3) - draw_line(screen_point_dp1, screen_point_dp3) + draw_line(screen_point_fp2, screen_point_dp2, rgba) + draw_line(screen_point_fp1, screen_point_fp3, rgba) + draw_line(screen_point_dp1, screen_point_dp3, rgba) # Horizontal (not triangle nor arch) if op.UST != "4" and op.UST != "2": @@ -538,29 +527,29 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure): txtpoint3d = interpolate3d(b_p2, c_p2, fabs(dist / 2)) gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.05) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_bp2, screen_point_cp2) - draw_line(screen_point_bp3, screen_point_bp1) - draw_line(screen_point_cp3, screen_point_cp1) + draw_line(screen_point_bp2, screen_point_cp2, rgba) + draw_line(screen_point_bp3, screen_point_bp1, rgba) + draw_line(screen_point_cp3, screen_point_cp1, rgba) else: dist = distance(b_p1, g_p3) txtpoint3d = interpolate3d(b_p2, g_p4, fabs(dist / 2)) gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.05) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize, True) dist = distance(g_p3, c_p1) txtpoint3d = interpolate3d(g_p4, c_p2, fabs(dist / 2)) gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.05) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_bp2, screen_point_gp4) - draw_line(screen_point_gp4, screen_point_cp2) - draw_line(screen_point_bp3, screen_point_bp1) - draw_line(screen_point_cp3, screen_point_cp1) - draw_line(screen_point_gp3, screen_point_gp5) + draw_line(screen_point_bp2, screen_point_gp4, rgba) + draw_line(screen_point_gp4, screen_point_cp2, rgba) + draw_line(screen_point_bp3, screen_point_bp1, rgba) + draw_line(screen_point_cp3, screen_point_cp1, rgba) + draw_line(screen_point_gp3, screen_point_gp5, rgba) # Only for Triangle or arch if op.UST == "2" or op.UST == "4": @@ -568,9 +557,9 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure): txtpoint3d = interpolate3d(g_p2, g_p3, fabs(dist / 2)) gap3d = (txtpoint3d[0] + 0.05, txtpoint3d[1], txtpoint3d[2]) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_gp2, screen_point_gp3) + draw_line(screen_point_gp2, screen_point_gp3, rgba) # Only for Triangle and Inclines or arch if op.UST == "3" or op.UST == "4" or op.UST == "2": @@ -584,11 +573,11 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure): txtpoint3d = interpolate3d(h_p1, h_p3, fabs(dist / 2)) gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] - space - 0.05) txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d) - draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize) + draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgba, fsize) - draw_line(screen_point_ap1, screen_point_hp2) - draw_line(screen_point_hp3, screen_point_hp5) - draw_line(screen_point_hp1, screen_point_hp4) + draw_line(screen_point_ap1, screen_point_hp2, rgba) + draw_line(screen_point_hp3, screen_point_hp5, rgba) + draw_line(screen_point_hp1, screen_point_hp4, rgba) return @@ -636,7 +625,7 @@ def get_point(v1, mainobject): # Using World Matrix vt = Vector((v1[0], v1[1], v1[2], 1)) m4 = mainobject.matrix_world - vt2 = m4 * vt + vt2 = m4 @ vt v2 = [vt2[0], vt2[1], vt2[2]] return v2 diff --git a/archimesh/achm_kitchen_maker.py b/archimesh/achm_kitchen_maker.py index 3ba7c5f6..14860f73 100644 --- a/archimesh/achm_kitchen_maker.py +++ b/archimesh/achm_kitchen_maker.py @@ -46,10 +46,10 @@ RotationType_R180 = 3 # ---------------------------------------------------------- # Export menu UI # ---------------------------------------------------------- -class AchmExportInventory(Operator, ExportHelper): +class ARCHIMESH_OT_ExportInventory(Operator, ExportHelper): bl_idname = "io_export.kitchen_inventory" bl_description = 'Export kitchen inventory (.txt)' - bl_category = 'Archimesh' + bl_category = 'View' bl_label = "Export" # From ExportHelper. Filter filenames. @@ -357,11 +357,11 @@ bpy.utils.register_class(CabinetProperties) # Define UI class # Kitchens # ------------------------------------------------------------------ -class AchmKitchen(Operator): +class ARCHIMESH_OT_Kitchen(Operator): bl_idname = "mesh.archimesh_kitchen" bl_label = "Cabinets" bl_description = "Cabinet Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # Define properties @@ -371,7 +371,12 @@ class AchmKitchen(Operator): name="Type", description="Type of cabinets", ) - oldtype = type_cabinet + oldtype: EnumProperty( + items=(('1', "Floor", ""), + ('2', "Wall", "")), + name="Type", + description="Type of cabinets", + ) thickness: FloatProperty( name='Thickness', min=0.001, max=5, default=0.018, precision=3, @@ -522,7 +527,7 @@ class AchmKitchen(Operator): add_cabinet(self, box, idx + 1, self.cabinets[idx]) box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') else: @@ -607,7 +612,7 @@ def add_cabinet(self, box, num, cabinet): def create_kitchen_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) # Create cabinets @@ -833,7 +838,7 @@ def generate_cabinets(self): set_normals(base) # Create materials - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Cabinet_material", False, 0.8, 0.8, 0.8) for box in boxes: set_material(box, mat) @@ -908,7 +913,7 @@ def create_box(type_cabinet, objname, thickness, sx, sy, sz, px, py, pz, doortyp myobject.location[0] = px myobject.location[1] = py myobject.location[2] = pz - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1050,13 +1055,13 @@ def create_baseboard(objname, sx, sy, sz, mat, bl, br, depth, doortype, gap): mybaseboard.location[0] = 0 mybaseboard.location[1] = 0 mybaseboard.location[2] = 0 - bpy.context.scene.objects.link(mybaseboard) + bpy.context.collection.objects.link(mybaseboard) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # Material - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Baseboard_material", False, 0.8, 0.8, 0.8) set_material(mybaseboard, mat) @@ -1118,13 +1123,13 @@ def create_countertop(objname, sx, sy, sz, over, mat, doortype, depth, edge): mycountertop.location[0] = 0 mycountertop.location[1] = 0 mycountertop.location[2] = 0 - bpy.context.scene.objects.link(mycountertop) + bpy.context.collection.objects.link(mycountertop) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # Material - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("countertop_material", False, 0, 0, 0, 0.2, 0.2, 0.2, 0.15) set_material(mycountertop, mat) @@ -1196,7 +1201,7 @@ def create_door(type_cabinet, objname, thickness, sx, sz, doortype, gf, mat, han mydoor.location[1] = 0 mydoor.location[2] = 0 - bpy.context.scene.objects.link(mydoor) + bpy.context.collection.objects.link(mydoor) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1238,7 +1243,7 @@ def create_door(type_cabinet, objname, thickness, sx, sz, doortype, gf, mat, han create_handle(handle_model, mydoor, thickness, hpos, mat, handle_x, handle_z) - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # Door material mat = create_diffuse_material("Door_material", False, 0.8, 0.8, 0.8, 0.279, 0.337, 0.6, 0.2) set_material(mydoor, mat) @@ -1306,7 +1311,7 @@ def create_drawer(objname, thickness, sx, sy, sz, mat, handle, handle_model, han mydrawer.location[0] = 0 mydrawer.location[1] = 0 mydrawer.location[2] = 0 - bpy.context.scene.objects.link(mydrawer) + bpy.context.collection.objects.link(mydrawer) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1324,7 +1329,7 @@ def create_drawer(objname, thickness, sx, sy, sz, mat, handle, handle_model, han create_handle(model, mydrawer, thickness, "TM", mat, 0, handle_z) # always in the top area/middle # Material - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Drawer_material", False, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.2) set_material(mydrawer, mat) @@ -1379,7 +1384,7 @@ def create_handle(model, mydoor, thickness, handle_position, mat, handle_x, hand mymesh = bpy.data.meshes.new("Handle") myhandle = bpy.data.objects.new("Handle", mymesh) - bpy.context.scene.objects.link(myhandle) + bpy.context.collection.objects.link(myhandle) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1447,7 +1452,7 @@ def create_handle(model, mydoor, thickness, handle_position, mat, handle_x, hand # parent myhandle.parent = mydoor # Materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_glossy_material("Handle_material", False, 0.733, 0.779, 0.8, 0.733, 0.779, 0.8, 0.02) set_material(myhandle, mat) diff --git a/archimesh/achm_lamp_maker.py b/archimesh/achm_lamp_maker.py index fd4617ab..ea661d5f 100644 --- a/archimesh/achm_lamp_maker.py +++ b/archimesh/achm_lamp_maker.py @@ -129,11 +129,11 @@ def set_preset(self): # Define UI class # Lamps # ------------------------------------------------------------------ -class AchmLamp(Operator): +class ARCHIMESH_PT_Lamp(Operator): bl_idname = "mesh.archimesh_light" bl_label = "Lamp" bl_description = "Lamp Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # preset preset: EnumProperty( @@ -147,7 +147,17 @@ class AchmLamp(Operator): name="Predefined", description="Apply predefined design", ) - oldpreset = preset + oldpreset: EnumProperty( + items=( + ('0', "None", ""), + ('1', "Sphere", ""), + ('2', "Pear", ""), + ('3', "Vase", ""), + ('4', "Rectangular", ""), + ), + name="Predefined", + description="Apply predefined design", + ) base_height: FloatProperty( name='Height', @@ -354,7 +364,7 @@ class AchmLamp(Operator): row.prop(self, 'tr03') box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') if self.crt_mat: @@ -389,7 +399,7 @@ class AchmLamp(Operator): def create_light_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) generate_light(self) @@ -481,22 +491,22 @@ def generate_light(self): # Light bulb # --------------------- radbulb = 0.02 - bpy.ops.mesh.primitive_uv_sphere_add(segments=16, size=radbulb) + bpy.ops.mesh.primitive_uv_sphere_add(segments=16, radius=radbulb) mybulb = bpy.data.objects[bpy.context.active_object.name] mybulb.name = "Lamp_Bulb" mybulb.parent = myholder mybulb.location = (0, 0, radbulb + self.holder + 0.04) - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_emission_material(mybulb.name, True, 0.8, 0.8, 0.8, self.energy) set_material(mybulb, mat) # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) mybase.select_set(True) - bpy.context.scene.objects.active = mybase + bpy.context.view_layer.objects.active = mybase return @@ -534,7 +544,7 @@ def create_light_base(objname, height, px, py, pz, segments, rings, radios, rati mymesh = bpy.data.meshes.new(objname) mycylinder = bpy.data.objects.new(objname, mymesh) - bpy.context.scene.objects.link(mycylinder) + bpy.context.collection.objects.link(mycylinder) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -543,7 +553,7 @@ def create_light_base(objname, height, px, py, pz, segments, rings, radios, rati mycylinder.location.y = py mycylinder.location.z = pz # Materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: rgb = objcol mymat = create_diffuse_material(mycylinder.name + "_material", True, rgb[0], rgb[1], rgb[2], rgb[0], rgb[1], rgb[2], 0.1) @@ -571,7 +581,7 @@ def create_lightholder(objname, height, px, py, pz, mat): mymesh = bpy.data.meshes.new(objname) mycylinder = bpy.data.objects.new(objname, mymesh) - bpy.context.scene.objects.link(mycylinder) + bpy.context.collection.objects.link(mycylinder) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -581,7 +591,7 @@ def create_lightholder(objname, height, px, py, pz, mat): mycylinder.location.z = pz # Materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material(mycylinder.name + "_material", True, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.1) set_material(mycylinder, mat) @@ -609,7 +619,7 @@ def create_lightholder_strings(objname, height, px, py, pz, radio, shadeh, mat): mymesh = bpy.data.meshes.new(objname) mycylinder = bpy.data.objects.new(objname, mymesh) - bpy.context.scene.objects.link(mycylinder) + bpy.context.collection.objects.link(mycylinder) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -627,7 +637,7 @@ def create_lightholder_strings(objname, height, px, py, pz, radio, shadeh, mat): box2.location = (-0.021, 0, height + 0.004) # Materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material(mycylinder.name + "_material", True, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.1) set_material(mycylinder, mat) set_material(box1, mat) @@ -664,7 +674,7 @@ def create_lightshade(objname, height, px, py, pz, segments, radio1, radio2, ple mymesh = bpy.data.meshes.new(objname) mycylinder = bpy.data.objects.new(objname, mymesh) - bpy.context.scene.objects.link(mycylinder) + bpy.context.collection.objects.link(mycylinder) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -673,7 +683,7 @@ def create_lightshade(objname, height, px, py, pz, segments, radio1, radio2, ple mycylinder.location.y = py mycylinder.location.z = pz # materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mymat = create_translucent_material(mycylinder.name + "_material", True, 0.8, 0.65, 0.45, 0.8, 0.65, 0.45, opacity) set_material(mycylinder, mymat) @@ -699,7 +709,7 @@ def create_box_segments(objname, height, shift): mymesh = bpy.data.meshes.new(objname) mysegment = bpy.data.objects.new(objname, mymesh) - bpy.context.scene.objects.link(mysegment) + bpy.context.collection.objects.link(mysegment) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) diff --git a/archimesh/achm_main_panel.py b/archimesh/achm_main_panel.py index 58de8c74..47287a58 100644 --- a/archimesh/achm_main_panel.py +++ b/archimesh/achm_main_panel.py @@ -49,11 +49,11 @@ def isboolean(myobject, childobject): # ------------------------------------------------------ # Button: Action to link windows and doors # ------------------------------------------------------ -class AchmHoleAction(Operator): +class ARCHIMESH_OT_Hole(Operator): bl_idname = "object.archimesh_cut_holes" bl_label = "Auto Holes" bl_description = "Enable windows and doors holes for any selected object (needs wall thickness)" - bl_category = 'Archimesh' + bl_category = 'View' # ------------------------------ # Execute @@ -70,7 +70,7 @@ class AchmHoleAction(Operator): # noinspection PyBroadException try: if obj["archimesh.hole_enable"]: - if obj.select is True or scene.archimesh_select_only is False: + if obj.select_get() is True or scene.archimesh_select_only is False: listobj.extend([obj]) except: continue @@ -149,7 +149,7 @@ class AchmHoleAction(Operator): # noinspection PyBroadException try: if obj["archimesh.ctrl_base"]: - if obj.select is True or scene.archimesh_select_only is False: + if obj.select_get() is True or scene.archimesh_select_only is False: # add boolean modifier if isboolean(mybaseboard, obj) is False: set_modifier_boolean(mybaseboard, obj) @@ -170,7 +170,7 @@ class AchmHoleAction(Operator): # noinspection PyBroadException try: if obj["archimesh.ctrl_hole"]: - if obj.select is True or scene.archimesh_select_only is False: + if obj.select_get() is True or scene.archimesh_select_only is False: # add boolean modifier if isboolean(myshell, obj) is False: set_modifier_boolean(myshell, obj) @@ -183,11 +183,11 @@ class AchmHoleAction(Operator): # ------------------------------------------------------ # Button: Action to create room from grease pencil # ------------------------------------------------------ -class AchmPencilAction(Operator): +class ARCHIMESH_OT_Pencil(Operator): bl_idname = "object.archimesh_pencil_room" bl_label = "Room from Draw" bl_description = "Create a room base on grease pencil strokes (draw from top view (7 key))" - bl_category = 'Archimesh' + bl_category = 'View' # ------------------------------ # Execute @@ -387,12 +387,12 @@ class AchmPencilAction(Operator): # ------------------------------------------------------------------ # Define panel class for main functions. # ------------------------------------------------------------------ -class ArchimeshMainPanel(Panel): +class ARCHIMESH_PT_Main(Panel): bl_idname = "ARCHIMESH_PT_main" bl_label = "Archimesh" bl_space_type = "VIEW_3D" - bl_region_type = "TOOLS" - bl_category = "Create" + bl_region_type = "UI" + bl_category = "View" bl_context = "objectmode" # ------------------------------ @@ -486,7 +486,7 @@ class ArchimeshMainPanel(Panel): txt = 'Hide' row.operator("archimesh.runopenglbutton", text=txt, icon=icon) row = box.row() - row.prop(scene, "archimesh_gl_measure", toggle=True, icon="ALIGN") + row.prop(scene, "archimesh_gl_measure", toggle=True, icon="ALIGN_CENTER") row.prop(scene, "archimesh_gl_name", toggle=True, icon="OUTLINER_OB_FONT") row.prop(scene, "archimesh_gl_ghost", icon='GHOST_ENABLED') row = box.row() @@ -514,11 +514,11 @@ class ArchimeshMainPanel(Panel): # Defines button for enable/disable the tip display # # ------------------------------------------------------------- -class AchmRunHintDisplayButton(Operator): +class ARCHIMESH_OT_HintDisplay(Operator): bl_idname = "archimesh.runopenglbutton" bl_label = "Display hint data manager" bl_description = "Display additional information in the viewport" - bl_category = 'Archimesh' + bl_category = 'View' _handle = None # keep function handler @@ -527,8 +527,8 @@ class AchmRunHintDisplayButton(Operator): # ---------------------------------- @staticmethod def handle_add(self, context): - if AchmRunHintDisplayButton._handle is None: - AchmRunHintDisplayButton._handle = SpaceView3D.draw_handler_add(draw_callback_px, (self, context), + if ARCHIMESH_OT_HintDisplay._handle is None: + ARCHIMESH_OT_HintDisplay._handle = SpaceView3D.draw_handler_add(draw_callback_px, (self, context), 'WINDOW', 'POST_PIXEL') context.window_manager.archimesh_run_opengl = True @@ -539,9 +539,9 @@ class AchmRunHintDisplayButton(Operator): # noinspection PyUnusedLocal @staticmethod def handle_remove(self, context): - if AchmRunHintDisplayButton._handle is not None: - SpaceView3D.draw_handler_remove(AchmRunHintDisplayButton._handle, 'WINDOW') - AchmRunHintDisplayButton._handle = None + if ARCHIMESH_OT_HintDisplay._handle is not None: + SpaceView3D.draw_handler_remove(ARCHIMESH_OT_HintDisplay._handle, 'WINDOW') + ARCHIMESH_OT_HintDisplay._handle = None context.window_manager.archimesh_run_opengl = False # ------------------------------ diff --git a/archimesh/achm_roof_maker.py b/archimesh/achm_roof_maker.py index 6cce3c30..7de38df7 100644 --- a/archimesh/achm_roof_maker.py +++ b/archimesh/achm_roof_maker.py @@ -35,11 +35,11 @@ from .achm_tools import * # Define UI class # Rooms # ------------------------------------------------------------------ -class AchmRoof(Operator): +class ARCHIMESH_OT_Roof(Operator): bl_idname = "mesh.archimesh_roof" bl_label = "Roof" bl_description = "Roof Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # Define properties @@ -124,14 +124,14 @@ class AchmRoof(Operator): y = tilesize_y * self.roof_scale * self.roof_height buf = 'Size: {0:.2f} * {1:.2f} aprox.'.format(x, y) - box.label(buf) + box.label(text=buf) box = layout.box() box.prop(self, 'roof_thick') box.prop(self, 'roof_angle') box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') else: @@ -158,7 +158,7 @@ class AchmRoof(Operator): def create_roof_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) @@ -166,10 +166,10 @@ def create_roof_mesh(self): myroof = mydata[0] # active object and deactivate others - if bpy.context.scene.objects.active is not None: - bpy.context.scene.objects.active.select_set(False) + if bpy.context.view_layer.objects.active is not None: + bpy.context.view_layer.objects.active.select_set(False) - bpy.context.scene.objects.active = myroof + bpy.context.view_layer.objects.active = myroof myroof.select_set(True) # Thicknes @@ -205,14 +205,14 @@ def create_roof_mesh(self): myroof.rotation_euler = (radians(self.roof_angle), 0.0, 0.0) # Create materials - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # material mat = create_diffuse_material("Roof_material", False, 0.482, 0.061, 0.003, 0.581, 0.105, 0.068, 0.01) set_material(myroof, mat) bpy.ops.object.select_all(False) myroof.select_set(True) - bpy.context.scene.objects.active = myroof + bpy.context.view_layer.objects.active = myroof return @@ -243,7 +243,7 @@ def create_roof(self): myobject = bpy.data.objects.new("Roof", mymesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(verts, [], faces) mymesh.update(calc_edges=True) diff --git a/archimesh/achm_room_maker.py b/archimesh/achm_room_maker.py index 7061b26a..2cdd1510 100644 --- a/archimesh/achm_room_maker.py +++ b/archimesh/achm_room_maker.py @@ -40,10 +40,10 @@ from .achm_tools import * # ---------------------------------------------------------- # Export menu UI # ---------------------------------------------------------- -class AchmExportRoom(Operator, ExportHelper): +class ARCHIMESH_OT_ExportRoom(Operator, ExportHelper): bl_idname = "io_export.roomdata" bl_description = 'Export Room data (.dat)' - bl_category = 'Archimesh' + bl_category = 'View' bl_label = "Export" # From ExportHelper. Filter filenames. @@ -152,10 +152,10 @@ class AchmExportRoom(Operator, ExportHelper): # ---------------------------------------------------------- # Import menu UI # ---------------------------------------------------------- -class AchmImportRoom(Operator, ImportHelper): +class ARCHIMESH_OT_ImportRoom(Operator, ImportHelper): bl_idname = "io_import.roomdata" bl_description = 'Import Room data (.dat)' - bl_category = 'Archimesh' + bl_category = 'View' bl_label = "Import" # From Helper. Filter filenames. @@ -312,11 +312,11 @@ class AchmImportRoom(Operator, ImportHelper): # ------------------------------------------------------------------ # Define operator class to create rooms # ------------------------------------------------------------------ -class AchmRoom(Operator): +class ARCHIMESH_OT_Room(Operator): bl_idname = "mesh.archimesh_room" bl_label = "Room" bl_description = "Generate room with walls, baseboard, floor and ceiling" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # ----------------------------------------------------- @@ -326,7 +326,7 @@ class AchmRoom(Operator): def draw(self, context): layout = self.layout row = layout.row() - row.label("Use Properties panel (N) to define parms", icon='INFO') + row.label(text="Use Properties panel (N) to define parms", icon='INFO') row = layout.row(align=False) row.operator("io_import.roomdata", text="Import", icon='COPYDOWN') @@ -355,7 +355,7 @@ def create_room(self, context): roommesh = bpy.data.meshes.new("Room") roomobject = bpy.data.objects.new("Room", roommesh) roomobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(roomobject) + bpy.context.collection.objects.link(roomobject) roomobject.RoomGenerator.add() roomobject.RoomGenerator[0].walls.add() @@ -363,8 +363,8 @@ def create_room(self, context): shape_walls_and_create_children(roomobject, roommesh) # we select, and activate, main object for the room. + bpy.context.view_layer.objects.active = roomobject roomobject.select_set(True) - bpy.context.scene.objects.active = roomobject # ----------------------------------------------------- @@ -431,7 +431,7 @@ def update_room(self, context): tmp_mesh.name = oldname # and select, and activate, the main object of the room. o.select_set(True) - bpy.context.scene.objects.active = o + bpy.context.view_layer.objects.active = o # ----------------------------------------------------- @@ -495,7 +495,7 @@ def shape_walls_and_create_children(myroom, tmp_mesh, update=False): baseboardmesh = bpy.data.meshes.new("Baseboard") mybase = bpy.data.objects.new("Baseboard", baseboardmesh) mybase.location = (0, 0, 0) - bpy.context.scene.objects.link(mybase) + bpy.context.collection.objects.link(mybase) mybase.parent = myroom mybase.select_set(True) mybase["archimesh.room_object"] = True @@ -544,7 +544,7 @@ def shape_walls_and_create_children(myroom, tmp_mesh, update=False): movetotopsolidify(mybase) # Create materials - if rp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if rp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # Wall material (two faces) mat = create_diffuse_material("Wall_material", False, 0.765, 0.650, 0.588, 0.8, 0.621, 0.570, 0.1, True) set_material(myroom, mat) @@ -571,7 +571,7 @@ def shape_walls_and_create_children(myroom, tmp_mesh, update=False): # deactivate others for o in bpy.data.objects: - if o.select is True and o.name != myroom.name: + if o.select_get() is True and o.name != myroom.name: o.select_set(False) @@ -791,7 +791,7 @@ def make_curved_wall(myvertex, myfaces, size, wall_angle, lastx, lasty, height, # ------------------------------------------------------------------------------ def create_floor(rp, typ, myroom): - bpy.context.scene.objects.active = myroom + bpy.context.view_layer.objects.active = myroom myvertex = [] myfaces = [] @@ -823,7 +823,7 @@ def create_floor(rp, typ, myroom): myobject = bpy.data.objects.new(typ, mymesh) myobject.location = (0, 0, 0) - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1144,7 +1144,7 @@ def add_shell(selobject, objname, rp): myobject = bpy.data.objects.new(objname, mesh) myobject.location = selobject.location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -1615,12 +1615,12 @@ def add_wall(idx, box, wall): # ------------------------------------------------------------------ # Define panel class to modify rooms. # ------------------------------------------------------------------ -class AchmRoomGeneratorPanel(Panel): +class ARCHIMESH_PT_RoomGenerator(Panel): bl_idname = "OBJECT_PT_room_generator" bl_label = "Room" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' - bl_category = 'Archimesh' + bl_category = 'View' # ----------------------------------------------------- # Verify if visible @@ -1692,6 +1692,6 @@ class AchmRoomGeneratorPanel(Panel): row.prop(room, 'shell_bfactor', slider=True) box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(room, 'crt_mat') diff --git a/archimesh/achm_shelves_maker.py b/archimesh/achm_shelves_maker.py index e6e01ddb..53595da2 100644 --- a/archimesh/achm_shelves_maker.py +++ b/archimesh/achm_shelves_maker.py @@ -70,11 +70,11 @@ bpy.utils.register_class(ShelvesProperties) # Define UI class # Shelves # ------------------------------------------------------------------ -class AchmShelves(Operator): +class ARCHIMESH_OT_Shelves(Operator): bl_idname = "mesh.archimesh_shelves" bl_label = "Shelves" bl_description = "Shelves Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} thickness: FloatProperty( @@ -174,7 +174,7 @@ class AchmShelves(Operator): add_shelves(self, box, idx + 1, self.shelves[idx]) box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') else: @@ -262,7 +262,7 @@ def add_shelves(self, box, num, sh): def create_shelves_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) # Create units @@ -311,14 +311,14 @@ def generate_shelves(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) boxes[0].select_set(True) - bpy.context.scene.objects.active = boxes[0] + bpy.context.view_layer.objects.active = boxes[0] # Create materials - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Shelves_material", False, 0.8, 0.8, 0.8) for box in boxes: set_material(box, mat) @@ -462,7 +462,7 @@ def create_unit(stype, objname, thickness, sthickness, sx, sy, sz, px, py, pz, l myobject.location[0] = px myobject.location[1] = py myobject.location[2] = pz - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) diff --git a/archimesh/achm_stairs_maker.py b/archimesh/achm_stairs_maker.py index 963f3ebd..9459d5d9 100644 --- a/archimesh/achm_stairs_maker.py +++ b/archimesh/achm_stairs_maker.py @@ -35,11 +35,11 @@ from .achm_tools import * # Define UI class # Stairs # ------------------------------------------------------------------ -class AchmStairs(Operator): +class ARCHIMESH_OT_Stairs(Operator): bl_idname = "mesh.archimesh_stairs" bl_label = "Stairs" bl_description = "Stairs Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # Define properties @@ -178,7 +178,7 @@ class AchmStairs(Operator): row.prop(self, 'side_gap') box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') else: @@ -206,7 +206,7 @@ def create_stairs_mesh(self): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(False) @@ -217,7 +217,7 @@ def create_stairs_mesh(self): mydata = create_stairs(self, "Stairs") mystairs = mydata[0] mystairs.select_set(True) - bpy.context.scene.objects.active = mystairs + bpy.context.view_layer.objects.active = mystairs remove_doubles(mystairs) set_normals(mystairs) set_modifier_mirror(mystairs, "X") @@ -240,14 +240,14 @@ def create_stairs_mesh(self): # ------------------------ # Create materials # ------------------------ - if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # Stairs material mat = create_diffuse_material("Stairs_material", False, 0.8, 0.8, 0.8) set_material(mystairs, mat) bpy.ops.object.select_all(False) mystairs.select_set(True) - bpy.context.scene.objects.active = mystairs + bpy.context.view_layer.objects.active = mystairs return @@ -274,7 +274,7 @@ def create_stairs(self, objname): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -422,7 +422,7 @@ def create_bezier(objname, points, origin): myobject.location = origin myobject.rotation_euler[2] = radians(90) - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) polyline = curvedata.splines.new('BEZIER') polyline.bezier_points.add(len(points) - 1) diff --git a/archimesh/achm_tools.py b/archimesh/achm_tools.py index bb75d447..8d44fe0c 100644 --- a/archimesh/achm_tools.py +++ b/archimesh/achm_tools.py @@ -44,7 +44,7 @@ def get_blendunits(units): # False= faces to outside # -------------------------------------------------------------------- def set_normals(myobject, direction=False): - bpy.context.scene.objects.active = myobject + bpy.context.view_layer.objects.active = myobject # go edit mode bpy.ops.object.mode_set(mode='EDIT') # select all faces @@ -59,7 +59,7 @@ def set_normals(myobject, direction=False): # Remove doubles # -------------------------------------------------------------------- def remove_doubles(myobject): - bpy.context.scene.objects.active = myobject + bpy.context.view_layer.objects.active = myobject # go edit mode bpy.ops.object.mode_set(mode='EDIT') # select all faces @@ -76,12 +76,12 @@ def remove_doubles(myobject): def set_smooth(myobject): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) myobject.select_set(True) - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.shade_smooth() @@ -89,8 +89,8 @@ def set_smooth(myobject): # Add modifier (subdivision) # -------------------------------------------------------------------- def set_modifier_subsurf(myobject): - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.modifier_add(type='SUBSURF') for mod in myobject.modifiers: if mod.type == 'SUBSURF': @@ -103,25 +103,25 @@ def set_modifier_subsurf(myobject): def set_modifier_mirror(myobject, axis="Y"): bpy.ops.object.select_all(False) myobject.select_set(True) - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.modifier_add(type='MIRROR') for mod in myobject.modifiers: if mod.type == 'MIRROR': if axis == "X": - mod.use_x = True + mod.use_axis[0] = True else: - mod.use_x = False + mod.use__axis[0] = False if axis == "Y": - mod.use_y = True + mod.use_axis[1] = True else: - mod.use_y = False + mod.use_axis[1] = False if axis == "Z": - mod.use_z = True + mod.use_axis[2] = True else: - mod.use_z = False + mod.use_axis[2] = False mod.use_clip = True @@ -132,8 +132,8 @@ def set_modifier_mirror(myobject, axis="Y"): def set_modifier_array(myobject, axis, move, repeat, fix=False, fixmove=0, zmove=0): bpy.ops.object.select_all(False) myobject.select_set(True) - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.modifier_add(type='ARRAY') for mod in myobject.modifiers: if mod.type == 'ARRAY': @@ -162,8 +162,8 @@ def set_modifier_array(myobject, axis, move, repeat, fix=False, fixmove=0, zmove # Add modifier (curve) # -------------------------------------------------------------------- def set_modifier_curve(myobject, mycurve): - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.modifier_add(type='CURVE') for mod in myobject.modifiers: if mod.type == 'CURVE': @@ -175,8 +175,8 @@ def set_modifier_curve(myobject, mycurve): # Add modifier (solidify) # -------------------------------------------------------------------- def set_modifier_solidify(myobject, width): - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.modifier_add(type='SOLIDIFY') for mod in myobject.modifiers: if mod.type == 'SOLIDIFY': @@ -190,8 +190,8 @@ def set_modifier_solidify(myobject, width): # Add modifier (boolean) # -------------------------------------------------------------------- def set_modifier_boolean(myobject, bolobject): - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.modifier_add(type='BOOLEAN') mod = myobject.modifiers[len(myobject.modifiers) - 1] mod.operation = 'DIFFERENCE' @@ -202,8 +202,8 @@ def set_modifier_boolean(myobject, bolobject): # Set material to object # -------------------------------------------------------------------- def set_material(myobject, mymaterial): - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: myobject.data.materials.append(mymaterial) @@ -211,10 +211,10 @@ def set_material(myobject, mymaterial): # Set material to selected faces # -------------------------------------------------------------------- def set_material_faces(myobject, idx): - bpy.context.scene.objects.active = myobject + bpy.context.view_layer.objects.active = myobject myobject.select_set(True) bpy.context.object.active_material_index = idx - if bpy.context.scene.objects.active.name == myobject.name: + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.mode_set(mode='EDIT') bpy.ops.object.material_slot_assign() # Deselect @@ -227,8 +227,8 @@ def set_material_faces(myobject, idx): # -------------------------------------------------------------------- def select_faces(myobject, selface, clear): myobject.select_set(True) - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: # deselect everything if clear: bpy.ops.object.mode_set(mode='EDIT') @@ -244,8 +244,8 @@ def select_faces(myobject, selface, clear): # -------------------------------------------------------------------- def select_vertices(myobject, selvertices, clear=True): myobject.select_set(True) - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: # deselect everything if clear: bpy.ops.object.mode_set(mode='EDIT') @@ -273,8 +273,8 @@ def mark_seam(myobject): # noinspection PyBroadException try: myobject.select_set(True) - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: bpy.ops.object.mode_set(mode='EDIT', toggle=False) bpy.ops.mesh.mark_seam() bpy.ops.object.mode_set(mode='OBJECT') @@ -289,8 +289,8 @@ def unwrap_mesh(myobject, allfaces=True): # noinspection PyBroadException try: myobject.select_set(True) - bpy.context.scene.objects.active = myobject - if bpy.context.scene.objects.active.name == myobject.name: + bpy.context.view_layer.objects.active = myobject + if bpy.context.view_layer.objects.active.name == myobject.name: # Unwrap bpy.ops.object.mode_set(mode='EDIT', toggle=False) if allfaces is True: @@ -886,7 +886,7 @@ def parentobject(parentobj, childobj): # noinspection PyBroadException try: bpy.ops.object.select_all(action='DESELECT') - bpy.context.scene.objects.active = parentobj + bpy.context.view_layer.objects.active = parentobj parentobj.select_set(True) childobj.select_set(True) bpy.ops.object.parent_set(type='OBJECT', keep_transform=False) @@ -923,7 +923,7 @@ def create_control_box(objname, x, y, z, tube=True): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) diff --git a/archimesh/achm_venetian_maker.py b/archimesh/achm_venetian_maker.py index ba077a80..dbf76970 100644 --- a/archimesh/achm_venetian_maker.py +++ b/archimesh/achm_venetian_maker.py @@ -34,11 +34,11 @@ from .achm_tools import * # ------------------------------------------------------------------ # Define operator class to create object # ------------------------------------------------------------------ -class AchmVenetian(Operator): +class ARCHIMESH_OT_Venetian(Operator): bl_idname = "mesh.archimesh_venetian" bl_label = "Venetian blind" bl_description = "Venetian" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # ----------------------------------------------------- @@ -48,7 +48,7 @@ class AchmVenetian(Operator): def draw(self, context): layout = self.layout row = layout.row() - row.label("Use Properties panel (N) to define parms", icon='INFO') + row.label(text="Use Properties panel (N) to define parms", icon='INFO') # ----------------------------------------------------- # Execute @@ -77,7 +77,7 @@ def create_object(self, context): mainmesh = bpy.data.meshes.new("VenetianFrane") mainobject = bpy.data.objects.new("VenetianFrame", mainmesh) mainobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(mainobject) + bpy.context.collection.objects.link(mainobject) mainobject.VenetianObjectGenerator.add() # we shape the main object and create other objects as children @@ -85,7 +85,7 @@ def create_object(self, context): # we select, and activate, main object mainobject.select_set(True) - bpy.context.scene.objects.active = mainobject + bpy.context.view_layer.objects.active = mainobject # ------------------------------------------------------------------------------ @@ -124,7 +124,7 @@ def update_object(self, context): tmp_mesh.name = oldname # and select, and activate, the main object o.select_set(True) - bpy.context.scene.objects.active = o + bpy.context.view_layer.objects.active = o # ------------------------------------------------------------------------------ @@ -138,7 +138,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): mat = None plastic = None - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: rgb = mp.objcol plastic = create_diffuse_material("Plastic_venetian_material", True, rgb[0], rgb[1], rgb[2], rgb[0], rgb[1], rgb[2], 0.2) @@ -149,7 +149,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): create_venetian_top(tmp_mesh, mp.width + 0.002, mp.depth + 0.002, -0.06) # materials - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mainobject, plastic) # -------------------------------------------------------------------------------- # segments @@ -169,7 +169,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): set_normals(myslats) set_smooth(myslats) - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(myslats, plastic) # ------------------------ # Strings (Middle) @@ -201,7 +201,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): mycurver.location.y = 0 mycurver.location.z = 0 - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("String_material", False, 0.674, 0.617, 0.496, 0.1, 0.1, 0.1, 0.01) set_material(mycurvel, mat) set_material(mycurvec, mat) @@ -237,7 +237,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): mycurverf.location.y = ((-mp.depth / 2) * cos(radians(mp.angle))) - 0.001 mycurverf.location.z = 0 - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mycurvelf, mat) set_material(mycurvecf, mat) set_material(mycurverf, mat) @@ -274,7 +274,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): mycurverb.location.y = ((mp.depth / 2) * cos(radians(mp.angle))) + 0.001 mycurverb.location.z = 0 - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mycurvelb, mat) set_material(mycurvecb, mat) set_material(mycurverb, mat) @@ -290,7 +290,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): mybase.rotation_euler = (radians(angleused), 0, 0) # materials - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mybase, plastic) # ------------------ # Stick @@ -301,7 +301,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): mystick.location.y = -mp.depth / 2 - 0.003 mystick.location.z = -0.03 # materials - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: matstick = create_diffuse_material("Stick_material", False, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.04) set_material(mybase, matstick) @@ -314,11 +314,11 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): mystring.location.y = -mp.depth / 2 - 0.003 mystring.location.z = -0.03 - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mystring, mat) # deactivate others for o in bpy.data.objects: - if o.select is True and o.name != mainobject.name: + if o.select_get() is True and o.name != mainobject.name: o.select_set(False) return @@ -376,12 +376,12 @@ Object.VenetianObjectGenerator = CollectionProperty(type=ObjectProperties) # ------------------------------------------------------------------ # Define panel class to modify object # ------------------------------------------------------------------ -class AchmVenetianObjectgeneratorpanel(Panel): +class ARCHIMESH_PT_VenetianObjectgenerator(Panel): bl_idname = "OBJECT_PT_venetian_generator" bl_label = "Venetian" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' - bl_category = 'Archimesh' + bl_category = 'View' # ----------------------------------------------------- # Verify if visible @@ -430,7 +430,7 @@ class AchmVenetianObjectgeneratorpanel(Panel): row.prop(myobjdat, 'ratio', slider=True) box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(myobjdat, 'crt_mat') if myobjdat.crt_mat: @@ -518,7 +518,7 @@ def create_slat_mesh(objname, width, depth, height, angle, ratio): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -644,7 +644,7 @@ def create_venetian_base(objname, x, y, z): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -809,7 +809,7 @@ def get_venetian_stick(objname, height): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -1375,7 +1375,7 @@ def get_venetian_strings(objname, height): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -1396,7 +1396,7 @@ def create_bezier(objname, points, origin, depth=0.001, fill='FULL'): myobject = bpy.data.objects.new(objname, curvedata) myobject.location = origin - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) polyline = curvedata.splines.new('BEZIER') polyline.bezier_points.add(len(points) - 1) diff --git a/archimesh/achm_window_maker.py b/archimesh/achm_window_maker.py index 48a9faa7..bf16411d 100644 --- a/archimesh/achm_window_maker.py +++ b/archimesh/achm_window_maker.py @@ -34,11 +34,11 @@ from .achm_tools import * # ------------------------------------------------------------------ # Define operator class to create object # ------------------------------------------------------------------ -class AchmWindows(Operator): +class ARCHIMESH_OT_Windows(Operator): bl_idname = "mesh.archimesh_window" bl_label = "Rail Windows" bl_description = "Rail Windows Generator" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # ----------------------------------------------------- @@ -48,7 +48,7 @@ class AchmWindows(Operator): def draw(self, context): layout = self.layout row = layout.row() - row.label("Use Properties panel (N) to define parms", icon='INFO') + row.label(text="Use Properties panel (N) to define parms", icon='INFO') # ----------------------------------------------------- # Execute @@ -77,7 +77,7 @@ def create_object(self, context): mainmesh = bpy.data.meshes.new("WindowFrane") mainobject = bpy.data.objects.new("WindowFrame", mainmesh) mainobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(mainobject) + bpy.context.collection.objects.link(mainobject) mainobject.WindowObjectGenerator.add() # we shape the main object and create other objects as children @@ -85,7 +85,7 @@ def create_object(self, context): # we select, and activate, main object mainobject.select_set(True) - bpy.context.scene.objects.active = mainobject + bpy.context.view_layer.objects.active = mainobject # ------------------------------------------------------------------------------ @@ -120,7 +120,7 @@ def update_object(self, context): # noinspection PyBroadException try: # clear child data - child.hide = False # must be visible to avoid bug + child.hide_viewport = False # must be visible to avoid bug child.hide_render = False # must be visible to avoid bug old = child.data child.select_set(True) @@ -149,7 +149,7 @@ def update_object(self, context): tmp_mesh.name = oldname # and select, and activate, the main object o.select_set(True) - bpy.context.scene.objects.active = o + bpy.context.view_layer.objects.active = o # ------------------------------------------------------------------------------ @@ -217,9 +217,9 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): myctrl.location.y = -mp.depth * 3 / 2 myctrl.location.z = 0 myctrl.display_type = 'BOUNDS' - myctrl.hide = False + myctrl.hide_viewport = False myctrl.hide_render = True - if bpy.context.scene.render.engine == 'CYCLES': + if bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: myctrl.cycles_visibility.camera = False myctrl.cycles_visibility.diffuse = False myctrl.cycles_visibility.glossy = False @@ -232,7 +232,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False): # deactivate others for o in bpy.data.objects: - if o.select is True and o.name != mainobject.name: + if o.select_get() is True and o.name != mainobject.name: o.select_set(False) return @@ -422,12 +422,12 @@ Object.WindowObjectGenerator = CollectionProperty(type=ObjectProperties) # ------------------------------------------------------------------ # Define panel class to modify object # ------------------------------------------------------------------ -class AchmWindowObjectgeneratorpanel(Panel): +class ARCHIMESH_PT_WindowObjectgenerator(Panel): bl_idname = "OBJECT_PT_window_generator" bl_label = "Window Rail" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' - bl_category = 'Archimesh' + bl_category = 'View' # ----------------------------------------------------- # Verify if visible @@ -514,7 +514,7 @@ class AchmWindowObjectgeneratorpanel(Panel): row.prop(myobjdat, 'blind_back') box = layout.box() - if not context.scene.render.engine == 'CYCLES': + if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(myobjdat, 'crt_mat') else: @@ -529,7 +529,7 @@ def generate_rail_window(myframe, mp, mymesh): myloc = bpy.context.scene.cursor_location alummat = None - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: alummat = create_diffuse_material("Window_material", False, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.15) # Frame @@ -620,7 +620,7 @@ def generate_leaf_window(myframe, mp, mymesh): myloc = bpy.context.scene.cursor_location alummat = None - if mp.crt_mat and bpy.context.scene.render.engine == 'CYCLES': + if mp.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: alummat = create_diffuse_material("Window_material", False, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.15) # Frame @@ -719,11 +719,11 @@ def generate_leaf_window(myframe, mp, mymesh): # deactivate others for o in bpy.data.objects: - if o.select is True: + if o.select_get() is True: o.select_set(False) myframe.select_set(True) - bpy.context.scene.objects.active = myframe + bpy.context.view_layer.objects.active = myframe return myframe @@ -906,7 +906,7 @@ def create_rail_window_frame(mywindow, mymesh, sx, sy, sz, frame, mat, matdata, mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mywindow, matdata) # -------------- # Blind Box @@ -919,7 +919,7 @@ def create_rail_window_frame(mywindow, mymesh, sx, sy, sz, frame, mat, matdata, mybox.location.x = 0 mybox.location.y = -blind_back - sy mybox.location.z = sz - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mybox, matdata) # Lock mybox.lock_location = (True, True, True) @@ -1030,7 +1030,7 @@ def create_leaf_window_frame(mywindow, mymesh, sx, sy, sz, frame, frame_l, leafr mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mywindow, matdata) # -------------- @@ -1044,7 +1044,7 @@ def create_leaf_window_frame(mywindow, mymesh, sx, sy, sz, frame, frame_l, leafr mybox.location.x = 0 mybox.location.y = -blind_back - sy mybox.location.z = sz - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mybox, matdata) # Lock mybox.lock_location = (True, True, True) @@ -1200,7 +1200,7 @@ def create_rail_window_leaf(objname, hand, sx, sy, sz, f, px, py, pz, mat, matda mywindow.location[0] = px mywindow.location[1] = py mywindow.location[2] = pz - bpy.context.scene.objects.link(mywindow) + bpy.context.collection.objects.link(mywindow) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1226,7 +1226,7 @@ def create_rail_window_leaf(objname, hand, sx, sy, sz, f, px, py, pz, mat, matda else: myhandle.location.z = 1 - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mywindow, matdata) # Glass glass = create_glass_material("Glass_material", False) @@ -1299,7 +1299,7 @@ def create_leaf_window_leaf(objname, hand, sx, sy, sz, f, px, py, pz, mat, matda mywindow.location[0] = px mywindow.location[1] = py mywindow.location[2] = pz - bpy.context.scene.objects.link(mywindow) + bpy.context.collection.objects.link(mywindow) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1330,7 +1330,7 @@ def create_leaf_window_leaf(objname, hand, sx, sy, sz, f, px, py, pz, mat, matda set_smooth(myhandle) set_modifier_subsurf(myhandle) - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(mywindow, matdata) # Glass glass = create_glass_material("Glass_material", False) @@ -1751,13 +1751,13 @@ def create_leaf_handle(objname, mat): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) # Create materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: alumat = create_glossy_material("Handle_material", False, 0.733, 0.779, 0.8) set_material(myobject, alumat) @@ -2092,13 +2092,13 @@ def create_rail_handle(objname, mat): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) # Create materials - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: plastic = create_diffuse_material("Plastic_Handle_material", False, 0.01, 0.01, 0.01, 0.082, 0.079, 0.02, 0.01) set_material(myobject, plastic) @@ -2130,12 +2130,12 @@ def create_sill(objname, x, y, z, mat): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mymat = create_diffuse_material("Sill_material", False, 0.8, 0.8, 0.8) set_material(myobject, mymat) @@ -2168,7 +2168,7 @@ def create_blind_box(objname, x, y, z): myobject = bpy.data.objects.new(objname, mesh) myobject.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobject) + bpy.context.collection.objects.link(myobject) mesh.from_pydata(myvertex, [], myfaces) mesh.update(calc_edges=True) @@ -2228,12 +2228,12 @@ def create_blind_rail(objname, sx, sz, px, py, pz, mat, matdata, blind_rail): myblind.location[0] = px myblind.location[1] = py myblind.location[2] = pz - bpy.context.scene.objects.link(myblind) + bpy.context.collection.objects.link(myblind) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: set_material(myblind, matdata) return myblind @@ -2290,14 +2290,14 @@ def create_blind(objname, sx, sz, px, py, pz, mat, blind_ratio): myblind.location[0] = px myblind.location[1] = py myblind.location[2] = pz - bpy.context.scene.objects.link(myblind) + bpy.context.collection.objects.link(myblind) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) myblind.lock_location = (True, True, False) # only Z axis - if mat and bpy.context.scene.render.engine == 'CYCLES': + if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Blind_plastic_material", False, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.15) set_material(myblind, mat) diff --git a/archimesh/achm_window_panel.py b/archimesh/achm_window_panel.py index d8f6460c..faf18385 100644 --- a/archimesh/achm_window_panel.py +++ b/archimesh/achm_window_panel.py @@ -196,11 +196,11 @@ def set_defaults(s): # ------------------------------------------------------------------ # Define operator class to create window panels # ------------------------------------------------------------------ -class AchmWinPanel(Operator): +class ARCHIMESH_PT_Win(Operator): bl_idname = "mesh.archimesh_winpanel" bl_label = "Panel Window" bl_description = "Generate editable flat windows" - bl_category = 'Archimesh' + bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # ----------------------------------------------------- @@ -210,7 +210,7 @@ class AchmWinPanel(Operator): def draw(self, context): layout = self.layout row = layout.row() - row.label("Use Properties panel (N) to define parms", icon='INFO') + row.label(text="Use Properties panel (N) to define parms", icon='INFO') # ----------------------------------------------------- # Execute @@ -237,7 +237,7 @@ def create_window(): window_object = bpy.data.objects.new("Window", window_mesh) # Link object to scene - bpy.context.scene.objects.link(window_object) + bpy.context.collection.objects.link(window_object) window_object.WindowPanelGenerator.add() window_object.location = bpy.context.scene.cursor_location @@ -246,17 +246,17 @@ def create_window(): # deactivate others for o in bpy.data.objects: - if o.select is True and o.name != window_object.name: + if o.select_get() is True and o.name != window_object.name: o.select_set(False) # Select, and activate object window_object.select_set(True) - bpy.context.scene.objects.active = window_object + bpy.context.view_layer.objects.active = window_object do_ctrl_box(window_object) # Reselect window_object.select_set(True) - bpy.context.scene.objects.active = window_object + bpy.context.view_layer.objects.active = window_object # ------------------------------------------------------------------------------ @@ -291,7 +291,7 @@ def update_window(self, context): # noinspection PyBroadException try: # clear child data - child.hide = False # must be visible to avoid bug + child.hide_viewport = False # must be visible to avoid bug child.hide_render = False # must be visible to avoid bug old = child.data child.select_set(True) @@ -316,17 +316,17 @@ def update_window(self, context): tmp_mesh.name = oldname # deactivate others for ob in bpy.data.objects: - if ob.select is True and ob.name != o.name: + if ob.select_get() is True and ob.name != o.name: ob.select_set(False) # and select, and activate, the object. o.select_set(True) - bpy.context.scene.objects.active = o + bpy.context.view_layer.objects.active = o do_ctrl_box(o) # Reselect o.select_set(True) - bpy.context.scene.objects.active = o + bpy.context.view_layer.objects.active = o # ------------------------------------------------------------------------------ @@ -395,9 +395,9 @@ def do_ctrl_box(myobject): myctrl.location.y = 0 myctrl.location.z = 0 myctrl.display_type = 'WIRE' - myctrl.hide = False + myctrl.hide_viewport = False myctrl.hide_render = True - if bpy.context.scene.render.engine == 'CYCLES': + if bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: myctrl.cycles_visibility.camera = False myctrl.cycles_visibility.diffuse = False myctrl.cycles_visibility.glossy = False @@ -1541,7 +1541,7 @@ def create_ctrl_box(parentobj, objname): myobj = bpy.data.objects.new(objname, mymesh) myobj.location = bpy.context.scene.cursor_location - bpy.context.scene.objects.link(myobj) + bpy.context.collection.objects.link(myobj) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) @@ -1568,7 +1568,21 @@ class GeneralPanelProperties(PropertyGroup): description='Predefined types', update=update_using_default, ) - son = prs + son: EnumProperty( + items=( + ('1', "WINDOW 250X200", ""), + ('2', "WINDOW 200X200", ""), + ('3', "WINDOW 180X200", ""), + ('4', "WINDOW 180X160", ""), + ('5', "WINDOW 160X160", ""), + ('6', "WINDOW 50X50", ""), + ('7', "DOOR 80X250", ""), + ('8', "DOOR 80X230", ""), + ), + name="", + description='Predefined types', + update=update_using_default, + ) gen: IntProperty( name='H Count', min=1, max=8, default=3, description='Horizontal Panes', @@ -1771,12 +1785,12 @@ Object.WindowPanelGenerator = CollectionProperty(type=GeneralPanelProperties) # ------------------------------------------------------------------ # Define panel class to modify myobjects. # ------------------------------------------------------------------ -class AchmWindowEditPanel(Panel): +class ARCHIMESH_PT_WindowEdit(Panel): bl_idname = "ARCHIMESH_PT_window_edit" bl_label = "Window Panel" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' - bl_category = 'Window' + bl_category = 'View' # ----------------------------------------------------- # Verify if visible -- cgit v1.2.3