WIP port pset template module. It probably needs rewriting, but at least no regressions. See #1222.

This commit is contained in:
Dion Moult
2021-01-24 19:17:33 +11:00
parent 9d893d2c5a
commit af3ed303d8
8 changed files with 427 additions and 385 deletions
@@ -30,6 +30,7 @@ if bpy is not None:
"owner": None,
"project": None,
"pset": None,
"pset_template": None,
"qto": None,
"search": None,
"spatial": None,
@@ -97,12 +98,6 @@ if bpy is not None:
operator.SelectSmartGroup,
operator.LoadSmartGroupsForActiveClashSet,
operator.OpenUpstream,
operator.AddPropertySetTemplate,
operator.RemovePropertySetTemplate,
operator.EditPropertySetTemplate,
operator.SavePropertySetTemplate,
operator.AddPropertyTemplate,
operator.RemovePropertyTemplate,
operator.AddSectionPlane,
operator.RemoveSectionPlane,
operator.ReloadIfcFile,
@@ -154,8 +149,6 @@ if bpy is not None:
prop.StrProperty,
prop.Attribute,
prop.Variable,
prop.PropertySetTemplate,
prop.PropertyTemplate,
prop.ClashSource,
prop.ClashSet,
prop.SmartClashGroup,
@@ -183,7 +176,6 @@ if bpy is not None:
ui.BIM_PT_drawings,
ui.BIM_PT_schedules,
ui.BIM_PT_sheets,
ui.BIM_PT_psets,
ui.BIM_PT_ifcclash,
ui.BIM_PT_library,
ui.BIM_PT_presentation_layers,
@@ -0,0 +1,23 @@
import bpy
from . import ui, prop, operator
classes = (
operator.AddPropertySetTemplate,
operator.RemovePropertySetTemplate,
operator.EditPropertySetTemplate,
operator.SavePropertySetTemplate,
operator.AddPropertyTemplate,
operator.RemovePropertyTemplate,
prop.PropertySetTemplate,
prop.PropertyTemplate,
prop.BIMPsetTemplateProperties,
ui.BIM_PT_pset_template,
)
def register():
bpy.types.Scene.BIMPsetTemplateProperties = bpy.props.PointerProperty(type=prop.BIMPsetTemplateProperties)
def unregister():
del bpy.types.Scene.BIMPsetTemplateProperties
@@ -0,0 +1,127 @@
import bpy
import ifcopenshell
from blenderbim.bim.module.pset_template.prop import refreshPropertySetTemplates
from blenderbim.bim.ifc import IfcStore
class AddPropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.add_property_set_template"
bl_label = "Add Property Set Template"
def execute(self, context):
props = context.scene.BIMPsetTemplateProperties
props.active_property_set_template.global_id = ""
props.active_property_set_template.name = "New_Pset"
props.active_property_set_template.description = ""
props.active_property_set_template.template_type = "PSET_TYPEDRIVENONLY"
props.active_property_set_template.applicable_entity = "IfcTypeObject"
while len(props.property_templates) > 0:
props.property_templates.remove(0)
return {"FINISHED"}
class RemovePropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.remove_property_set_template"
bl_label = "Remove Property Set Template"
def execute(self, context):
props = context.scene.BIMPsetTemplateProperties
template = IfcStore.pset_template_file.by_guid(props.property_set_templates)
IfcStore.pset_template_file.remove(template)
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
refreshPropertySetTemplates(self, context)
return {"FINISHED"}
class EditPropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.edit_property_set_template"
bl_label = "Edit Property Set Template"
def execute(self, context):
props = context.scene.BIMPsetTemplateProperties
template = IfcStore.pset_template_file.by_guid(props.property_set_templates)
props.active_property_set_template.global_id = template.GlobalId
props.active_property_set_template.name = template.Name
props.active_property_set_template.description = template.Description
props.active_property_set_template.template_type = template.TemplateType
props.active_property_set_template.applicable_entity = template.ApplicableEntity
while len(props.property_templates) > 0:
props.property_templates.remove(0)
if template.HasPropertyTemplates:
for property_template in template.HasPropertyTemplates:
if not property_template.is_a("IfcSimplePropertyTemplate"):
continue
new = props.property_templates.add()
new.global_id = property_template.GlobalId
new.name = property_template.Name
new.description = property_template.Description
new.primary_measure_type = property_template.PrimaryMeasureType
return {"FINISHED"}
class SavePropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.save_property_set_template"
bl_label = "Save Property Set Template"
def execute(self, context):
props = context.scene.BIMPsetTemplateProperties
blender_property_set_template = props.active_property_set_template
if blender_property_set_template.global_id:
template = IfcStore.pset_template_file.by_guid(blender_property_set_template.global_id)
else:
template = IfcStore.pset_template_file.createIfcPropertySetTemplate()
template.GlobalId = ifcopenshell.guid.new()
template.Name = blender_property_set_template.name
template.Description = blender_property_set_template.description
template.TemplateType = blender_property_set_template.template_type
template.ApplicableEntity = blender_property_set_template.applicable_entity
saved_global_ids = []
for blender_property_template in props.property_templates:
if blender_property_template.global_id:
property_template = IfcStore.pset_template_file.by_guid(blender_property_template.global_id)
else:
property_template = IfcStore.pset_template_file.createIfcSimplePropertyTemplate()
property_template.GlobalId = ifcopenshell.guid.new()
if template.HasPropertyTemplates:
has_property_templates = list(template.HasPropertyTemplates)
else:
has_property_templates = []
has_property_templates.append(property_template)
template.HasPropertyTemplates = has_property_templates
property_template.Name = blender_property_template.name
property_template.Description = blender_property_template.description
property_template.PrimaryMeasureType = blender_property_template.primary_measure_type
property_template.TemplateType = "P_SINGLEVALUE"
property_template.AccessState = "READWRITE"
saved_global_ids.append(property_template.GlobalId)
for element in template.HasPropertyTemplates:
if element.GlobalId not in saved_global_ids:
IfcStore.pset_template_file.remove(element)
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
refreshPropertySetTemplates(self, context)
return {"FINISHED"}
class AddPropertyTemplate(bpy.types.Operator):
bl_idname = "bim.add_property_template"
bl_label = "Add Property Template"
def execute(self, context):
context.scene.BIMPsetTemplateProperties.property_templates.add()
return {"FINISHED"}
class RemovePropertyTemplate(bpy.types.Operator):
bl_idname = "bim.remove_property_template"
bl_label = "Remove Property Template"
index: bpy.props.IntProperty()
def execute(self, context):
bpy.context.scene.BIMPsetTemplateProperties.property_templates.remove(self.index)
return {"FINISHED"}
@@ -0,0 +1,229 @@
import os
import bpy
import ifcopenshell
from blenderbim.bim.prop import StrProperty, Attribute
from blenderbim.bim.ifc import IfcStore
from bpy.types import PropertyGroup
from bpy.props import (
PointerProperty,
StringProperty,
EnumProperty,
BoolProperty,
IntProperty,
FloatProperty,
FloatVectorProperty,
CollectionProperty,
)
psettemplatefiles_enum = []
propertysettemplates_enum = []
def refreshPropertySetTemplates(self, context):
global propertysettemplates_enum
propertysettemplates_enum.clear()
getPropertySetTemplates(self, context)
def getPsetTemplateFiles(self, context):
global psettemplatefiles_enum
if len(psettemplatefiles_enum) < 1:
files = os.listdir(os.path.join(context.scene.BIMProperties.data_dir, "pset"))
psettemplatefiles_enum.extend([(f.replace(".ifc", ""), f.replace(".ifc", ""), "") for f in files])
return psettemplatefiles_enum
def getPropertySetTemplates(self, context):
global propertysettemplates_enum
if len(propertysettemplates_enum) < 1:
IfcStore.pset_template_path = os.path.join(
context.scene.BIMProperties.data_dir, "pset", context.scene.BIMPsetTemplateProperties.pset_template_files + ".ifc"
)
IfcStore.pset_template_file = ifcopenshell.open(IfcStore.pset_template_path)
templates = IfcStore.pset_template_file.by_type("IfcPropertySetTemplate")
propertysettemplates_enum.extend([(t.GlobalId, t.Name, "") for t in templates])
return propertysettemplates_enum
class PropertySetTemplate(PropertyGroup):
global_id: StringProperty(name="Global ID")
name: StringProperty(name="Name")
description: StringProperty(name="Description")
template_type: EnumProperty(
items=[
(
"PSET_TYPEDRIVENONLY",
"Pset - IfcTypeObject",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
),
(
"PSET_TYPEDRIVENOVERRIDE",
"Pset - IfcTypeObject - Override",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
),
(
"PSET_OCCURRENCEDRIVEN",
"Pset - IfcObject",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcObject.",
),
(
"PSET_PERFORMANCEDRIVEN",
"Pset - IfcPerformanceHistory",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to IfcPerformanceHistory.",
),
(
"QTO_TYPEDRIVENONLY",
"Qto - IfcTypeObject",
"The element quantity defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
),
(
"QTO_TYPEDRIVENOVERRIDE",
"Qto - IfcTypeObject - Override",
"The element quantity defined by this IfcPropertySetTemplate can be assigned to subtypes of IfcTypeObject and can be overridden by an element quantity with same name at subtypes of IfcObject.",
),
(
"QTO_OCCURRENCEDRIVEN",
"Qto - IfcObject",
"The element quantity defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcObject.",
),
(
"NOTDEFINED",
"Not defined",
"No restriction provided, the property sets defined by this IfcPropertySetTemplate can be assigned to any entity, if not otherwise restricted by the ApplicableEntity attribute.",
),
],
name="Template Type",
)
applicable_entity: StringProperty(name="Applicable Entity")
class PropertyTemplate(PropertyGroup):
global_id: StringProperty(name="Global ID")
name: StringProperty(name="Name")
description: StringProperty(name="Description")
primary_measure_type: EnumProperty(
items=[
(x, x, "")
for x in [
"IfcInteger",
"IfcReal",
"IfcBoolean",
"IfcIdentifier",
"IfcText",
"IfcLabel",
"IfcLogical",
"IfcDateTime",
"IfcDate",
"IfcTime",
"IfcDuration",
"IfcTimeStamp",
"IfcPositiveInteger",
"IfcBinary",
"IfcVolumeMeasure",
"IfcTimeMeasure",
"IfcThermodynamicTemperatureMeasure",
"IfcSolidAngleMeasure",
"IfcPositiveRatioMeasure",
"IfcRatioMeasure",
"IfcPositivePlaneAngleMeasure",
"IfcPlaneAngleMeasure",
"IfcParameterValue",
"IfcNumericMeasure",
"IfcMassMeasure",
"IfcPositiveLengthMeasure",
"IfcLengthMeasure",
"IfcElectricCurrentMeasure",
"IfcDescriptiveMeasure",
"IfcCountMeasure",
"IfcContextDependentMeasure",
"IfcAreaMeasure",
"IfcAmountOfSubstanceMeasure",
"IfcLuminousIntensityMeasure",
"IfcNormalisedRatioMeasure",
"IfcComplexNumber",
"IfcNonNegativeLengthMeasure",
"IfcAbsorbedDoseMeasure",
"IfcAccelerationMeasure",
"IfcAngularVelocityMeasure",
"IfcAreaDensityMeasure",
"IfcCompoundPlaneAngleMeasure",
"IfcCurvatureMeasure",
"IfcDoseEquivalentMeasure",
"IfcDynamicViscosityMeasure",
"IfcElectricCapacitanceMeasure",
"IfcElectricChargeMeasure",
"IfcElectricConductanceMeasure",
"IfcElectricResistanceMeasure",
"IfcElectricVoltageMeasure",
"IfcEnergyMeasure",
"IfcForceMeasure",
"IfcFrequencyMeasure",
"IfcHeatFluxDensityMeasure",
"IfcHeatingValueMeasure",
"IfcIlluminanceMeasure",
"IfcInductanceMeasure",
"IfcIntegerCountRateMeasure",
"IfcIonConcentrationMeasure",
"IfcIsothermalMoistureCapacityMeasure",
"IfcKinematicViscosityMeasure",
"IfcLinearForceMeasure",
"IfcLinearMomentMeasure",
"IfcLinearStiffnessMeasure",
"IfcLinearVelocityMeasure",
"IfcLuminousFluxMeasure",
"IfcLuminousIntensityDistributionMeasure",
"IfcMagneticFluxDensityMeasure",
"IfcMagneticFluxMeasure",
"IfcMassDensityMeasure",
"IfcMassFlowRateMeasure",
"IfcMassPerLengthMeasure",
"IfcModulusOfElasticityMeasure",
"IfcModulusOfLinearSubgradeReactionMeasure",
"IfcModulusOfRotationalSubgradeReactionMeasure",
"IfcModulusOfSubgradeReactionMeasure",
"IfcMoistureDiffusivityMeasure",
"IfcMolecularWeightMeasure",
"IfcMomentOfInertiaMeasure",
"IfcMonetaryMeasure",
"IfcPHMeasure",
"IfcPlanarForceMeasure",
"IfcPowerMeasure",
"IfcPressureMeasure",
"IfcRadioActivityMeasure",
"IfcRotationalFrequencyMeasure",
"IfcRotationalMassMeasure",
"IfcRotationalStiffnessMeasure",
"IfcSectionModulusMeasure",
"IfcSectionalAreaIntegralMeasure",
"IfcShearModulusMeasure",
"IfcSoundPowerLevelMeasure",
"IfcSoundPowerMeasure",
"IfcSoundPressureLevelMeasure",
"IfcSoundPressureMeasure",
"IfcSpecificHeatCapacityMeasure",
"IfcTemperatureGradientMeasure",
"IfcTemperatureRateOfChangeMeasure",
"IfcThermalAdmittanceMeasure",
"IfcThermalConductivityMeasure",
"IfcThermalExpansionCoefficientMeasure",
"IfcThermalResistanceMeasure",
"IfcThermalTransmittanceMeasure",
"IfcTorqueMeasure",
"IfcVaporPermeabilityMeasure",
"IfcVolumetricFlowRateMeasure",
"IfcWarpingConstantMeasure",
"IfcWarpingMomentMeasure",
]
],
name="Primary Measure Type",
)
class BIMPsetTemplateProperties(PropertyGroup):
pset_template_files: EnumProperty(
items=getPsetTemplateFiles, name="Pset Template Files", update=refreshPropertySetTemplates
)
property_set_templates: EnumProperty(items=getPropertySetTemplates, name="Pset Template Files")
active_property_set_template: PointerProperty(type=PropertySetTemplate)
property_templates: CollectionProperty(name="Property Templates", type=PropertyTemplate)
@@ -0,0 +1,47 @@
import bpy
from bpy.types import Panel
class BIM_PT_pset_template(Panel):
bl_label = "IFC Property Set Templates"
bl_idname = "BIM_PT_pset_template"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
def draw(self, context):
layout = self.layout
props = context.scene.BIMPsetTemplateProperties
row = layout.row(align=True)
row.prop(props, "pset_template_files", text="")
row = layout.row(align=True)
row.prop(props, "property_set_templates", text="")
row.operator("bim.add_property_set_template", text="", icon="ADD")
row.operator("bim.remove_property_set_template", text="", icon="PANEL_CLOSE")
row.operator("bim.edit_property_set_template", text="", icon="IMPORT")
row.operator("bim.save_property_set_template", text="", icon="EXPORT")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "name")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "description")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "template_type")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "applicable_entity")
layout.label(text="Property Templates:")
row = layout.row(align=True)
row.operator("bim.add_property_template")
for index, template in enumerate(props.property_templates):
row = layout.row(align=True)
row.prop(template, "name", text="")
row.prop(template, "description", text="")
row.prop(template, "primary_measure_type", text="")
row.operator("bim.remove_property_template", icon="X", text="").index = index
@@ -1321,129 +1321,6 @@ class CopyAttributeToSelection(bpy.types.Operator):
return self.applicable_attributes_cache[ifc_class]
class AddPropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.add_property_set_template"
bl_label = "Add Property Set Template"
def execute(self, context):
context.scene.BIMProperties.active_property_set_template.global_id = ""
context.scene.BIMProperties.active_property_set_template.name = "New_Pset"
context.scene.BIMProperties.active_property_set_template.description = ""
context.scene.BIMProperties.active_property_set_template.template_type = "PSET_TYPEDRIVENONLY"
context.scene.BIMProperties.active_property_set_template.applicable_entity = "IfcTypeObject"
while len(bpy.context.scene.BIMProperties.property_templates) > 0:
bpy.context.scene.BIMProperties.property_templates.remove(0)
return {"FINISHED"}
class RemovePropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.remove_property_set_template"
bl_label = "Remove Property Set Template"
def execute(self, context):
template = ifc.IfcStore.pset_template_file.by_guid(context.scene.BIMProperties.property_set_templates)
ifc.IfcStore.pset_template_file.remove(template)
ifc.IfcStore.pset_template_file.write(ifc.IfcStore.pset_template_path)
from . import prop
prop.refreshPropertySetTemplates(self, context)
return {"FINISHED"}
class EditPropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.edit_property_set_template"
bl_label = "Edit Property Set Template"
def execute(self, context):
template = ifc.IfcStore.pset_template_file.by_guid(context.scene.BIMProperties.property_set_templates)
context.scene.BIMProperties.active_property_set_template.global_id = template.GlobalId
context.scene.BIMProperties.active_property_set_template.name = template.Name
context.scene.BIMProperties.active_property_set_template.description = template.Description
context.scene.BIMProperties.active_property_set_template.template_type = template.TemplateType
context.scene.BIMProperties.active_property_set_template.applicable_entity = template.ApplicableEntity
while len(bpy.context.scene.BIMProperties.property_templates) > 0:
bpy.context.scene.BIMProperties.property_templates.remove(0)
if template.HasPropertyTemplates:
for property_template in template.HasPropertyTemplates:
if not property_template.is_a("IfcSimplePropertyTemplate"):
continue
new = context.scene.BIMProperties.property_templates.add()
new.global_id = property_template.GlobalId
new.name = property_template.Name
new.description = property_template.Description
new.primary_measure_type = property_template.PrimaryMeasureType
return {"FINISHED"}
class SavePropertySetTemplate(bpy.types.Operator):
bl_idname = "bim.save_property_set_template"
bl_label = "Save Property Set Template"
def execute(self, context):
blender_property_set_template = context.scene.BIMProperties.active_property_set_template
if blender_property_set_template.global_id:
template = ifc.IfcStore.pset_template_file.by_guid(blender_property_set_template.global_id)
else:
template = ifc.IfcStore.pset_template_file.createIfcPropertySetTemplate()
template.GlobalId = ifcopenshell.guid.new()
template.Name = blender_property_set_template.name
template.Description = blender_property_set_template.description
template.TemplateType = blender_property_set_template.template_type
template.ApplicableEntity = blender_property_set_template.applicable_entity
saved_global_ids = []
for blender_property_template in context.scene.BIMProperties.property_templates:
if blender_property_template.global_id:
property_template = ifc.IfcStore.pset_template_file.by_guid(blender_property_template.global_id)
else:
property_template = ifc.IfcStore.pset_template_file.createIfcSimplePropertyTemplate()
property_template.GlobalId = ifcopenshell.guid.new()
if template.HasPropertyTemplates:
has_property_templates = list(template.HasPropertyTemplates)
else:
has_property_templates = []
has_property_templates.append(property_template)
template.HasPropertyTemplates = has_property_templates
property_template.Name = blender_property_template.name
property_template.Description = blender_property_template.description
property_template.PrimaryMeasureType = blender_property_template.primary_measure_type
property_template.TemplateType = "P_SINGLEVALUE"
property_template.AccessState = "READWRITE"
saved_global_ids.append(property_template.GlobalId)
for element in template.HasPropertyTemplates:
if element.GlobalId not in saved_global_ids:
ifc.IfcStore.pset_template_file.remove(element)
ifc.IfcStore.pset_template_file.write(ifc.IfcStore.pset_template_path)
from . import prop
prop.refreshPropertySetTemplates(self, context)
return {"FINISHED"}
class AddPropertyTemplate(bpy.types.Operator):
bl_idname = "bim.add_property_template"
bl_label = "Add Property Template"
def execute(self, context):
context.scene.BIMProperties.property_templates.add()
return {"FINISHED"}
class RemovePropertyTemplate(bpy.types.Operator):
bl_idname = "bim.remove_property_template"
bl_label = "Remove Property Template"
index: bpy.props.IntProperty()
def execute(self, context):
bpy.context.scene.BIMProperties.property_templates.remove(self.index)
return {"FINISHED"}
class AddSectionPlane(bpy.types.Operator):
bl_idname = "bim.add_section_plane"
bl_label = "Add Temporary Section Cutaway"
-209
View File
@@ -31,9 +31,6 @@ availablematerialpsets_enum = []
ifcpatchrecipes_enum = []
titleblocks_enum = []
materialpsetnames_enum = []
psetfiles_enum = []
psettemplatefiles_enum = []
propertysettemplates_enum = []
attributes_enum = []
materialattributes_enum = []
contexts_enum = []
@@ -261,32 +258,6 @@ def toggleDecorationsOnLoad(*args):
decoration.DecorationsHandler.uninstall()
def getPsetTemplateFiles(self, context):
global psettemplatefiles_enum
if len(psettemplatefiles_enum) < 1:
files = os.listdir(os.path.join(self.data_dir, "pset"))
psettemplatefiles_enum.extend([(f.replace(".ifc", ""), f.replace(".ifc", ""), "") for f in files])
return psettemplatefiles_enum
def refreshPropertySetTemplates(self, context):
global propertysettemplates_enum
propertysettemplates_enum.clear()
getPropertySetTemplates(self, context)
def getPropertySetTemplates(self, context):
global propertysettemplates_enum
if len(propertysettemplates_enum) < 1:
ifc.IfcStore.pset_template_path = os.path.join(
context.scene.BIMProperties.data_dir, "pset", context.scene.BIMProperties.pset_template_files + ".ifc"
)
ifc.IfcStore.pset_template_file = ifcopenshell.open(ifc.IfcStore.pset_template_path)
templates = ifc.IfcStore.pset_template_file.by_type("IfcPropertySetTemplate")
propertysettemplates_enum.extend([(t.GlobalId, t.Name, "") for t in templates])
return propertysettemplates_enum
def getMaterialPsetNames(self, context):
global materialpsetnames_enum
materialpsetnames_enum.clear()
@@ -508,180 +479,6 @@ class SmartClashGroup(PropertyGroup):
global_ids: CollectionProperty(name="GlobalIDs", type=StrProperty)
class PropertySetTemplate(PropertyGroup):
global_id: StringProperty(name="Global ID")
name: StringProperty(name="Name")
description: StringProperty(name="Description")
template_type: EnumProperty(
items=[
(
"PSET_TYPEDRIVENONLY",
"Pset - IfcTypeObject",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
),
(
"PSET_TYPEDRIVENOVERRIDE",
"Pset - IfcTypeObject - Override",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
),
(
"PSET_OCCURRENCEDRIVEN",
"Pset - IfcObject",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcObject.",
),
(
"PSET_PERFORMANCEDRIVEN",
"Pset - IfcPerformanceHistory",
"The property sets defined by this IfcPropertySetTemplate can only be assigned to IfcPerformanceHistory.",
),
(
"QTO_TYPEDRIVENONLY",
"Qto - IfcTypeObject",
"The element quantity defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
),
(
"QTO_TYPEDRIVENOVERRIDE",
"Qto - IfcTypeObject - Override",
"The element quantity defined by this IfcPropertySetTemplate can be assigned to subtypes of IfcTypeObject and can be overridden by an element quantity with same name at subtypes of IfcObject.",
),
(
"QTO_OCCURRENCEDRIVEN",
"Qto - IfcObject",
"The element quantity defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcObject.",
),
(
"NOTDEFINED",
"Not defined",
"No restriction provided, the property sets defined by this IfcPropertySetTemplate can be assigned to any entity, if not otherwise restricted by the ApplicableEntity attribute.",
),
],
name="Template Type",
)
applicable_entity: StringProperty(name="Applicable Entity")
class PropertyTemplate(PropertyGroup):
global_id: StringProperty(name="Global ID")
name: StringProperty(name="Name")
description: StringProperty(name="Description")
primary_measure_type: EnumProperty(
items=[
(x, x, "")
for x in [
"IfcInteger",
"IfcReal",
"IfcBoolean",
"IfcIdentifier",
"IfcText",
"IfcLabel",
"IfcLogical",
"IfcDateTime",
"IfcDate",
"IfcTime",
"IfcDuration",
"IfcTimeStamp",
"IfcPositiveInteger",
"IfcBinary",
"IfcVolumeMeasure",
"IfcTimeMeasure",
"IfcThermodynamicTemperatureMeasure",
"IfcSolidAngleMeasure",
"IfcPositiveRatioMeasure",
"IfcRatioMeasure",
"IfcPositivePlaneAngleMeasure",
"IfcPlaneAngleMeasure",
"IfcParameterValue",
"IfcNumericMeasure",
"IfcMassMeasure",
"IfcPositiveLengthMeasure",
"IfcLengthMeasure",
"IfcElectricCurrentMeasure",
"IfcDescriptiveMeasure",
"IfcCountMeasure",
"IfcContextDependentMeasure",
"IfcAreaMeasure",
"IfcAmountOfSubstanceMeasure",
"IfcLuminousIntensityMeasure",
"IfcNormalisedRatioMeasure",
"IfcComplexNumber",
"IfcNonNegativeLengthMeasure",
"IfcAbsorbedDoseMeasure",
"IfcAccelerationMeasure",
"IfcAngularVelocityMeasure",
"IfcAreaDensityMeasure",
"IfcCompoundPlaneAngleMeasure",
"IfcCurvatureMeasure",
"IfcDoseEquivalentMeasure",
"IfcDynamicViscosityMeasure",
"IfcElectricCapacitanceMeasure",
"IfcElectricChargeMeasure",
"IfcElectricConductanceMeasure",
"IfcElectricResistanceMeasure",
"IfcElectricVoltageMeasure",
"IfcEnergyMeasure",
"IfcForceMeasure",
"IfcFrequencyMeasure",
"IfcHeatFluxDensityMeasure",
"IfcHeatingValueMeasure",
"IfcIlluminanceMeasure",
"IfcInductanceMeasure",
"IfcIntegerCountRateMeasure",
"IfcIonConcentrationMeasure",
"IfcIsothermalMoistureCapacityMeasure",
"IfcKinematicViscosityMeasure",
"IfcLinearForceMeasure",
"IfcLinearMomentMeasure",
"IfcLinearStiffnessMeasure",
"IfcLinearVelocityMeasure",
"IfcLuminousFluxMeasure",
"IfcLuminousIntensityDistributionMeasure",
"IfcMagneticFluxDensityMeasure",
"IfcMagneticFluxMeasure",
"IfcMassDensityMeasure",
"IfcMassFlowRateMeasure",
"IfcMassPerLengthMeasure",
"IfcModulusOfElasticityMeasure",
"IfcModulusOfLinearSubgradeReactionMeasure",
"IfcModulusOfRotationalSubgradeReactionMeasure",
"IfcModulusOfSubgradeReactionMeasure",
"IfcMoistureDiffusivityMeasure",
"IfcMolecularWeightMeasure",
"IfcMomentOfInertiaMeasure",
"IfcMonetaryMeasure",
"IfcPHMeasure",
"IfcPlanarForceMeasure",
"IfcPowerMeasure",
"IfcPressureMeasure",
"IfcRadioActivityMeasure",
"IfcRotationalFrequencyMeasure",
"IfcRotationalMassMeasure",
"IfcRotationalStiffnessMeasure",
"IfcSectionModulusMeasure",
"IfcSectionalAreaIntegralMeasure",
"IfcShearModulusMeasure",
"IfcSoundPowerLevelMeasure",
"IfcSoundPowerMeasure",
"IfcSoundPressureLevelMeasure",
"IfcSoundPressureMeasure",
"IfcSpecificHeatCapacityMeasure",
"IfcTemperatureGradientMeasure",
"IfcTemperatureRateOfChangeMeasure",
"IfcThermalAdmittanceMeasure",
"IfcThermalConductivityMeasure",
"IfcThermalExpansionCoefficientMeasure",
"IfcThermalResistanceMeasure",
"IfcThermalTransmittanceMeasure",
"IfcTorqueMeasure",
"IfcVaporPermeabilityMeasure",
"IfcVolumetricFlowRateMeasure",
"IfcWarpingConstantMeasure",
"IfcWarpingMomentMeasure",
]
],
name="Primary Measure Type",
)
class BIMProperties(PropertyGroup):
schema_dir: StringProperty(default=os.path.join(cwd, "schema") + os.path.sep, name="Schema Directory")
data_dir: StringProperty(default=os.path.join(cwd, "data") + os.path.sep, name="Data Directory")
@@ -692,12 +489,6 @@ class BIMProperties(PropertyGroup):
available_contexts: EnumProperty(items=[("Model", "Model", ""), ("Plan", "Plan", "")], name="Available Contexts")
available_subcontexts: EnumProperty(items=getSubcontexts, name="Available Subcontexts")
available_target_views: EnumProperty(items=getTargetViews, name="Available Target Views")
pset_template_files: EnumProperty(
items=getPsetTemplateFiles, name="Pset Template Files", update=refreshPropertySetTemplates
)
property_set_templates: EnumProperty(items=getPropertySetTemplates, name="Pset Template Files")
active_property_set_template: PointerProperty(type=PropertySetTemplate)
property_templates: CollectionProperty(name="Property Templates", type=PropertyTemplate)
should_section_selected_objects: BoolProperty(name="Section Selected Objects", default=False)
section_plane_colour: FloatVectorProperty(
name="Temporary Section Cutaway Colour", subtype="COLOR", default=(1, 0, 0), min=0.0, max=1.0
-44
View File
@@ -37,50 +37,6 @@ class BIM_PT_object_structural(Panel):
row.prop(props, "structural_member_connection")
class BIM_PT_psets(Panel):
bl_label = "IFC Property Sets"
bl_idname = "BIM_PT_psets"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
def draw(self, context):
layout = self.layout
props = context.scene.BIMProperties
row = layout.row(align=True)
row.prop(props, "pset_template_files", text="")
row = layout.row(align=True)
row.prop(props, "property_set_templates", text="")
row.operator("bim.add_property_set_template", text="", icon="ADD")
row.operator("bim.remove_property_set_template", text="", icon="PANEL_CLOSE")
row.operator("bim.edit_property_set_template", text="", icon="IMPORT")
row.operator("bim.save_property_set_template", text="", icon="EXPORT")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "name")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "description")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "template_type")
row = layout.row(align=True)
row.prop(props.active_property_set_template, "applicable_entity")
layout.label(text="Property Templates:")
row = layout.row(align=True)
row.operator("bim.add_property_template")
for index, template in enumerate(props.property_templates):
row = layout.row(align=True)
row.prop(template, "name", text="")
row.prop(template, "description", text="")
row.prop(template, "primary_measure_type", text="")
row.operator("bim.remove_property_template", icon="X", text="").index = index
class BIM_PT_presentation_layer_data(Panel):
bl_label = "IFC Presentation Layers"
bl_idname = "BIM_PT_presentation"