mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 19:49:58 +00:00
Changing task scheduled dates now auto updates its related quantity take off data
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import bpy
|
import bpy
|
||||||
import ifcopenshell
|
import ifcopenshell
|
||||||
import ifcopenshell.api
|
import ifcopenshell.api
|
||||||
from blenderbim.bim.module.model import root, product, wall, slab, profile, opening
|
from blenderbim.bim.module.model import root, product, wall, slab, profile, opening, task
|
||||||
from blenderbim.bim.ifc import IfcStore
|
from blenderbim.bim.ifc import IfcStore
|
||||||
from bpy.app.handlers import persistent
|
from bpy.app.handlers import persistent
|
||||||
|
|
||||||
@@ -15,6 +15,11 @@ def load_post(*args):
|
|||||||
ifcopenshell.api.add_post_listener(
|
ifcopenshell.api.add_post_listener(
|
||||||
"geometry.add_representation", "BlenderBIM.Product.GenerateBox", product.generate_box
|
"geometry.add_representation", "BlenderBIM.Product.GenerateBox", product.generate_box
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ifcopenshell.api.add_post_listener(
|
||||||
|
"sequence.edit_task_time", "BlenderBIM.Task.CalculateQuantities", task.calculate_quantities
|
||||||
|
)
|
||||||
|
|
||||||
ifcopenshell.api.add_post_listener(
|
ifcopenshell.api.add_post_listener(
|
||||||
"material.edit_profile_usage",
|
"material.edit_profile_usage",
|
||||||
"BlenderBIM.Product.RegenerateProfileUsage",
|
"BlenderBIM.Product.RegenerateProfileUsage",
|
||||||
@@ -22,8 +27,10 @@ def load_post(*args):
|
|||||||
)
|
)
|
||||||
|
|
||||||
IfcStore.add_element_listener(opening.element_listener)
|
IfcStore.add_element_listener(opening.element_listener)
|
||||||
|
|
||||||
IfcStore.add_element_listener(wall.element_listener)
|
IfcStore.add_element_listener(wall.element_listener)
|
||||||
|
IfcStore.add_element_listener(slab.element_listener)
|
||||||
|
IfcStore.add_element_listener(profile.element_listener)
|
||||||
|
|
||||||
ifcopenshell.api.add_pre_listener(
|
ifcopenshell.api.add_pre_listener(
|
||||||
"geometry.add_representation", "BlenderBIM.DumbWall.EnsureSolid", wall.ensure_solid
|
"geometry.add_representation", "BlenderBIM.DumbWall.EnsureSolid", wall.ensure_solid
|
||||||
)
|
)
|
||||||
@@ -40,7 +47,6 @@ def load_post(*args):
|
|||||||
"type.assign_type", "BlenderBIM.DumbWall.RegenerateFromType", wall.DumbWallPlaner().regenerate_from_type
|
"type.assign_type", "BlenderBIM.DumbWall.RegenerateFromType", wall.DumbWallPlaner().regenerate_from_type
|
||||||
)
|
)
|
||||||
|
|
||||||
IfcStore.add_element_listener(slab.element_listener)
|
|
||||||
ifcopenshell.api.add_pre_listener(
|
ifcopenshell.api.add_pre_listener(
|
||||||
"geometry.add_representation", "BlenderBIM.DumbSlab.EnsureSolid", slab.ensure_solid
|
"geometry.add_representation", "BlenderBIM.DumbSlab.EnsureSolid", slab.ensure_solid
|
||||||
)
|
)
|
||||||
@@ -57,7 +63,6 @@ def load_post(*args):
|
|||||||
"type.assign_type", "BlenderBIM.DumbSlab.RegenerateFromType", slab.DumbSlabPlaner().regenerate_from_type
|
"type.assign_type", "BlenderBIM.DumbSlab.RegenerateFromType", slab.DumbSlabPlaner().regenerate_from_type
|
||||||
)
|
)
|
||||||
|
|
||||||
IfcStore.add_element_listener(profile.element_listener)
|
|
||||||
ifcopenshell.api.add_pre_listener(
|
ifcopenshell.api.add_pre_listener(
|
||||||
"geometry.add_representation", "BlenderBIM.DumbProfile.EnsureSolid", profile.ensure_solid
|
"geometry.add_representation", "BlenderBIM.DumbProfile.EnsureSolid", profile.ensure_solid
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import ifcopenshell
|
||||||
|
import ifcopenshell.api
|
||||||
|
import ifcopenshell.util.date
|
||||||
|
from ifcopenshell.api.pset.data import Data as PsetData
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_quantities(usecase_path, ifc_file, settings):
|
||||||
|
if not set(["ScheduleStart", "ScheduleFinish", "ScheduleDuration"]).intersection(
|
||||||
|
set(settings["attributes"].keys())
|
||||||
|
):
|
||||||
|
return
|
||||||
|
element = settings["task_time"]
|
||||||
|
if not element.ScheduleDuration:
|
||||||
|
return
|
||||||
|
task = [e for e in ifc_file.get_inverse(element) if e.is_a("IfcTask")][0]
|
||||||
|
qto = ifcopenshell.api.run(
|
||||||
|
"pset.add_qto", ifc_file, should_run_listeners=False, product=task, name="Qto_TaskBaseQuantities"
|
||||||
|
)
|
||||||
|
ifcopenshell.api.run(
|
||||||
|
"pset.edit_qto",
|
||||||
|
ifc_file,
|
||||||
|
should_run_listeners=False,
|
||||||
|
qto=qto,
|
||||||
|
properties={
|
||||||
|
"StandardWork": ifcopenshell.util.date.ifc2datetime(element.ScheduleDuration).days,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
PsetData.load(ifc_file, task.id())
|
||||||
Reference in New Issue
Block a user