mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 13:46:54 +00:00
Add ability to export parameterised profiles for material profiles.
This commit is contained in:
@@ -1448,12 +1448,21 @@ class IfcExporter():
|
|||||||
self.create_material_psets(material)
|
self.create_material_psets(material)
|
||||||
self.file.createIfcMaterialDefinitionRepresentation(
|
self.file.createIfcMaterialDefinitionRepresentation(
|
||||||
material['raw'].name, None, [styled_representation], material['ifc'])
|
material['raw'].name, None, [styled_representation], material['ifc'])
|
||||||
if material['material_type'] != 'IfcMaterial':
|
if material['material_type'] == 'IfcMaterial':
|
||||||
material_type = material['material_type'][0:-3]
|
continue
|
||||||
self.cast_attributes(material_type, material['attributes'])
|
material_type = material['material_type'][0:-3]
|
||||||
material['attributes']['Material'] = material['ifc']
|
self.cast_attributes(material_type, material['attributes'])
|
||||||
material['part_ifc'] = self.file.create_entity(material_type,
|
material['attributes']['Material'] = material['ifc']
|
||||||
**material['attributes'])
|
if material_type == 'IfcMaterialProfile':
|
||||||
|
material['attributes']['Profile'] = self.create_material_profile(material)
|
||||||
|
material['part_ifc'] = self.file.create_entity(material_type,
|
||||||
|
**material['attributes'])
|
||||||
|
|
||||||
|
def create_material_profile(self, material):
|
||||||
|
ifc_class = material['raw'].BIMMaterialProperties.profile_def
|
||||||
|
attributes = {a.name: a.string_value for a in material['raw'].BIMMaterialProperties.profile_attributes}
|
||||||
|
self.cast_attributes(ifc_class, attributes)
|
||||||
|
return self.file.create_entity(ifc_class, **attributes)
|
||||||
|
|
||||||
def cast_attributes(self, ifc_class, attributes):
|
def cast_attributes(self, ifc_class, attributes):
|
||||||
for key, value in attributes.items():
|
for key, value in attributes.items():
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ ifc_schema = IfcSchema()
|
|||||||
|
|
||||||
diagram_scales_enum = []
|
diagram_scales_enum = []
|
||||||
products_enum = []
|
products_enum = []
|
||||||
|
profiledef_enum = []
|
||||||
classes_enum = []
|
classes_enum = []
|
||||||
types_enum = []
|
types_enum = []
|
||||||
availablematerialpsets_enum = []
|
availablematerialpsets_enum = []
|
||||||
@@ -109,6 +110,13 @@ def getIfcClasses(self, context):
|
|||||||
return classes_enum
|
return classes_enum
|
||||||
|
|
||||||
|
|
||||||
|
def getProfileDef(self, context):
|
||||||
|
global profiledef_enum
|
||||||
|
if len(profiledef_enum) < 1:
|
||||||
|
profiledef_enum.extend([(e, e, '') for e in getattr(ifc_schema, 'IfcParameterizedProfileDef')])
|
||||||
|
return profiledef_enum
|
||||||
|
|
||||||
|
|
||||||
def getPersons(self, context):
|
def getPersons(self, context):
|
||||||
global persons_enum
|
global persons_enum
|
||||||
if len(persons_enum) < 1:
|
if len(persons_enum) < 1:
|
||||||
@@ -219,6 +227,14 @@ def getApplicableMaterialAttributes(self, context):
|
|||||||
return materialattributes_enum
|
return materialattributes_enum
|
||||||
|
|
||||||
|
|
||||||
|
def refreshProfileAttributes(self, context):
|
||||||
|
while len(context.active_object.active_material.BIMMaterialProperties.profile_attributes) > 0:
|
||||||
|
context.active_object.active_material.BIMMaterialProperties.profile_attributes.remove(0)
|
||||||
|
for attribute in ifc_schema.IfcParameterizedProfileDef[self.profile_def]['attributes']:
|
||||||
|
profile_attribute = context.active_object.active_material.BIMMaterialProperties.profile_attributes.add()
|
||||||
|
profile_attribute.name = attribute['name']
|
||||||
|
|
||||||
|
|
||||||
def getApplicableDocuments(self, context):
|
def getApplicableDocuments(self, context):
|
||||||
global documents_enum
|
global documents_enum
|
||||||
documents_enum.clear()
|
documents_enum.clear()
|
||||||
@@ -401,6 +417,8 @@ class BIMMaterialProperties(PropertyGroup):
|
|||||||
psets: CollectionProperty(name="Psets", type=Pset)
|
psets: CollectionProperty(name="Psets", type=Pset)
|
||||||
attributes: CollectionProperty(name="Attributes", type=Attribute)
|
attributes: CollectionProperty(name="Attributes", type=Attribute)
|
||||||
applicable_attributes: EnumProperty(items=getApplicableMaterialAttributes, name="Attribute Names")
|
applicable_attributes: EnumProperty(items=getApplicableMaterialAttributes, name="Attribute Names")
|
||||||
|
profile_def: EnumProperty(items=getProfileDef, name='Parameterized Profile Def', update=refreshProfileAttributes)
|
||||||
|
profile_attributes: CollectionProperty(name='Profile Attributes', type=Attribute)
|
||||||
|
|
||||||
|
|
||||||
class SweptSolid(PropertyGroup):
|
class SweptSolid(PropertyGroup):
|
||||||
|
|||||||
@@ -7,7 +7,13 @@ cwd = os.path.dirname(os.path.realpath(__file__))
|
|||||||
class IfcSchema():
|
class IfcSchema():
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.schema_dir = os.path.join(cwd, 'schema') # TODO: make configurable
|
self.schema_dir = os.path.join(cwd, 'schema') # TODO: make configurable
|
||||||
self.products = ['IfcElement', 'IfcSpatialStructureElement', 'IfcStructural', 'IfcMaterialDefinition']
|
self.products = [
|
||||||
|
'IfcElement',
|
||||||
|
'IfcSpatialStructureElement',
|
||||||
|
'IfcStructural',
|
||||||
|
'IfcMaterialDefinition',
|
||||||
|
'IfcParameterizedProfileDef'
|
||||||
|
]
|
||||||
self.elements = {}
|
self.elements = {}
|
||||||
self.property_file = ifcopenshell.open(os.path.join(self.schema_dir, 'IFC4_ADD2.ifc'))
|
self.property_file = ifcopenshell.open(os.path.join(self.schema_dir, 'IFC4_ADD2.ifc'))
|
||||||
self.psets = {}
|
self.psets = {}
|
||||||
|
|||||||
@@ -0,0 +1,862 @@
|
|||||||
|
{
|
||||||
|
"IfcAsymmetricIShapeProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "BottomFlangeWidth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "OverallDepth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WebThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "BottomFlangeThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "BottomFlangeFilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "TopFlangeWidth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "TopFlangeThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "TopFlangeFilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "BottomFlangeEdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPlaneAngleMeasure",
|
||||||
|
"name": "BottomFlangeSlope",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "TopFlangeEdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPlaneAngleMeasure",
|
||||||
|
"name": "TopFlangeSlope",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcCShapeProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Depth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Width",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WallThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Girth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "InternalFilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcCircleHollowProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Radius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WallThickness",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcCircleProfileDef"
|
||||||
|
},
|
||||||
|
"IfcCircleProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Radius",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcEllipseProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "SemiAxis1",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "SemiAxis2",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcIShapeProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "OverallWidth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "OverallDepth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WebThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "FlangeThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "FilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "FlangeEdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPlaneAngleMeasure",
|
||||||
|
"name": "FlangeSlope",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcLShapeProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Depth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Width",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Thickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "FilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "EdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPlaneAngleMeasure",
|
||||||
|
"name": "LegSlope",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcRectangleHollowProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "XDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "YDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WallThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "InnerFilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "OuterFilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcRectangleProfileDef"
|
||||||
|
},
|
||||||
|
"IfcRectangleProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "XDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "YDim",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcRoundedRectangleProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "XDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "YDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "RoundingRadius",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcRectangleProfileDef"
|
||||||
|
},
|
||||||
|
"IfcTShapeProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Depth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "FlangeWidth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WebThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "FlangeThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "FilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "FlangeEdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "WebEdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPlaneAngleMeasure",
|
||||||
|
"name": "WebSlope",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPlaneAngleMeasure",
|
||||||
|
"name": "FlangeSlope",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcTrapeziumProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "BottomXDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "TopXDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "YDim",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLengthMeasure",
|
||||||
|
"name": "TopXOffset",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcUShapeProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Depth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "FlangeWidth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WebThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "FlangeThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "FilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "EdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPlaneAngleMeasure",
|
||||||
|
"name": "FlangeSlope",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
},
|
||||||
|
"IfcZShapeProfileDef": {
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"enum_values": [
|
||||||
|
"CURVE",
|
||||||
|
"AREA"
|
||||||
|
],
|
||||||
|
"type": "IfcProfileTypeEnum",
|
||||||
|
"name": "ProfileType",
|
||||||
|
"is_enum": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcLabel",
|
||||||
|
"name": "ProfileName",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "Depth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "FlangeWidth",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "WebThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcPositiveLengthMeasure",
|
||||||
|
"name": "FlangeThickness",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "FilletRadius",
|
||||||
|
"is_enum": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum_values": [],
|
||||||
|
"type": "IfcNonNegativeLengthMeasure",
|
||||||
|
"name": "EdgeRadius",
|
||||||
|
"is_enum": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"is_abstract": false,
|
||||||
|
"complex_attributes": [
|
||||||
|
{
|
||||||
|
"type": "IfcProfileProperties",
|
||||||
|
"name": "HasProperties"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "IfcAxis2Placement2D",
|
||||||
|
"name": "Position"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parent": "IfcParameterizedProfileDef"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -191,6 +191,16 @@ class BIM_PT_material(Panel):
|
|||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(props, 'psets', text='')
|
row.prop(props, 'psets', text='')
|
||||||
|
|
||||||
|
if context.active_object.BIMObjectProperties.material_type == 'IfcMaterialProfileSet':
|
||||||
|
layout.label(text="Profile Definition:")
|
||||||
|
row = layout.row()
|
||||||
|
row.prop(props, 'profile_def')
|
||||||
|
|
||||||
|
for index, attribute in enumerate(props.profile_attributes):
|
||||||
|
row = layout.row(align=True)
|
||||||
|
row.prop(attribute, 'name', text='')
|
||||||
|
row.prop(attribute, 'string_value', text='')
|
||||||
|
|
||||||
|
|
||||||
class BIM_PT_gis(Panel):
|
class BIM_PT_gis(Panel):
|
||||||
bl_label = 'IFC Georeferencing'
|
bl_label = 'IFC Georeferencing'
|
||||||
|
|||||||
@@ -15,13 +15,15 @@ class IFC4Extractor:
|
|||||||
#self.filters = ['IfcElement']
|
#self.filters = ['IfcElement']
|
||||||
#self.filters = ['IfcSpatialStructureElement']
|
#self.filters = ['IfcSpatialStructureElement']
|
||||||
#self.filters = ['IfcStructuralActivity', 'IfcStructuralItem']
|
#self.filters = ['IfcStructuralActivity', 'IfcStructuralItem']
|
||||||
self.filters = ['IfcMaterialDefinition']
|
#self.filters = ['IfcMaterialDefinition']
|
||||||
|
self.filters = ['IfcParameterizedProfileDef']
|
||||||
self.filtered_elements = {}
|
self.filtered_elements = {}
|
||||||
|
|
||||||
def extract(self):
|
def extract(self):
|
||||||
for element in self.root.findall("xs:element", self.ns):
|
for element in self.root.findall("xs:element", self.ns):
|
||||||
#if self.is_descendant_from_class(element, "IfcRoot"):
|
#if self.is_descendant_from_class(element, "IfcRoot"):
|
||||||
if self.is_descendant_from_class(element, "IfcMaterialDefinition"):
|
#if self.is_descendant_from_class(element, "IfcMaterialDefinition"):
|
||||||
|
if self.is_descendant_from_class(element, "IfcParameterizedProfileDef"):
|
||||||
print('Processing {}'.format(element.attrib['name']))
|
print('Processing {}'.format(element.attrib['name']))
|
||||||
data = {
|
data = {
|
||||||
'is_abstract': self.is_abstract(element),
|
'is_abstract': self.is_abstract(element),
|
||||||
|
|||||||
Reference in New Issue
Block a user