Fix #1462. Standardise IfcOpenShell API to use Pythonic argument names.

This commit is contained in:
Dion Moult
2021-05-28 10:59:20 +10:00
parent 0a2adbb632
commit 1cd243f13c
19 changed files with 119 additions and 114 deletions
@@ -269,7 +269,7 @@ class UpdateRepresentation(bpy.types.Operator):
product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id) product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
if product.is_a("IfcGridAxis"): if product.is_a("IfcGridAxis"):
ifcopenshell.api.run("grid.create_axis_curve", self.file, **{"AxisCurve": obj, "grid_axis": product}) ifcopenshell.api.run("grid.create_axis_curve", self.file, **{"axis_curve": obj, "grid_axis": product})
return return
bpy.ops.bim.edit_object_placement(obj=obj.name) bpy.ops.bim.edit_object_placement(obj=obj.name)
@@ -42,7 +42,7 @@ class AddMaterial(bpy.types.Operator):
def execute(self, context): def execute(self, context):
obj = bpy.data.materials.get(self.obj) if self.obj else bpy.context.active_object.active_material obj = bpy.data.materials.get(self.obj) if self.obj else bpy.context.active_object.active_material
self.file = IfcStore.get_file() self.file = IfcStore.get_file()
result = ifcopenshell.api.run("material.add_material", self.file, **{"Name": obj.name}) result = ifcopenshell.api.run("material.add_material", self.file, **{"name": obj.name})
obj.BIMObjectProperties.ifc_definition_id = result.id() obj.BIMObjectProperties.ifc_definition_id = result.id()
Data.load(IfcStore.get_file()) Data.load(IfcStore.get_file())
material_prop_purge() material_prop_purge()
@@ -57,10 +57,10 @@ def add_object(self, context):
result = ifcopenshell.api.run( result = ifcopenshell.api.run(
"grid.create_grid_axis", "grid.create_grid_axis",
self.file, self.file,
**{"AxisTag": tag, "AxisCurve": obj, "UVWAxes": "UAxes", "Grid": grid}, **{"axis_tag": tag, "uvw_axes": "UAxes", "grid": grid},
) )
IfcStore.link_element(result, obj) IfcStore.link_element(result, obj)
ifcopenshell.api.run("grid.create_axis_curve", self.file, **{"AxisCurve": obj, "grid_axis": result}) ifcopenshell.api.run("grid.create_axis_curve", self.file, **{"axis_curve": obj, "grid_axis": result})
obj.BIMObjectProperties.ifc_definition_id = result.id() obj.BIMObjectProperties.ifc_definition_id = result.id()
axes_collection = bpy.data.collections.new("VAxes") axes_collection = bpy.data.collections.new("VAxes")
@@ -83,10 +83,10 @@ def add_object(self, context):
result = ifcopenshell.api.run( result = ifcopenshell.api.run(
"grid.create_grid_axis", "grid.create_grid_axis",
self.file, self.file,
**{"AxisTag": tag, "AxisCurve": obj, "UVWAxes": "VAxes", "Grid": grid}, **{"axis_tag": tag, "uvw_axes": "VAxes", "grid": grid},
) )
IfcStore.link_element(result, obj) IfcStore.link_element(result, obj)
ifcopenshell.api.run("grid.create_axis_curve", self.file, **{"AxisCurve": obj, "grid_axis": result}) ifcopenshell.api.run("grid.create_axis_curve", self.file, **{"axis_curve": obj, "grid_axis": result})
obj.BIMObjectProperties.ifc_definition_id = result.id() obj.BIMObjectProperties.ifc_definition_id = result.id()
@@ -729,8 +729,8 @@ class DumbWallGenerator:
bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcWall") bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcWall")
bpy.ops.bim.assign_type(relating_type=self.relating_type.id(), related_object=obj.name) bpy.ops.bim.assign_type(relating_type=self.relating_type.id(), related_object=obj.name)
element = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id) element = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
pset = ifcopenshell.api.run("pset.add_pset", self.file, product=element, Name="EPset_Parametric") pset = ifcopenshell.api.run("pset.add_pset", self.file, product=element, name="EPset_Parametric")
ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, Properties={"Engine": "BlenderBIM.DumbWall"}) ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"Engine": "BlenderBIM.DumbWall"})
ifcopenshell.api.run("material.assign_material", self.file, product=element, type="IfcMaterialLayerSetUsage") ifcopenshell.api.run("material.assign_material", self.file, product=element, type="IfcMaterialLayerSetUsage")
MaterialData.load(self.file) MaterialData.load(self.file)
return obj return obj
@@ -78,7 +78,7 @@ def calculate_dumb_quantities(usecase_path, ifc_file, **settings):
if not parametric or parametric["Engine"] != "BlenderBIM.DumbWall": if not parametric or parametric["Engine"] != "BlenderBIM.DumbWall":
return return
qto = ifcopenshell.api.run( qto = ifcopenshell.api.run(
"pset.add_qto", ifc_file, should_run_listeners=False, product=product, Name="Qto_WallBaseQuantities" "pset.add_qto", ifc_file, should_run_listeners=False, product=product, name="Qto_WallBaseQuantities"
) )
length = obj.dimensions[0] / unit_scale length = obj.dimensions[0] / unit_scale
width = obj.dimensions[1] / unit_scale width = obj.dimensions[1] / unit_scale
@@ -95,7 +95,7 @@ def calculate_dumb_quantities(usecase_path, ifc_file, **settings):
net_volume = gross_volume net_volume = gross_volume
bm.free() bm.free()
ifcopenshell.api.run("pset.edit_qto", ifc_file, should_run_listeners=False, qto=qto, Properties={ ifcopenshell.api.run("pset.edit_qto", ifc_file, should_run_listeners=False, qto=qto, properties={
"Length": round(length, 2), "Length": round(length, 2),
"Width": round(width, 2), "Width": round(width, 2),
"Height": round(height, 2), "Height": round(height, 2),
@@ -187,8 +187,8 @@ class EditPset(bpy.types.Operator):
self.file, self.file,
**{ **{
"pset": self.file.by_id(pset_id), "pset": self.file.by_id(pset_id),
"Name": props.active_pset_name, "name": props.active_pset_name,
"Properties": properties, "properties": properties,
}, },
) )
else: else:
@@ -197,8 +197,8 @@ class EditPset(bpy.types.Operator):
self.file, self.file,
**{ **{
"qto": self.file.by_id(pset_id), "qto": self.file.by_id(pset_id),
"Name": props.active_pset_name, "name": props.active_pset_name,
"Properties": properties, "properties": properties,
}, },
) )
Data.load(IfcStore.get_file(), oprops.ifc_definition_id) Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
@@ -260,7 +260,7 @@ class AddPset(bpy.types.Operator):
self.file, self.file,
**{ **{
"product": self.file.by_id(oprops.ifc_definition_id), "product": self.file.by_id(oprops.ifc_definition_id),
"Name": pset_name, "name": pset_name,
}, },
) )
Data.load(IfcStore.get_file(), oprops.ifc_definition_id) Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
@@ -281,7 +281,7 @@ class AddQto(bpy.types.Operator):
self.file, self.file,
**{ **{
"product": self.file.by_id(oprops.ifc_definition_id), "product": self.file.by_id(oprops.ifc_definition_id),
"Name": props.qto_name, "name": props.qto_name,
}, },
) )
Data.load(IfcStore.get_file(), oprops.ifc_definition_id) Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
@@ -99,13 +99,13 @@ class QuantifyObjects(bpy.types.Operator):
"pset.add_qto", "pset.add_qto",
self.file, self.file,
product=self.file.by_id(obj.BIMObjectProperties.ifc_definition_id), product=self.file.by_id(obj.BIMObjectProperties.ifc_definition_id),
Name=props.qto_name, name=props.qto_name,
) )
ifcopenshell.api.run( ifcopenshell.api.run(
"pset.edit_qto", "pset.edit_qto",
self.file, self.file,
qto=qto, qto=qto,
Properties={props.prop_name: result} properties={props.prop_name: result}
) )
PsetData.load(self.file, obj.BIMObjectProperties.ifc_definition_id) PsetData.load(self.file, obj.BIMObjectProperties.ifc_definition_id)
return {"FINISHED"} return {"FINISHED"}
@@ -11,9 +11,9 @@ def get_colour_settings(material):
transparency = bsdf.inputs["Alpha"].default_value transparency = bsdf.inputs["Alpha"].default_value
diffuse_colour = bsdf.inputs["Base Color"].default_value diffuse_colour = bsdf.inputs["Base Color"].default_value
return { return {
"SurfaceColour": tuple(material.diffuse_color), "surface_colour": tuple(material.diffuse_color),
"Transparency": transparency, "transparency": transparency,
"DiffuseColour": tuple(diffuse_colour), "diffuse_colour": tuple(diffuse_colour),
} }
@@ -40,7 +40,7 @@ class AddStyle(bpy.types.Operator):
self.file = IfcStore.get_file() self.file = IfcStore.get_file()
material = bpy.data.materials.get(self.material) if self.material else bpy.context.active_object.active_material material = bpy.data.materials.get(self.material) if self.material else bpy.context.active_object.active_material
settings = get_colour_settings(material) settings = get_colour_settings(material)
settings["Name"] = material.name settings["name"] = material.name
settings["external_definition"] = None # TODO: Implement. See #1222 settings["external_definition"] = None # TODO: Implement. See #1222
style = ifcopenshell.api.run("style.add_style", self.file, **settings) style = ifcopenshell.api.run("style.add_style", self.file, **settings)
material.BIMMaterialProperties.ifc_style_id = int(style.id()) material.BIMMaterialProperties.ifc_style_id = int(style.id())
@@ -8,7 +8,7 @@ class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = { self.settings = {
"AxisCurve": None, # A Blender object "axis_curve": None, # A Blender object
"grid_axis": None, "grid_axis": None,
} }
for key, value in settings.items(): for key, value in settings.items():
@@ -24,8 +24,8 @@ class Usecase:
grid = [i for i in self.file.get_inverse(self.settings["grid_axis"]) if i.is_a("IfcGrid")][0] grid = [i for i in self.file.get_inverse(self.settings["grid_axis"]) if i.is_a("IfcGrid")][0]
points = [ points = [
Matrix(ifcopenshell.util.placement.get_local_placement(grid.ObjectPlacement)).inverted() Matrix(ifcopenshell.util.placement.get_local_placement(grid.ObjectPlacement)).inverted()
@ (self.settings["AxisCurve"].matrix_world @ v.co) @ (self.settings["axis_curve"].matrix_world @ v.co)
for v in self.settings["AxisCurve"].data.vertices[0:2] for v in self.settings["axis_curve"].data.vertices[0:2]
] ]
self.settings["grid_axis"].AxisCurve = self.file.createIfcPolyline( self.settings["grid_axis"].AxisCurve = self.file.createIfcPolyline(
[ [
@@ -2,20 +2,20 @@ class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = { self.settings = {
"AxisTag": "A", "axis_tag": "A",
"SameSense": True, "same_sense": True,
"UVWAxes": "UAxes", # Choose which axes "uvw_axes": "UAxes", # Choose which axes
"Grid": None, "grid": None,
} }
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
def execute(self): def execute(self):
element = self.file.create_entity("IfcGridAxis", **{ element = self.file.create_entity("IfcGridAxis", **{
"AxisTag": self.settings["AxisTag"], "axis_tag": self.settings["axis_tag"],
"SameSense": self.settings["SameSense"] "SameSense": self.settings["same_sense"]
}) })
axes = list(getattr(self.settings["Grid"], self.settings["UVWAxes"]) or []) axes = list(getattr(self.settings["grid"], self.settings["uvw_axes"]) or [])
axes.append(element) axes.append(element)
setattr(self.settings["Grid"], self.settings["UVWAxes"], axes) setattr(self.settings["grid"], self.settings["uvw_axes"], axes)
return element return element
@@ -4,9 +4,9 @@ import ifcopenshell
class Usecase: class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = {"Name": "Unnamed"} self.settings = {"name": "Unnamed"}
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
def execute(self): def execute(self):
return self.file.create_entity("IfcMaterial", **{"Name": self.settings["Name"] or "Unnamed"}) return self.file.create_entity("IfcMaterial", **{"Name": self.settings["name"] or "Unnamed"})
@@ -2,14 +2,16 @@ class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = { self.settings = {
"Identification": "APTR", "identification": "APTR",
"Name": "Aperture Science", "name": "Aperture Science",
} }
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
def execute(self): def execute(self):
data = {"Name": self.settings["Name"]}
if self.file.schema == "IFC2X3": if self.file.schema == "IFC2X3":
self.settings["Id"] = self.settings["Identification"] data["Id"] = self.settings["identification"]
del self.settings["Identification"] else:
return self.file.create_entity("IfcOrganization", **self.settings) data["Identification"] = self.settings["identification"]
return self.file.create_entity("IfcOrganization", **data)
@@ -2,15 +2,17 @@ class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = { self.settings = {
"Identification": "HSeldon", "identification": "HSeldon",
"FamilyName": "Seldon", "family_name": "Seldon",
"GivenName": "Hari", "given_name": "Hari",
} }
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
def execute(self): def execute(self):
data = {"FamilyName": self.settings["family_name"], "GivenName": self.settings["given_name"]}
if self.file.schema == "IFC2X3": if self.file.schema == "IFC2X3":
self.settings["Id"] = self.settings["Identification"] data["Id"] = self.settings["identification"]
del self.settings["Identification"] else:
return self.file.create_entity("IfcPerson", **self.settings) data["Identification"] = self.settings["identification"]
return self.file.create_entity("IfcPerson", **data)
@@ -4,7 +4,7 @@ import ifcopenshell
class Usecase: class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = {"product": None, "Name": None} self.settings = {"product": None, "name": None}
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
@@ -13,18 +13,18 @@ class Usecase:
for rel in self.settings["product"].IsDefinedBy or []: for rel in self.settings["product"].IsDefinedBy or []:
if ( if (
rel.is_a("IfcRelDefinesByProperties") rel.is_a("IfcRelDefinesByProperties")
and rel.RelatingPropertyDefinition.Name == self.settings["Name"] and rel.RelatingPropertyDefinition.Name == self.settings["name"]
): ):
return rel.RelatingPropertyDefinition return rel.RelatingPropertyDefinition
pset = self.file.create_entity( pset = self.file.create_entity(
"IfcPropertySet", **{"GlobalId": ifcopenshell.guid.new(), "Name": self.settings["Name"]} "IfcPropertySet", **{"GlobalId": ifcopenshell.guid.new(), "Name": self.settings["name"]}
) )
self.file.create_entity( self.file.create_entity(
"IfcRelDefinesByProperties", "IfcRelDefinesByProperties",
**{ **{
"GlobalId": ifcopenshell.guid.new(), "GlobalId": ifcopenshell.guid.new(),
# TODO: owner history "OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
"RelatedObjects": [self.settings["product"]], "RelatedObjects": [self.settings["product"]],
"RelatingPropertyDefinition": pset, "RelatingPropertyDefinition": pset,
} }
@@ -32,11 +32,11 @@ class Usecase:
return pset return pset
elif self.settings["product"].is_a("IfcTypeObject"): elif self.settings["product"].is_a("IfcTypeObject"):
for definition in self.settings["product"].HasPropertySets or []: for definition in self.settings["product"].HasPropertySets or []:
if definition.Name == self.settings["Name"]: if definition.Name == self.settings["name"]:
return definition return definition
pset = self.file.create_entity( pset = self.file.create_entity(
"IfcPropertySet", **{"GlobalId": ifcopenshell.guid.new(), "Name": self.settings["Name"]} "IfcPropertySet", **{"GlobalId": ifcopenshell.guid.new(), "Name": self.settings["name"]}
) )
has_property_sets = list(self.settings["product"].HasPropertySets or []) has_property_sets = list(self.settings["product"].HasPropertySets or [])
has_property_sets.append(pset) has_property_sets.append(pset)
@@ -44,13 +44,13 @@ class Usecase:
return pset return pset
elif self.settings["product"].is_a("IfcMaterialDefinition"): elif self.settings["product"].is_a("IfcMaterialDefinition"):
for definition in self.settings["product"].HasPropertySets or []: for definition in self.settings["product"].HasPropertySets or []:
if definition.Name == self.settings["Name"]: if definition.Name == self.settings["name"]:
return definition return definition
return self.file.create_entity( return self.file.create_entity(
"IfcMaterialProperties", "IfcMaterialProperties",
**{ **{
"Name": self.settings["Name"], "Name": self.settings["name"],
"Material": self.settings["product"], "Material": self.settings["product"],
} }
) )
@@ -1,10 +1,11 @@
import ifcopenshell import ifcopenshell
import ifcopenshell.api
class Usecase: class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = {"product": None, "Name": None} self.settings = {"product": None, "name": None}
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
@@ -13,18 +14,18 @@ class Usecase:
for rel in self.settings["product"].IsDefinedBy or []: for rel in self.settings["product"].IsDefinedBy or []:
if ( if (
rel.is_a("IfcRelDefinesByProperties") rel.is_a("IfcRelDefinesByProperties")
and rel.RelatingPropertyDefinition.Name == self.settings["Name"] and rel.RelatingPropertyDefinition.Name == self.settings["name"]
): ):
return rel.RelatingPropertyDefinition return rel.RelatingPropertyDefinition
qto = self.file.create_entity( qto = self.file.create_entity(
"IfcElementQuantity", **{"GlobalId": ifcopenshell.guid.new(), "Name": self.settings["Name"]} "IfcElementQuantity", **{"GlobalId": ifcopenshell.guid.new(), "Name": self.settings["name"]}
) )
self.file.create_entity( self.file.create_entity(
"IfcRelDefinesByProperties", "IfcRelDefinesByProperties",
**{ **{
"GlobalId": ifcopenshell.guid.new(), "GlobalId": ifcopenshell.guid.new(),
# TODO: owner history "OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
"RelatedObjects": [self.settings["product"]], "RelatedObjects": [self.settings["product"]],
"RelatingPropertyDefinition": qto, "RelatingPropertyDefinition": qto,
} }
@@ -5,7 +5,7 @@ import ifcopenshell.util.pset
class Usecase: class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = {"pset": None, "Name": None, "Properties": {}} self.settings = {"pset": None, "name": None, "properties": {}}
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
@@ -17,8 +17,8 @@ class Usecase:
self.extend_pset_with_new_properties(new_properties) self.extend_pset_with_new_properties(new_properties)
def update_pset_name(self): def update_pset_name(self):
if self.settings["Name"]: if self.settings["name"]:
self.settings["pset"].Name = self.settings["Name"] self.settings["pset"].Name = self.settings["name"]
def load_pset_template(self): def load_pset_template(self):
# TODO: add IFC2X3 PsetQto template support # TODO: add IFC2X3 PsetQto template support
@@ -30,19 +30,19 @@ class Usecase:
self.update_existing_property(prop) self.update_existing_property(prop)
def update_existing_property(self, prop): def update_existing_property(self, prop):
if prop.Name not in self.settings["Properties"]: if prop.Name not in self.settings["properties"]:
return return
value = self.settings["Properties"][prop.Name] value = self.settings["properties"][prop.Name]
if value is None: if value is None:
prop.NominalValue = None prop.NominalValue = None
else: else:
primary_measure_type = self.get_primary_measure_type(prop.Name, previous_value=prop.NominalValue) primary_measure_type = self.get_primary_measure_type(prop.Name, previous_value=prop.NominalValue)
prop.NominalValue = self.file.create_entity(primary_measure_type, value) prop.NominalValue = self.file.create_entity(primary_measure_type, value)
del self.settings["Properties"][prop.Name] del self.settings["properties"][prop.Name]
def add_new_properties(self): def add_new_properties(self):
properties = [] properties = []
for name, value in self.settings["Properties"].items(): for name, value in self.settings["properties"].items():
if value is None: if value is None:
continue continue
primary_measure_type = self.get_primary_measure_type(name) primary_measure_type = self.get_primary_measure_type(name)
@@ -4,7 +4,7 @@ import ifcopenshell
class Usecase: class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = {"qto": None, "Name": None, "Properties": {}} self.settings = {"qto": None, "name": None, "properties": {}}
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
@@ -16,8 +16,8 @@ class Usecase:
self.extend_qto_with_new_properties(new_properties) self.extend_qto_with_new_properties(new_properties)
def update_qto_name(self): def update_qto_name(self):
if self.settings["Name"]: if self.settings["name"]:
self.settings["qto"].Name = self.settings["Name"] self.settings["qto"].Name = self.settings["name"]
def load_qto_template(self): def load_qto_template(self):
# TODO: add IFC2X3 PsetQto template support # TODO: add IFC2X3 PsetQto template support
@@ -29,16 +29,16 @@ class Usecase:
self.update_existing_property(prop) self.update_existing_property(prop)
def update_existing_property(self, prop): def update_existing_property(self, prop):
if prop.Name not in self.settings["Properties"]: if prop.Name not in self.settings["properties"]:
return return
value = self.settings["Properties"][prop.Name] value = self.settings["properties"][prop.Name]
if prop.is_a("IfcPhysicalSimpleQuantity"): if prop.is_a("IfcPhysicalSimpleQuantity"):
prop[3] = float(value) if value else None prop[3] = float(value) if value else None
del self.settings["Properties"][prop.Name] del self.settings["properties"][prop.Name]
def add_new_properties(self): def add_new_properties(self):
properties = [] properties = []
for name, value in self.settings["Properties"].items(): for name, value in self.settings["properties"].items():
if value is None: if value is None:
continue continue
property_type = self.get_canonical_property_type(name) property_type = self.get_canonical_property_type(name)
@@ -2,15 +2,11 @@ class Usecase:
def __init__(self, file, **settings): def __init__(self, file, **settings):
self.file = file self.file = file
self.settings = { self.settings = {
"Name": "Name", "name": "Name",
"SurfaceColour": [], # RGB "surface_colour": [], # RGB
"DiffuseColour": [], # RGB "diffuse_colour": [], # RGB
"Transparency": 0, "transparency": 0,
"external_definition": { "external_definition": {"location": None, "identification": None, "name": "Name"},
"Location": None,
"Identification": None,
"Name": "Name"
},
} }
for key, value in settings.items(): for key, value in settings.items():
self.settings[key] = value self.settings[key] = value
@@ -20,22 +16,26 @@ class Usecase:
if self.settings["external_definition"]: if self.settings["external_definition"]:
styles.append(self.create_externally_defined_surface_style()) styles.append(self.create_externally_defined_surface_style())
# Name is filled out because Revit treats this incorrectly as the material name # Name is filled out because Revit treats this incorrectly as the material name
return self.file.createIfcSurfaceStyle(self.settings["Name"], "BOTH", styles) return self.file.createIfcSurfaceStyle(self.settings["name"], "BOTH", styles)
def create_surface_style_rendering(self): def create_surface_style_rendering(self):
return self.file.create_entity("IfcSurfaceStyleRendering", **{ return self.file.create_entity(
"SurfaceColour": self.create_colour_rgb(self.settings["SurfaceColour"]), "IfcSurfaceStyleRendering",
"Transparency": (self.settings["Transparency"] - 1) * -1, **{
"ReflectanceMethod": "NOTDEFINED", "SurfaceColour": self.create_colour_rgb(self.settings["surface_colour"]),
"DiffuseColour": self.create_colour_rgb(self.settings["DiffuseColour"]) "Transparency": (self.settings["transparency"] - 1) * -1,
}) "ReflectanceMethod": "NOTDEFINED",
"DiffuseColour": self.create_colour_rgb(self.settings["diffuse_colour"]),
}
)
def create_externally_defined_surface_style(self): def create_externally_defined_surface_style(self):
self.file.create_entity( self.file.create_entity(
"IfcExternallyDefinedSurfaceStyle", **{ "IfcExternallyDefinedSurfaceStyle",
"Location": self.settings["Location"], **{
"Identification": self.settings["Identification"], "Location": self.settings["location"],
"Name": self.settings["Name"], "Identification": self.settings["identification"],
"Name": self.settings["name"],
} }
) )
@@ -3,13 +3,13 @@ class Usecase:
self.file = file self.file = file
self.settings = { self.settings = {
"style": None, "style": None,
"SurfaceColour": [], # RGB "surface_colour": [], # RGB
"DiffuseColour": [], # RGB "diffuse_colour": [], # RGB
"Transparency": 0, "transparency": 0,
"external_definition": { "external_definition": {
"Location": None, "location": None,
"Identification": None, "identification": None,
"Name": "Name" "name": "Name"
}, },
} }
for key, value in settings.items(): for key, value in settings.items():
@@ -20,20 +20,20 @@ class Usecase:
for element in self.file.traverse(self.settings["style"]): for element in self.file.traverse(self.settings["style"]):
if element.is_a("IfcSurfaceStyleShading"): if element.is_a("IfcSurfaceStyleShading"):
if element.SurfaceColour: if element.SurfaceColour:
self.update_colour_rgb(element.SurfaceColour, self.settings["SurfaceColour"]) self.update_colour_rgb(element.SurfaceColour, self.settings["surface_colour"])
else: else:
element.SurfaceColour = self.create_colour_rgb(self.settings["SurfaceColour"]) element.SurfaceColour = self.create_colour_rgb(self.settings["surface_colour"])
element.Transparency = (self.settings["Transparency"] - 1) * -1 element.Transparency = (self.settings["transparency"] - 1) * -1
if element.is_a("IfcSurfaceStyleRendering"): if element.is_a("IfcSurfaceStyleRendering"):
if element.DiffuseColour: if element.DiffuseColour:
self.update_colour_rgb(element.DiffuseColour, self.settings["DiffuseColour"]) self.update_colour_rgb(element.DiffuseColour, self.settings["diffuse_colour"])
else: else:
element.DiffuseColour = self.create_colour_rgb(self.settings["DiffuseColour"]) element.DiffuseColour = self.create_colour_rgb(self.settings["diffuse_colour"])
# TODO: Move to separate usecase # TODO: Move to separate usecase
#if element.is_a("IfcExternallyDefinedSurfaceStyle"): #if element.is_a("IfcExternallyDefinedSurfaceStyle"):
# element.Location = self.settings["Location"] # element.Location = self.settings["location"]
# element.Identification = self.settings["Identification"] # element.Identification = self.settings["identification"]
# element.Name = self.settings["Name"] # element.Name = self.settings["name"]
# has_external_definition = True # has_external_definition = True
#if not has_external_definition: #if not has_external_definition:
# styles = list(self.settings["style"].Styles) # styles = list(self.settings["style"].Styles)
@@ -43,18 +43,18 @@ class Usecase:
def create_surface_style_rendering(self): def create_surface_style_rendering(self):
return self.file.create_entity("IfcSurfaceStyleRendering", **{ return self.file.create_entity("IfcSurfaceStyleRendering", **{
"SurfaceColour": self.create_colour_rgb(self.settings["SurfaceColour"]), "SurfaceColour": self.create_colour_rgb(self.settings["surface_colour"]),
"Transparency": (self.settings["Transparency"] - 1) * -1, "Transparency": (self.settings["transparency"] - 1) * -1,
"ReflectanceMethod": "NOTDEFINED", "ReflectanceMethod": "NOTDEFINED",
"DiffuseColour": self.create_colour_rgb(self.settings["DiffuseColour"]) "DiffuseColour": self.create_colour_rgb(self.settings["diffuse_colour"])
}) })
def create_externally_defined_surface_style(self): def create_externally_defined_surface_style(self):
self.file.create_entity( self.file.create_entity(
"IfcExternallyDefinedSurfaceStyle", **{ "IfcExternallyDefinedSurfaceStyle", **{
"Location": self.settings["Location"], "Location": self.settings["location"],
"Identification": self.settings["Identification"], "Identification": self.settings["identification"],
"Name": self.settings["Name"], "Name": self.settings["name"],
} }
) )