Update extrusion-dir cases for undeterminate handling

This commit is contained in:
Thomas Krijnen
2023-02-14 10:04:34 +01:00
parent 18670bcbd6
commit e535f911d1
7 changed files with 51 additions and 20 deletions
@@ -0,0 +1,16 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2023-02-13T13:31:19',(),(),'IfcOpenShell v0.7.0-07ee62eb9','IfcOpenShell v0.7.0-07ee62eb9','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCCARTESIANPOINT((0.,0.));
#2=IFCAXIS2PLACEMENT2D(#1,$);
#3=IFCRECTANGLEPROFILEDEF(.AREA.,$,#2,1.,1.);
#4=IFCCARTESIANPOINT((0.,0.,0.));
#5=IFCAXIS2PLACEMENT3D(#4,$,$);
#6=IFCDIRECTION((0.,0.,0.));
#7=IFCEXTRUDEDAREASOLID(#3,#5,#6,1.);
ENDSEC;
END-ISO-10303-21;
@@ -1,7 +1,7 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2022-12-20T12:05:46',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d','');
FILE_NAME('','2023-02-13T13:31:19',(),(),'IfcOpenShell v0.7.0-07ee62eb9','IfcOpenShell v0.7.0-07ee62eb9','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
+30 -15
View File
@@ -2,18 +2,33 @@ import ifcopenshell
depth = 1.0
for (dir_x, dir_z) in ((0., -1.), (0., 0.), (1., 0.), (1., 0.001), (0., 1.)):
f = ifcopenshell.file(schema="IFC2X3")
f.createIfcExtrudedAreaSolid(
f.createIfcRectangleProfileDef(
"AREA", None,
f.createIfcAxis2Placement2D(
f.createIfcCartesianPoint((0., 0.))
), 1., 1.
),
f.createIfcAxis2Placement3D(
f.createIfcCartesianPoint((0., 0., 0.))
),
f.createIfcDirection((dir_x, 0., dir_z)),
depth
)
f.write(f"{'pass' if dir_z != 0. else 'fail'}-extrusion-dir-{dir_x}-{dir_z}-ifc2x3.ifc")
schemas = ['IFC2X3']
if (dir_x, dir_z) == (0., 0.):
schemas.append('IFC4')
for schema in schemas:
f = ifcopenshell.file(schema=schema)
f.createIfcExtrudedAreaSolid(
f.createIfcRectangleProfileDef(
"AREA", None,
f.createIfcAxis2Placement2D(
f.createIfcCartesianPoint((0., 0.))
), 1., 1.
),
f.createIfcAxis2Placement3D(
f.createIfcCartesianPoint((0., 0., 0.))
),
f.createIfcDirection((dir_x, 0., dir_z)),
depth
)
# Due to the way IfcDotProduct and IfcNormalise interact, (0 0 0) actually
# results into indeterminate. But in IFC4 onwars there is a rule in IfcDirection
# for non-zero magnitude
valid = dir_z != 0.
if f.schema == 'IFC2X3' and (dir_x, dir_z) == (0., 0.):
valid = True
f.write(f"{'pass' if valid else 'fail'}-extrusion-dir-{dir_x}-{dir_z}-{f.schema.lower()}.ifc")
@@ -1,7 +1,7 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2022-12-20T12:05:46',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d','');
FILE_NAME('','2023-02-13T13:31:19',(),(),'IfcOpenShell v0.7.0-07ee62eb9','IfcOpenShell v0.7.0-07ee62eb9','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
@@ -1,7 +1,7 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2022-12-20T12:05:46',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d','');
FILE_NAME('','2023-02-13T13:31:19',(),(),'IfcOpenShell v0.7.0-07ee62eb9','IfcOpenShell v0.7.0-07ee62eb9','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
@@ -1,7 +1,7 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2022-12-20T12:05:46',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d','');
FILE_NAME('','2023-02-13T13:31:19',(),(),'IfcOpenShell v0.7.0-07ee62eb9','IfcOpenShell v0.7.0-07ee62eb9','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
@@ -1,7 +1,7 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2022-12-20T12:05:46',(),(),'IfcOpenShell v0.7.0-fa6bbf2d','IfcOpenShell v0.7.0-fa6bbf2d','');
FILE_NAME('','2023-02-13T13:31:19',(),(),'IfcOpenShell v0.7.0-07ee62eb9','IfcOpenShell v0.7.0-07ee62eb9','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;