Log In   View a printable version of the current page.
Added by Janice Wix, last edited by Janice Wix on Feb 10, 2007
Labels: 
(None)


Nests

Overview

Describes a whole/part relationship in which the parent object (the whole) is aggregated from a set of child objects (the parts) by nesting. Nesting is a particular form of aggregation in which the parent object is formed by aggregating a set of child objects of the same type (class)

Concept: Nest objects

The concept of nesting objects is used in a number of situations within the IFC model, allowing objects to be broken down into their constituent parts whilst retaining information about both the whole and the individual parts.
In a nest, the whole is referred to as the 'relating object' whilst the parts are referred to as the 'related objects'. There is always exactly one relating object and there may be one or many related objects.
The nesting relationship is described at a high level in the IFC model as between occurrences of IfcObject. Practically, the relationship will be between instances of a subtype of IfcObject and these inherit the relationship.
To ensure that there is clarity about entities that are participating in a nest, reference to this functional part within the IDM will indicate parameters for the aggregation as:
fp_nests[object]
Results
Declares the existence of a specific nesting relationship

Description Entity/Pset/Functional Part MAN REC OPT
Assert general attributes of the relationship        

Set the global unique identifier

IfcRelNests.GlobalId ::IfcGloballyUniqueId    

Apply the owner history

IfcRelNests.OwnerHistory::fp_apply_owner_history    
Establish the relationship entity        

Set the occurrence of the parent entity in the relationship

IfcObject <parent subtype>    

Set the occurrences of the child entities in the relationship

IfcObject <child subtypes>    

Assert the parent relationship


Refer to functional part or exchange requirement for specification of the parent or relating entity to be used.

IfcRelNests.RelatingObject::IfcObject <parent>    

Assert the child relationship


Refer to functional part or exchange requirement for specification of the child or related entity/entities to be used.

IfcRelNests.RelatedObjects::IfcObject <child>    

Specify the name for the relationship

IfcRelNests.Name::IfcLabel    

Specify a description for the relationship

IfcRelNests.Description::IfcText    

IFC Entities Required

  • IfcObject
  • IfcRelationsip
  • IfcRelDecomposes
  • IfcRelNests
  • IfcRoot

IFC Datatypes Required

  • IfcGloballyUniqueId
  • IfcLabel
  • IfcText

IFC Functions Required

  • -

IFC Property Sets Required

  • -

IDM Functional Parts Required

  • fp_apply_owner_history

EXPRESS Schema

SCHEMA FP_NESTS;

  TYPE IfcGloballyUniqueId = STRING (22) FIXED;
  END_TYPE;

  TYPE IfcLabel = STRING;
  END_TYPE;

  TYPE IfcText = STRING;
  END_TYPE;

  ENTITY IfcObject
    ABSTRACT SUPERTYPE
    SUBTYPE OF(IfcRoot);
      ObjectType     : OPTIONAL IfcLabel;
    INVERSE
      Decomposes     : SET [0:1] OF IfcRelDecomposes FOR RelatedObjects;
      IsDecomposedBy : SET OF IfcRelDecomposes FOR RelatingObject;
    WHERE
      WR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X2_FINAL.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;
  END_ENTITY;

  ENTITY IfcRoot
    ABSTRACT SUPERTYPE OF (ONEOF(IfcObject, IfcRelationship));
      GlobalId     : IfcGloballyUniqueId;
      Name         : OPTIONAL IfcLabel;
      Description  : OPTIONAL IfcText;
      OwnerHistory : fp_apply_owner_history;
    UNIQUE
      UR1 : GlobalId;
  END_ENTITY;

  ENTITY IfcRelationship
    ABSTRACT SUPERTYPE
    SUBTYPE OF(IfcRoot);
  END_ENTITY;

  ENTITY IfcRelDecomposes
    ABSTRACT SUPERTYPE
    SUBTYPE OF(IfcRelationship);
      RelatingObject : IfcObject;
      RelatedObjects : SET [1:?] OF IfcObject;
    WHERE
      WR1 : SIZEOF(QUERY(Temp <* RelatedObjects | RelatingObject :=: Temp)) = 0;
  END_ENTITY;

  ENTITY IfcRelNests
    SUBTYPE OF(IfcRelDecomposes);
    WHERE
      WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelDecomposes.RelatedObjects | 
            NOT(TYPEOF(SELF\IfcRelDecomposes.RelatingObject) = TYPEOF(Temp)))) = 0;
  END_ENTITY;

  ENTITY fp_apply_owner_history;
  END_ENTITY;

END_SCHEMA;

Examples of Nesting Objects

Example 1: Nesting Compartmentalized Tanks

