mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-17 22:11:36 +00:00
You can now manually type in start/end dates for construction sequence visualisation instead of clicking the date picker hundreds of times.
This commit is contained in:
@@ -305,9 +305,7 @@ class CreateDrawing(bpy.types.Operator):
|
|||||||
# Exclude all annotation apart from the active one so we don't cut through them
|
# Exclude all annotation apart from the active one so we don't cut through them
|
||||||
exclude += [e for e in f.by_type("IfcAnnotation") if e != self.camera_element]
|
exclude += [e for e in f.by_type("IfcAnnotation") if e != self.camera_element]
|
||||||
|
|
||||||
iterators.append(
|
iterators.append(ifcopenshell.geom.iterator(geom_settings, f, multiprocessing.cpu_count(), exclude=exclude))
|
||||||
ifcopenshell.geom.iterator(geom_settings, f, multiprocessing.cpu_count(), exclude=exclude)
|
|
||||||
)
|
|
||||||
|
|
||||||
with open(svg_path, "w") as svg:
|
with open(svg_path, "w") as svg:
|
||||||
results = ifcopenshell.draw.main(draw_settings, files, iterators=iterators, merge_projection=False)
|
results = ifcopenshell.draw.main(draw_settings, files, iterators=iterators, merge_projection=False)
|
||||||
@@ -397,7 +395,6 @@ class CreateDrawing(bpy.types.Operator):
|
|||||||
numerator, denominator = fraction.split("/")
|
numerator, denominator = fraction.split("/")
|
||||||
self.scale = float(numerator) / float(denominator)
|
self.scale = float(numerator) / float(denominator)
|
||||||
|
|
||||||
|
|
||||||
def is_landscape(self, render):
|
def is_landscape(self, render):
|
||||||
return render.resolution_x > render.resolution_y
|
return render.resolution_x > render.resolution_y
|
||||||
|
|
||||||
|
|||||||
@@ -79,17 +79,3 @@ def canonicalise_time(time):
|
|||||||
if not time:
|
if not time:
|
||||||
return "-"
|
return "-"
|
||||||
return time.strftime("%d/%m/%y")
|
return time.strftime("%d/%m/%y")
|
||||||
|
|
||||||
|
|
||||||
def get_scene_prop(prop_path):
|
|
||||||
prop = bpy.context.scene.get(prop_path.split(".")[0])
|
|
||||||
for part in prop_path.split(".")[1:]:
|
|
||||||
if part:
|
|
||||||
prop = prop.get(part)
|
|
||||||
return prop
|
|
||||||
|
|
||||||
|
|
||||||
def set_scene_prop(prop_path, value):
|
|
||||||
parent = get_scene_prop(prop_path[: prop_path.rfind(".")])
|
|
||||||
prop = prop_path.split(".")[-1]
|
|
||||||
parent[prop] = value
|
|
||||||
|
|||||||
@@ -1097,6 +1097,7 @@ class ImportP6(bpy.types.Operator, ImportHelper):
|
|||||||
print("Import finished in {:.2f} seconds".format(time.time() - start))
|
print("Import finished in {:.2f} seconds".format(time.time() - start))
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
class ImportP6XER(bpy.types.Operator, ImportHelper):
|
class ImportP6XER(bpy.types.Operator, ImportHelper):
|
||||||
bl_idname = "import_p6xer.bim"
|
bl_idname = "import_p6xer.bim"
|
||||||
bl_label = "Import P6 XER"
|
bl_label = "Import P6 XER"
|
||||||
@@ -1118,6 +1119,7 @@ class ImportP6XER(bpy.types.Operator, ImportHelper):
|
|||||||
print("Import finished in {:.2f} seconds".format(time.time() - start))
|
print("Import finished in {:.2f} seconds".format(time.time() - start))
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
class ImportP6XER(bpy.types.Operator, ImportHelper):
|
class ImportP6XER(bpy.types.Operator, ImportHelper):
|
||||||
bl_idname = "import_p6xer.bim"
|
bl_idname = "import_p6xer.bim"
|
||||||
bl_label = "Import P6 XER"
|
bl_label = "Import P6 XER"
|
||||||
@@ -2000,17 +2002,17 @@ class BlenderBIM_DatePicker(bpy.types.Operator):
|
|||||||
bl_idname = "bim.datepicker"
|
bl_idname = "bim.datepicker"
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
display_date: bpy.props.StringProperty(name="Display Date")
|
display_date: bpy.props.StringProperty(name="Display Date")
|
||||||
selected_date: bpy.props.StringProperty(name="Selected Date")
|
|
||||||
target_prop: bpy.props.StringProperty(name="Target date prop to set")
|
target_prop: bpy.props.StringProperty(name="Target date prop to set")
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
helper.set_scene_prop(self.target_prop, self.selected_date)
|
try:
|
||||||
|
value = parser.parse(context.scene.DatePickerProperties.selected_date, dayfirst=True, fuzzy=True)
|
||||||
|
self.set_scene_prop(self.target_prop, helper.canonicalise_time(value))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
self.selected_date = helper.get_scene_prop("DatePickerProperties.selected_date") or helper.canonicalise_time(
|
|
||||||
datetime.now()
|
|
||||||
)
|
|
||||||
current_date = parser.parse(context.scene.DatePickerProperties.display_date, dayfirst=True, fuzzy=True)
|
current_date = parser.parse(context.scene.DatePickerProperties.display_date, dayfirst=True, fuzzy=True)
|
||||||
current_month = (current_date.year, current_date.month)
|
current_month = (current_date.year, current_date.month)
|
||||||
lines = calendar.monthcalendar(*current_month)
|
lines = calendar.monthcalendar(*current_month)
|
||||||
@@ -2018,7 +2020,7 @@ class BlenderBIM_DatePicker(bpy.types.Operator):
|
|||||||
|
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(self, "selected_date")
|
row.prop(context.scene.DatePickerProperties, "selected_date")
|
||||||
|
|
||||||
split = layout.split()
|
split = layout.split()
|
||||||
col = split.row()
|
col = split.row()
|
||||||
@@ -2050,11 +2052,23 @@ class BlenderBIM_DatePicker(bpy.types.Operator):
|
|||||||
op.selected_date = helper.canonicalise_time(selected_date)
|
op.selected_date = helper.canonicalise_time(selected_date)
|
||||||
|
|
||||||
def invoke(self, context, event):
|
def invoke(self, context, event):
|
||||||
self.display_date = helper.get_scene_prop(self.target_prop) or helper.canonicalise_time(datetime.now())
|
self.display_date = self.get_scene_prop(self.target_prop) or helper.canonicalise_time(datetime.now())
|
||||||
context.scene.DatePickerProperties.display_date = self.display_date
|
context.scene.DatePickerProperties.display_date = self.display_date
|
||||||
context.scene.DatePickerProperties.selected_date = self.display_date
|
context.scene.DatePickerProperties.selected_date = self.display_date
|
||||||
return context.window_manager.invoke_props_dialog(self)
|
return context.window_manager.invoke_props_dialog(self)
|
||||||
|
|
||||||
|
def get_scene_prop(self, prop_path):
|
||||||
|
prop = bpy.context.scene.get(prop_path.split(".")[0])
|
||||||
|
for part in prop_path.split(".")[1:]:
|
||||||
|
if part:
|
||||||
|
prop = prop.get(part)
|
||||||
|
return prop
|
||||||
|
|
||||||
|
def set_scene_prop(self, prop_path, value):
|
||||||
|
parent = self.get_scene_prop(prop_path[: prop_path.rfind(".")])
|
||||||
|
prop = prop_path.split(".")[-1]
|
||||||
|
parent[prop] = value
|
||||||
|
|
||||||
|
|
||||||
class BlenderBIM_DatePickerSetDate(bpy.types.Operator):
|
class BlenderBIM_DatePickerSetDate(bpy.types.Operator):
|
||||||
bl_label = "set date"
|
bl_label = "set date"
|
||||||
|
|||||||
@@ -386,8 +386,8 @@ class BIMWorkCalendarProperties(PropertyGroup):
|
|||||||
|
|
||||||
|
|
||||||
class DatePickerProperties(PropertyGroup):
|
class DatePickerProperties(PropertyGroup):
|
||||||
display_date: StringProperty()
|
display_date: StringProperty(name="Display Date")
|
||||||
selected_date: StringProperty()
|
selected_date: StringProperty(name="Selected Date")
|
||||||
|
|
||||||
|
|
||||||
class BIMDateTextProperties(PropertyGroup):
|
class BIMDateTextProperties(PropertyGroup):
|
||||||
|
|||||||
@@ -203,12 +203,10 @@ class BIM_PT_work_schedules(Panel):
|
|||||||
|
|
||||||
def draw_visualisation_ui(self):
|
def draw_visualisation_ui(self):
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
target_prop = "BIMWorkScheduleProperties.visualisation_start"
|
op = row.operator("bim.datepicker", text=self.props.visualisation_start or "Start Date", icon="REW")
|
||||||
op = row.operator("bim.datepicker", text=helper.get_scene_prop(target_prop), icon="REW")
|
op.target_prop = "BIMWorkScheduleProperties.visualisation_start"
|
||||||
op.target_prop = target_prop
|
op = row.operator("bim.datepicker", text=self.props.visualisation_finish or "Finish Date", icon="FF")
|
||||||
target_prop = "BIMWorkScheduleProperties.visualisation_finish"
|
op.target_prop = "BIMWorkScheduleProperties.visualisation_finish"
|
||||||
op = row.operator("bim.datepicker", text=helper.get_scene_prop(target_prop), icon="FF")
|
|
||||||
op.target_prop = target_prop
|
|
||||||
op = row.operator("bim.visualise_work_schedule_date", text="", icon="RESTRICT_RENDER_OFF")
|
op = row.operator("bim.visualise_work_schedule_date", text="", icon="RESTRICT_RENDER_OFF")
|
||||||
op.work_schedule = self.props.active_work_schedule_id
|
op.work_schedule = self.props.active_work_schedule_id
|
||||||
op = row.operator("bim.visualise_work_schedule_date_range", text="", icon="OUTLINER_OB_CAMERA")
|
op = row.operator("bim.visualise_work_schedule_date_range", text="", icon="OUTLINER_OB_CAMERA")
|
||||||
|
|||||||
Reference in New Issue
Block a user