diff --git a/src/ifcopenshell-python/test/file_gc.py b/src/ifcopenshell-python/test/file_gc.py index a2e51d5746..6b5f5cc627 100644 --- a/src/ifcopenshell-python/test/file_gc.py +++ b/src/ifcopenshell-python/test/file_gc.py @@ -1,11 +1,10 @@ -import gc -import sys +import os import pytest -import pprint import weakref import itertools import ifcopenshell import ifcopenshell.api +import ifcopenshell.template @pytest.mark.parametrize( @@ -77,5 +76,47 @@ def test_file_gc(args): assert r() is None +def test_bug_2517(): + fixtures = os.path.join(os.path.dirname(__file__), 'fixtures') + model = ifcopenshell.open(f'{fixtures}/bug_2517_test2.ifc') + library = ifcopenshell.open(f"{fixtures}/bug_2517_lib.ifc") + result = model.add(library.by_type("IfcClassification")[0]) + model.create_entity( + "IfcRelAssociatesClassification", + GlobalId=ifcopenshell.guid.new(), + RelatedObjects=[model.by_type("IfcProject")[0]], + RelatingClassification=result, + ) + + +def test_bug_2486_a(): + run = ifcopenshell.api.run + + file = run("project.create_file") + + mymaterial = run("material.add_material", file) + pset = run("pset.add_pset", file, product=mymaterial) + run( + "pset.edit_pset", + file, + pset=pset, + properties={"foo": "bar"}, + ) + + another_file = run("project.create_file") + + run( + "project.append_asset", + another_file, + library=file, + element=mymaterial, + ) + + +def test_bug_2486_b(): + file = ifcopenshell.template.create() + file.wrapped_data.header.file_name.name = "myfile.ifc" + + if __name__ == "__main__": pytest.main(["-sx", __file__]) diff --git a/src/ifcopenshell-python/test/fixtures/bug_2517_lib.ifc b/src/ifcopenshell-python/test/fixtures/bug_2517_lib.ifc new file mode 100644 index 0000000000..49194c25b0 --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/bug_2517_lib.ifc @@ -0,0 +1,12 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); +FILE_NAME('','2020-04-23T18:09:38',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0',''); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECTLIBRARY($,$,'Uniclass 2015',$,$,$,$,$,$); +#2=IFCCLASSIFICATION('RIBA Enterprises Ltd','January 2020','2020-02-07','Uniclass 2015','Uniclass 2015 is a unified classification for the UK industry covering all construction sectors.','https://toolkit.thenbs.com/articles/classification',('_')); +#3=IFCRELASSOCIATESCLASSIFICATION('1P2XR4Nm9C_xuJOdxBr7V0',$,$,$,(#1),#2); +ENDSEC; +END-ISO-10303-21; diff --git a/src/ifcopenshell-python/test/fixtures/bug_2517_test2.ifc b/src/ifcopenshell-python/test/fixtures/bug_2517_test2.ifc new file mode 100644 index 0000000000..34a44bd185 --- /dev/null +++ b/src/ifcopenshell-python/test/fixtures/bug_2517_test2.ifc @@ -0,0 +1,80 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); +FILE_NAME('test2.ifc','2022-10-20T10:10:40+11:00',(),(),'IfcOpenShell v0.7.0-16b05d99','BlenderBIM 0.0.999999','Nobody'); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('14Rb1ds252deEk3MYZ3Sro',$,'My Project',$,$,$,$,(#14,#21),#9); +#2=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#5=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); +#6=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#7=IFCMEASUREWITHUNIT(IFCREAL(0.0174532925199433),#6); +#8=IFCCONVERSIONBASEDUNIT(#5,.PLANEANGLEUNIT.,'degree',#7); +#9=IFCUNITASSIGNMENT((#4,#2,#8,#3)); +#10=IFCCARTESIANPOINT((0.,0.,0.)); +#11=IFCDIRECTION((0.,0.,1.)); +#12=IFCDIRECTION((1.,0.,0.)); +#13=IFCAXIS2PLACEMENT3D(#10,#11,#12); +#14=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#13,$); +#15=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#16=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#14,$,.GRAPH_VIEW.,$); +#17=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#18=IFCCARTESIANPOINT((0.,0.,0.)); +#19=IFCDIRECTION((1.,0.,0.)); +#20=IFCAXIS2PLACEMENT2D(#18,#19); +#21=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#20,$); +#22=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Plan',*,*,*,*,#21,$,.GRAPH_VIEW.,$); +#23=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#21,$,.PLAN_VIEW.,$); +#24=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#21,$,.SECTION_VIEW.,$); +#25=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#21,$,.ELEVATION_VIEW.,$); +#26=IFCSITE('1oVQtjLUn15eyGMhU1NDQ3',$,'My Site',$,$,#49,$,$,$,$,$,$,$,$); +#32=IFCBUILDING('22wi8FrBf9tQTrnJ5cBQqm',$,'My Building',$,$,#55,$,$,$,$,$,$); +#38=IFCBUILDINGSTOREY('2mXD0PqEnEpubtdzWmokMm',$,'My Storey',$,$,#61,$,$,$,$); +#44=IFCRELAGGREGATES('09z_pjz01BO9JxkuqGqULM',$,$,$,#1,(#26)); +#45=IFCCARTESIANPOINT((0.,0.,0.)); +#46=IFCDIRECTION((0.,0.,1.)); +#47=IFCDIRECTION((1.,0.,0.)); +#48=IFCAXIS2PLACEMENT3D(#45,#46,#47); +#49=IFCLOCALPLACEMENT($,#48); +#50=IFCRELAGGREGATES('1BT2khvOnCdQPndrAGFCZh',$,$,$,#26,(#32)); +#51=IFCCARTESIANPOINT((0.,0.,0.)); +#52=IFCDIRECTION((0.,0.,1.)); +#53=IFCDIRECTION((1.,0.,0.)); +#54=IFCAXIS2PLACEMENT3D(#51,#52,#53); +#55=IFCLOCALPLACEMENT(#49,#54); +#56=IFCRELAGGREGATES('3Az960vQr16huWPdYmTnLJ',$,$,$,#32,(#38)); +#57=IFCCARTESIANPOINT((0.,0.,0.)); +#58=IFCDIRECTION((0.,0.,1.)); +#59=IFCDIRECTION((1.,0.,0.)); +#60=IFCAXIS2PLACEMENT3D(#57,#58,#59); +#61=IFCLOCALPLACEMENT(#55,#60); +#62=IFCACTUATOR('2SHuNm3YXE89$LlLNAww0j',$,'Cube',$,$,#91,#80,$,.ELECTRICACTUATOR.); +#68=IFCINDEXEDPOLYGONALFACE((1,5,7,3)); +#69=IFCINDEXEDPOLYGONALFACE((4,3,7,8)); +#70=IFCINDEXEDPOLYGONALFACE((8,7,5,6)); +#71=IFCINDEXEDPOLYGONALFACE((6,2,4,8)); +#72=IFCINDEXEDPOLYGONALFACE((2,1,3,4)); +#73=IFCINDEXEDPOLYGONALFACE((6,5,1,2)); +#74=IFCCARTESIANPOINTLIST3D(((1.,1.,1.),(1.,1.,-1.),(1.,-1.,1.),(1.,-1.,-1.),(-1.,1.,1.),(-1.,1.,-1.),(-1.,-1.,1.),(-1.,-1.,-1.))); +#75=IFCPOLYGONALFACESET(#74,$,(#68,#69,#70,#71,#72,#73),$); +#76=IFCSHAPEREPRESENTATION(#15,'Body','Tessellation',(#75)); +#77=IFCCARTESIANPOINT((-1.,-1.,-1.)); +#78=IFCBOUNDINGBOX(#77,2.,2.,2.); +#79=IFCSHAPEREPRESENTATION(#17,'Box','BoundingBox',(#78)); +#80=IFCPRODUCTDEFINITIONSHAPE($,$,(#79,#76)); +#81=IFCSURFACESTYLE('Material',.BOTH.,(#82)); +#82=IFCSURFACESTYLERENDERING(#83,0.,#84,$,$,$,IFCNORMALISEDRATIOMEASURE(0.),IFCSPECULARROUGHNESS(0.5),.NOTDEFINED.); +#83=IFCCOLOURRGB($,0.800000011920929,0.800000011920929,0.800000011920929); +#84=IFCCOLOURRGB($,0.800000011920929,0.800000011920929,0.800000011920929); +#85=IFCSTYLEDITEM(#75,(#81),'Material'); +#86=IFCRELCONTAINEDINSPATIALSTRUCTURE('2gI6yW7IT19R9cT5VamRAp',$,$,$,(#62),#38); +#87=IFCCARTESIANPOINT((0.,0.,0.)); +#88=IFCDIRECTION((0.,0.,1.)); +#89=IFCDIRECTION((1.,0.,0.)); +#90=IFCAXIS2PLACEMENT3D(#87,#88,#89); +#91=IFCLOCALPLACEMENT(#61,#90); +ENDSEC; +END-ISO-10303-21;