mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Fix #6136. Allow setting of custom tmp dir, useful for packaged envs like flatpak
This commit is contained in:
@@ -115,10 +115,8 @@ classes = [
|
||||
operator.ReloadIfcFile,
|
||||
operator.RemoveIfcFile,
|
||||
operator.RevertClippingPlaneCut,
|
||||
operator.SelectDataDir,
|
||||
operator.SelectCacheDir,
|
||||
operator.SelectDir,
|
||||
operator.SelectIfcFile,
|
||||
operator.SelectSchemaDir,
|
||||
operator.SelectURIAttribute,
|
||||
operator.SetTab,
|
||||
operator.SwitchTab,
|
||||
|
||||
@@ -113,7 +113,7 @@ class AuginCreateNewModel(bpy.types.Operator):
|
||||
context.scene.collection.objects.link(cam_obj)
|
||||
context.scene.camera = cam_obj
|
||||
|
||||
tmpdir = tempfile.mkdtemp()
|
||||
tmpdir = tempfile.mkdtemp(dir=tool.Blender.get_addon_preferences().tmp_dir or None)
|
||||
thumb_path = os.path.join(tmpdir, "thumb.png")
|
||||
context.scene.render.image_settings.file_format = "PNG"
|
||||
context.scene.render.filepath = thumb_path
|
||||
|
||||
@@ -1057,7 +1057,9 @@ class LoadProjectElements(bpy.types.Operator):
|
||||
logger = logging.getLogger("ImportIFC")
|
||||
path_log = tool.Blender.get_data_dir_path("process.log")
|
||||
if not os.access(path_log.parent, os.W_OK):
|
||||
path_log = os.path.join(tempfile.mkdtemp(), "process.log")
|
||||
path_log = os.path.join(
|
||||
tempfile.mkdtemp(dir=tool.Blender.get_addon_preferences().tmp_dir or None), "process.log"
|
||||
)
|
||||
logging.basicConfig(
|
||||
filename=path_log,
|
||||
filemode="a",
|
||||
@@ -1579,7 +1581,9 @@ class ExportIFC(bpy.types.Operator):
|
||||
logger = logging.getLogger("ExportIFC")
|
||||
path_log = tool.Blender.get_data_dir_path("process.log")
|
||||
if not os.access(path_log.parent, os.W_OK):
|
||||
path_log = os.path.join(tempfile.mkdtemp(), "process.log")
|
||||
path_log = os.path.join(
|
||||
tempfile.mkdtemp(dir=tool.Blender.get_addon_preferences().tmp_dir or None), "process.log"
|
||||
)
|
||||
logging.basicConfig(
|
||||
filename=path_log,
|
||||
filemode="a",
|
||||
|
||||
@@ -72,7 +72,7 @@ class ExecuteIfcTester(bpy.types.Operator):
|
||||
|
||||
# No need for if-statement, just postponing lots of diffs.
|
||||
if True:
|
||||
dirpath = tempfile.mkdtemp()
|
||||
dirpath = tempfile.mkdtemp(dir=tool.Blender.get_addon_preferences().tmp_dir or None)
|
||||
start = time.time()
|
||||
output = Path(os.path.join(dirpath, "{}_{}.html".format(Path(ifc_path).name, Path(specs_path).name)))
|
||||
|
||||
|
||||
@@ -226,47 +226,27 @@ class SelectIfcFile(bpy.types.Operator, IFCFileSelector):
|
||||
return {"RUNNING_MODAL"}
|
||||
|
||||
|
||||
class SelectDataDir(bpy.types.Operator):
|
||||
bl_idname = "bim.select_data_dir"
|
||||
bl_label = "Select Data Directory"
|
||||
class SelectDir(bpy.types.Operator):
|
||||
bl_idname = "bim.select_dir"
|
||||
bl_label = "Select Directory"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
bl_description = "Select the directory that contains all IFC data es. PSet, styles, etc..."
|
||||
bl_description = "Open a file browser to choose the directory"
|
||||
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
|
||||
data_path: bpy.props.StringProperty(name="Data Path")
|
||||
|
||||
def execute(self, context):
|
||||
context.scene.BIMProperties.data_dir = os.path.dirname(self.filepath)
|
||||
return {"FINISHED"}
|
||||
|
||||
def invoke(self, context, event):
|
||||
context.window_manager.fileselect_add(self)
|
||||
return {"RUNNING_MODAL"}
|
||||
|
||||
|
||||
class SelectCacheDir(bpy.types.Operator):
|
||||
bl_idname = "bim.select_cache_dir"
|
||||
bl_label = "Select Cache Directory"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
bl_description = "Select the directory that contains HDF5 cache files"
|
||||
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
|
||||
|
||||
def execute(self, context):
|
||||
context.scene.BIMProperties.cache_dir = os.path.dirname(self.filepath)
|
||||
return {"FINISHED"}
|
||||
|
||||
def invoke(self, context, event):
|
||||
context.window_manager.fileselect_add(self)
|
||||
return {"RUNNING_MODAL"}
|
||||
|
||||
|
||||
class SelectSchemaDir(bpy.types.Operator):
|
||||
bl_idname = "bim.select_schema_dir"
|
||||
bl_label = "Select Schema Directory"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
bl_description = "Select the directory containing the IFC schema specification"
|
||||
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
|
||||
|
||||
def execute(self, context):
|
||||
context.scene.BIMProperties.schema_dir = os.path.dirname(self.filepath)
|
||||
crumbs = self.data_path.split(".")
|
||||
if crumbs[0] == "preferences":
|
||||
crumbs.pop(0)
|
||||
data = tool.Blender.get_addon_preferences()
|
||||
else:
|
||||
data = context
|
||||
while crumbs:
|
||||
crumb = crumbs.pop(0)
|
||||
if crumbs:
|
||||
data = getattr(data, crumb)
|
||||
else:
|
||||
setattr(data, crumb, os.path.dirname(self.filepath))
|
||||
return {"FINISHED"}
|
||||
|
||||
def invoke(self, context, event):
|
||||
@@ -816,7 +796,9 @@ class ReloadIfcFile(bpy.types.Operator, tool.Ifc.Operator):
|
||||
logger = logging.getLogger("ImportIFC")
|
||||
path_log = tool.Blender.get_data_dir_path("process.log")
|
||||
if not os.access(path_log.parent, os.W_OK):
|
||||
path_log = os.path.join(tempfile.mkdtemp(), "process.log")
|
||||
path_log = os.path.join(
|
||||
tempfile.mkdtemp(dir=tool.Blender.get_addon_preferences().tmp_dir or None), "process.log"
|
||||
)
|
||||
logging.basicConfig(
|
||||
filename=path_log,
|
||||
filemode="a",
|
||||
|
||||
@@ -245,6 +245,10 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences):
|
||||
description="If disabled, the toolbar will only load when an IFC model is active",
|
||||
)
|
||||
should_play_chaching_sound: BoolProperty(name="Play A Cha-Ching Sound When Project Costs Updates", default=False)
|
||||
tmp_dir: StringProperty(
|
||||
name="Temporary Directory",
|
||||
description='Path to create and store temporary files. If left blank, a system default will be used.',
|
||||
)
|
||||
spatial_elements_unselectable: BoolProperty(
|
||||
name="Make Spatial Elements Unselectable By Default",
|
||||
default=True,
|
||||
@@ -356,11 +360,15 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences):
|
||||
def draw_directories(self, layout, context):
|
||||
row = layout.row(align=True)
|
||||
row.prop(context.scene.BIMProperties, "data_dir")
|
||||
row.operator("bim.select_data_dir", icon="FILE_FOLDER", text="")
|
||||
row.operator("bim.select_dir", icon="FILE_FOLDER", text="").data_path = "scene.BIMProperties.data_dir"
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.prop(context.scene.BIMProperties, "cache_dir")
|
||||
row.operator("bim.select_cache_dir", icon="FILE_FOLDER", text="")
|
||||
row.operator("bim.select_dir", icon="FILE_FOLDER", text="").data_path = "scene.BIMProperties.cache_dir"
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.prop(self, "tmp_dir")
|
||||
row.operator("bim.select_dir", icon="FILE_FOLDER", text="").data_path = "preferences.tmp_dir"
|
||||
|
||||
def draw_drawing_settings(self, layout, context):
|
||||
layout.prop(context.scene.BIMProperties, "pset_dir")
|
||||
|
||||
Reference in New Issue
Block a user