mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-13 02:47:48 +00:00
Fix #1801. Fix bug where importing multiple assets sharing an already imported material fails.
This commit is contained in:
@@ -145,7 +145,8 @@ class SelectLibraryFile(bpy.types.Operator):
|
||||
IfcStore.library_path = self.filepath
|
||||
IfcStore.library_file = ifcopenshell.open(self.filepath)
|
||||
bpy.ops.bim.refresh_library()
|
||||
context.area.tag_redraw()
|
||||
if context.area:
|
||||
context.area.tag_redraw()
|
||||
return {"FINISHED"}
|
||||
|
||||
def invoke(self, context, event):
|
||||
@@ -399,6 +400,7 @@ class AppendLibraryElement(bpy.types.Operator):
|
||||
ifc_importer = import_ifc.IfcImporter(ifc_import_settings)
|
||||
ifc_importer.file = self.file
|
||||
ifc_importer.type_collection = type_collection
|
||||
ifc_importer.material_creator.load_existing_materials()
|
||||
self.import_type_materials(element, ifc_importer)
|
||||
self.import_type_styles(element, ifc_importer)
|
||||
ifc_importer.create_type_product(element)
|
||||
|
||||
@@ -14,6 +14,31 @@ Scenario: Create project
|
||||
And the object "IfcBuilding/My Building" is in the collection "IfcBuilding/My Building"
|
||||
And the object "IfcBuildingStorey/My Storey" is in the collection "IfcBuildingStorey/My Storey"
|
||||
|
||||
Scenario: Append library element
|
||||
Given an empty IFC project
|
||||
When I press "bim.select_library_file(filepath='{cwd}/test/files/basic.ifc')"
|
||||
And I press "bim.change_library_element(element_name='IfcTypeProduct')"
|
||||
And I press "bim.change_library_element(element_name='IfcSlabType')"
|
||||
And I press "bim.append_library_element(definition=242, prop_index=0)"
|
||||
Then the object "IfcSlabType/Slab" is an "IfcSlabType"
|
||||
And the object "IfcSlabType/Slab" is in the collection "Types"
|
||||
|
||||
Scenario: Append library element - append two elements sharing a material
|
||||
Given an empty IFC project
|
||||
And I press "bim.select_library_file(filepath='{cwd}/test/files/basic.ifc')"
|
||||
And I press "bim.change_library_element(element_name='IfcTypeProduct')"
|
||||
And I press "bim.change_library_element(element_name='IfcSlabType')"
|
||||
And I press "bim.append_library_element(definition=242, prop_index=0)"
|
||||
When I press "bim.rewind_library"
|
||||
And I press "bim.change_library_element(element_name='IfcWallType')"
|
||||
And I press "bim.append_library_element(definition=291, prop_index=0)"
|
||||
Then the object "IfcSlabType/Slab" is an "IfcSlabType"
|
||||
And the object "IfcSlabType/Slab" is in the collection "Types"
|
||||
And the object "IfcWallType/Wall" is an "IfcWallType"
|
||||
And the object "IfcWallType/Wall" is in the collection "Types"
|
||||
And the object "IfcSlabType/Slab" has the material "SurfaceStyle"
|
||||
And the object "IfcWallType/Wall" has the material "SurfaceStyle"
|
||||
|
||||
Scenario: Load project
|
||||
Given an empty Blender session
|
||||
When I press "bim.load_project(filepath='{cwd}/test/files/basic.ifc')"
|
||||
|
||||
@@ -302,6 +302,11 @@ def prop_is_value(prop, value):
|
||||
assert False, f"Value is {actual_value}"
|
||||
|
||||
|
||||
@then(parsers.parse('the object "{name}" has the material "{material}"'))
|
||||
def the_object_name_is_in_the_collection_collection(name, material):
|
||||
assert material in [ms.material.name for ms in the_object_name_exists(name).material_slots]
|
||||
|
||||
|
||||
@then(parsers.parse('the object "{name}" is in the collection "{collection}"'))
|
||||
def the_object_name_is_in_the_collection_collection(name, collection):
|
||||
assert collection in [c.name for c in the_object_name_exists(name).users_collection]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1');
|
||||
FILE_NAME('basic.ifc','2021-09-12T16:48:33+10:00',(),(),'IfcOpenShell 0.6.0b0','BlenderBIM 0.0.999999','Nobody');
|
||||
FILE_NAME('basic.ifc','2021-10-16T11:16:34+11:00',(),(),'IfcOpenShell v0.7.0-6cc7d796','BlenderBIM 0.0.999999','Nobody');
|
||||
FILE_SCHEMA(('IFC4'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
@@ -85,8 +85,8 @@ DATA;
|
||||
#98=IFCCOLOURRGB($,0.800000011920929,0.800000011920929,0.800000011920929);
|
||||
#99=IFCCOLOURRGB($,0.800000011920929,0.800000011920929,0.800000011920929);
|
||||
#100=IFCSURFACESTYLERENDERING(#98,0.,#99,$,$,$,$,$,.NOTDEFINED.);
|
||||
#101=IFCSURFACESTYLE('Material',.BOTH.,(#100));
|
||||
#102=IFCSTYLEDITEM(#92,(#101),'Material');
|
||||
#101=IFCSURFACESTYLE('SurfaceStyle',.BOTH.,(#100));
|
||||
#102=IFCSTYLEDITEM(#92,(#101),'SurfaceStyle');
|
||||
#103=IFCOWNERHISTORY(#9,#8,.READWRITE.,.ADDED.,1631353439,#9,#8,1631353439);
|
||||
#104=IFCRELCONTAINEDINSPATIALSTRUCTURE('2T4j5EAcn0qQ9vTOZFK9HO',#103,$,$,(#79),#44);
|
||||
#110=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
@@ -109,7 +109,7 @@ DATA;
|
||||
#132=IFCBOUNDINGBOX(#131,2.,2.,2.);
|
||||
#133=IFCSHAPEREPRESENTATION(#22,'Box','BoundingBox',(#132));
|
||||
#134=IFCPRODUCTDEFINITIONSHAPE($,$,(#133,#130));
|
||||
#135=IFCSTYLEDITEM(#129,(#101),'Material');
|
||||
#135=IFCSTYLEDITEM(#129,(#101),'SurfaceStyle');
|
||||
#136=IFCOWNERHISTORY(#9,#8,.READWRITE.,.MODIFIED.,1631429228,#9,#8,1631353443);
|
||||
#137=IFCRELCONTAINEDINSPATIALSTRUCTURE('1CgivZt6z1l8IgKaTkZMcT',#136,$,$,(#116,#159),#71);
|
||||
#148=IFCCARTESIANPOINT((0.,0.,3.));
|
||||
@@ -151,5 +151,91 @@ DATA;
|
||||
#214=IFCDIRECTION((1.,0.,0.));
|
||||
#215=IFCAXIS2PLACEMENT3D(#212,#213,#214);
|
||||
#216=IFCLOCALPLACEMENT(#174,#215);
|
||||
#223=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#224=IFCDIRECTION((0.,0.,1.));
|
||||
#225=IFCDIRECTION((1.,0.,0.));
|
||||
#226=IFCAXIS2PLACEMENT3D(#223,#224,#225);
|
||||
#227=IFCLOCALPLACEMENT(#70,#226);
|
||||
#228=IFCINDEXEDPOLYGONALFACE((4,6,5,2));
|
||||
#229=IFCINDEXEDPOLYGONALFACE((7,3,1,8));
|
||||
#230=IFCINDEXEDPOLYGONALFACE((8,1,2,5));
|
||||
#231=IFCINDEXEDPOLYGONALFACE((5,6,7,8));
|
||||
#232=IFCINDEXEDPOLYGONALFACE((3,7,6,4));
|
||||
#233=IFCINDEXEDPOLYGONALFACE((4,2,1,3));
|
||||
#234=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.)));
|
||||
#235=IFCPOLYGONALFACESET(#234,$,(#228,#229,#230,#231,#232,#233),$);
|
||||
#236=IFCSHAPEREPRESENTATION(#21,'Body','Tessellation',(#235));
|
||||
#237=IFCCARTESIANPOINT((-1.,-1.,-1.));
|
||||
#238=IFCBOUNDINGBOX(#237,2.,2.,2.);
|
||||
#239=IFCSHAPEREPRESENTATION(#22,'Box','BoundingBox',(#238));
|
||||
#240=IFCPRODUCTDEFINITIONSHAPE($,$,(#239,#236));
|
||||
#241=IFCSTYLEDITEM(#235,(#101),'SurfaceStyle');
|
||||
#242=IFCSLABTYPE('3Yf_WvSET99eu_bTvaRiKy',#78,'Slab',$,$,$,(#259,#265),$,$,.BASESLAB.);
|
||||
#243=IFCINDEXEDPOLYGONALFACE((4,6,5,2));
|
||||
#244=IFCINDEXEDPOLYGONALFACE((7,3,1,8));
|
||||
#245=IFCINDEXEDPOLYGONALFACE((8,1,2,5));
|
||||
#246=IFCINDEXEDPOLYGONALFACE((5,6,7,8));
|
||||
#247=IFCINDEXEDPOLYGONALFACE((3,7,6,4));
|
||||
#248=IFCINDEXEDPOLYGONALFACE((4,2,1,3));
|
||||
#249=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.)));
|
||||
#250=IFCPOLYGONALFACESET(#249,$,(#243,#244,#245,#246,#247,#248),$);
|
||||
#251=IFCSHAPEREPRESENTATION(#21,'Body','Tessellation',(#250));
|
||||
#252=IFCCARTESIANPOINT((-1.,-1.,-1.));
|
||||
#253=IFCBOUNDINGBOX(#252,2.,2.,2.);
|
||||
#254=IFCSHAPEREPRESENTATION(#22,'Box','BoundingBox',(#253));
|
||||
#255=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#256=IFCDIRECTION((1.,0.,0.));
|
||||
#257=IFCDIRECTION((0.,0.,1.));
|
||||
#258=IFCAXIS2PLACEMENT3D(#255,#257,#256);
|
||||
#259=IFCREPRESENTATIONMAP(#258,#254);
|
||||
#260=IFCSTYLEDITEM(#250,(#101),'SurfaceStyle');
|
||||
#261=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#262=IFCDIRECTION((1.,0.,0.));
|
||||
#263=IFCDIRECTION((0.,0.,1.));
|
||||
#264=IFCAXIS2PLACEMENT3D(#261,#263,#262);
|
||||
#265=IFCREPRESENTATIONMAP(#264,#251);
|
||||
#272=IFCCARTESIANPOINT((0.,0.,-3.));
|
||||
#273=IFCDIRECTION((0.,0.,1.));
|
||||
#274=IFCDIRECTION((1.,0.,0.));
|
||||
#275=IFCAXIS2PLACEMENT3D(#272,#273,#274);
|
||||
#276=IFCLOCALPLACEMENT(#152,#275);
|
||||
#277=IFCINDEXEDPOLYGONALFACE((4,6,5,2));
|
||||
#278=IFCINDEXEDPOLYGONALFACE((7,3,1,8));
|
||||
#279=IFCINDEXEDPOLYGONALFACE((8,1,2,5));
|
||||
#280=IFCINDEXEDPOLYGONALFACE((5,6,7,8));
|
||||
#281=IFCINDEXEDPOLYGONALFACE((3,7,6,4));
|
||||
#282=IFCINDEXEDPOLYGONALFACE((4,2,1,3));
|
||||
#283=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.)));
|
||||
#284=IFCPOLYGONALFACESET(#283,$,(#277,#278,#279,#280,#281,#282),$);
|
||||
#285=IFCSHAPEREPRESENTATION(#21,'Body','Tessellation',(#284));
|
||||
#286=IFCCARTESIANPOINT((-1.,-1.,-1.));
|
||||
#287=IFCBOUNDINGBOX(#286,2.,2.,2.);
|
||||
#288=IFCSHAPEREPRESENTATION(#22,'Box','BoundingBox',(#287));
|
||||
#289=IFCPRODUCTDEFINITIONSHAPE($,$,(#288,#285));
|
||||
#290=IFCSTYLEDITEM(#284,(#101),'SurfaceStyle');
|
||||
#291=IFCWALLTYPE('3BIuGkv6r8X8juaWvaUCg3',#115,'Wall',$,$,$,(#308,#314),$,$,.ELEMENTEDWALL.);
|
||||
#292=IFCINDEXEDPOLYGONALFACE((4,6,5,2));
|
||||
#293=IFCINDEXEDPOLYGONALFACE((7,3,1,8));
|
||||
#294=IFCINDEXEDPOLYGONALFACE((8,1,2,5));
|
||||
#295=IFCINDEXEDPOLYGONALFACE((5,6,7,8));
|
||||
#296=IFCINDEXEDPOLYGONALFACE((3,7,6,4));
|
||||
#297=IFCINDEXEDPOLYGONALFACE((4,2,1,3));
|
||||
#298=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.)));
|
||||
#299=IFCPOLYGONALFACESET(#298,$,(#292,#293,#294,#295,#296,#297),$);
|
||||
#300=IFCSHAPEREPRESENTATION(#21,'Body','Tessellation',(#299));
|
||||
#301=IFCCARTESIANPOINT((-1.,-1.,-1.));
|
||||
#302=IFCBOUNDINGBOX(#301,2.,2.,2.);
|
||||
#303=IFCSHAPEREPRESENTATION(#22,'Box','BoundingBox',(#302));
|
||||
#304=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#305=IFCDIRECTION((1.,0.,0.));
|
||||
#306=IFCDIRECTION((0.,0.,1.));
|
||||
#307=IFCAXIS2PLACEMENT3D(#304,#306,#305);
|
||||
#308=IFCREPRESENTATIONMAP(#307,#303);
|
||||
#309=IFCSTYLEDITEM(#299,(#101),'SurfaceStyle');
|
||||
#310=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#311=IFCDIRECTION((1.,0.,0.));
|
||||
#312=IFCDIRECTION((0.,0.,1.));
|
||||
#313=IFCAXIS2PLACEMENT3D(#310,#312,#311);
|
||||
#314=IFCREPRESENTATIONMAP(#313,#300);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
|
||||
Reference in New Issue
Block a user