diff --git a/src/blenderbim/blenderbim/bim/module/sequence/__init__.py b/src/blenderbim/blenderbim/bim/module/sequence/__init__.py index 2f4ec07df1..c3a4eb3788 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/__init__.py @@ -99,6 +99,8 @@ classes = ( operator.RemoveWorkTime, operator.SelectTaskRelatedProducts, operator.SelectTaskRelatedInputs, + operator.SelectWorkScheduleProducts, + operator.SelectUnassignedWorkScheduleProducts, operator.SetTaskSortColumn, operator.SetupDefaultTaskColumns, operator.UnassignLagTime, diff --git a/src/blenderbim/blenderbim/bim/module/sequence/data.py b/src/blenderbim/blenderbim/bim/module/sequence/data.py index 81df761372..f414efde44 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/data.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/data.py @@ -19,6 +19,7 @@ import bpy import blenderbim.tool as tool import ifcopenshell +from ifcopenshell.util.doc import get_predefined_type_doc def refresh(): @@ -34,6 +35,7 @@ class SequenceData: @classmethod def load(cls): cls.data = { + "predefined_types": cls.get_work_schedule_types(), "has_work_plans": cls.has_work_plans(), "has_work_schedules": cls.has_work_schedules(), "has_work_calendars": cls.has_work_calendars(), @@ -223,6 +225,22 @@ class SequenceData: data["HasAssignmentsWorkCalendar"].append(rel.RelatingControl.id()) cls.data["tasks"][task.id()] = data + @classmethod + def get_work_schedule_types(cls): + results = [] + declaration = tool.Ifc().schema().declaration_by_name("IfcWorkSchedule") + version = tool.Ifc.get_schema() + for attribute in declaration.attributes(): + if attribute.name() == "PredefinedType": + results.extend( + [ + (e, e, get_predefined_type_doc(version, "IfcWorkSchedule", e)) + for e in attribute.type_of_attribute().declared_type().enumeration_items() + ] + ) + break + return results + class WorkPlansData: data = {} diff --git a/src/blenderbim/blenderbim/bim/module/sequence/operator.py b/src/blenderbim/blenderbim/bim/module/sequence/operator.py index f4386c64a8..6ac4d4c926 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/operator.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/operator.py @@ -1327,3 +1327,31 @@ class HighlightTask(bpy.types.Operator): if isinstance(r, str): self.report({"WARNING"}, r) return {"FINISHED"} + + +class SelectWorkScheduleProducts(bpy.types.Operator): + bl_idname = "bim.select_work_schedule_products" + bl_label = "Select Work Schedule Products" + bl_options = {"REGISTER", "UNDO"} + work_schedule: bpy.props.IntProperty() + + def execute(self, context): + r = core.select_work_schedule_products( + tool.Sequence, tool.Spatial, work_schedule=tool.Ifc.get().by_id(self.work_schedule) + ) + if isinstance(r, str): + self.report({"WARNING"}, r) + return {"FINISHED"} + + +class SelectUnassignedWorkScheduleProducts(bpy.types.Operator): + bl_idname = "bim.select_unassigned_work_schedule_products" + bl_label = "Select Unassigned Work Schedule Products" + bl_options = {"REGISTER", "UNDO"} + work_schedule: bpy.props.IntProperty() + + def execute(self, context): + r = core.select_unassigned_work_schedule_products(tool.Ifc, tool.Sequence, tool.Spatial) + if isinstance(r, str): + self.report({"WARNING"}, r) + return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/sequence/prop.py b/src/blenderbim/blenderbim/bim/module/sequence/prop.py index 2f97ab598a..c27a1d20f1 100644 --- a/src/blenderbim/blenderbim/bim/module/sequence/prop.py +++ b/src/blenderbim/blenderbim/bim/module/sequence/prop.py @@ -228,6 +228,12 @@ def updateTaskDuration(self, context): bpy.ops.bim.load_task_properties() +def get_schedule_predefined_types(self, context): + if not SequenceData.is_loaded: + SequenceData.load() + return SequenceData.data["predefined_types"] + + def update_visualisation_start(self, context): update_visualisation_start_finish(self, context, "visualisation_start") @@ -335,6 +341,9 @@ class ISODuration(PropertyGroup): class BIMWorkScheduleProperties(PropertyGroup): + work_schedule_predefined_types: EnumProperty( + items=get_schedule_predefined_types, name="Predefined Type", default=None + ) durations_attributes: CollectionProperty(name="Durations Attributes", type=ISODuration) work_calendars: EnumProperty(items=getWorkCalendars, name="Work Calendars") work_schedule_attributes: CollectionProperty(name="Work Schedule Attributes", type=Attribute) @@ -346,7 +355,7 @@ class BIMWorkScheduleProperties(PropertyGroup): active_task_id: IntProperty(name="Active Task Id") task_attributes: CollectionProperty(name="Task Attributes", type=Attribute) should_show_visualisation_ui: BoolProperty(name="Should Show Visualisation UI", default=False) - should_show_bar_visual_option: BoolProperty(name="Should Show Settings UI", default=False) + should_show_bar_visual_option: BoolProperty(name="Add to task bar", default=False) should_show_column_ui: BoolProperty(name="Should Show Column UI", default=False) columns: CollectionProperty(name="Columns", type=Attribute) active_column_index: IntProperty(name="Active Column Index") @@ -501,3 +510,4 @@ class BIMAnimationProperties(PropertyGroup): description="color picker", update=update_color_progress, ) + should_show_task_bar_options: BoolProperty(name="Show Task Bar Options", default=False)