mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
class Usecase:
|
|
def __init__(self, file, **settings):
|
|
self.file = file
|
|
self.settings = {
|
|
"style": None,
|
|
"SurfaceColour": [], # RGB
|
|
"DiffuseColour": [], # RGB
|
|
"Transparency": 0,
|
|
"external_definition": {
|
|
"Location": None,
|
|
"Identification": None,
|
|
"Name": "Name"
|
|
},
|
|
}
|
|
for key, value in settings.items():
|
|
self.settings[key] = value
|
|
|
|
def execute(self):
|
|
#has_external_definition = None
|
|
for element in self.file.traverse(self.settings["style"]):
|
|
if element.is_a("IfcSurfaceStyleShading"):
|
|
if element.SurfaceColour:
|
|
self.update_colour_rgb(element.SurfaceColour, self.settings["SurfaceColour"])
|
|
else:
|
|
element.SurfaceColour = self.create_colour_rgb(self.settings["SurfaceColour"])
|
|
element.Transparency = (self.settings["Transparency"] - 1) * -1
|
|
if element.is_a("IfcSurfaceStyleRendering"):
|
|
if element.DiffuseColour:
|
|
self.update_colour_rgb(element.DiffuseColour, self.settings["DiffuseColour"])
|
|
else:
|
|
element.DiffuseColour = self.create_colour_rgb(self.settings["DiffuseColour"])
|
|
# TODO: Move to separate usecase
|
|
#if element.is_a("IfcExternallyDefinedSurfaceStyle"):
|
|
# element.Location = self.settings["Location"]
|
|
# element.Identification = self.settings["Identification"]
|
|
# element.Name = self.settings["Name"]
|
|
# has_external_definition = True
|
|
#if not has_external_definition:
|
|
# styles = list(self.settings["style"].Styles)
|
|
# styles.append(self.create_externally_defined_surface_style())
|
|
# self.settings["style"].Styles = styles
|
|
return self.settings["style"]
|
|
|
|
def create_surface_style_rendering(self):
|
|
return self.file.create_entity("IfcSurfaceStyleRendering", **{
|
|
"SurfaceColour": self.create_colour_rgb(self.settings["SurfaceColour"]),
|
|
"Transparency": (self.settings["Transparency"] - 1) * -1,
|
|
"ReflectanceMethod": "NOTDEFINED",
|
|
"DiffuseColour": self.create_colour_rgb(self.settings["DiffuseColour"])
|
|
})
|
|
|
|
def create_externally_defined_surface_style(self):
|
|
self.file.create_entity(
|
|
"IfcExternallyDefinedSurfaceStyle", **{
|
|
"Location": self.settings["Location"],
|
|
"Identification": self.settings["Identification"],
|
|
"Name": self.settings["Name"],
|
|
}
|
|
)
|
|
|
|
def create_colour_rgb(self, colour):
|
|
return self.file.createIfcColourRgb(None, colour[0], colour[1], colour[2])
|
|
|
|
def update_colour_rgb(self, element, colour):
|
|
element[1] = colour[0]
|
|
element[2] = colour[1]
|
|
element[3] = colour[2]
|