buildingSMART Forums

How can I show one 2d representation and a different 3d representation?

I’ve read in the specification that I can have two geometric representation sub-contexts, one for 3d ‘body’ shapes and one for 2d ‘plan’ shapes.

I’m creating a new IFC authoring tool, and I’ve tried to set this up and I’m struggling to get it to work using Revit as my desired viewer.

I set up one main GeometricRepresentationContext of type ‘Model’, with the two subcontexts mentioned above, but I can never get my 2d shape to show up in the plan view unless I also put my 3d shape in that plan subcontext as well.

I’m trying to have door swings appear in 2d (with a basic open door shape) but in 3d have the door closed with full 3d geometry.

Here is what I have so far. I’m using a rectangle for my temporary swing representation but it doesn’t seem to be working.

Any suggestions?

ISO-10303-21;
HEADER;
FILE_DESCRIPTION((‘ViewDefinition[CoordinationView]’),‘2;1’);
FILE_NAME(‘Test.ifc’,‘2019-11-25T15:38:47’,(‘Test Author’,‘testAuthor@test.com’),(‘Test Organization’),’ IFC Object Library’,‘Automated Test Suite’,‘Test Authorizer’);
FILE_SCHEMA((‘IFC2X3’));
ENDSEC;
DATA;
#1=IFCORGANIZATION(’’,‘Test Organization’,,,); #2=IFCAPPLICATION(#1,'Test Version','Automated Test Suite','IFC Tests'); #3=IFCPERSON(,‘Person’,‘Test’,,,,,); #4=IFCPERSONANDORGANIZATION(#3,#1,);
#5=IFCOWNERHISTORY(#4,#2,,.NOCHANGE.,,,,1574696328);
#6=IFCCARTESIANPOINT((0.,0.,0.));
#7=IFCDIRECTION((1.,0.,0.));
#8=IFCDIRECTION((0.,1.,0.));
#9=IFCDIRECTION((0.,0.,1.));
#10=IFCDIRECTION((1.,0.));
#11=IFCAXIS2PLACEMENT3D(#6,#9,#7);
#12=IFCAXIS2PLACEMENT2D(#6,#10);
#13=IFCGEOMETRICREPRESENTATIONCONTEXT(,'Model',3,0.,#11,#8); #14=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#13,,.MODEL_VIEW.,); #15=IFCGEOMETRICREPRESENTATIONCONTEXT('FootPrint','Plan',2,0.00001,#12,#10); #16=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('FootPrint','Plan',*,*,*,*,#15,,.PLAN_VIEW.,); #17=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); #18=IFCDIMENSIONALEXPONENTS(1,0,0,0,0,0,0); #19=IFCDIMENSIONALEXPONENTS(2,0,0,0,0,0,0); #20=IFCDIMENSIONALEXPONENTS(3,0,0,0,0,0,0); #21=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.); #22=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.); #23=IFCSIUNIT(*,.PLANEANGLEUNIT.,,.RADIAN.);
#24=IFCSIUNIT(,.LENGTHUNIT.,.MILLI.,.METRE.);
#25=IFCMEASUREWITHUNIT(IFCREAL(25.4),#24);
#26=IFCCONVERSIONBASEDUNIT(#18,.LENGTHUNIT.,‘inch’,#25);
#27=IFCMEASUREWITHUNIT(IFCREAL(92903.039062),#21);
#28=IFCCONVERSIONBASEDUNIT(#19,.AREAUNIT.,‘square foot’,#27);
#29=IFCMEASUREWITHUNIT(IFCREAL(28316846.),#22);
#30=IFCCONVERSIONBASEDUNIT(#20,.VOLUMEUNIT.,‘cubic foot’,#29);
#31=IFCMEASUREWITHUNIT(IFCREAL(0.017453),#23);
#32=IFCCONVERSIONBASEDUNIT(#17,.PLANEANGLEUNIT.,‘DEGREE’,#31);
#33=IFCSIUNIT(
,.SOLIDANGLEUNIT.,,.STERADIAN.); #34=IFCSIUNIT(*,.MASSUNIT.,,.GRAM.);
#35=IFCSIUNIT(,.TIMEUNIT.,,.SECOND.); #36=IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,,.DEGREE_CELSIUS.);
#37=IFCSIUNIT(
,.LUMINOUSINTENSITYUNIT.,$,.LUMEN.);
#38=IFCUNITASSIGNMENT((#26,#28,#30,#32,#33,#34,#35,#36,#37));
#39=IFCPROJECT(‘3pH5OaQE93ph$izSLtkju3’,#5,’’,’’,’’,’’,’’,(#13,#15),#38);
#40=IFCLOCALPLACEMENT($,#11);
#41=IFCSITE(‘3JXWKp$eX4BA$uXDKAd0Kh’,#5,‘Default Site’,‘Description of Default Site’,,#40,,,.ELEMENT.,(50,59,25),(113,57,40),0.,,); #42=IFCRELAGGREGATES('1kDfIGlpz938lWVTQasHQX',#5,,,#39,(#41)); #43=IFCLOCALPLACEMENT(#40,#11); #44=IFCBUILDING('3isdCqxQv3juXLpQ57ijoE',#5,'','','',#43,,,.ELEMENT.,,,);
#45=IFCRELAGGREGATES(‘0KquEtz351hha$DdIX_snZ’,#5,’’,’’,#41,(#44));
#46=IFCLOCALPLACEMENT(#43,#11);
#47=IFCBUILDINGSTOREY(‘0IMkiUWXP4rgzCktFcfzqS’,#5,‘Only Storey’,’’,,#46,,,.ELEMENT.,0.); #48=IFCRELAGGREGATES('0HDromRTL7gQwULKCTF412',#5,'','',#44,(#47)); #49=IFCAXIS2PLACEMENT3D(#6,#9,#7); #50=IFCLOCALPLACEMENT(#46,#49); #51=IFCCARTESIANPOINT((0.,0.)); #52=IFCDIRECTION((-1.,0.)); #53=IFCAXIS2PLACEMENT2D(#51,#52); #54=IFCRECTANGLEPROFILEDEF(.AREA.,,#53,200.,4.);
#55=IFCCARTESIANPOINT((0.,0.,0.));
#56=IFCAXIS2PLACEMENT3D(#55,,);
#57=IFCEXTRUDEDAREASOLID(#54,#56,#9,90.);
#58=IFCSHAPEREPRESENTATION(#14,‘Body’,‘Brep’,(#57));
#59=IFCPRODUCTDEFINITIONSHAPE(,,(#58));
#60=IFCWALLTYPE(‘25vdYkj9zC4874gZ$l6F6R’,#5,’’,‘KingMakerCustomItem_Type option’,,,,'Test Wall','Test Wall',.STANDARD.); #61=IFCWALLSTANDARDCASE('2cvJIQEFD1SQ0PHBDJl0hd',#5,'Test Wall',,’’,#50,#59,‘Test Wall’);
#62=IFCRELDEFINESBYTYPE(‘0QglFifDjDMhTV4HJgZJAa’,#5,,,(#61),#60);
#63=IFCCARTESIANPOINT((50.,-36.));
#64=IFCDIRECTION((1.,0.));
#65=IFCAXIS2PLACEMENT2D(#63,#64);
#66=IFCRECTANGLEPROFILEDEF(.AREA.,,#65,30.,72.); #67=IFCCARTESIANPOINT((0.,-2.,0.)); #68=IFCAXIS2PLACEMENT3D(#67,#8,#7); #69=IFCEXTRUDEDAREASOLID(#66,#68,#9,4.); #70=IFCSHAPEREPRESENTATION(#14,'Body','SweptSolid',(#69)); #71=IFCPRODUCTDEFINITIONSHAPE(,,(#70)); #72=IFCOPENINGELEMENT('11JlNZUhnCEeUzqUTBy3gv',#5,'Opening','Opening Description','Opening',#50,#71,);
#73=IFCRELVOIDSELEMENT(‘1kFELI_kT5Ff$SF2iTf11S’,#5,,,#61,#72);
#74=IFCCARTESIANPOINT((50.,0.));
#75=IFCDIRECTION((-1.,0.));
#76=IFCAXIS2PLACEMENT2D(#74,#75);
#77=IFCRECTANGLEPROFILEDEF(.AREA.,,#76,29.,2.); #78=IFCCARTESIANPOINT((0.,4.,0.)); #79=IFCAXIS2PLACEMENT3D(#78,,); #80=IFCEXTRUDEDAREASOLID(#77,#79,#9,71.); #81=IFCSHAPEREPRESENTATION(#14,'Body','Brep',(#80)); #82=IFCCARTESIANPOINT((50.,0.)); #83=IFCDIRECTION((1.,0.)); #84=IFCAXIS2PLACEMENT2D(#82,#83); #85=IFCCARTESIANPOINT((-10.,5.)); #86=IFCCARTESIANPOINT((10.,5.)); #87=IFCCARTESIANPOINT((10.,-5.)); #88=IFCCARTESIANPOINT((-10.,-5.)); #89=IFCPOLYLINE((#85,#86)); #90=IFCPOLYLINE((#88,#87)); #91=IFCPOLYLINE((#85,#88)); #92=IFCPOLYLINE((#86,#87)); #93=IFCGEOMETRICSET((#89,#90,#91,#92)); #94=IFCSHAPEREPRESENTATION(#16,'FootPrint','GeometricSet',(#93)); #95=IFCPRODUCTDEFINITIONSHAPE(,,(#81,#94)); #96=IFCDOORSTYLE('33JaY3GD9E9eFXgGxnjOAB',#5,'','KingMakerCustomItem_Type option',,,,‘Test Door’,.SLIDING_TO_LEFT.,.ALUMINIUM.,.F.,.F.);
#97=IFCDOOR(‘1sJB7tpULFevZmiwlPC1JY’,#5,‘Test Door’,$,’’,#50,#95,‘Test Door’,72.,30.);
#98=IFCRELDEFINESBYTYPE(‘2joLajRBjBzws$O116d$FS’,#5,,,(#97),#96);
#99=IFCRELFILLSELEMENT(‘2$iR5z1nHC3f7WZEzm89hO’,#5,,,#72,#97);
#100=IFCRELCONTAINEDINSPATIALSTRUCTURE(‘0PNkllgiLF7eoKyAR82nEC’,#5,,,(#61,#72,#97),#47);
ENDSEC;
END-ISO-10303-21;

