mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-10 22:16:41 +00:00
Support loading BlenderBIM in Blender 4.2+ as an extension
1) Used a hack to bring `blenderbim` into the main namespace instead of `bl_ext.repository.blenderbim`. This is not an official way to do it but this works for testing stuff (official way is to create a stub wheel that would redirect all `blenderbim` requests to `bl_ext.repository.blenderbim`). 2) AddonPreferences now require blender package name as it's bl_idname (e.g. bl_ext.repository.blenderbim) 3) Addressing preferences now also works through the blender package name. Created method in tool/Blender.py to incapsulate those details.
This commit is contained in:
@@ -33,6 +33,8 @@ import traceback
|
|||||||
import webbrowser
|
import webbrowser
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
|
||||||
|
# NOTE: bl_info is superseded by blender_manifest.toml
|
||||||
|
# if addon is installed as an extension (Blender 4.2+)
|
||||||
bl_info = {
|
bl_info = {
|
||||||
"name": "BlenderBIM",
|
"name": "BlenderBIM",
|
||||||
"description": "Transforms Blender into a native Building Information Model authoring platform using IFC.",
|
"description": "Transforms Blender into a native Building Information Model authoring platform using IFC.",
|
||||||
@@ -92,7 +94,6 @@ if IN_BLENDER:
|
|||||||
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), "libs", "site", "packages"))
|
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), "libs", "site", "packages"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import blenderbim.bim
|
|
||||||
import ifcopenshell.api
|
import ifcopenshell.api
|
||||||
|
|
||||||
def log_api(usecase_path, ifc_file, settings):
|
def log_api(usecase_path, ifc_file, settings):
|
||||||
@@ -107,9 +108,21 @@ if IN_BLENDER:
|
|||||||
ifcopenshell.api.add_pre_listener("*", "action_logger", log_api)
|
ifcopenshell.api.add_pre_listener("*", "action_logger", log_api)
|
||||||
|
|
||||||
def register():
|
def register():
|
||||||
|
global BLENDER_PACKAGE_NAME, __name__, __package__
|
||||||
|
BLENDER_PACKAGE_NAME = __name__
|
||||||
|
if bpy.app.version >= (4, 2, 0):
|
||||||
|
sys.modules["blenderbim"] = sys.modules[__name__]
|
||||||
|
__name__ = "blenderbim"
|
||||||
|
# Only renaming __name__ is actually required to make imports work.
|
||||||
|
# We renaming __package__ just for consistency.
|
||||||
|
__package__ = "blenderbim"
|
||||||
|
import blenderbim.bim
|
||||||
|
|
||||||
blenderbim.bim.register()
|
blenderbim.bim.register()
|
||||||
|
|
||||||
def unregister():
|
def unregister():
|
||||||
|
import blenderbim.bim
|
||||||
|
|
||||||
blenderbim.bim.unregister()
|
blenderbim.bim.unregister()
|
||||||
|
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -291,12 +291,13 @@ def load_post(scene):
|
|||||||
ifcopenshell.api.owner.settings.get_application = get_application
|
ifcopenshell.api.owner.settings.get_application = get_application
|
||||||
AuthoringData.type_thumbnails = {}
|
AuthoringData.type_thumbnails = {}
|
||||||
|
|
||||||
if not bpy.context.preferences.addons["blenderbim"].preferences.should_setup_toolbar:
|
preferences = tool.Blender.get_addon_preferences()
|
||||||
|
if not preferences.should_setup_toolbar:
|
||||||
tool.Blender.unregister_toolbar()
|
tool.Blender.unregister_toolbar()
|
||||||
|
|
||||||
if bpy.context.preferences.addons["blenderbim"].preferences.should_setup_workspace:
|
if preferences.should_setup_workspace:
|
||||||
if "BIM" in bpy.data.workspaces:
|
if "BIM" in bpy.data.workspaces:
|
||||||
if bpy.context.preferences.addons["blenderbim"].preferences.activate_workspace:
|
if preferences.activate_workspace:
|
||||||
bpy.context.window.workspace = bpy.data.workspaces["BIM"]
|
bpy.context.window.workspace = bpy.data.workspaces["BIM"]
|
||||||
else:
|
else:
|
||||||
bpy.ops.workspace.append_activate(idname="BIM", filepath=os.path.join(cwd, "data", "workspace.blend"))
|
bpy.ops.workspace.append_activate(idname="BIM", filepath=os.path.join(cwd, "data", "workspace.blend"))
|
||||||
|
|||||||
@@ -538,7 +538,7 @@ class IfcImporter:
|
|||||||
shape = tool.Loader.create_generic_shape(grid)
|
shape = tool.Loader.create_generic_shape(grid)
|
||||||
grid_obj = self.create_product(grid, shape)
|
grid_obj = self.create_product(grid, shape)
|
||||||
grid_placement = self.get_element_matrix(grid)
|
grid_placement = self.get_element_matrix(grid)
|
||||||
if bpy.context.preferences.addons["blenderbim"].preferences.lock_grids_on_import:
|
if tool.Blender.get_addon_preferences().lock_grids_on_import:
|
||||||
grid_obj.lock_location = (True, True, True)
|
grid_obj.lock_location = (True, True, True)
|
||||||
grid_obj.lock_rotation = (True, True, True)
|
grid_obj.lock_rotation = (True, True, True)
|
||||||
self.create_grid_axes(grid.UAxes, grid_obj, grid_placement)
|
self.create_grid_axes(grid.UAxes, grid_obj, grid_placement)
|
||||||
@@ -551,7 +551,7 @@ class IfcImporter:
|
|||||||
shape = tool.Loader.create_generic_shape(axis.AxisCurve)
|
shape = tool.Loader.create_generic_shape(axis.AxisCurve)
|
||||||
mesh = self.create_mesh(axis, shape)
|
mesh = self.create_mesh(axis, shape)
|
||||||
obj = bpy.data.objects.new(f"IfcGridAxis/{axis.AxisTag}", mesh)
|
obj = bpy.data.objects.new(f"IfcGridAxis/{axis.AxisTag}", mesh)
|
||||||
if bpy.context.preferences.addons["blenderbim"].preferences.lock_grids_on_import:
|
if tool.Blender.get_addon_preferences().lock_grids_on_import:
|
||||||
obj.lock_location = (True, True, True)
|
obj.lock_location = (True, True, True)
|
||||||
obj.lock_rotation = (True, True, True)
|
obj.lock_rotation = (True, True, True)
|
||||||
self.link_element(axis, obj)
|
self.link_element(axis, obj)
|
||||||
@@ -620,7 +620,7 @@ class IfcImporter:
|
|||||||
print("Done creating geometry")
|
print("Done creating geometry")
|
||||||
|
|
||||||
def create_spatial_elements(self) -> None:
|
def create_spatial_elements(self) -> None:
|
||||||
if bpy.context.preferences.addons["blenderbim"].preferences.spatial_elements_unselectable:
|
if tool.Blender.get_addon_preferences().spatial_elements_unselectable:
|
||||||
self.create_generic_elements(self.spatial_elements, unselectable=True)
|
self.create_generic_elements(self.spatial_elements, unselectable=True)
|
||||||
else:
|
else:
|
||||||
self.create_generic_elements(self.spatial_elements, unselectable=False)
|
self.create_generic_elements(self.spatial_elements, unselectable=False)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class BoundaryDecorator:
|
|||||||
batch.draw(shader)
|
batch.draw(shader)
|
||||||
|
|
||||||
def __call__(self, context):
|
def __call__(self, context):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ class ClashDecorator:
|
|||||||
batch.draw(shader)
|
batch.draw(shader)
|
||||||
|
|
||||||
def draw_text(self, context):
|
def draw_text(self, context):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
@@ -75,7 +75,7 @@ class ClashDecorator:
|
|||||||
blf.draw(font_id, text) # Set your text here
|
blf.draw(font_id, text) # Set your text here
|
||||||
|
|
||||||
def draw_geometry(self, context):
|
def draw_geometry(self, context):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ class BaseDecorator:
|
|||||||
"""`verts` should be in winspace with `(0,0,0)` in the screen left bottom corner, not in the center"""
|
"""`verts` should be in winspace with `(0,0,0)` in the screen left bottom corner, not in the center"""
|
||||||
region = context.region
|
region = context.region
|
||||||
if not color:
|
if not color:
|
||||||
color = context.preferences.addons["blenderbim"].preferences.decorations_colour
|
color = tool.Blender.get_addon_preferences().decorations_colour
|
||||||
|
|
||||||
self.line_shader.bind()
|
self.line_shader.bind()
|
||||||
# POLYLINE_UNIFORM_COLOR specific uniforms
|
# POLYLINE_UNIFORM_COLOR specific uniforms
|
||||||
@@ -404,7 +404,7 @@ class BaseDecorator:
|
|||||||
|
|
||||||
font_id = self.font_id
|
font_id = self.font_id
|
||||||
|
|
||||||
color = context.preferences.addons["blenderbim"].preferences.decorations_colour
|
color = tool.Blender.get_addon_preferences().decorations_colour
|
||||||
|
|
||||||
ang = -Vector((1, 0)).angle_signed(text_dir)
|
ang = -Vector((1, 0)).angle_signed(text_dir)
|
||||||
cos = math.cos(ang)
|
cos = math.cos(ang)
|
||||||
@@ -812,7 +812,7 @@ class AngleDecorator(BaseDecorator):
|
|||||||
arcs_color = None
|
arcs_color = None
|
||||||
edges_color = UNSPECIAL_ELEMENT_COLOR
|
edges_color = UNSPECIAL_ELEMENT_COLOR
|
||||||
if context.active_object == obj and obj.data.is_editmode:
|
if context.active_object == obj and obj.data.is_editmode:
|
||||||
arcs_color = context.preferences.addons["blenderbim"].preferences.decorator_color_special
|
arcs_color = tool.Blender.get_addon_preferences().decorator_color_special
|
||||||
edges_color = None
|
edges_color = None
|
||||||
|
|
||||||
self.draw_lines(
|
self.draw_lines(
|
||||||
@@ -1093,7 +1093,7 @@ class HiddenDecorator(BaseDecorator):
|
|||||||
else:
|
else:
|
||||||
verts, idxs = self.get_mesh_geom(obj)
|
verts, idxs = self.get_mesh_geom(obj)
|
||||||
winspace_verts = worldspace_to_winspace(verts, context)
|
winspace_verts = worldspace_to_winspace(verts, context)
|
||||||
color = [i for i in context.preferences.addons["blenderbim"].preferences.decorations_colour]
|
color = [i for i in tool.Blender.get_addon_preferences().decorations_colour]
|
||||||
color[3] = 0.5
|
color[3] = 0.5
|
||||||
self.draw_lines(context, obj, winspace_verts, idxs, color)
|
self.draw_lines(context, obj, winspace_verts, idxs, color)
|
||||||
|
|
||||||
@@ -1409,7 +1409,7 @@ class GridDecorator(BaseDecorator):
|
|||||||
# stem with gaps for circles
|
# stem with gaps for circles
|
||||||
add_verts_sequence([v0 + gap, v1 - gap], start_i, **out_kwargs)
|
add_verts_sequence([v0 + gap, v1 - gap], start_i, **out_kwargs)
|
||||||
|
|
||||||
color = [i for i in context.preferences.addons["blenderbim"].preferences.decorations_colour]
|
color = [i for i in tool.Blender.get_addon_preferences().decorations_colour]
|
||||||
color[3] = 0.5
|
color[3] = 0.5
|
||||||
self.draw_lines(context, obj, output_verts, output_edges, color)
|
self.draw_lines(context, obj, output_verts, output_edges, color)
|
||||||
self.draw_labels(context, obj, verts)
|
self.draw_labels(context, obj, verts)
|
||||||
@@ -1591,7 +1591,7 @@ class CutDecorator:
|
|||||||
cls.installed = None
|
cls.installed = None
|
||||||
|
|
||||||
def __call__(self, context):
|
def __call__(self, context):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
|
|
||||||
all_vertices = []
|
all_vertices = []
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ class CreateDrawing(bpy.types.Operator):
|
|||||||
svg_path = self.combine_svgs(context, underlay_svg, linework_svg, annotation_svg)
|
svg_path = self.combine_svgs(context, underlay_svg, linework_svg, annotation_svg)
|
||||||
|
|
||||||
tool.Drawing.open_with_user_command(
|
tool.Drawing.open_with_user_command(
|
||||||
context.preferences.addons["blenderbim"].preferences.svg_command, svg_path
|
tool.Blender.get_addon_preferences().svg_command, svg_path
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.print_all:
|
if self.print_all:
|
||||||
@@ -1374,8 +1374,8 @@ class CreateSheets(bpy.types.Operator, Operator):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
svg2pdf_command = context.preferences.addons["blenderbim"].preferences.svg2pdf_command
|
svg2pdf_command = tool.Blender.get_addon_preferences().svg2pdf_command
|
||||||
svg2dxf_command = context.preferences.addons["blenderbim"].preferences.svg2dxf_command
|
svg2dxf_command = tool.Blender.get_addon_preferences().svg2dxf_command
|
||||||
|
|
||||||
if svg2pdf_command:
|
if svg2pdf_command:
|
||||||
# With great power comes great responsibility. Example:
|
# With great power comes great responsibility. Example:
|
||||||
@@ -1393,9 +1393,9 @@ class CreateSheets(bpy.types.Operator, Operator):
|
|||||||
subprocess.run([replacements.get(c, c) for c in command])
|
subprocess.run([replacements.get(c, c) for c in command])
|
||||||
|
|
||||||
if svg2pdf_command:
|
if svg2pdf_command:
|
||||||
tool.Drawing.open_with_user_command(context.preferences.addons["blenderbim"].preferences.pdf_command, pdf)
|
tool.Drawing.open_with_user_command(tool.Blender.get_addon_preferences().pdf_command, pdf)
|
||||||
else:
|
else:
|
||||||
tool.Drawing.open_with_user_command(context.preferences.addons["blenderbim"].preferences.svg_command, svg)
|
tool.Drawing.open_with_user_command(tool.Blender.get_addon_preferences().svg_command, svg)
|
||||||
|
|
||||||
|
|
||||||
class SelectAllDrawings(bpy.types.Operator):
|
class SelectAllDrawings(bpy.types.Operator):
|
||||||
@@ -1463,7 +1463,7 @@ class OpenDrawing(bpy.types.Operator):
|
|||||||
|
|
||||||
for drawing_uri in drawing_uris:
|
for drawing_uri in drawing_uris:
|
||||||
tool.Drawing.open_with_user_command(
|
tool.Drawing.open_with_user_command(
|
||||||
context.preferences.addons["blenderbim"].preferences.svg_command, drawing_uri
|
tool.Blender.get_addon_preferences().svg_command, drawing_uri
|
||||||
)
|
)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ class ProfileDecorator:
|
|||||||
self.draw_batch("TRIS", vertices_coords, faces_color, face_indices)
|
self.draw_batch("TRIS", vertices_coords, faces_color, face_indices)
|
||||||
|
|
||||||
def __call__(self, context, get_custom_bmesh=None, draw_faces=False, exit_edit_mode_callback=None):
|
def __call__(self, context, get_custom_bmesh=None, draw_faces=False, exit_edit_mode_callback=None):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
|
|||||||
@@ -904,7 +904,7 @@ class DecorationsHandler:
|
|||||||
batch.draw(shader)
|
batch.draw(shader)
|
||||||
|
|
||||||
def __call__(self, context):
|
def __call__(self, context):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class ProjectDecorator:
|
|||||||
batch.draw(shader)
|
batch.draw(shader)
|
||||||
|
|
||||||
def __call__(self, context):
|
def __call__(self, context):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
@@ -128,7 +128,7 @@ class ClippingPlaneDecorator:
|
|||||||
batch.draw(shader)
|
batch.draw(shader)
|
||||||
|
|
||||||
def __call__(self, context):
|
def __call__(self, context):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ def draw_psetqto_ui(context, pset_id, pset, props, layout, obj_type, allow_remov
|
|||||||
else:
|
else:
|
||||||
has_props_displayed = False
|
has_props_displayed = False
|
||||||
for prop in pset["Properties"]:
|
for prop in pset["Properties"]:
|
||||||
if context.preferences.addons["blenderbim"].preferences.should_hide_empty_props and (
|
if tool.Blender.get_addon_preferences().should_hide_empty_props and (
|
||||||
prop["NominalValue"] is None or prop["NominalValue"] == ""
|
prop["NominalValue"] is None or prop["NominalValue"] == ""
|
||||||
):
|
):
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ class SystemDecorator:
|
|||||||
self.draw_batch("TRIS", vertices_coords, faces_color, face_indices)
|
self.draw_batch("TRIS", vertices_coords, faces_color, face_indices)
|
||||||
|
|
||||||
def __call__(self, context, get_custom_bmesh=None, draw_faces=False, exit_edit_mode_callback=None):
|
def __call__(self, context, get_custom_bmesh=None, draw_faces=False, exit_edit_mode_callback=None):
|
||||||
self.addon_prefs = context.preferences.addons["blenderbim"].preferences
|
self.addon_prefs = tool.Blender.get_addon_preferences()
|
||||||
selected_elements_color = self.addon_prefs.decorator_color_selected
|
selected_elements_color = self.addon_prefs.decorator_color_selected
|
||||||
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
unselected_elements_color = self.addon_prefs.decorator_color_unselected
|
||||||
special_elements_color = self.addon_prefs.decorator_color_special
|
special_elements_color = self.addon_prefs.decorator_color_special
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ class BIM_UL_topics(bpy.types.UIList):
|
|||||||
|
|
||||||
|
|
||||||
class BIM_ADDON_preferences(bpy.types.AddonPreferences):
|
class BIM_ADDON_preferences(bpy.types.AddonPreferences):
|
||||||
bl_idname = "blenderbim"
|
bl_idname = tool.Blender.get_blender_addon_package_name()
|
||||||
svg2pdf_command: StringProperty(name="SVG to PDF Command", description='E.g. [["inkscape", "svg", "-o", pdf]]')
|
svg2pdf_command: StringProperty(name="SVG to PDF Command", description='E.g. [["inkscape", "svg", "-o", pdf]]')
|
||||||
svg2dxf_command: StringProperty(
|
svg2dxf_command: StringProperty(
|
||||||
name="SVG to DXF Command",
|
name="SVG to DXF Command",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
|
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
import bpy
|
import bpy
|
||||||
import bmesh
|
import bmesh
|
||||||
import json
|
import json
|
||||||
@@ -1132,3 +1133,14 @@ class Blender(blenderbim.core.tool.Blender):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def clear_recent_ifc_projects(cls) -> None:
|
def clear_recent_ifc_projects(cls) -> None:
|
||||||
cls.write_recent_ifc_projects([])
|
cls.write_recent_ifc_projects([])
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_blender_addon_package_name(cls) -> str:
|
||||||
|
if bpy.app.version >= (4, 2, 0):
|
||||||
|
return blenderbim.BLENDER_PACKAGE_NAME
|
||||||
|
return "blenderbim"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_addon_preferences(cls) -> blenderbim.bim.ui.BIM_ADDON_preferences:
|
||||||
|
blender_package_name = cls.get_blender_addon_package_name()
|
||||||
|
return bpy.context.preferences.addons[blender_package_name].preferences
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ class Cost(blenderbim.core.tool.Cost):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def play_sound(cls):
|
def play_sound(cls):
|
||||||
if bpy.context.preferences.addons["blenderbim"].preferences.should_play_chaching_sound:
|
if tool.Blender.get_addon_preferences().should_play_chaching_sound:
|
||||||
cls.play_chaching_sound() # lol
|
cls.play_chaching_sound() # lol
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -889,15 +889,15 @@ class Drawing(blenderbim.core.tool.Drawing):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def open_spreadsheet(cls, uri):
|
def open_spreadsheet(cls, uri):
|
||||||
cls.open_with_user_command(bpy.context.preferences.addons["blenderbim"].preferences.spreadsheet_command, uri)
|
cls.open_with_user_command(tool.Blender.get_addon_preferences().spreadsheet_command, uri)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def open_svg(cls, uri):
|
def open_svg(cls, uri):
|
||||||
cls.open_with_user_command(bpy.context.preferences.addons["blenderbim"].preferences.svg_command, uri)
|
cls.open_with_user_command(tool.Blender.get_addon_preferences().svg_command, uri)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def open_layout_svg(cls, uri):
|
def open_layout_svg(cls, uri):
|
||||||
cls.open_with_user_command(bpy.context.preferences.addons["blenderbim"].preferences.layout_svg_command, uri)
|
cls.open_with_user_command(tool.Blender.get_addon_preferences().layout_svg_command, uri)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run_root_assign_class(
|
def run_root_assign_class(
|
||||||
|
|||||||
Reference in New Issue
Block a user