/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// // This file is generated automatically. #ifndef _IFC4_IFCRELSPACEBOUNDARY_AUTO_IMPL_H #define _IFC4_IFCRELSPACEBOUNDARY_AUTO_IMPL_H #include "IfcRelConnectsAutoImpl.h" #include "IfcElementAutoImpl.h" #include "IfcConnectionGeometryAutoImpl.h" #include "TD_PackPush.h" /** \details The namespace contains schema-dependent classes, definitions and sub routines for work with IFC4 express schema definitions. */ namespace OdIfc4 { /** \details The space boundary defines the physical or virtual delimiter of a space by the relationship IfcRelSpaceBoundary to the surrounding elements. The IfcRelSpaceBoundary is defined as an objectified relationship that handles the element to space relationship by objectifying the relationship between an element and the space it bounds. It is given as a one-to-one relationship, but allows each element (including virtual elements and openings) to define many such relationship and each space to be defined by many such relationships. * 1st level space boundary: defined as boundaries of the space, not taking into account any change in building element or spaces on the other side. * 2nd level space boundary: defined as boundary taking any change in building element or spaces on the other side into account. It can be further distinguished into: * 2nd level type A: There is a space on the other side. * 2nd level type B: There is a building element on the other side. The exact definition of how space boundaries are broken down depends on the view definition, more detailed conventions on how space boundaries are decomposed can only be given at the domain or application type level. * In an architectural or FM related view, a space boundary is defined totally from inside the space. This is a 1st level space boundary. * In a thermal view, the decomposition of the space boundary depends on the material of the providing building element and the adjacent spaces behind. This is a 2nd level space boundary. - Examples - Space boundary at first level: Space boundary at second level: Space boundary at second level type A: Space boundary at second level type B: The differences between the 1st and 2nd level space boundaries is identified by: * 1st level: SELF\IfcRoot.Name = "1stLevel" SELF\IfcRootDescription = NIL * 2nd level: SELF\IfcRoot.Name = "2ndLevel" SELF\IfcRootDescription = "2a", or "2b" As shown on the image below, if the IfcRelSpaceBoundary is used to express a virtual boundary, the attribute PhysicalOrVirtualBoundary has to be set to VIRTUAL. The attribute RelatedBuildingElement shall point to an instance of IfcVirtualElement. If the correct location is of interest, the attribute ConnectionGeometry is required. As shown on the image below, if the IfcRelSpaceBoundary is used to express a physical boundary between two spaces, the attribute PhysicalOrVirtualBoundary has to be set to PHYSICAL. The attribute RelatedBuildingElement has to be given and points to the element providing the space boundary. The attribute ConnectionGeometry can be inserted, in this case it describes the physical space boundary geometically, or it can be omitted, in that case it describes a physical space boundary logically. The IfcRelSpaceBoundary can have geometry attached. If geometry is not attached, the relationship between space and building element is handled only on a logical level. If geometry is attached, it is given within the local coordinate systems of the space. \changes * IFC2X_FINAL changes: * The data type of the attribute_RelatedBuildingElement_ has been changed from IfcBuildingElement to its supertype IfcElement. * The data type of the attribute ConnectionGeometry has been changed from IfcConnectionSurfaceGeometry to its supertype IfcConnectionGeometry. * IFC4 changes: * The attribute RelatedBuildingElement has been made mandatory. For virtual boundaries the reference to IfcVirtualElement is now mandatory. * The RelatedBuildingElement attribute is no longer optional. * Type of the RelatingSpace attribute changed from IfcSpace to IfcSpaceBoundarySelect. */ class IFC4_EXPORT IfcRelSpaceBoundary : public IfcRelConnects { //DOM-IGNORE-BEGIN OD_EXP_DECLARE_MEMBERS(OdIfc4::IfcRelSpaceBoundary); //DOM-IGNORE-END public: // // OdDAI early binding accessors // /** \details Returns the value of RelatingSpace attribute. This attribute represents reference to one spaces that is delimited by this boundary. \returns Returns the value of RelatingSpace attribute. */ IfcSpaceBoundarySelect relatingSpace(); /** \details Returns the value of RelatedBuildingElement attribute. This attribute represents reference to Building Element, that defines the Space Boundaries. \returns Returns the value of RelatedBuildingElement attribute. \remarks * IFC2x CHANGE:  The data type has been changed from IfcBuildingElement to IfcElement with upward compatibility for file based exchange. * IFC4 CHANGE:  The attribute has been changed to be mandatory. */ const OdDAIObjectId& getRelatedBuildingElement() const; /** \details Sets the value of RelatedBuildingElement attribute. This attribute represents reference to Building Element, that defines the Space Boundaries. \param RelatedBuildingElement [in] RelatedBuildingElement to set. \remarks * IFC2x CHANGE:  The data type has been changed from IfcBuildingElement to IfcElement with upward compatibility for file based exchange. * IFC4 CHANGE:  The attribute has been changed to be mandatory. */ void setRelatedBuildingElement(const OdDAIObjectId& RelatedBuildingElement); /** \details Returns the value of ConnectionGeometry attribute. This attribute represents physical representation of the space boundary. Provided as a curve or surface given within the LCS of the space. \returns Returns the value of ConnectionGeometry attribute. \remarks IFC2x CHANGE:  The data type has been changed from IfcConnectionSurfaceGeometry to IfcConnectionGeometry with upward compatibility for file based exchange. */ const OdDAIObjectId& getConnectionGeometry() const; /** \details Sets the value of ConnectionGeometry attribute. This attribute represents physical representation of the space boundary. Provided as a curve or surface given within the LCS of the space. \param ConnectionGeometry [in] ConnectionGeometry to set. \remarks IFC2x CHANGE:  The data type has been changed from IfcConnectionSurfaceGeometry to IfcConnectionGeometry with upward compatibility for file based exchange. */ void setConnectionGeometry(const OdDAIObjectId& ConnectionGeometry); /** \details Returns the value of PhysicalOrVirtualBoundary attribute. This attribute defines, whether the Space Boundary is physical (Physical) or virtual (Virtual). \returns Returns the value of PhysicalOrVirtualBoundary attribute. */ IfcPhysicalOrVirtualEnum getPhysicalOrVirtualBoundary() const; /** \details Sets the value of PhysicalOrVirtualBoundary attribute. This attribute defines, whether the Space Boundary is physical (Physical) or virtual (Virtual). \param PhysicalOrVirtualBoundary [in] PhysicalOrVirtualBoundary to set. */ void setPhysicalOrVirtualBoundary(IfcPhysicalOrVirtualEnum PhysicalOrVirtualBoundary); /** \details Returns the value of InternalOrExternalBoundary attribute. This attribute defines whether the Space Boundary is internal (Internal), or external, i.e. adjacent to open space (that can be an partially enclosed space, such as terrace (External). \returns Returns the value of InternalOrExternalBoundary attribute. */ IfcInternalOrExternalEnum getInternalOrExternalBoundary() const; /** \details Sets the value of InternalOrExternalBoundary attribute. This attribute defines whether the Space Boundary is internal (Internal), or external, i.e. adjacent to open space (that can be an partially enclosed space, such as terrace (External). \param InternalOrExternalBoundary [in] InternalOrExternalBoundary to set. */ void setInternalOrExternalBoundary(IfcInternalOrExternalEnum InternalOrExternalBoundary); public: /** \details Default constructor for the IfcRelSpaceBoundary class. */ IfcRelSpaceBoundary(); /** \details Reads object's data from the specified filer. \param rdFiler [in] Pointer to a filer from which to read the data. \returns A value of OdResult type that contains the result of the method execution. */ virtual OdResult inFields(OdDAI::OdSpfFilerBase* rdFiler) override; /** \details Writes object's data the the specified filer. \param wrFiler [in] Pointer to a filer to which to write the data. \returns A value of OdResult type that contains the result of the method execution. */ virtual OdResult outFields(OdDAI::OdSpfFilerBase* wrFiler) override; /** \details Sets the object ID of this instance to inverse attributes of related instances according to schema specification of inverse attributes. */ virtual void setInverseCounterParts() override; /** \details Returns a type of a class instance. \returns Pointer to the OdDAI::Entity type that determines an entity definition within a schema. */ virtual OdDAI::Entity* getInstanceType() const override; /** \details Returns an attribute value for the specified attribute name. \param attrName [in] Name of an attribute to query. \returns OdRxValue object that represents a generic variant type value. */ virtual OdRxValue getAttr(const char * attrName) const override; /** \details Early-bound version of instances comparison. \param pOther [in] Other application instance. \param ordering [out] Receives the ordering (comparison) status. \returns true if comparison was performed, false if method has no implementation, so late-bound version could be applied. \remarks If the method returns true, the ordering parameter can receive one of the following statuses: Name Value Description _kLessThan_ -1 This object < Other Object. _kEqual_ 0 This object = Other Object. _kGreaterThan_ 1 This object > Other Object. _kNotOrderable_ 2 This class is not orderable.
*/ virtual bool comparedToEarlyImpl(const OdDAI::ApplicationInstance *pOther, OdRx::Ordering &ordering) const override; /** \details Resets a value for the specified attribute. \param explicitAttrName [in] Explicit name of the attribute to reset. */ virtual void unsetAttr(const char * explicitAttrName) override; /** \details Checks whether the specified attribute is set. \param explicitAttrName [in] Explicit name of the attribute to test. \returns true if the specified attribute is set, false otherwise. */ virtual bool testAttr(const char * explicitAttrName) const override; /** \details Sets the specified attribute with a given value. \param explicitAttrName [in] Explicit name of the attribute to set. \param val [in] Value to set. \returns true if the value is successfully set for the specified attribute, false otherwise. */ virtual bool putAttr(const char * explicitAttrName, const OdRxValue &val) override; /** \details Checks whether the specified instance is the object derived from or belongs to this class. \param entityType [in] Entity to check. \returns true if the specified instance is the object derived from or belongs to this class, false otherwise. */ virtual bool isKindOf(OdIfc::OdIfcEntityType entityType) const override; /** \details Returns the type of this entity. \returns A value of the OdIfc::OdIfcEntityType type that represents type of this entity. */ virtual OdIfc::OdIfcEntityType type() const override; /** \details Returns an attribute value for the specified attribute definition. \param attrDef [in] Attribute definition to query. \returns OdRxValue object that represents a generic variant type value. */ virtual OdRxValue getAttr(const OdIfc::OdIfcAttribute attrDef) const override; /** \details Resets a value for the specified attribute. \param explicitAttrDef [in] Explicit definition that represents an attribute to reset. */ virtual void unsetAttr(const OdIfc::OdIfcAttribute explicitAttrDef) override; /** \details Checks whether the specified attribute is set. \param explicitAttrDef [in] Attribute definition to test. \returns true if the specified attribute is set, false otherwise. */ virtual bool testAttr(const OdIfc::OdIfcAttribute explicitAttrDef) const override; /** \details Sets the specified attribute with a given value. \param explicitAttrDef [in] Explicit attribute definition to set. \param val [in] Value to set. \returns true if the value is successfully set for the specified attribute, false otherwise. */ virtual bool putAttr(const OdIfc::OdIfcAttribute explicitAttrDef, const OdRxValue &val) override; protected: // Fields declaration: OdDAI::Select m_RelatingSpace; // IfcSpaceBoundarySelect OdDAIObjectId m_RelatedBuildingElement; // IfcElement OdDAIObjectId m_ConnectionGeometry; // IfcConnectionGeometry [optional] OdDAI::Enum m_PhysicalOrVirtualBoundary; // IfcPhysicalOrVirtualEnum OdDAI::Enum m_InternalOrExternalBoundary; // IfcInternalOrExternalEnum }; /** \details A data type that represents a smart pointer to a IfcRelSpaceBoundary object. */ typedef OdSmartPtr IfcRelSpaceBoundaryPtr; } // namespace #include "TD_PackPop.h" #endif // _IFC4_IFCRELSPACEBOUNDARY_AUTO_IMPL_H