Skip to content

Commit

Permalink
Merge branch 'development' into IVS-137-ALB012-IfcAlignmentVerticalSe…
Browse files Browse the repository at this point in the history
…gment.RadiusOfCurvature
  • Loading branch information
civilx64 authored Oct 24, 2024
2 parents 3de923b + 5770408 commit d4190bc
Show file tree
Hide file tree
Showing 7 changed files with 288 additions and 10 deletions.
19 changes: 19 additions & 0 deletions features/ANN000_Annotations.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
@implementer-agreement
@ANN
@version1
@E00020

Feature: ANN000 - Annotations
The rule verifies the presence of IFC entities used to add annotations to elements and spaces, such as labels, notes, and dimensions. In IFC, annotations are also used to represent survey elements (i.e., points, lines, areas)
https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/concepts/Product_Shape/Product_Geometric_Representation/Annotation_Geometry/content.html

Scenario: Check for activation

Given an IfcAnnotation
Given its attribute Representation
Given its attribute Representations
Given RepresentationIdentifier is 'Annotation'

Then The IFC model contains information on the selected functional part


24 changes: 23 additions & 1 deletion features/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ def before_feature(context, feature):
context.protocol_errors.append(error)

context.gherkin_outcomes = []

# display the correct scenario and insanity related to the gherkin outcome in the behave console & ci/cd report
context.scenario_outcome_state= {}
context.instance_outcome_state = {}


def before_scenario(context, scenario):
Expand All @@ -69,6 +73,9 @@ def after_scenario(context, scenario):
context._pop()
# preserve the outcomes to be serialized to DB in after_feature()
context.gherkin_outcomes = old_outcomes
context.scenario_outcome_state[len(context.gherkin_outcomes)] = {'scenario': scenario.name,
'last_step': scenario.steps[-1]}



def after_feature(context, feature):
Expand Down Expand Up @@ -124,6 +131,11 @@ def get_or_create_instance_when_set(spf_id):

else: # invoked via console or CI/CD pipeline
outcomes = [outcome.to_dict() for outcome in context.gherkin_outcomes]
for idx, outcome in enumerate(outcomes):
sls = find_scenario_for_outcome(context, idx + 1)
outcome['scenario'] = sls['scenario']
outcome['last_step'] = sls['last_step'].name
outcome['instance_id'] = context.instance_outcome_state.get(idx+1, '')
outcomes_json_str = json.dumps(outcomes) #ncodes to utf-8
outcomes_bytes = outcomes_json_str.encode("utf-8")
for formatter in filter(lambda f: hasattr(f, "embedding"), context._runner.formatters):
Expand All @@ -133,6 +145,16 @@ def get_or_create_instance_when_set(spf_id):
protocol_errors_bytes = json.dumps(context.protocol_errors).encode("utf-8")
formatter.embedding(mime_type="application/json", data=protocol_errors_bytes, target='feature', attribute_name='protocol_errors')


# embed catched exceptions
caught_exceptions_bytes = json.dumps([exc.to_dict() for exc in context.caught_exceptions]).encode("utf-8")
formatter.embedding(mime_type="application/json", data=caught_exceptions_bytes, target='feature', attribute_name='caught_exceptions')
formatter.embedding(mime_type="application/json", data=caught_exceptions_bytes, target='feature', attribute_name='caught_exceptions')


def find_scenario_for_outcome(context, outcome_index):
previous_count = 0
for count, scenario in context.scenario_outcome_state.items():
if previous_count < outcome_index <= count:
return scenario
previous_count = count

11 changes: 9 additions & 2 deletions features/steps/validation_handling.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ def apply_then_operation(fn, inst, context, current_path, depth=0, **kwargs):
displayed_inst_override_trigger = "and display entity instance"
displayed_inst_override = displayed_inst_override_trigger in context.step.name.lower()
inst_to_display = inst if displayed_inst_override else activation_inst
instance_id = safe_method_call(inst_to_display, 'id', None)

