mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Run black, and add black to a "qa" target to make it a standardised process.
This commit is contained in:
@@ -34,9 +34,7 @@ class circle:
|
||||
radius: numpy.ndarray
|
||||
|
||||
def __call__(self, u):
|
||||
return numpy.array(
|
||||
[self.radius * numpy.cos(u), self.radius * numpy.sin(u), numpy.nan]
|
||||
)
|
||||
return numpy.array([self.radius * numpy.cos(u), self.radius * numpy.sin(u), numpy.nan])
|
||||
|
||||
|
||||
def place(matrix, func):
|
||||
|
||||
@@ -37,12 +37,14 @@ class Data:
|
||||
if data_type == "enum":
|
||||
enum_items = ifcopenshell.util.attribute.get_enum_items(attribute)
|
||||
|
||||
cls.products[product_id].append({
|
||||
"name": attribute.name(),
|
||||
"value": value,
|
||||
"type": data_type,
|
||||
"enum_items": enum_items,
|
||||
"list_type": list_type,
|
||||
"is_optional": attribute.optional(),
|
||||
"is_null": getattr(product, attribute.name()) is None
|
||||
})
|
||||
cls.products[product_id].append(
|
||||
{
|
||||
"name": attribute.name(),
|
||||
"value": value,
|
||||
"type": data_type,
|
||||
"enum_items": enum_items,
|
||||
"list_type": list_type,
|
||||
"is_optional": attribute.optional(),
|
||||
"is_null": getattr(product, attribute.name()) is None,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -57,7 +57,7 @@ class Data:
|
||||
for reference in cls._file.by_type("IfcClassificationReference"):
|
||||
data = reference.get_info()
|
||||
if reference.ReferencedSource:
|
||||
#data["ReferencedSource"] = cls.get_referenced_source(reference.ReferencedSource)
|
||||
# data["ReferencedSource"] = cls.get_referenced_source(reference.ReferencedSource)
|
||||
data["ReferencedSource"] = reference.ReferencedSource.id()
|
||||
cls.references[reference.id()] = data
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"classification": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"classification": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"reference": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"reference": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import ifcopenshell
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
@@ -10,11 +11,14 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
metric = self.file.create_entity("IfcMetric", **{
|
||||
"Name": "Unnamed",
|
||||
"ConstraintGrade": "NOTDEFINED",
|
||||
"Benchmark": "EQUALTO",
|
||||
})
|
||||
metric = self.file.create_entity(
|
||||
"IfcMetric",
|
||||
**{
|
||||
"Name": "Unnamed",
|
||||
"ConstraintGrade": "NOTDEFINED",
|
||||
"Benchmark": "EQUALTO",
|
||||
}
|
||||
)
|
||||
if self.settings["objective"]:
|
||||
benchmark_values = list(self.settings["objective"].BenchmarkValues or [])
|
||||
benchmark_values.append(metric)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import ifcopenshell
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
@@ -8,8 +9,6 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
return self.file.create_entity("IfcObjective", **{
|
||||
"Name": "Unnamed",
|
||||
"ConstraintGrade": "NOTDEFINED",
|
||||
"ObjectiveQualifier": "NOTDEFINED"
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcObjective", **{"Name": "Unnamed", "ConstraintGrade": "NOTDEFINED", "ObjectiveQualifier": "NOTDEFINED"}
|
||||
)
|
||||
|
||||
@@ -22,8 +22,11 @@ class Usecase:
|
||||
for rel in self.file.by_type("IfcRelAssociatesConstraint"):
|
||||
if rel.RelatingConstraint == self.settings["constraint"]:
|
||||
return rel
|
||||
return self.file.create_entity("IfcRelAssociatesConstraint", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
# TODO: owner history
|
||||
"RelatingConstraint": self.settings["constraint"]
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcRelAssociatesConstraint",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
# TODO: owner history
|
||||
"RelatingConstraint": self.settings["constraint"],
|
||||
}
|
||||
)
|
||||
|
||||
@@ -15,10 +15,9 @@ class Data:
|
||||
cls.is_loaded = False
|
||||
cls.products = {}
|
||||
cls.objectives = {}
|
||||
cls.metrics ={}
|
||||
cls.metrics = {}
|
||||
cls.references = {}
|
||||
|
||||
|
||||
@classmethod
|
||||
def load(cls, file, product_id=None):
|
||||
cls._file = file
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"metric": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"metric": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"objective": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"objective": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -35,12 +35,15 @@ class Usecase:
|
||||
project.RepresentationContexts = contexts
|
||||
return context
|
||||
parent = parent[0]
|
||||
return self.file.create_entity("IfcGeometricRepresentationSubContext", **{
|
||||
"ContextIdentifier": self.settings["subcontext"],
|
||||
"ContextType": self.settings["context"],
|
||||
"ParentContext": parent,
|
||||
"TargetView": self.settings["target_view"],
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcGeometricRepresentationSubContext",
|
||||
**{
|
||||
"ContextIdentifier": self.settings["subcontext"],
|
||||
"ContextType": self.settings["context"],
|
||||
"ParentContext": parent,
|
||||
"TargetView": self.settings["target_view"],
|
||||
}
|
||||
)
|
||||
|
||||
def create_origin(self):
|
||||
self.origin = self.file.createIfcAxis2Placement3D(
|
||||
|
||||
@@ -20,8 +20,5 @@ class Data:
|
||||
"ContextIdentifier": subcontext.ContextIdentifier,
|
||||
"TargetView": subcontext.TargetView,
|
||||
}
|
||||
cls.contexts[int(context.id())] = {
|
||||
"ContextType": context.ContextType,
|
||||
"HasSubContexts": subcontexts
|
||||
}
|
||||
cls.contexts[int(context.id())] = {"ContextType": context.ContextType, "HasSubContexts": subcontexts}
|
||||
cls.is_loaded = True
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import ifcopenshell
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
@@ -9,7 +10,6 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
id_attribute = "DocumentId" if self.file.schema == "IFC2X3" else "Identification"
|
||||
return self.file.create_entity("IfcDocumentInformation", **{
|
||||
id_attribute: ifcopenshell.guid.new(),
|
||||
"Name": "Unnamed"
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcDocumentInformation", **{id_attribute: ifcopenshell.guid.new(), "Name": "Unnamed"}
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import ifcopenshell
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
@@ -9,6 +10,4 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
id_attribute = "ItemReference" if self.file.schema == "IFC2X3" else "Identification"
|
||||
return self.file.create_entity("IfcDocumentReference", **{
|
||||
id_attribute: ifcopenshell.guid.new()
|
||||
})
|
||||
return self.file.create_entity("IfcDocumentReference", **{id_attribute: ifcopenshell.guid.new()})
|
||||
|
||||
@@ -34,8 +34,11 @@ class Usecase:
|
||||
):
|
||||
return self.settings["document"].DocumentInfoForObjects[0]
|
||||
|
||||
return self.file.create_entity("IfcRelAssociatesDocument", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
# TODO: owner history
|
||||
"RelatingDocument": self.settings["document"]
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcRelAssociatesDocument",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
# TODO: owner history
|
||||
"RelatingDocument": self.settings["document"],
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"information": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"information": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"reference": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"reference": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -28,6 +28,6 @@ class Data:
|
||||
"ContextType": c.ContextType,
|
||||
"ContextIdentifier": c.ContextIdentifier,
|
||||
"TargetView": c.TargetView if c.is_a("IfcGeometricRepresentationSubContext") else "",
|
||||
}
|
||||
},
|
||||
}
|
||||
cls.products[product_id].append(rep_id)
|
||||
|
||||
@@ -11,10 +11,13 @@ class Usecase:
|
||||
if not source_crs:
|
||||
return
|
||||
projected_crs = self.file.create_entity("IfcProjectedCRS", **{"Name": ""})
|
||||
self.file.create_entity("IfcMapConversion", **{
|
||||
"SourceCRS": source_crs,
|
||||
"TargetCRS": projected_crs,
|
||||
"Eastings": 0,
|
||||
"Northings": 0,
|
||||
"OrthogonalHeight": 0,
|
||||
})
|
||||
self.file.create_entity(
|
||||
"IfcMapConversion",
|
||||
**{
|
||||
"SourceCRS": source_crs,
|
||||
"TargetCRS": projected_crs,
|
||||
"Eastings": 0,
|
||||
"Northings": 0,
|
||||
"OrthogonalHeight": 0,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
|
||||
@@ -11,10 +11,9 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
element = self.file.create_entity("IfcGridAxis", **{
|
||||
"axis_tag": self.settings["axis_tag"],
|
||||
"SameSense": self.settings["same_sense"]
|
||||
})
|
||||
element = self.file.create_entity(
|
||||
"IfcGridAxis", **{"axis_tag": self.settings["axis_tag"], "SameSense": self.settings["same_sense"]}
|
||||
)
|
||||
axes = list(getattr(self.settings["grid"], self.settings["uvw_axes"]) or [])
|
||||
axes.append(element)
|
||||
setattr(self.settings["grid"], self.settings["uvw_axes"], axes)
|
||||
|
||||
@@ -10,8 +10,11 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
return self.file.create_entity("IfcGroup", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"Name": "Unnamed"
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcGroup",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"Name": "Unnamed",
|
||||
}
|
||||
)
|
||||
|
||||
@@ -14,12 +14,15 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
if not self.settings["group"].IsGroupedBy:
|
||||
return self.file.create_entity("IfcRelAssignsToGroup", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatedObjects": [self.settings["product"]],
|
||||
"RelatingGroup": self.settings["group"]
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcRelAssignsToGroup",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatedObjects": [self.settings["product"]],
|
||||
"RelatingGroup": self.settings["group"],
|
||||
}
|
||||
)
|
||||
rel = self.settings["group"].IsGroupedBy[0]
|
||||
related_objects = set(rel.RelatedObjects) or set()
|
||||
related_objects.add(self.settings["product"])
|
||||
|
||||
@@ -21,4 +21,4 @@ class Data:
|
||||
data = group.get_info()
|
||||
del data["OwnerHistory"]
|
||||
cls.groups[group.id()] = data
|
||||
cls.is_loaded=True
|
||||
cls.is_loaded = True
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"group": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"group": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -6,6 +6,4 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
return self.file.create_entity("IfcPresentationLayerAssignment", **{
|
||||
"Name": "Unnamed"
|
||||
})
|
||||
return self.file.create_entity("IfcPresentationLayerAssignment", **{"Name": "Unnamed"})
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"layer": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"layer": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -7,10 +7,9 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
layers = list(self.settings["layer_set"].MaterialLayers or [])
|
||||
layer = self.file.create_entity("IfcMaterialLayer", **{
|
||||
"Material": self.settings["material"],
|
||||
"LayerThickness": 1.
|
||||
})
|
||||
layer = self.file.create_entity(
|
||||
"IfcMaterialLayer", **{"Material": self.settings["material"], "LayerThickness": 1.0}
|
||||
)
|
||||
layers.append(layer)
|
||||
self.settings["layer_set"].MaterialLayers = layers
|
||||
return layer
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase():
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"element": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"element": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
class Usecase():
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"constituent": None,
|
||||
"attributes": {},
|
||||
"material": None
|
||||
}
|
||||
self.settings = {"constituent": None, "attributes": {}, "material": None}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
class Usecase():
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"layer": None,
|
||||
"attributes": {},
|
||||
"material": None
|
||||
}
|
||||
self.settings = {"layer": None, "attributes": {}, "material": None}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
class Usecase():
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"profile": None,
|
||||
"attributes": {},
|
||||
"profile_attributes": {},
|
||||
"material": None
|
||||
}
|
||||
self.settings = {"profile": None, "attributes": {}, "profile_attributes": {}, "material": None}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -46,11 +46,14 @@ class Usecase:
|
||||
name = dummy_profile.attribute_name(i)
|
||||
if "Radius" in name and name != "RoundingRadius":
|
||||
dummy_profile[i] = None
|
||||
dummy_solid = self.dummy.create_entity("IfcExtrudedAreaSolid", **{
|
||||
"SweptArea": dummy_profile,
|
||||
"ExtrudedDirection": self.dummy.createIfcDirection((0., 0., 1.)),
|
||||
"Depth": 1
|
||||
})
|
||||
dummy_solid = self.dummy.create_entity(
|
||||
"IfcExtrudedAreaSolid",
|
||||
**{
|
||||
"SweptArea": dummy_profile,
|
||||
"ExtrudedDirection": self.dummy.createIfcDirection((0.0, 0.0, 1.0)),
|
||||
"Depth": 1,
|
||||
}
|
||||
)
|
||||
self.settings_2d = ifcopenshell.geom.settings()
|
||||
self.settings_2d.set(self.settings_2d.INCLUDE_CURVES, True)
|
||||
shape = ifcopenshell.geom.create_shape(self.settings_2d, dummy_solid)
|
||||
@@ -77,61 +80,61 @@ class Usecase:
|
||||
def get_bottom_left(self, shape):
|
||||
v = shape.verts
|
||||
x = [v[i] for i in range(0, len(v), 3)]
|
||||
y = [v[i+1] for i in range(0, len(v), 3)]
|
||||
y = [v[i + 1] for i in range(0, len(v), 3)]
|
||||
width = max(x) - min(x)
|
||||
height = max(y) - min(y)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((-width/2, height/2, 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((-width / 2, height / 2, 0.0)))
|
||||
|
||||
def get_bottom_centre(self, shape):
|
||||
v = shape.verts
|
||||
y = [v[i+1] for i in range(0, len(v), 3)]
|
||||
y = [v[i + 1] for i in range(0, len(v), 3)]
|
||||
height = max(y) - min(y)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0., height/2, 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0.0, height / 2, 0.0)))
|
||||
|
||||
def get_bottom_right(self, shape):
|
||||
v = shape.verts
|
||||
x = [v[i] for i in range(0, len(v), 3)]
|
||||
y = [v[i+1] for i in range(0, len(v), 3)]
|
||||
y = [v[i + 1] for i in range(0, len(v), 3)]
|
||||
width = max(x) - min(x)
|
||||
height = max(y) - min(y)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((width/2, height/2, 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((width / 2, height / 2, 0.0)))
|
||||
|
||||
def get_mid_depth_left(self, shape):
|
||||
v = shape.verts
|
||||
x = [v[i] for i in range(0, len(v), 3)]
|
||||
width = max(x) - min(x)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((-width/2, 0., 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((-width / 2, 0.0, 0.0)))
|
||||
|
||||
def get_mid_depth_centre(self, shape):
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0., 0., 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0.0, 0.0, 0.0)))
|
||||
|
||||
def get_mid_depth_right(self, shape):
|
||||
v = shape.verts
|
||||
x = [v[i] for i in range(0, len(v), 3)]
|
||||
width = max(x) - min(x)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((width/2, 0., 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((width / 2, 0.0, 0.0)))
|
||||
|
||||
def get_top_left(self, shape):
|
||||
v = shape.verts
|
||||
x = [v[i] for i in range(0, len(v), 3)]
|
||||
y = [v[i+1] for i in range(0, len(v), 3)]
|
||||
y = [v[i + 1] for i in range(0, len(v), 3)]
|
||||
width = max(x) - min(x)
|
||||
height = max(y) - min(y)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((-width/2, -height/2, 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((-width / 2, -height / 2, 0.0)))
|
||||
|
||||
def get_top_centre(self, shape):
|
||||
v = shape.verts
|
||||
y = [v[i+1] for i in range(0, len(v), 3)]
|
||||
y = [v[i + 1] for i in range(0, len(v), 3)]
|
||||
height = max(y) - min(y)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0., -height/2, 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((0.0, -height / 2, 0.0)))
|
||||
|
||||
def get_top_right(self, shape):
|
||||
v = shape.verts
|
||||
x = [v[i] for i in range(0, len(v), 3)]
|
||||
y = [v[i+1] for i in range(0, len(v), 3)]
|
||||
y = [v[i + 1] for i in range(0, len(v), 3)]
|
||||
width = max(x) - min(x)
|
||||
height = max(y) - min(y)
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((width/2, -height/2, 0.)))
|
||||
return self.file.createIfcAxis2Placement3D(self.file.createIfcCartesianPoint((width / 2, -height / 2, 0.0)))
|
||||
|
||||
def update_representation(self, element):
|
||||
representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
|
||||
|
||||
@@ -7,7 +7,9 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
address = self.file.create_entity(self.settings["ifc_class"], "OFFICE")
|
||||
addresses = list(self.settings["assigned_object"].Addresses) if self.settings["assigned_object"].Addresses else []
|
||||
addresses = (
|
||||
list(self.settings["assigned_object"].Addresses) if self.settings["assigned_object"].Addresses else []
|
||||
)
|
||||
addresses.append(address)
|
||||
self.settings["assigned_object"].Addresses = addresses
|
||||
return address
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"address": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"address": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"organisation": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"organisation": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"person": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"person": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"role": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"role": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
def get_person(ifc):
|
||||
people = ifc.by_type("IfcPerson") or [None]
|
||||
return people [0]
|
||||
return people[0]
|
||||
|
||||
|
||||
def get_organisation(ifc):
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
class Usecase():
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {"profile": None, "attributes": {}}
|
||||
|
||||
@@ -9,13 +9,16 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
prop_template = self.file.create_entity("IfcSimplePropertyTemplate", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"Name": "NewProperty",
|
||||
"PrimaryMeasureType": "IfcLabel",
|
||||
"TemplateType": "P_SINGLEVALUE",
|
||||
"AccessState": "READWRITE"
|
||||
})
|
||||
prop_template = self.file.create_entity(
|
||||
"IfcSimplePropertyTemplate",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"Name": "NewProperty",
|
||||
"PrimaryMeasureType": "IfcLabel",
|
||||
"TemplateType": "P_SINGLEVALUE",
|
||||
"AccessState": "READWRITE",
|
||||
}
|
||||
)
|
||||
has_property_templates = list(self.settings["pset_template"].HasPropertyTemplates or [])
|
||||
has_property_templates.append(prop_template)
|
||||
self.settings["pset_template"].HasPropertyTemplates = has_property_templates
|
||||
|
||||
@@ -9,9 +9,12 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
self.file.create_entity("IfcPropertySetTemplate", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"Name": "New_Pset",
|
||||
"TemplateType": "PSET_TYPEDRIVENONLY",
|
||||
"ApplicableEntity": "IfcTypeObject"
|
||||
})
|
||||
self.file.create_entity(
|
||||
"IfcPropertySetTemplate",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"Name": "New_Pset",
|
||||
"TemplateType": "PSET_TYPEDRIVENONLY",
|
||||
"ApplicableEntity": "IfcTypeObject",
|
||||
}
|
||||
)
|
||||
|
||||
@@ -29,6 +29,6 @@ class Data:
|
||||
"GlobalId": data["GlobalId"],
|
||||
"Name": data["Name"],
|
||||
"Description": data["Description"],
|
||||
"PrimaryMeasureType": data["PrimaryMeasureType"]
|
||||
"PrimaryMeasureType": data["PrimaryMeasureType"],
|
||||
}
|
||||
cls.is_loaded = True
|
||||
|
||||
@@ -4,9 +4,7 @@ import ifcopenshell.util.element
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"prop_template": None
|
||||
}
|
||||
self.settings = {"prop_template": None}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -4,9 +4,7 @@ import ifcopenshell.util.element
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"pset_template": None
|
||||
}
|
||||
self.settings = {"pset_template": None}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -25,11 +25,12 @@ class Usecase:
|
||||
# https://forums.buildingsmart.org/t/what-are-allowed-to-be-root-level-construction-resources/3550
|
||||
if self.settings["parent_resource"]:
|
||||
ifcopenshell.api.run(
|
||||
"nest.assign_object", self.file, related_object=resource, relating_object=self.settings["parent_resource"]
|
||||
"nest.assign_object",
|
||||
self.file,
|
||||
related_object=resource,
|
||||
relating_object=self.settings["parent_resource"],
|
||||
)
|
||||
else:
|
||||
context = self.file.by_type("IfcContext")[0]
|
||||
ifcopenshell.api.run(
|
||||
"project.assign_declaration", self.file, definition=resource, relating_context=context
|
||||
)
|
||||
ifcopenshell.api.run("project.assign_declaration", self.file, definition=resource, relating_context=context)
|
||||
return resource
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import ifcopenshell.util.date
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
|
||||
@@ -23,7 +23,7 @@ class Data(CostValueTrait):
|
||||
return
|
||||
cls.load_resources()
|
||||
cls.load_resource_times()
|
||||
cls.is_loaded=True
|
||||
cls.is_loaded = True
|
||||
|
||||
@classmethod
|
||||
def load_resources(cls):
|
||||
@@ -63,6 +63,6 @@ class Data(CostValueTrait):
|
||||
continue
|
||||
if "Start" in key or "Finish" in key or key == "StatusTime":
|
||||
data[key] = ifcopenshell.util.date.ifc2datetime(value)
|
||||
elif "Work" in key or key =="LevelingDelay":
|
||||
elif "Work" in key or key == "LevelingDelay":
|
||||
data[key] = ifcopenshell.util.date.ifc2datetime(value)
|
||||
cls.resource_times[resource_time.id()] = data
|
||||
|
||||
@@ -18,10 +18,7 @@ class Usecase:
|
||||
and "ScheduleFinish" in self.settings["attributes"].keys()
|
||||
):
|
||||
del self.settings["attributes"]["ScheduleFinish"]
|
||||
if (
|
||||
self.settings["attributes"].get("ActualWork", None)
|
||||
and "ActualFinish" in self.settings["attributes"].keys()
|
||||
):
|
||||
if self.settings["attributes"].get("ActualWork", None) and "ActualFinish" in self.settings["attributes"].keys():
|
||||
del self.settings["attributes"]["ActualFinish"]
|
||||
|
||||
for name, value in self.settings["attributes"].items():
|
||||
|
||||
@@ -14,10 +14,13 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
element = self.file.create_entity(self.settings["ifc_class"], **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file)
|
||||
})
|
||||
element = self.file.create_entity(
|
||||
self.settings["ifc_class"],
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
}
|
||||
)
|
||||
element.Name = self.settings["name"] or None
|
||||
if self.settings["predefined_type"]:
|
||||
if hasattr(element, "PredefinedType"):
|
||||
|
||||
@@ -13,5 +13,5 @@ class Data:
|
||||
cls.products[product_id] = {
|
||||
"type": product.is_a(),
|
||||
"PredefinedType": product.PredefinedType if hasattr(product, "PredefinedType") else None,
|
||||
"ObjectType": product.ObjectType if hasattr(product, "ObjectType") else None
|
||||
"ObjectType": product.ObjectType if hasattr(product, "ObjectType") else None,
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import ifcopenshell.util.date
|
||||
|
||||
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
|
||||
@@ -25,7 +25,5 @@ class Usecase:
|
||||
work_plan.StartTime = ifcopenshell.util.date.datetime2ifc(self.settings["start_time"], "IfcDateTime")
|
||||
|
||||
context = self.file.by_type("IfcContext")[0]
|
||||
ifcopenshell.api.run(
|
||||
"project.assign_declaration", self.file, definition=work_plan, relating_context=context
|
||||
)
|
||||
ifcopenshell.api.run("project.assign_declaration", self.file, definition=work_plan, relating_context=context)
|
||||
return work_plan
|
||||
|
||||
@@ -38,7 +38,11 @@ class Usecase:
|
||||
if not work_schedule:
|
||||
return default_seconds_per_day
|
||||
psets = ifcopenshell.util.element.get_psets(work_schedule)
|
||||
if not psets or "Pset_WorkControlCommon" not in psets or "WorkDayDuration" not in psets["Pset_WorkControlCommon"]:
|
||||
if (
|
||||
not psets
|
||||
or "Pset_WorkControlCommon" not in psets
|
||||
or "WorkDayDuration" not in psets["Pset_WorkControlCommon"]
|
||||
):
|
||||
return default_seconds_per_day
|
||||
work_day_duration = ifcopenshell.util.date.ifc2datetime(psets["Pset_WorkControlCommon"]["WorkDayDuration"])
|
||||
return work_day_duration.seconds
|
||||
|
||||
@@ -142,8 +142,14 @@ class Data:
|
||||
for r in task.HasAssignments
|
||||
if r.is_a("IfcRelAssignsToProduct")
|
||||
]
|
||||
[data["Resources"].extend([o.id() for o in r.RelatedObjects if o.is_a("IfcResource")]) for r in task.OperatesOn]
|
||||
[data["Controls"].extend([o.id() for o in r.RelatedObjects if o.is_a("IfcControl")]) for r in task.OperatesOn]
|
||||
[
|
||||
data["Resources"].extend([o.id() for o in r.RelatedObjects if o.is_a("IfcResource")])
|
||||
for r in task.OperatesOn
|
||||
]
|
||||
[
|
||||
data["Controls"].extend([o.id() for o in r.RelatedObjects if o.is_a("IfcControl")])
|
||||
for r in task.OperatesOn
|
||||
]
|
||||
[data["Inputs"].extend([o.id() for o in r.RelatedObjects if o.is_a("IfcProduct")]) for r in task.OperatesOn]
|
||||
[data["IsPredecessorTo"].append(rel.id()) for rel in task.IsPredecessorTo or []]
|
||||
[data["IsSuccessorFrom"].append(rel.id()) for rel in task.IsSuccessorFrom or []]
|
||||
|
||||
@@ -55,13 +55,10 @@ class Usecase:
|
||||
elif "ScheduleFinish" in self.settings["attributes"].keys() and self.settings["task_time"].ScheduleStart:
|
||||
self.calculate_duration()
|
||||
|
||||
if (
|
||||
self.settings["task_time"].ScheduleDuration
|
||||
and (
|
||||
"ScheduleStart" in self.settings["attributes"].keys()
|
||||
or "ScheduleFinish" in self.settings["attributes"].keys()
|
||||
or "ScheduleDuration" in self.settings["attributes"].keys()
|
||||
)
|
||||
if self.settings["task_time"].ScheduleDuration and (
|
||||
"ScheduleStart" in self.settings["attributes"].keys()
|
||||
or "ScheduleFinish" in self.settings["attributes"].keys()
|
||||
or "ScheduleDuration" in self.settings["attributes"].keys()
|
||||
):
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=self.task)
|
||||
|
||||
|
||||
@@ -19,9 +19,5 @@ class Usecase:
|
||||
for rel in self.settings["work_schedule"].Controls:
|
||||
for related_object in rel.RelatedObjects:
|
||||
if related_object.is_a("IfcTask"):
|
||||
ifcopenshell.api.run(
|
||||
"sequence.remove_task",
|
||||
self.file,
|
||||
task=related_object
|
||||
)
|
||||
ifcopenshell.api.run("sequence.remove_task", self.file, task=related_object)
|
||||
self.file.remove(self.settings["work_schedule"])
|
||||
|
||||
@@ -15,6 +15,4 @@ class Usecase:
|
||||
self.file.remove(self.settings["rel_sequence"].TimeLag)
|
||||
else:
|
||||
self.settings["rel_sequence"].TimeLag = None
|
||||
ifcopenshell.api.run(
|
||||
"sequence.cascade_schedule", self.file, task=self.settings["rel_sequence"].RelatedProcess
|
||||
)
|
||||
ifcopenshell.api.run("sequence.cascade_schedule", self.file, task=self.settings["rel_sequence"].RelatedProcess)
|
||||
|
||||
@@ -46,5 +46,5 @@ class Data:
|
||||
"Name": element.Name,
|
||||
"LongName": element.LongName,
|
||||
"Decomposes": decomposes,
|
||||
"IsDecomposedBy": is_decomposed_by
|
||||
"IsDecomposedBy": is_decomposed_by,
|
||||
}
|
||||
|
||||
+9
-6
@@ -14,12 +14,15 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
if not self.settings["structural_analysis_model"].IsGroupedBy:
|
||||
return self.file.create_entity("IfcRelAssignsToGroup", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatedObjects": [self.settings["product"]],
|
||||
"RelatingGroup": self.settings["structural_analysis_model"]
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcRelAssignsToGroup",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatedObjects": [self.settings["product"]],
|
||||
"RelatingGroup": self.settings["structural_analysis_model"],
|
||||
}
|
||||
)
|
||||
rel = self.settings["structural_analysis_model"].IsGroupedBy[0]
|
||||
related_objects = set(rel.RelatedObjects) or set()
|
||||
related_objects.add(self.settings["product"])
|
||||
|
||||
@@ -155,7 +155,9 @@ class Data:
|
||||
if connection.is_a("IfcStructuralCurveConnection"):
|
||||
data["Axis"] = data["Axis"].id() if data["Axis"] is not None else None
|
||||
if connection.is_a("IfcStructuralPointConnection"):
|
||||
data["ConditionCoordinateSystem"] = data["ConditionCoordinateSystem"].id() if data["ConditionCoordinateSystem"] is not None else None
|
||||
data["ConditionCoordinateSystem"] = (
|
||||
data["ConditionCoordinateSystem"].id() if data["ConditionCoordinateSystem"] is not None else None
|
||||
)
|
||||
|
||||
data["ConnectsStructuralMembers"] = []
|
||||
|
||||
@@ -238,7 +240,7 @@ class Data:
|
||||
data["Representation"] = data["Representation"].id() if data["Representation"] is not None else None
|
||||
if member.is_a("IfcStructuralCurveMember"):
|
||||
data["Axis"] = data["Axis"].id() if data["Axis"] is not None else None
|
||||
|
||||
|
||||
data["ConnectsStructuralActivities"] = []
|
||||
data["ConnectedBy"] = []
|
||||
|
||||
@@ -249,6 +251,5 @@ class Data:
|
||||
for rel in member.ConnectedBy or []:
|
||||
cls.load_connects_structural_member(rel)
|
||||
data["ConnectedBy"].append(rel.id())
|
||||
|
||||
|
||||
cls.members[member.id()] = data
|
||||
|
||||
+1
-4
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"structural_analysis_model": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"structural_analysis_model": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
+1
-4
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"condition": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"condition": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ class Usecase:
|
||||
ccs = self.file.createIfcAxis2Placement3D(point, None, None)
|
||||
self.settings["structural_item"].ConditionCoordinateSystem = ccs
|
||||
print(ccs)
|
||||
|
||||
|
||||
ccs = self.settings["structural_item"].ConditionCoordinateSystem
|
||||
print("use case")
|
||||
print(ccs)
|
||||
@@ -20,4 +20,4 @@ class Usecase:
|
||||
ccs.Axis = self.file.createIfcDirection(self.settings["axis"])
|
||||
if ccs.RefDirection and len(self.file.get_inverse(ccs.RefDirection)) == 1:
|
||||
self.file.remove(ccs.RefDirection)
|
||||
ccs.RefDirection = self.file.createIfcDirection(self.settings["ref_direction"])
|
||||
ccs.RefDirection = self.file.createIfcDirection(self.settings["ref_direction"])
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"structural_load": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"structural_load": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
-1
@@ -16,4 +16,3 @@ class Usecase:
|
||||
**{"connection": self.settings["relation"].RelatedStructuralConnection}
|
||||
)
|
||||
self.file.remove(self.settings["relation"])
|
||||
|
||||
|
||||
@@ -63,8 +63,8 @@ class Usecase:
|
||||
def get_styled_representation(self, definition_representation):
|
||||
representations = [
|
||||
r
|
||||
for r in definition_representation.Representations if r.is_a("IfcStyledRepresentation")
|
||||
and r.ContextOfItems == self.settings["context"]
|
||||
for r in definition_representation.Representations
|
||||
if r.is_a("IfcStyledRepresentation") and r.ContextOfItems == self.settings["context"]
|
||||
]
|
||||
if representations:
|
||||
return representations[0]
|
||||
|
||||
@@ -3,20 +3,16 @@ class Usecase:
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"style": None,
|
||||
"surface_colour": [], # RGB
|
||||
"diffuse_colour": [], # RGB
|
||||
"surface_colour": [], # RGB
|
||||
"diffuse_colour": [], # RGB
|
||||
"transparency": 0,
|
||||
"external_definition": {
|
||||
"location": None,
|
||||
"identification": None,
|
||||
"name": "Name"
|
||||
},
|
||||
"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
|
||||
# has_external_definition = None
|
||||
for element in self.file.traverse(self.settings["style"]):
|
||||
if element.is_a("IfcSurfaceStyleShading"):
|
||||
if element.SurfaceColour:
|
||||
@@ -30,28 +26,32 @@ class Usecase:
|
||||
else:
|
||||
element.DiffuseColour = self.create_colour_rgb(self.settings["diffuse_colour"])
|
||||
# TODO: Move to separate usecase
|
||||
#if element.is_a("IfcExternallyDefinedSurfaceStyle"):
|
||||
# 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:
|
||||
# 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["surface_colour"]),
|
||||
"Transparency": self.settings["transparency"],
|
||||
"ReflectanceMethod": "NOTDEFINED",
|
||||
"DiffuseColour": self.create_colour_rgb(self.settings["diffuse_colour"])
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcSurfaceStyleRendering",
|
||||
**{
|
||||
"SurfaceColour": self.create_colour_rgb(self.settings["surface_colour"]),
|
||||
"Transparency": self.settings["transparency"],
|
||||
"ReflectanceMethod": "NOTDEFINED",
|
||||
"DiffuseColour": self.create_colour_rgb(self.settings["diffuse_colour"]),
|
||||
}
|
||||
)
|
||||
|
||||
def create_externally_defined_surface_style(self):
|
||||
self.file.create_entity(
|
||||
"IfcExternallyDefinedSurfaceStyle", **{
|
||||
"IfcExternallyDefinedSurfaceStyle",
|
||||
**{
|
||||
"Location": self.settings["location"],
|
||||
"Identification": self.settings["identification"],
|
||||
"Name": self.settings["name"],
|
||||
|
||||
@@ -10,8 +10,11 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
return self.file.create_entity("IfcSystem", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"Name": "Unnamed"
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcSystem",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"Name": "Unnamed",
|
||||
}
|
||||
)
|
||||
|
||||
@@ -14,12 +14,15 @@ class Usecase:
|
||||
|
||||
def execute(self):
|
||||
if not self.settings["system"].IsGroupedBy:
|
||||
return self.file.create_entity("IfcRelAssignsToGroup", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatedObjects": [self.settings["product"]],
|
||||
"RelatingGroup": self.settings["system"]
|
||||
})
|
||||
return self.file.create_entity(
|
||||
"IfcRelAssignsToGroup",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatedObjects": [self.settings["product"]],
|
||||
"RelatingGroup": self.settings["system"],
|
||||
}
|
||||
)
|
||||
rel = self.settings["system"].IsGroupedBy[0]
|
||||
related_objects = set(rel.RelatedObjects) or set()
|
||||
related_objects.add(self.settings["product"])
|
||||
|
||||
@@ -21,4 +21,4 @@ class Data:
|
||||
data = system.get_info()
|
||||
del data["OwnerHistory"]
|
||||
cls.systems[system.id()] = data
|
||||
cls.is_loaded=True
|
||||
cls.is_loaded = True
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"system": None,
|
||||
"attributes": {}
|
||||
}
|
||||
self.settings = {"system": None, "attributes": {}}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -5,9 +5,7 @@ import ifcopenshell.api
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {
|
||||
"related_object": None
|
||||
}
|
||||
self.settings = {"related_object": None}
|
||||
for key, value in settings.items():
|
||||
self.settings[key] = value
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import ifcopenshell.util.unit
|
||||
import ifcopenshell.util.element
|
||||
|
||||
|
||||
class Usecase():
|
||||
class Usecase:
|
||||
def __init__(self, file, **settings):
|
||||
self.file = file
|
||||
self.settings = {"unit": None}
|
||||
|
||||
@@ -9,8 +9,11 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
self.file.create_entity("IfcRelFillsElement", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"RelatingOpeningElement": self.settings["opening"],
|
||||
"RelatedBuildingElement": self.settings["element"]
|
||||
})
|
||||
self.file.create_entity(
|
||||
"IfcRelFillsElement",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"RelatingOpeningElement": self.settings["opening"],
|
||||
"RelatedBuildingElement": self.settings["element"],
|
||||
}
|
||||
)
|
||||
|
||||
@@ -10,9 +10,12 @@ class Usecase:
|
||||
self.settings[key] = value
|
||||
|
||||
def execute(self):
|
||||
self.file.create_entity("IfcRelVoidsElement", **{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatingBuildingElement": self.settings["element"],
|
||||
"RelatedOpeningElement": self.settings["opening"]
|
||||
})
|
||||
self.file.create_entity(
|
||||
"IfcRelVoidsElement",
|
||||
**{
|
||||
"GlobalId": ifcopenshell.guid.new(),
|
||||
"OwnerHistory": ifcopenshell.api.run("owner.create_owner_history", self.file),
|
||||
"RelatingBuildingElement": self.settings["element"],
|
||||
"RelatedOpeningElement": self.settings["opening"],
|
||||
}
|
||||
)
|
||||
|
||||
@@ -40,9 +40,9 @@ class Data:
|
||||
cls.fillings[filling_id] = {"Name": filling.Name, "FillsVoid": opening_id}
|
||||
cls.openings[opening_id]["HasFillings"].add(filling_id)
|
||||
return # See bug #1224
|
||||
#if not hasattr(product, "HasOpenings") or not product.HasOpenings:
|
||||
# if not hasattr(product, "HasOpenings") or not product.HasOpenings:
|
||||
# return
|
||||
#for rel_voids_element in product.HasOpenings:
|
||||
# for rel_voids_element in product.HasOpenings:
|
||||
# opening = rel_voids_element.RelatedOpeningElement
|
||||
# opening_id = int(opening.id())
|
||||
# fillings = []
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -328,13 +328,17 @@ class Implementation(codegen.Base):
|
||||
)
|
||||
simple_type_impl.append("")
|
||||
|
||||
external_definitions = [
|
||||
("extern entity* %s_%%s_type;" % schema_name_upper) % n for n in mapping.schema.entities.keys()
|
||||
] + [
|
||||
("extern type_declaration* %s_%%s_type;" % schema_name_upper) % n for n in mapping.schema.simpletypes.keys()
|
||||
] + [
|
||||
("extern enumeration_type* %s_%%s_type;" % schema_name_upper) % n for n in mapping.schema.enumerations.keys()
|
||||
]
|
||||
external_definitions = (
|
||||
[("extern entity* %s_%%s_type;" % schema_name_upper) % n for n in mapping.schema.entities.keys()]
|
||||
+ [
|
||||
("extern type_declaration* %s_%%s_type;" % schema_name_upper) % n
|
||||
for n in mapping.schema.simpletypes.keys()
|
||||
]
|
||||
+ [
|
||||
("extern enumeration_type* %s_%%s_type;" % schema_name_upper) % n
|
||||
for n in mapping.schema.enumerations.keys()
|
||||
]
|
||||
)
|
||||
|
||||
self.str = templates.implementation % {
|
||||
"schema_name_upper": schema_name_upper,
|
||||
|
||||
@@ -488,10 +488,12 @@ class SchemaClass(codegen.Base):
|
||||
for name, tys in subtypes.items():
|
||||
x.entity_subtypes(name, tys)
|
||||
|
||||
can_be_instantiated_set = set(list(mapping.schema.entities.keys()) + \
|
||||
list(mapping.schema.simpletypes.keys()) + \
|
||||
list(mapping.schema.enumerations.keys()))
|
||||
|
||||
can_be_instantiated_set = set(
|
||||
list(mapping.schema.entities.keys())
|
||||
+ list(mapping.schema.simpletypes.keys())
|
||||
+ list(mapping.schema.enumerations.keys())
|
||||
)
|
||||
|
||||
x.finalize(can_be_instantiated_set)
|
||||
|
||||
self.str = str(x)
|
||||
|
||||
@@ -376,7 +376,7 @@ class file(object):
|
||||
fn = self.wrapped_data.traverse_breadth_first
|
||||
else:
|
||||
fn = self.wrapped_data.traverse
|
||||
|
||||
|
||||
return [entity_instance(e, self) for e in fn(inst.wrapped_data, max_levels)]
|
||||
|
||||
def get_inverse(self, inst):
|
||||
|
||||
@@ -10,7 +10,7 @@ import functools
|
||||
import multiprocessing
|
||||
|
||||
try:
|
||||
from OCC.Core import AIS
|
||||
from OCC.Core import AIS
|
||||
|
||||
USE_OCCT_HANDLE = False
|
||||
except ImportError:
|
||||
@@ -433,30 +433,30 @@ class application(QtWidgets.QApplication):
|
||||
|
||||
instanceSelected = QtCore.pyqtSignal([object])
|
||||
|
||||
# @staticmethod
|
||||
# def ais_to_key(ais_handle):
|
||||
# def yield_shapes():
|
||||
# ais = ais_handle.GetObject()
|
||||
# if hasattr(ais, "Shape"):
|
||||
# yield ais.Shape()
|
||||
# return
|
||||
# shp = OCC.AIS.Handle_AIS_Shape.DownCast(ais_handle)
|
||||
# if not shp.IsNull():
|
||||
# yield shp.Shape()
|
||||
# return
|
||||
# mult = ais_handle
|
||||
# if mult.IsNull():
|
||||
# shp = OCC.AIS.Handle_AIS_Shape.DownCast(ais_handle)
|
||||
# if not shp.IsNull():
|
||||
# yield shp
|
||||
# else:
|
||||
# li = mult.GetObject().ConnectedTo()
|
||||
# for i in range(li.Length()):
|
||||
# shp = OCC.AIS.Handle_AIS_Shape.DownCast(li.Value(i + 1))
|
||||
# if not shp.IsNull():
|
||||
# yield shp
|
||||
# @staticmethod
|
||||
# def ais_to_key(ais_handle):
|
||||
# def yield_shapes():
|
||||
# ais = ais_handle.GetObject()
|
||||
# if hasattr(ais, "Shape"):
|
||||
# yield ais.Shape()
|
||||
# return
|
||||
# shp = OCC.AIS.Handle_AIS_Shape.DownCast(ais_handle)
|
||||
# if not shp.IsNull():
|
||||
# yield shp.Shape()
|
||||
# return
|
||||
# mult = ais_handle
|
||||
# if mult.IsNull():
|
||||
# shp = OCC.AIS.Handle_AIS_Shape.DownCast(ais_handle)
|
||||
# if not shp.IsNull():
|
||||
# yield shp
|
||||
# else:
|
||||
# li = mult.GetObject().ConnectedTo()
|
||||
# for i in range(li.Length()):
|
||||
# shp = OCC.AIS.Handle_AIS_Shape.DownCast(li.Value(i + 1))
|
||||
# if not shp.IsNull():
|
||||
# yield shp
|
||||
|
||||
# return tuple(shp.HashCode(1 << 24) for shp in yield_shapes())
|
||||
# return tuple(shp.HashCode(1 << 24) for shp in yield_shapes())
|
||||
|
||||
def __init__(self, widget):
|
||||
qtViewer3d.__init__(self, widget)
|
||||
@@ -486,8 +486,8 @@ class application(QtWidgets.QApplication):
|
||||
for shape in shapes:
|
||||
ais = display_shape(shape, viewer_handle=v)
|
||||
product = f[shape.data.id]
|
||||
|
||||
if USE_OCCT_HANDLE:
|
||||
|
||||
if USE_OCCT_HANDLE:
|
||||
ais.GetObject().SetSelectionPriority(self.counter)
|
||||
self.ais_to_product[self.counter] = product
|
||||
self.product_to_ais[product] = ais
|
||||
|
||||
@@ -134,7 +134,7 @@ class tree(ifcopenshell_wrapper.tree):
|
||||
|
||||
def add_file(self, file, settings):
|
||||
ifcopenshell_wrapper.tree.add_file(self, file.wrapped_data, settings)
|
||||
|
||||
|
||||
def add_iterator(self, iterator):
|
||||
ifcopenshell_wrapper.tree.add_file(self, iterator)
|
||||
|
||||
|
||||
@@ -1176,7 +1176,6 @@ class BcfHandler(logging.StreamHandler):
|
||||
self.bcf.save_project(self.filepath)
|
||||
|
||||
|
||||
|
||||
location = {"instance": "an instance ", "type": "a type ", "any": "a "}
|
||||
|
||||
bounds = {
|
||||
@@ -1208,5 +1207,4 @@ if __name__ == "__main__":
|
||||
report = SimpleHandler()
|
||||
logger.addHandler(report)
|
||||
|
||||
|
||||
ids_file.validate(ifc_file, logger)
|
||||
|
||||
@@ -32,6 +32,7 @@ class IfcTransitionCurveType(Enum):
|
||||
|
||||
The IfcTransitionCurveType indicates the curvature of a transition curve.
|
||||
"""
|
||||
|
||||
BIQUADRATICPARABOLA = 1 # NOTE also referred to as Schramm curve.
|
||||
BLOSSCURVE = 2
|
||||
CLOTHOIDCURVE = 3
|
||||
@@ -46,6 +47,7 @@ class TransitionCurve:
|
||||
A curve that transitions between a straight line and a circular arc
|
||||
(or the reverse).
|
||||
"""
|
||||
|
||||
StartPoint: tuple # IfcSchema::IfcCartesianPoint
|
||||
StartDirection: float # IfcSchema::IfcPlaneAngleMeasure
|
||||
SegmentLength: float # IfcSchema::IfcPositiveLengthMeasure
|
||||
@@ -57,15 +59,15 @@ class TransitionCurve:
|
||||
|
||||
def _calc_biquadratic_parabola_point(self, lpt, L, R, ccw):
|
||||
x = lpt
|
||||
if (x <= (L / 2)):
|
||||
y = x**4 / (6 * R * L**2)
|
||||
if x <= (L / 2):
|
||||
y = x ** 4 / (6 * R * L ** 2)
|
||||
else:
|
||||
|
||||
yterm_1 = (-1 * x**4) / (6 * R * L**2)
|
||||
yterm_2 = (2 * x**3) / (3 * R * L)
|
||||
yterm_3 = x**2 / (2 * R)
|
||||
yterm_1 = (-1 * x ** 4) / (6 * R * L ** 2)
|
||||
yterm_2 = (2 * x ** 3) / (3 * R * L)
|
||||
yterm_3 = x ** 2 / (2 * R)
|
||||
yterm_4 = (L * x) / (6 * R)
|
||||
yterm_5 = L**2 / (48 * R)
|
||||
yterm_5 = L ** 2 / (48 * R)
|
||||
|
||||
y = yterm_1 + yterm_2 - yterm_3 + yterm_4 - yterm_5
|
||||
|
||||
@@ -80,16 +82,16 @@ class TransitionCurve:
|
||||
def _calc_clothoid_curve_point(self, lpt, L, R, ccw):
|
||||
RL = R * L
|
||||
xterm_1 = 1
|
||||
xterm_2 = lpt**4 / (40 * RL**2)
|
||||
xterm_3 = lpt**8 / (3456 * RL**4)
|
||||
xterm_4 = lpt**12 / (599040 * RL**6)
|
||||
xterm_2 = lpt ** 4 / (40 * RL ** 2)
|
||||
xterm_3 = lpt ** 8 / (3456 * RL ** 4)
|
||||
xterm_4 = lpt ** 12 / (599040 * RL ** 6)
|
||||
x = lpt * (xterm_1 - xterm_2 + xterm_3 - xterm_4)
|
||||
|
||||
factor = lpt**3 / (6 * RL)
|
||||
factor = lpt ** 3 / (6 * RL)
|
||||
yterm_1 = 1
|
||||
yterm_2 = lpt**4 / (56 * RL**2)
|
||||
yterm_3 = lpt**8 / (7040 * RL**4)
|
||||
yterm_4 = lpt**12 / (1612800 * RL**6)
|
||||
yterm_2 = lpt ** 4 / (56 * RL ** 2)
|
||||
yterm_3 = lpt ** 8 / (7040 * RL ** 4)
|
||||
yterm_4 = lpt ** 12 / (1612800 * RL ** 6)
|
||||
|
||||
y = factor * (yterm_1 - yterm_2 + yterm_3 - yterm_4)
|
||||
|
||||
@@ -102,14 +104,14 @@ class TransitionCurve:
|
||||
pi = math.pi
|
||||
psi_x = (pi * lpt) / L
|
||||
|
||||
xterm_1 = (L**2) / (8.0 * pi**2 * R**2)
|
||||
xterm_1 = (L ** 2) / (8.0 * pi ** 2 * R ** 2)
|
||||
xterm_2 = L / pi
|
||||
xterm_3 = psi_x**3 / (3.0)
|
||||
xterm_3 = psi_x ** 3 / (3.0)
|
||||
xterm_4 = psi_x / (2.0)
|
||||
xterm_5 = (math.sin(psi_x) * math.cos(psi_x)) / (2.0)
|
||||
xterm_6 = psi_x * math.cos(psi_x)
|
||||
|
||||
x = lpt - xterm_1 * xterm_2 * ( xterm_3 + xterm_4 - xterm_5 - (2.0 * xterm_6))
|
||||
x = lpt - xterm_1 * xterm_2 * (xterm_3 + xterm_4 - xterm_5 - (2.0 * xterm_6))
|
||||
|
||||
# TODO: code for y - coordinate
|
||||
y = 0
|
||||
@@ -170,16 +172,12 @@ class TransitionCurve:
|
||||
lpt = 0.0 # length along the curve at the point to be calculated
|
||||
|
||||
for _ in range(num_intervals):
|
||||
points.append(self._calc_transition_curve_point(
|
||||
lpt, L, R, ccw, trans_type
|
||||
))
|
||||
points.append(self._calc_transition_curve_point(lpt, L, R, ccw, trans_type))
|
||||
lpt += interval_dist
|
||||
|
||||
edges = list()
|
||||
for i in range(len(points) - 1):
|
||||
edges.append(BRepBuilderAPI_MakeEdge2d(
|
||||
points[i], points[i + 1]
|
||||
))
|
||||
edges.append(BRepBuilderAPI_MakeEdge2d(points[i], points[i + 1]))
|
||||
|
||||
wire = BRepBuilderAPI_MakeWire()
|
||||
for e in edges:
|
||||
|
||||
@@ -4,13 +4,13 @@ def get_primitive_type(attribute_or_data_type):
|
||||
else:
|
||||
data_type = str(attribute_or_data_type)
|
||||
if data_type.find("<type") == 0:
|
||||
return get_primitive_type(data_type[data_type[1:].find("<")+1:])
|
||||
return get_primitive_type(data_type[data_type[1:].find("<") + 1 :])
|
||||
elif data_type.find("<list") == 0:
|
||||
return ("list", get_primitive_type(data_type[data_type[1:].find("<")+1:]))
|
||||
return ("list", get_primitive_type(data_type[data_type[1:].find("<") + 1 :]))
|
||||
elif data_type.find("<set") == 0:
|
||||
return ("set", get_primitive_type(data_type[data_type[1:].find("<")+1:]))
|
||||
return ("set", get_primitive_type(data_type[data_type[1:].find("<") + 1 :]))
|
||||
elif data_type.find("<select") == 0:
|
||||
select_definition = data_type[data_type.find("(")+1:data_type.find(")")].split("|")
|
||||
select_definition = data_type[data_type.find("(") + 1 : data_type.find(")")].split("|")
|
||||
select_types = [get_primitive_type(d.strip()) for d in select_definition]
|
||||
return ("select", tuple(select_types))
|
||||
elif "<entity" in data_type:
|
||||
|
||||
@@ -48,11 +48,13 @@ def serialise_applied_value(applied_value):
|
||||
def unserialise_cost_value(formula, cost_value):
|
||||
unserialiser = CostValueUnserialiser()
|
||||
result = unserialiser.parse(formula)
|
||||
|
||||
def map_element_to_result(element, result):
|
||||
result["ifc"] = element
|
||||
for i, component in enumerate(result.get("Components", [])):
|
||||
if element.Components and i < len(element.Components):
|
||||
map_element_to_result(element.Components[i], result["Components"][i])
|
||||
|
||||
map_element_to_result(cost_value, result)
|
||||
return result
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
def a2p(o, z, x):
|
||||
y = np.cross(z, x)
|
||||
r = np.eye(4)
|
||||
|
||||
@@ -26,6 +26,7 @@ def get_subtypes(entity):
|
||||
for subtype in declaration.subtypes():
|
||||
results.extend(get_classes(subtype))
|
||||
return results
|
||||
|
||||
return get_classes(entity)
|
||||
|
||||
|
||||
@@ -47,7 +48,6 @@ def reassign_class(ifc_file, element, new_class):
|
||||
return new_element
|
||||
|
||||
|
||||
|
||||
class Migrator:
|
||||
def __init__(self):
|
||||
self.migrated_ids = {}
|
||||
@@ -213,7 +213,7 @@ class Migrator:
|
||||
"TheOrganization": new_file.create_entity(
|
||||
"IfcOrganization", **{"Name": "IfcOpenShell Migrator"}
|
||||
),
|
||||
}
|
||||
},
|
||||
),
|
||||
"OwningApplication": new_file.create_entity(
|
||||
"IfcApplication",
|
||||
@@ -224,10 +224,10 @@ class Migrator:
|
||||
"Version": "Works for me",
|
||||
"ApplicationFullName": "IfcOpenShell Migrator",
|
||||
"ApplicationIdentifier": "IfcOpenShell Migrator",
|
||||
}
|
||||
},
|
||||
),
|
||||
"ChangeAction": "NOCHANGE",
|
||||
"CreationDate": int(time.time()),
|
||||
}
|
||||
},
|
||||
)
|
||||
return self.default_entities[attribute.name()]
|
||||
|
||||
@@ -114,7 +114,7 @@ si_type_names = {
|
||||
"PRESSUREUNIT": "PASCAL",
|
||||
"RADIOACTIVITYUNIT": "BECQUEREL",
|
||||
"SOLIDANGLEUNIT": "STERADIAN",
|
||||
"THERMODYNAMICTEMPERATUREUNIT": "KELVIN", # Or, DEGREE_CELSIUS, but this is a quirk of IFC
|
||||
"THERMODYNAMICTEMPERATUREUNIT": "KELVIN", # Or, DEGREE_CELSIUS, but this is a quirk of IFC
|
||||
"TIMEUNIT": "SECOND",
|
||||
"VOLUMEUNIT": "CUBIC_METRE",
|
||||
}
|
||||
|
||||
@@ -34,9 +34,7 @@ class json_logger:
|
||||
self.instance = instance
|
||||
|
||||
def log(self, level, message, *args, **kwargs):
|
||||
self.statements.append(
|
||||
log_entry_type(level, message % args, kwargs.get("instance"))._asdict()
|
||||
)
|
||||
self.statements.append(log_entry_type(level, message % args, kwargs.get("instance"))._asdict())
|
||||
|
||||
def __getattr__(self, level):
|
||||
return functools.partial(self.log, level, instance=self.instance)
|
||||
@@ -83,9 +81,7 @@ def assert_valid(attr, val, schema):
|
||||
if isinstance(attr_type, simple_type):
|
||||
invalid = type(val) != simple_type_python_mapping[attr_type.declared_type()]
|
||||
elif isinstance(attr_type, (entity_type, type_declaration)):
|
||||
invalid = not isinstance(val, ifcopenshell.entity_instance) or not val.is_a(
|
||||
attr_type.name()
|
||||
)
|
||||
invalid = not isinstance(val, ifcopenshell.entity_instance) or not val.is_a(attr_type.name())
|
||||
elif isinstance(attr_type, select_type):
|
||||
val_to_use = val
|
||||
if isinstance(schema.declaration_by_name(val.is_a()), enumeration_type):
|
||||
@@ -94,19 +90,13 @@ def assert_valid(attr, val, schema):
|
||||
else:
|
||||
invalid = True
|
||||
if not invalid:
|
||||
invalid = not any(
|
||||
try_valid(x, val_to_use, schema) for x in attr_type.select_list()
|
||||
)
|
||||
invalid = not any(try_valid(x, val_to_use, schema) for x in attr_type.select_list())
|
||||
elif isinstance(attr_type, enumeration_type):
|
||||
invalid = val not in attr_type.enumeration_items()
|
||||
elif isinstance(attr_type, aggregation_type):
|
||||
b1, b2 = attr_type.bound1(), attr_type.bound2()
|
||||
ty = attr_type.type_of_element()
|
||||
invalid = (
|
||||
len(val) < b1
|
||||
or (b2 != -1 and len(val) > b2)
|
||||
or not all(assert_valid(ty, v, schema) for v in val)
|
||||
)
|
||||
invalid = len(val) < b1 or (b2 != -1 and len(val) > b2) or not all(assert_valid(ty, v, schema) for v in val)
|
||||
else:
|
||||
raise NotImplementedError("Not impl %s %s" % (type(attr_type), attr_type))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user