There are a few issues with your IFC. Firstly, null values should be $, not left blank. New entities should be on new lines, not as shown on #93. At a glance I suspect Revit doesn’t parse the GeometricSet. Have you tried other representations?

BlenderBIM allows free and open source authoring of IFC and supports exporting of different geometric representation contexts and sub-contexts, which may interest you. It is based on IfcOpenShell, which I highly recommend which may help you shortcut a lot of work such as fixing those syntatical problems above, if you are building your own authoring tool (or, perhaps join as a contributor to BlenderBIM?) This example shows an export of three types of geometry: a body, clearance geometry, and footprint curve for a single IFC product:

image

Revit is able to import this successfully:

image

Note that although Revit can import it, it can only modify certain representation types, and the context data is lost if you try and export it out of Revit.

I’ve attached the IFC file for you to inspect: test.blend.ifc (14.7 KB)

1 Like

Thank you, Moult, I recognize your name – having seen a couple articles from your site previously.

I should have uploaded my IFC file instead of pasting it in to the discussion window. I believe that when I pasted it in, the dollar signs were stripped out and the line breaks were messed up. I’ll attach it instead next time.

When I open, in Revit, the IFC file you attached to your reply, I see the three different elements, but all at the same time in both the 3d and plan views.

There are still two questions I have.

  1. If the 2d element were a door swing I didn’t want to be visible in revit’s 3d view, is there a way in IFC to specify that it should only appear in the plan view and not in the 3d view?

  2. If the 3d body element were a closed door, is there a way to specify in IFC that it should be hidden in the plan view and only appear in the 3d view?