validation_outcome = ValidationOutcome(
outcome_code=get_outcome_code(result, context),
Expand All @@ -240,7 +241,7 @@ def apply_then_operation(fn, inst, context, current_path, depth=0, **kwargs):
feature=context.feature.name,
feature_version=misc.define_feature_version(context),
severity=OutcomeSeverity.WARNING if any(tag.lower() == "industry-practice" for tag in context.feature.tags) else OutcomeSeverity.ERROR,
instance_id=safe_method_call(inst_to_display, 'id', None),
instance_id=instance_id,
validation_task_id=context.validation_task_id
)
# suppress the 'display_entity' trigger text if it is used as part of the expected value
Expand All @@ -250,6 +251,7 @@ def apply_then_operation(fn, inst, context, current_path, depth=0, **kwargs):
else validation_outcome.expected)

context.gherkin_outcomes.append(validation_outcome)
context.instance_outcome_state[len(context.gherkin_outcomes)] = instance_id

# Currently, we should not inject passed outcomes for each individual instance to the databse
# if not step_results:
Expand Down Expand Up @@ -286,10 +288,15 @@ def should_apply(items, depth):
return type(items)(map_then_state(v, fn, context, current_path + [i], new_depth, **kwargs) for i, v in enumerate(items))
else:
return apply_then_operation(fn, items, context, current_path = None, **kwargs)

# for generate_error_message() we only care about the outcomes generated by this then-step
# so we take note of the outcomes that already existed. This is necessary since we accumulate
# outcomes per feature and no longer per scenario.
num_preexisting_outcomes = len(context.gherkin_outcomes)
map_then_state(instances, fn, context, depth = 1 if 'at depth 1' in context.step.name.lower() else 0, **kwargs)

# evokes behave error
generate_error_message(context, [gherkin_outcome for gherkin_outcome in context.gherkin_outcomes if gherkin_outcome.severity in [OutcomeSeverity.WARNING, OutcomeSeverity.ERROR]])
generate_error_message(context, [gherkin_outcome for gherkin_outcome in context.gherkin_outcomes[num_preexisting_outcomes:] if gherkin_outcome.severity in [OutcomeSeverity.WARNING, OutcomeSeverity.ERROR]])


