Files
IfcOpenShell/src/ifcopenshell-python/test/fixtures/rules/generate_24.py
T
2026-08-03 19:51:10 +05:00

61 lines
2.1 KiB
Python

import time
import ifcopenshell
from ...fixture_generate import normalize_header, pass_if, write_fixture
for ents in [
("IfcWall",),
("IfcSpace",),
(
"IfcZone",
"IfcSpace",
),
(
"IfcWall",
"IfcSpace",
),
]:
f = ifcopenshell.file(schema="IFC2X3")
p = f.createIfcPerson(Id="tfk", GivenName="Thomas")
o = f.createIfcOrganization(Name="AECgeeks")
pando = f.createIfcPersonAndOrganization(p, o)
appl = f.createIfcApplication(o, ifcopenshell.version, "IfcOpenShell", f"IfcOpenShell {ifcopenshell.version}")
units = f.createIfcUnitAssignment(Units=[f.createIfcSIUnit(None, "LENGTHUNIT", None, "METRE")])
ownerhist = f.createIfcOwnerHistory(pando, appl, ChangeAction="ADDED", CreationDate=int(time.time()))
proj = f.createIfcProject(
ifcopenshell.guid.new(),
ownerhist,
"My Project",
UnitsInContext=units,
RepresentationContexts=[
f.createIfcGeometricRepresentationContext(
None,
None,
3,
None,
f.create_entity(f"IfcAxis2Placement3D", f.createIfcCartesianPoint((0.0, 0.0, 0.0))),
)
],
)
def elems():
for ent in ents:
el = f.create_entity(ent, ifcopenshell.guid.new(), ownerhist)
if ent == "IfcZone":
f.createIfcRelAssignsToGroup(
ifcopenshell.guid.new(),
ownerhist,
RelatedObjects=[f.createIfcSpace(ifcopenshell.guid.new(), ownerhist)],
RelatingGroup=el,
)
yield el
zone = f.createIfcZone(ifcopenshell.guid.new(), ownerhist)
f.createIfcRelAssignsToGroup(ifcopenshell.guid.new(), ownerhist, RelatedObjects=list(elems()), RelatingGroup=zone)
f.createIfcRelAggregates(
ifcopenshell.guid.new(), ownerhist, RelatingObject=proj, RelatedObjects=f.by_type("IfcSpace")
)
valid = not (set(ents) - {"IfcZone", "IfcSpace"})
normalize_header(f)
write_fixture(f, __file__, pass_if(valid), f"zone-with-{'-'.join(ents)}-{f.schema.lower()}")