Beispiel #1
0
    def draw(self, context):
        if not Data.is_loaded:
            Data.load(IfcStore.get_file())

        self.props = context.scene.BIMClassificationProperties

        if Data.library_file:
            row = self.layout.row(align=True)
            row.prop(self.props, "available_classifications", text="")
            row.operator("bim.load_classification_library",
                         text="",
                         icon="IMPORT")
            row.operator("bim.add_classification", text="", icon="ADD")
        else:
            row = self.layout.row(align=True)
            row.label(text="No Active Classification Library")
            row.operator("bim.load_classification_library",
                         text="",
                         icon="IMPORT")

        for classification_id, classification in Data.classifications.items():
            if self.props.active_classification_id == classification_id:
                self.draw_editable_ui(classification)
            else:
                self.draw_ui(classification_id, classification)
Beispiel #2
0
    def _execute(self, context):
        obj = bpy.data.objects.get(
            self.obj) if self.obj else context.active_object
        self.file = IfcStore.get_file()

        classification = None

        props = context.scene.BIMClassificationProperties
        classification_name = Data.library_classifications[int(
            props.available_classifications)]
        for classification_id, classification in Data.classifications.items():
            if classification["Name"] == classification_name:
                classification = self.file.by_id(classification_id)
                break

        ifcopenshell.api.run(
            "classification.add_reference",
            self.file,
            **{
                "reference":
                Data.library_file.by_id(self.reference),
                "product":
                self.file.by_id(obj.BIMObjectProperties.ifc_definition_id),
                "classification":
                classification,
            },
        )
        Data.load(IfcStore.get_file(),
                  obj.BIMObjectProperties.ifc_definition_id)
        Data.load(IfcStore.get_file())
        return {"FINISHED"}
Beispiel #3
0
 def _execute(self, context):
     self.file = IfcStore.get_file()
     ifcopenshell.api.run(
         "classification.remove_classification",
         self.file,
         **{"classification": self.file.by_id(self.classification)},
     )
     Data.load(IfcStore.get_file())
     return {"FINISHED"}
Beispiel #4
0
 def _execute(self, context):
     props = context.scene.BIMClassificationProperties
     ifcopenshell.api.run(
         "classification.add_classification",
         IfcStore.get_file(),
         **{
             "classification":
             Data.library_file.by_id(int(props.available_classifications))
         },
     )
     Data.load(IfcStore.get_file())
     return {"FINISHED"}
Beispiel #5
0
 def _execute(self, context):
     obj = bpy.data.objects.get(
         self.obj) if self.obj else context.active_object
     self.file = IfcStore.get_file()
     ifcopenshell.api.run(
         "classification.remove_reference",
         self.file,
         **{
             "reference":
             self.file.by_id(self.reference),
             "product":
             self.file.by_id(obj.BIMObjectProperties.ifc_definition_id),
         },
     )
     Data.load(IfcStore.get_file(),
               obj.BIMObjectProperties.ifc_definition_id)
     Data.load(IfcStore.get_file())
     return {"FINISHED"}
Beispiel #6
0
 def _execute(self, context):
     obj = bpy.data.objects.get(
         self.obj) if self.obj else context.active_object
     props = obj.BIMClassificationReferenceProperties
     attributes = {}
     for attribute in props.reference_attributes:
         if attribute.is_null:
             attributes[attribute.name] = None
         else:
             attributes[attribute.name] = attribute.string_value
     self.file = IfcStore.get_file()
     ifcopenshell.api.run(
         "classification.edit_reference",
         self.file,
         **{
             "reference": self.file.by_id(props.active_reference_id),
             "attributes": attributes
         },
     )
     Data.load(IfcStore.get_file())
     bpy.ops.bim.disable_editing_classification_reference()
     return {"FINISHED"}
Beispiel #7
0
 def _execute(self, context):
     props = context.scene.BIMClassificationProperties
     attributes = {}
     for attribute in props.classification_attributes:
         if attribute.is_null:
             attributes[attribute.name] = None
         elif attribute.name == "ReferenceTokens":
             attributes[attribute.name] = json.loads(attribute.string_value)
         else:
             attributes[attribute.name] = attribute.string_value
     self.file = IfcStore.get_file()
     ifcopenshell.api.run(
         "classification.edit_classification",
         self.file,
         **{
             "classification":
             self.file.by_id(props.active_classification_id),
             "attributes": attributes
         },
     )
     Data.load(IfcStore.get_file())
     bpy.ops.bim.disable_editing_classification()
     return {"FINISHED"}
Beispiel #8
0
    def draw(self, context):
        obj = context.active_object
        self.oprops = obj.BIMObjectProperties
        self.sprops = context.scene.BIMClassificationProperties
        self.props = obj.BIMClassificationReferenceProperties
        self.file = IfcStore.get_file()
        if not Data.is_loaded:
            Data.load(IfcStore.get_file())
        if self.oprops.ifc_definition_id not in Data.products:
            Data.load(IfcStore.get_file(), self.oprops.ifc_definition_id)

        self.draw_add_ui(context)

        reference_ids = Data.products[self.oprops.ifc_definition_id]
        if not reference_ids:
            row = self.layout.row(align=True)
            row.label(text="No References")

        for reference_id in reference_ids:
            reference = Data.references[reference_id]
            if self.props.active_reference_id == reference_id:
                self.draw_editable_ui(reference)
            else:
                self.draw_ui(reference_id, reference)
Beispiel #9
0
 def execute(self, context):
     Data.load_library(self.filepath)
     getClassifications(self, context)
     return {"FINISHED"}