Tanks may be provided so that fluid storage is in one compartment (the whole tank) or in multiple, separated compartments. The latter will be particularly the case with large tanks.
A compartment is an IfcFlowStorageDevice specified as a partial element through the occurrence level property set Pset_FlowStorageDeviceTank by setting the TankComposition value to PARTIAL
A tank is an IfcFlowStorageDevice specified as a complete element through the occurrence level property set Pset_FlowStorageDeviceTank by setting the TankComposition value to ELEMENT
Multiple tanks acting together through interconnection are an instance of IfcTankType specified as a complex element through the occurrence level property set Pset_FlowStorageDeviceTank by setting the TankComposition value to COMPLEX
IfcRelNests is used to connect compartments to tanks (since both are instances of IfcTank)

/* TYPE LEVEL PROPERTY SETS AT #100, #200 NOT SHOWN IN THIS EXAMPLE */
/* REPRESENTATION MAP AT #1011 NOT SHOWN IN THIS EXAMPLE */

/* definition of individual compartments by tank type -no geometry shown- */
#1= IFCTANKTYPE('abcdefghijklmnopqrst11', #2, 'Tank_Part', $, 'IfcFlowStorageDevice', (#100,#200), (#1011), $, $, .PREFORMED.);
#2=IFCOWNERHISTORY(...);

/* relating the occurrences to the type */
#10=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst10', #2, $, $, (#20,#21,#22,#23,#24,#25,#26,#27), #1);

/* definition of the occurrences  - placement references given but no geometry shown- */
#20=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst20',#2,$,$,$,#10020,#10002,$);
#21=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst21',#2,$,$,$,#10021,#10002,$);
#22=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst22',#2,$,$,$,#10022,#10002,$);
#23=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst23',#2,$,$,$,#10023,#10002,$);
#24=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst24',#2,$,$,$,#10024,#10002,$);
#25=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst25',#2,$,$,$,#10025,#10002,$);
#26=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst26',#2,$,$,$,#10026,#10002,$);
#27=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst27',#2,$,$,$,#10027,#10002,$);
#28=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst28',#2,$,$,$,#10028,#10003,$);

/* placing the partial tanks into the elemental tank */
#30=IFCRELNESTS('abcdefghijklmnopqrst30', #2, $, 'Compartmentalized tank nesting', #28, (#20,#21,#22,#23,#24,#25,#26,#27));

/* relating a property set to the occurrences */
#50=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst50', #2, $, $, (#20,#21,#22,#23,#24,#25,#26,#27), #300);
#51=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst51', #2, $, $, (#28), #301);

/* definition of occurrence property sets */
#300=IFCPROPERTYSET('abcdefghijklmnopqrst300', #2, 'Pset_FlowStorageDeviceTank', $, (#310,#321,#322));
#301=IFCPROPERTYSET('abcdefghijklmnopqrst301', #2, 'Pset_FlowStorageDeviceTank', $, (#311,#321,#322));

/* definition of specific properties for a preformed tank */
#310=IFCPROPERTYENUMERATEDVALUE('TankComposition', $, ('PARTIAL'), #351);
#311=IFCPROPERTYENUMERATEDVALUE('TankComposition', $, ('ELEMENT'), #351);
#321=IFCPROPERTYSINGLEVALUE('HasLadder', $, IFCBOOLEAN(.F.), $);
#322=IFCPROPERTYSINGLEVALUE('HasVisualIndicator', $, IFCBOOLEAN(.F.), $);

/* definition of property enumerations used in specific type property set */
#351=IFCPROPERTYENUMERATION('PEnum_TankComposition', ('COMPLEX', 'ELEMENT', 'PARTIAL', 'NOTKNOWN', 'UNSET'), $);

Example 2: Nested Cost Schedules

In this example, the estimate for hot water services (described in the examples for fp_model_cost_schedule including instances of organization, person and date) is one cost schedule in a set that is combined to produce a total estimate for all services on a proposal that is name 'New Munkerud'. To obtain the complete estimate, the domestic cold water services and the waste water estimates are also included.

/* ownership information*/
#2=IFCOWNERHISTORY(...);

/* define the cost schedule */
#2000=IFCCOSTSCHEDULE('abcdefghijklmnopqrst2000',#2,'New Mumkerud','All Services',$,#3001,#3002,#4001,'ISSUED',$,#4001,'S20050630-0',.ESTIMATE.);
#2001=IFCCOSTSCHEDULE('abcdefghijklmnopqrst2001',#2,'Domestic Hot Water','Pipework only',$,#3001,#3002,#4001,'ISSUED',$,#4001,'S20050630-1',.ESTIMATE.);
#2002=IFCCOSTSCHEDULE('abcdefghijklmnopqrst2002',#2,'Domestic Cold Water','Pipework only',$,#3001,#3002,#4001,'ISSUED',$,#4001,'S20050630-2',.ESTIMATE.);

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.1.3 Build:#408 Jan 23, 2006) - Bug/feature request - Contact Administrators