def full_stack_rule(func):
Expand Down
6 changes: 1 addition & 5 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,8 @@ def run(filename, rule_type=RuleType.ALL, with_console_output=False, execution_m
yield {key: data}

scenario_validation_outcomes = json.loads(base64.b64decode(el.get('validation_outcomes', [{}])[0].get('data', '')).decode('utf-8')) if el.get('validation_outcomes') else []
scenario_info = {
'scenario_name': el['name'],
'step_names': [step['name'] for step in el['steps']]
}
for validation_outcome in scenario_validation_outcomes:
yield validation_outcome | scenario_info
yield validation_outcome
os.close(fd)
os.unlink(jsonfn)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [Alignment-basedReferenceView]'),'2;1');
FILE_NAME('','2023-08-21T16:55:48',('Alfonso D''Urso','[email protected]'),('ACCA software S.p.A.'),'ACCA_IFC.dll Version 500','ACCA usBIM.infra',$);
FILE_SCHEMA(('IFC4X3_ADD2'));
ENDSEC;
DATA;
#1=IFCOWNERHISTORY(#2,#6,.READWRITE.,.NOCHANGE.,$,$,$,1692636948);
#2=IFCPERSONANDORGANIZATION(#3,#4,$);
#3=IFCPERSON($,'GnHzd70NMJ','gzDANOZut',$,$,$,$,$);
#4=IFCORGANIZATION($,'Mu0lLnlwD','xxDTHR',$,$);
#5=IFCORGANIZATION($,'iYBDKG','oO4sV7V',$,$);
#6=IFCAPPLICATION(#5,'300','FTbK6kYdrZ','nRFDEzDRs');
#7=IFCPROJECT('1p2djBc5z0mRF4WU_r7OC5',#1,'gZimVh','4Ivooh5',$,$,$,(#13),#8);
#8=IFCUNITASSIGNMENT((#9,#10,#11,#12));
#9=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#10=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#11=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#12=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#13=IFCGEOMETRICREPRESENTATIONCONTEXT('3D','Model',3,1.E-4,#14,#16);
#14=IFCAXIS2PLACEMENT3D(#15,$,$);
#15=IFCCARTESIANPOINT((0.,0.,0.));
#16=IFCDIRECTION((0.,1.));
#17=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#13,$,.MODEL_VIEW.,$);
#18=IFCREPRESENTATIONMAP(#21,#22);
#19=IFCDIRECTION((0.,0.,1.));
#20=IFCDIRECTION((1.,0.,0.));
#21=IFCAXIS2PLACEMENT3D(#15,#19,#20);
#22=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#23));
#23=IFCPOLYGONALFACESET(#24,$,(#25,#26,#27,#28,#29),$);
#24=IFCCARTESIANPOINTLIST3D(((0.,0.,0.),(-2.5E-1,-2.5E-1,1.5),(2.5E-1,-2.5E-1,1.5),(-2.5E-1,2.5E-1,1.5),(2.5E-1,2.5E-1,1.5)),$);
#25=IFCINDEXEDPOLYGONALFACE((1,2,3));
#26=IFCINDEXEDPOLYGONALFACE((1,4,2));
#27=IFCINDEXEDPOLYGONALFACE((1,5,4));
#28=IFCINDEXEDPOLYGONALFACE((1,3,5));
#29=IFCINDEXEDPOLYGONALFACE((2,4,5,3));
#30=IFCSITE('3gl5SOql9AbAohg6_5Ftof',#1,'DAqCmKoD','QuaYNLFcLM',$,#31,$,$,.ELEMENT.,$,$,$,$,$);
#31=IFCLOCALPLACEMENT($,#34);
#32=IFCDIRECTION((0.,0.,1.));
#33=IFCDIRECTION((1.,0.,0.));
#34=IFCAXIS2PLACEMENT3D(#15,#32,#33);
#35=IFCANNOTATION('2RhbhoXQ53yAzPOejOTUcp',#1,'06PSmQ','lrtE6P','Annotation point',#36,#40,.USERDEFINED.);
#36=IFCLOCALPLACEMENT(#31,#39);
#37=IFCDIRECTION((0.,0.,1.));
#38=IFCDIRECTION((1.,0.,0.));
#39=IFCAXIS2PLACEMENT3D(#15,#37,#38);
#40=IFCPRODUCTDEFINITIONSHAPE('2HsECR','r0wrQU',(#41));
#41=IFCSHAPEREPRESENTATION(#17,'Axis','Point',(#49));
#42=IFCMATERIAL('hbQTfFjH','V4ZNb5J',$);
#43=IFCMATERIALDEFINITIONREPRESENTATION('SBZtNMV','ngUNgF',(#44),#42);
#44=IFCSTYLEDREPRESENTATION(#13,$,$,(#45));
#45=IFCSTYLEDITEM($,(#46),'6Isqoa');
#46=IFCSURFACESTYLE('nPMw1OXPex',.BOTH.,(#47));
#47=IFCSURFACESTYLERENDERING(#48,0.,$,$,$,$,$,$,.NOTDEFINED.);
#48=IFCCOLOURRGB('TWY4Xa7',0.,0.,1.);
#49=IFCCARTESIANPOINT((700.000970772933,1570.,0.));
#50=IFCSTYLEDITEM(#49,(#51),'G1RzNbK');
#51=IFCSURFACESTYLE('aCJbHtVhW',.BOTH.,(#52));
#52=IFCSURFACESTYLERENDERING(#53,0.,$,$,$,$,$,$,.NOTDEFINED.);
#53=IFCCOLOURRGB('mS93ge',0.,0.,1.);
#54=IFCANNOTATION('2RhbhoXQ53yBzPOejOTUcp',#1,'44t0QV0','ulGtsm9Sx','Annotation point',#55,#59,.USERDEFINED.);
#55=IFCLOCALPLACEMENT(#31,#58);
#56=IFCDIRECTION((0.,0.,1.));
#57=IFCDIRECTION((1.,0.,0.));
#58=IFCAXIS2PLACEMENT3D(#15,#56,#57);
#59=IFCPRODUCTDEFINITIONSHAPE('EhwSnCIrhX','piJedXoO',(#60));
#60=IFCSHAPEREPRESENTATION(#17,'Axis','Point',(#61));
#61=IFCCARTESIANPOINT((2005.00097121531,1765.,0.));
#62=IFCSTYLEDITEM(#61,(#63),'QJshyGl');
#63=IFCSURFACESTYLE('eGUUk0rrkn',.BOTH.,(#64));
#64=IFCSURFACESTYLERENDERING(#65,0.,$,$,$,$,$,$,.NOTDEFINED.);
#65=IFCCOLOURRGB('J94n55jjYx',0.,0.,1.);
#66=IFCANNOTATION('2RhbhoXQ53yCzPOejOTUcp',#1,'X2NLUJAgC3','GkxRtb0x','Annotation point',#67,#71,.USERDEFINED.);
#67=IFCLOCALPLACEMENT(#31,#70);
#68=IFCDIRECTION((0.,0.,1.));
#69=IFCDIRECTION((1.,0.,0.));
#70=IFCAXIS2PLACEMENT3D(#15,#68,#69);
#71=IFCPRODUCTDEFINITIONSHAPE('cdHLctSJI','yhDDOqMio',(#72));
#72=IFCSHAPEREPRESENTATION(#17,'Axis','Point',(#73));
#73=IFCCARTESIANPOINT((195.00097114034,2100.,0.));
#74=IFCSTYLEDITEM(#73,(#75),'UpXZe3');
#75=IFCSURFACESTYLE('MfGAMHF',.BOTH.,(#76));
#76=IFCSURFACESTYLERENDERING(#77,0.,$,$,$,$,$,$,.NOTDEFINED.);
#77=IFCCOLOURRGB('lv0YCFzn',0.,0.,1.);
#78=IFCBUILDINGELEMENTPROXY('3RhbhoXQ53yRzPOejOTUcp',#1,'s5eYwT','8zzIDACo',$,#79,#83,'11547115',$);
#79=IFCLOCALPLACEMENT(#31,#82);
#80=IFCDIRECTION((0.,0.,1.));
#81=IFCDIRECTION((1.,0.,0.));
#82=IFCAXIS2PLACEMENT3D(#15,#80,#81);
#83=IFCPRODUCTDEFINITIONSHAPE('0B7R73','cAYpaXyl',(#86));
#84=IFCMAPPEDITEM(#18,#85);
#85=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#49,$,$);
#86=IFCSHAPEREPRESENTATION(#17,'Body','MappedRepresentation',(#84));
#87=IFCBUILDINGELEMENTPROXY('3RhbhoXQ53yRzPOejOTUgT',#1,'zubudU','j7Izia9',$,#88,#92,'11547333',$);
#88=IFCLOCALPLACEMENT(#31,#91);
#89=IFCDIRECTION((0.,0.,1.));
#90=IFCDIRECTION((1.,0.,0.));
#91=IFCAXIS2PLACEMENT3D(#15,#89,#90);
#92=IFCPRODUCTDEFINITIONSHAPE('liroptdQWy','87dAT5aqNJ',(#95));
#93=IFCMAPPEDITEM(#18,#94);
#94=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#61,$,$);
#95=IFCSHAPEREPRESENTATION(#17,'Body','MappedRepresentation',(#93));
#96=IFCBUILDINGELEMENTPROXY('3XMP46M8P65ugGKLEpO4FP',#1,'sQkyO8W','7HTj539DNA',$,#97,#101,'12053356',$);
#97=IFCLOCALPLACEMENT(#31,#100);
#98=IFCDIRECTION((0.,0.,1.));
#99=IFCDIRECTION((1.,0.,0.));
#100=IFCAXIS2PLACEMENT3D(#15,#98,#99);
#101=IFCPRODUCTDEFINITIONSHAPE('kGaYRMeQGx','RWPLNRrls',(#104));
#102=IFCMAPPEDITEM(#18,#103);
#103=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#73,$,$);
#104=IFCSHAPEREPRESENTATION(#17,'Body','MappedRepresentation',(#102));
#105=IFCRELCONTAINEDINSPATIALSTRUCTURE('26ygX4tlzCKelrMiRZF9mp',#1,'a8yFPIl','ZWKRBQLkzQ',(#35,#54,#66,#78,#87,#96),#30);
#106=IFCRELAGGREGATES('0wns2BMHT8ghrH4ythPU7d',#1,'ei8myAyB','SB4QitbU',#7,(#30));
#107=IFCMAPCONVERSION(#13,#108,2689000.,1253000.,450.,1.,0.,$);
#108=IFCPROJECTEDCRS('7YLXdp','4uGUJGi','EPSG:4150','EPSG:5728','Hotine Oblique Mercator Azimuth Center',$,$);
ENDSEC;
END-ISO-10303-21;
117 changes: 117 additions & 0 deletions test/files/ann000/pass-ann000-annotations_geometry_present.ifc
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [Alignment-basedReferenceView]'),'2;1');
FILE_NAME('','2023-08-21T16:55:48',('Alfonso D''Urso','[email protected]'),('ACCA software S.p.A.'),'ACCA_IFC.dll Version 500','ACCA usBIM.infra',$);
FILE_SCHEMA(('IFC4X3_ADD2'));
ENDSEC;
DATA;
#1=IFCOWNERHISTORY(#2,#6,.READWRITE.,.NOCHANGE.,$,$,$,1692636948);
#2=IFCPERSONANDORGANIZATION(#3,#4,$);
#3=IFCPERSON($,'GnHzd70NMJ','gzDANOZut',$,$,$,$,$);
#4=IFCORGANIZATION($,'Mu0lLnlwD','xxDTHR',$,$);
#5=IFCORGANIZATION($,'iYBDKG','oO4sV7V',$,$);
#6=IFCAPPLICATION(#5,'300','FTbK6kYdrZ','nRFDEzDRs');
#7=IFCPROJECT('1p2djBc5z0mRF4WU_r7OC5',#1,'gZimVh','4Ivooh5',$,$,$,(#13),#8);
#8=IFCUNITASSIGNMENT((#9,#10,#11,#12));
#9=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#10=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#11=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#12=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#13=IFCGEOMETRICREPRESENTATIONCONTEXT('3D','Model',3,1.E-4,#14,#16);
#14=IFCAXIS2PLACEMENT3D(#15,$,$);
#15=IFCCARTESIANPOINT((0.,0.,0.));
#16=IFCDIRECTION((0.,1.));
#17=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#13,$,.MODEL_VIEW.,$);
#18=IFCREPRESENTATIONMAP(#21,#22);
#19=IFCDIRECTION((0.,0.,1.));
#20=IFCDIRECTION((1.,0.,0.));
#21=IFCAXIS2PLACEMENT3D(#15,#19,#20);
#22=IFCSHAPEREPRESENTATION(#17,'Body','Tessellation',(#23));
#23=IFCPOLYGONALFACESET(#24,$,(#25,#26,#27,#28,#29),$);
#24=IFCCARTESIANPOINTLIST3D(((0.,0.,0.),(-2.5E-1,-2.5E-1,1.5),(2.5E-1,-2.5E-1,1.5),(-2.5E-1,2.5E-1,1.5),(2.5E-1,2.5E-1,1.5)),$);
#25=IFCINDEXEDPOLYGONALFACE((1,2,3));
#26=IFCINDEXEDPOLYGONALFACE((1,4,2));
#27=IFCINDEXEDPOLYGONALFACE((1,5,4));
#28=IFCINDEXEDPOLYGONALFACE((1,3,5));
#29=IFCINDEXEDPOLYGONALFACE((2,4,5,3));
#30=IFCSITE('3gl5SOql9AbAohg6_5Ftof',#1,'DAqCmKoD','QuaYNLFcLM',$,#31,$,$,.ELEMENT.,$,$,$,$,$);
#31=IFCLOCALPLACEMENT($,#34);
#32=IFCDIRECTION((0.,0.,1.));
#33=IFCDIRECTION((1.,0.,0.));
#34=IFCAXIS2PLACEMENT3D(#15,#32,#33);
#35=IFCANNOTATION('2RhbhoXQ53yAzPOejOTUcp',#1,'06PSmQ','lrtE6P','Annotation point',#36,#40,.USERDEFINED.);
#36=IFCLOCALPLACEMENT(#31,#39);
#37=IFCDIRECTION((0.,0.,1.));
#38=IFCDIRECTION((1.,0.,0.));
#39=IFCAXIS2PLACEMENT3D(#15,#37,#38);
#40=IFCPRODUCTDEFINITIONSHAPE('2HsECR','r0wrQU',(#41));
#41=IFCSHAPEREPRESENTATION(#17,'Annotation','Point',(#49));
#42=IFCMATERIAL('hbQTfFjH','V4ZNb5J',$);
#43=IFCMATERIALDEFINITIONREPRESENTATION('SBZtNMV','ngUNgF',(#44),#42);
#44=IFCSTYLEDREPRESENTATION(#13,$,$,(#45));
#45=IFCSTYLEDITEM($,(#46),'6Isqoa');
#46=IFCSURFACESTYLE('nPMw1OXPex',.BOTH.,(#47));
#47=IFCSURFACESTYLERENDERING(#48,0.,$,$,$,$,$,$,.NOTDEFINED.);
#48=IFCCOLOURRGB('TWY4Xa7',0.,0.,1.);
#49=IFCCARTESIANPOINT((700.000970772933,1570.,0.));
#50=IFCSTYLEDITEM(#49,(#51),'G1RzNbK');
#51=IFCSURFACESTYLE('aCJbHtVhW',.BOTH.,(#52));
#52=IFCSURFACESTYLERENDERING(#53,0.,$,$,$,$,$,$,.NOTDEFINED.);
#53=IFCCOLOURRGB('mS93ge',0.,0.,1.);
#54=IFCANNOTATION('2RhbhoXQ53yBzPOejOTUcp',#1,'44t0QV0','ulGtsm9Sx','Annotation point',#55,#59,.USERDEFINED.);
#55=IFCLOCALPLACEMENT(#31,#58);
#56=IFCDIRECTION((0.,0.,1.));
#57=IFCDIRECTION((1.,0.,0.));
#58=IFCAXIS2PLACEMENT3D(#15,#56,#57);
#59=IFCPRODUCTDEFINITIONSHAPE('EhwSnCIrhX','piJedXoO',(#60));
#60=IFCSHAPEREPRESENTATION(#17,'Annotation','Point',(#61));
#61=IFCCARTESIANPOINT((2005.00097121531,1765.,0.));
#62=IFCSTYLEDITEM(#61,(#63),'QJshyGl');
#63=IFCSURFACESTYLE('eGUUk0rrkn',.BOTH.,(#64));
#64=IFCSURFACESTYLERENDERING(#65,0.,$,$,$,$,$,$,.NOTDEFINED.);
#65=IFCCOLOURRGB('J94n55jjYx',0.,0.,1.);
#66=IFCANNOTATION('2RhbhoXQ53yCzPOejOTUcp',#1,'X2NLUJAgC3','GkxRtb0x','Annotation point',#67,#71,.USERDEFINED.);
#67=IFCLOCALPLACEMENT(#31,#70);
#68=IFCDIRECTION((0.,0.,1.));
#69=IFCDIRECTION((1.,0.,0.));
#70=IFCAXIS2PLACEMENT3D(#15,#68,#69);
#71=IFCPRODUCTDEFINITIONSHAPE('cdHLctSJI','yhDDOqMio',(#72));
#72=IFCSHAPEREPRESENTATION(#17,'Annotation','Point',(#73));
#73=IFCCARTESIANPOINT((195.00097114034,2100.,0.));
#74=IFCSTYLEDITEM(#73,(#75),'UpXZe3');
#75=IFCSURFACESTYLE('MfGAMHF',.BOTH.,(#76));
#76=IFCSURFACESTYLERENDERING(#77,0.,$,$,$,$,$,$,.NOTDEFINED.);
#77=IFCCOLOURRGB('lv0YCFzn',0.,0.,1.);
#78=IFCBUILDINGELEMENTPROXY('3RhbhoXQ53yRzPOejOTUcp',#1,'s5eYwT','8zzIDACo',$,#79,#83,'11547115',$);
#79=IFCLOCALPLACEMENT(#31,#82);
#80=IFCDIRECTION((0.,0.,1.));
#81=IFCDIRECTION((1.,0.,0.));
#82=IFCAXIS2PLACEMENT3D(#15,#80,#81);
#83=IFCPRODUCTDEFINITIONSHAPE('0B7R73','cAYpaXyl',(#86));
#84=IFCMAPPEDITEM(#18,#85);
#85=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#49,$,$);
#86=IFCSHAPEREPRESENTATION(#17,'Body','MappedRepresentation',(#84));
#87=IFCBUILDINGELEMENTPROXY('3RhbhoXQ53yRzPOejOTUgT',#1,'zubudU','j7Izia9',$,#88,#92,'11547333',$);
#88=IFCLOCALPLACEMENT(#31,#91);
#89=IFCDIRECTION((0.,0.,1.));
#90=IFCDIRECTION((1.,0.,0.));
#91=IFCAXIS2PLACEMENT3D(#15,#89,#90);
#92=IFCPRODUCTDEFINITIONSHAPE('liroptdQWy','87dAT5aqNJ',(#95));
#93=IFCMAPPEDITEM(#18,#94);
#94=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#61,$,$);
#95=IFCSHAPEREPRESENTATION(#17,'Body','MappedRepresentation',(#93));
#96=IFCBUILDINGELEMENTPROXY('3XMP46M8P65ugGKLEpO4FP',#1,'sQkyO8W','7HTj539DNA',$,#97,#101,'12053356',$);
#97=IFCLOCALPLACEMENT(#31,#100);
#98=IFCDIRECTION((0.,0.,1.));
#99=IFCDIRECTION((1.,0.,0.));
#100=IFCAXIS2PLACEMENT3D(#15,#98,#99);
#101=IFCPRODUCTDEFINITIONSHAPE('kGaYRMeQGx','RWPLNRrls',(#104));
#102=IFCMAPPEDITEM(#18,#103);
#103=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#73,$,$);
#104=IFCSHAPEREPRESENTATION(#17,'Body','MappedRepresentation',(#102));
#105=IFCRELCONTAINEDINSPATIALSTRUCTURE('26ygX4tlzCKelrMiRZF9mp',#1,'a8yFPIl','ZWKRBQLkzQ',(#35,#54,#66,#78,#87,#96),#30);
#106=IFCRELAGGREGATES('0wns2BMHT8ghrH4ythPU7d',#1,'ei8myAyB','SB4QitbU',#7,(#30));
#107=IFCMAPCONVERSION(#13,#108,2689000.,1253000.,450.,1.,0.,$);
#108=IFCPROJECTEDCRS('7YLXdp','4uGUJGi','EPSG:4150','EPSG:5728','Hotine Oblique Mercator Azimuth Center',$,$);
ENDSEC;
END-ISO-10303-21;
4 changes: 2 additions & 2 deletions test/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ def wrap_text(text, width):
tabulate_results = [
(
f"{outcome.get('feature')} - v{outcome.get('feature_version')}", # Feature
outcome.get('scenario_name'), # Scenario
outcome.get('step_names')[-1], # Last Step
outcome.get('scenario'), # Scenario
outcome.get('last_step'), # Last Step
outcome.get('instance_id'), # Instance
f"Expected : {outcome.get('expected')}, Observed : {outcome.get('observed')}", # Message
outcome.get('outcome_code') # Code
Expand Down

0 comments on commit d4190bc

Please sign in to comment.