Skip to content

Commit

Permalink
IVS-175/CTX000 - Presentation colours and textures
Browse files Browse the repository at this point in the history
  • Loading branch information
Ghesselink committed Oct 23, 2024
1 parent c1e2bc5 commit 74a62af
Show file tree
Hide file tree
Showing 10 changed files with 6,755 additions and 8 deletions.
22 changes: 22 additions & 0 deletions features/CTX000_Presentation-colours-and-textures.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
@implementer-agreement
@CTX
@version1
@E00020

Feature: CTX000 - Presentation colours and textures
The rule verifies the presence of colour, texture and other presentation appearance information to objects.
https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/concepts/Product_Shape/Product_Geometry_Colour/content.html

Scenario Outline: Check for activation

Given an <entity type>
Given its attribute <attribute>

Then The IFC model contains information on the selected functional part

Examples:
| entity type | attribute |
| IfcSolidModel | StyledByItem |
| IfcTessellatedFaceSet | StyledByItem |
| IfcTessellatedFaceSet | HasColours |

71 changes: 71 additions & 0 deletions test/files/ctx000/na-ctx000-non_styled_solid.ifc
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition[CoordinationView]'),'2;1');
FILE_NAME('C:/Example/Path/Example_File.IFC','2024-07-04T11:07:30',(''),(''),'Example IFC','Example Architecture','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
#1 = IFCPROJECT('A1B2C3D4E5F6G7H8I9J0K1L2', #2, $, $, $, $, $, (#7), #10);
#2 = IFCOWNERHISTORY(#3, #6, $, .ADDED., $, $, $, 1717497896);
#3 = IFCPERSONANDORGANIZATION(#4, #5, $);
#4 = IFCPERSON($, 'User', 'Example', $, $, $, $, $);
#5 = IFCORGANIZATION($, 'Example', 'Example Architecture', $, $);
#6 = IFCAPPLICATION(#5, '0.10', 'manuell', 'EXA 001');
#7 = IFCGEOMETRICREPRESENTATIONCONTEXT($, 'Model', 3, 0.00001, #8, $);
#8 = IFCAXIS2PLACEMENT3D(#9, $, $);
#9 = IFCCARTESIANPOINT((0.0, 0.0, 0.0));
#10 = IFCUNITASSIGNMENT((#11, #12, #13, #14, #18, #19, #20, #21, #22));
#11 = IFCSIUNIT(*, .LENGTHUNIT., .MILLI., .METRE.);
#12 = IFCSIUNIT(*, .AREAUNIT., $, .SQUARE_METRE.);
#13 = IFCSIUNIT(*, .VOLUMEUNIT., $, .CUBIC_METRE.);
#14 = IFCCONVERSIONBASEDUNIT(#15, .PLANEANGLEUNIT., 'DEGREE', #16);
#15 = IFCDIMENSIONALEXPONENTS(0, 0, 0, 0, 0, 0, 0);
#16 = IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453293), #17);
#17 = IFCSIUNIT(*, .PLANEANGLEUNIT., $, .RADIAN.);
#18 = IFCSIUNIT(*, .SOLIDANGLEUNIT., $, .STERADIAN.);
#19 = IFCSIUNIT(*, .MASSUNIT., $, .GRAM.);
#20 = IFCSIUNIT(*, .TIMEUNIT., $, .SECOND.);
#21 = IFCSIUNIT(*, .THERMODYNAMICTEMPERATUREUNIT., $, .DEGREE_CELSIUS.);
#22 = IFCSIUNIT(*, .LUMINOUSINTENSITYUNIT., $, .LUMEN.);
#23 = IFCBUILDING('B2C3D4E5F6G7H8I9J0K1L2M3',#2,'Building',$,$,#24,$,$,.ELEMENT.,$,$,$);
#24 = IFCLOCALPLACEMENT($, #25);
#25 = IFCAXIS2PLACEMENT3D(#26, $, $);
#26 = IFCCARTESIANPOINT((0.0, 0.0, 0.0));
#27 = IFCRELCONTAINEDINSPATIALSTRUCTURE('C3D4E5F6G7H8I9J0K1L2M3N4',#2,$,$
,(#28),#23);
#28 = IFCRELAGGREGATES('D4E5F6G7H8I9J0K1L2M3N4O5', #2, 'Container', 'Container', #1, (#23));
#30 = IFCLOCALPLACEMENT($, #32);
#31 = IFCPRODUCTDEFINITIONSHAPE('Rep_Root', 'List of shape representations for Root', (#33));
#32 = IFCAXIS2PLACEMENT3D(#34, #35, #36);
#33 = IFCSHAPEREPRESENTATION(#7, 'Body', 'Brep', (#37, #38, #39, #40));
#34 = IFCCARTESIANPOINT((0.0, 0.0, 0.0));
#35 = IFCDIRECTION((0.0, 0.0, 1.0));
#36 = IFCDIRECTION((1.0, 0.0, 0.0));
#37 = IFCFACETEDBREP(#38);
#38 = IFCCLOSEDSHELL((#39, #40, #41, #42, #43, #44));
#39 = IFCFACE((#45));
#40 = IFCFACEOUTERBOUND(#46, .T.);
#41 = IFCPOLYLOOP((#47, #48, #49, #50));
#42 = IFCFACE((#51));
#43 = IFCFACEOUTERBOUND(#52, .T.);
#44 = IFCPOLYLOOP((#53, #54, #55, #56));
#45 = IFCCARTESIANPOINT((127.27140625, 1150.26096844596, -9.0));
#46 = IFCCARTESIANPOINT((102.27140625, 1150.26096843618, -9.0));
#47 = IFCCARTESIANPOINT((102.27140625, 1150.26096843618, -4.0));
#48 = IFCCARTESIANPOINT((127.27140625, 1150.26096844596, -4.0));
#49 = IFCFACE((#50));
#50 = IFCFACEOUTERBOUND(#51, .T.);
#51 = IFCPOLYLOOP((#52, #53, #54, #55));
#52 = IFCCARTESIANPOINT((102.27140625, 1150.26096843618, -9.0));
#53 = IFCCARTESIANPOINT((102.27140625, 1125.26096843618, -9.0));
#54 = IFCCARTESIANPOINT((102.27140625, 1125.26096843618, -4.0));
#55 = IFCCARTESIANPOINT((102.27140625, 1150.26096843618, -4.0));
#56 = IFCFACE((#57));
#57 = IFCFACEOUTERBOUND(#58, .T.);
#58 = IFCPOLYLOOP((#59, #60, #61, #62));
#59 = IFCCARTESIANPOINT((102.27140625, 1125.26096843618, -9.0));
#60 = IFCCARTESIANPOINT((127.27140625, 1125.26096844596, -9.0));
#61 = IFCCARTESIANPOINT((127.27140625, 1125.26096844596, -4.0));
#62 = IFCCARTESIANPOINT((102.27140625, 1125.26096843618, -4.0));
ENDSEC;
END-ISO-10303-21;
79 changes: 79 additions & 0 deletions test/files/ctx000/na-ctx000-polygonal_face_no_colous_or_styles.ifc
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [notYetAssigned]'),'2;1');
FILE_NAME(
/* name */ 'polygonal-faceset-cube.ifc',
/* time_stamp */ '2016-05-26T17:38:29',
/* author */ ('jonm'),
/* organization */ ('Geometry Gym'),
/* preprocessor_version */ 'GeomGymIFC by Geometry Gym Pty Ltd',
/* originating_system */ 'ggRhinoIFC - Grasshopper3d Plug-in by Geometry Gym Pty Ltd',
/* authorization */ 'None');

FILE_SCHEMA (('IFC4'));
ENDSEC;

DATA;
#1= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#3,$);
#2= IFCCARTESIANPOINT((0.0,0.0,0.0));
#3= IFCAXIS2PLACEMENT3D(#3058,#3059,#3060);
#4= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#1,$,.MODEL_VIEW.,$);
#5= IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#1,$,.MODEL_VIEW.,$);
#6= IFCCARTESIANPOINT((0.0,0.0,0.0));
#7= IFCDIRECTION((1.0,0.0,0.0));
#8= IFCDIRECTION((0.0,1.0,0.0));
#9= IFCDIRECTION((0.0,0.0,1.0));
#10= IFCCARTESIANPOINT((0.0,0.0));
#11= IFCAXIS2PLACEMENT2D(#10,$);
#12= IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#13= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#14= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
/* ------------------------------------------------------------------------- */
/* polygonal face set geometry representation */
#15= IFCCARTESIANPOINTLIST3D(((-10000.0,-10000.0,-10000.0),(10000.0,-10000.0,-10000.0),(10000.0,10000.0,-10000.0),(-10000.0,10000.0,-10000.0),(-10000.0,-10000.0,10000.0),(10000.0,-10000.0,10000.0),(10000.0,10000.0,10000.0),(-10000.0,10000.0,10000.0),(-5000.0,-5000.0,-5000.0),(5000.0,-5000.0,-5000.0),(5000.0,5000.0,-5000.0),(-5000.0,5000.0,-5000.0),(5000.0,-5000.0,10000.0),(-5000.0,-5000.0,10000.0),(5000.0,5000.0,10000.0),(-5000.0,5000.0,10000.0)));
#16= IFCINDEXEDPOLYGONALFACE((2,6,6,5,1));
#17= IFCINDEXEDPOLYGONALFACE((3,7,6,2));
#18= IFCINDEXEDPOLYGONALFACE((4,8,7,3));
#19= IFCINDEXEDPOLYGONALFACE((1,5,8,4));
#20= IFCINDEXEDPOLYGONALFACE((4,3,2,1));
#21= IFCINDEXEDPOLYGONALFACEWITHVOIDS((6,7,8,5),((14,16,15,13)));
#22= IFCINDEXEDPOLYGONALFACE((13,10,9,14));
#23= IFCINDEXEDPOLYGONALFACE((15,11,10,13));
#24= IFCINDEXEDPOLYGONALFACE((16,12,11,15));
#25= IFCINDEXEDPOLYGONALFACE((14,9,12,16));
#26= IFCINDEXEDPOLYGONALFACE((9,10,11,12));
#27= IFCPOLYGONALFACESET(#15,.T.,(#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26),$);
#28= IFCSHAPEREPRESENTATION(#5,'Body','Tessellation',(#27));
#29= IFCPRODUCTDEFINITIONSHAPE($,$,(#28));
/* ------------------------------------------------------------------------- */
/* assigned as shape representation to a proxy */
#30= IFCBUILDINGELEMENTPROXY('1csV6umSb0px7vDxobGEN_',#3054,'NOTDEFINED',$,$,#32,#29,$,.NOTDEFINED.);
#31= IFCAXIS2PLACEMENT3D(#2,$,$);
#32= IFCLOCALPLACEMENT(#3047,#31);
#3047= IFCLOCALPLACEMENT($,#3);
/* ------------------------------------------------------------------------- */
/* definition of the minimal building structure, units, owner history */
#3048= IFCBUILDING('2tMIBeIVfClPSrbOosOJDI',#3054,'Grasshopper Building','GH Building',$,#3047,$,'GH Building',$,0.0,0.0,$);
#3049= IFCPERSONANDORGANIZATION(#3050,#3051,$);
#3050= IFCPERSON('jonm','jonm',$,$,$,$,$,$);
#3051= IFCORGANIZATION($,'Geometry Gym',$,$,$);
#3052= IFCAPPLICATION(#3053,'1.4.14.0','ggRhinoIFC - Grasshopper3d Plug-in by Geometry Gym Pty Ltd','ggRhinoIFC');
#3053= IFCORGANIZATION($,'Geometry Gym Pty Ltd',$,$,$);
#3054= IFCOWNERHISTORY(#3049,#3052,$,.ADDED.,1464284014,$,$,1464284014);
#3055= IFCRELCONTAINEDINSPATIALSTRUCTURE('3_FDRX0_zCNwiRAZP_mk8l',#3054,'Building','Building Container for Elements',(#30),#3048);
#3056= IFCAXIS2PLACEMENT3D(#2,$,$);
#3058= IFCCARTESIANPOINT((0.0,0.0,0.0));
#3059= IFCDIRECTION((0.0,0.0,1.0));
#3060= IFCDIRECTION((1.0,0.0,0.0));
#3061= IFCPROJECT('37E0t9DhPDuPXM8sgxexaw',#3054,'Grasshopper Project',$,$,$,$,(#1),#3062);
#3062= IFCUNITASSIGNMENT((#3063,#13,#14,#3064,#3065));
#3063= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#3064= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#3065= IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
#3066= IFCRELAGGREGATES('1jnXpsMarCZQ$Xxt61uMb4',#3054,'Project Container','Project Container for Buildings',#3061,(#3048));
#3070= IFCAXIS2PLACEMENT3D(#2,$,$);
ENDSEC;

END-ISO-10303-21;


41 changes: 41 additions & 0 deletions test/files/ctx000/pass-ctx000-colours_tessellated_face_set.ifc

Large diffs are not rendered by default.

Loading

0 comments on commit 74a62af

Please sign in to comment.