No worries, if you could attach your IFC file that would help debug.

I think (could be wrong) that from the IFC side the file has already specified all that it can in terms of saying “this geometry is footprint in a plan view” and “this geometry is clearance” and “this geometry is body”.

It suggests that out of the box, Revit does not automatically set visual settings based on attributes like PLAN_VIEW. This sounds like a Revit limitation. Perhaps there is a property which Revit records that you can then set a filter for in your views? I’m not sure.

My file is really not too different from the file you attached except for the use of the ‘Plan’ IfcGeometricRepresentationContext under which the 2d shape’s sub-context is placed. I had tried that as well without much success. I will explore the possibility of using properties to hide/show elements from inside Revit. Those would be custom properties, as opposed to a Revit-defined property that already controls visibility, correct?

For example, when creating a family in revit, there are checkboxes that allow a user to select whether a shape should appear in 2D or 3D plan views. Those aren’t able to be pre-populated through IFC via properties as far as you know, are they?

It is unfortunate that Revit doesn’t quite seem to reach the level of flexibility with shape visibility promised by the specification’s IfcGeometricRepresentationSubcontext element which seems to infer that I could have even different LOD versions of an element.

Each IfcProduct can then have several instances of subtypes of IfcRepresentation , each being assigned to a different geometric representation context ( IfcGeometricRepresentationContext or IfcGeometricRepresentationSubContext ). The application can then choose the most appropriate representation for showing the geometric shape of the product, depending on the target view and scale.

The IfcGeometricRepresentationSubContext is used to define semantically distinguished representation types for different information content, dependent on the representation view and the target scale. It can be used to control the level of detail of the shape representation that is most applicable to this geometric representation context.

PS. In your example, with the file open in Revit, is there a way to toggle between the clearance geometry and the body geometry views for the project as a whole?

As far as I am aware, those Revit checkboxes are not connected to IFC data. I was kind of referring to regular IFC psets, which you could then put a filter on. But upon thinking it through, the three shapes are merged into a single object in IFC, so it may be very hard to separate them.

I am not aware of Revit supporting the ability to toggle geometry contexts. It’s a shame, as it would be tremendously useful :frowning:

1 Like