/////////////////////////////////////////////////////////////////////////////// // 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 _IFC4X4_IFCTRIANGULATEDFACESET_AUTO_IMPL_H #define _IFC4X4_IFCTRIANGULATEDFACESET_AUTO_IMPL_H #include "IfcTessellatedFaceSetAutoImpl.h" #include "TD_PackPush.h" /** \details The namespace contains schema-dependent classes, definitions and sub routines for work with IFC4X4 express schema definitions. */ namespace OdIfc4x4 { /** \details The IfcTriangulatedFaceSet is a tessellated face set with all faces being bound by triangles. The faces are constructed by implicit polylines defined by three Cartesian points. Depending on the value of the attribute Closed the instance of IfcTriangulatedFaceSet represents: * if TRUE, a boundary representation (or B-rep); * if FALSE, a face based surface representation. - Details - The coordinates of each point are provided by a one-based index into an ordered list of Cartesian points provided by the two-dimensional list CoordIndex, where * the first dimension of the two-dimensional list addresses the list of triangular faces; * the second dimension of the two-dimensional list provides exactly three indices. Each index points to a Cartesian point being a vertex of the triangle. Depending on the provision of PnIndex the indices point either directly into the IfcCartesianPointList3D referenced by Coordinates defined at the supertype IfcTessellatedFaceSet, or they point into the PnIndex where the integer values at that position provides the location of the coordinate values within the IfcCartesianPointList3D. The image below shows an example of the handling of point index. The image below shows usage of the IfcTriangulatedFaceSet without (as default) and with using the PnIndex. Optionally normals can be provided. Only normals per vector are supported allowing for visually curved triangles when the three normals of the corresponding three vertices of a triangle are not co-linear to the normal of the triangular face. If they are identical, normals are omitted. Normals are provided by the two-dimensional list Normals, where * The first dimension of the two-dimensional list addresses the corresponding list of vertex indices of the triangular faces; * The second dimension of the two-dimensional list provides exactly three real values to determine the direction of the normal at this vertex of the triangle. The indices in the CoordIndex point into the list of Normals. The indices of CoordIndex are applied to both points, either directly or via the PnIndex and normals. The image below shows an example of handling normals. The image below shows the use of IfcTriangulatedFaceSet without annotation. The diagram of the IfcTriangulatedFaceSet represents the indices and the ordered list into which the indices point. The index starts with 1 (indexed as 1 to N), if the greatest index in CoordIndex in N, then the IfcCartesianPointList has N lists of 3:3 coordinates. In the example below, the IfcTriangulatedFaceSet is represented by:
  CoordIndex:
  ((1,6,5), (1,2,6), (6,2,7), (7,2,3), (7,8,6), (6,8,5), (5,8,1), (1,8,4), (4,2,1), (2,4,3), (4,8,7), (7,3,4))
  
  IfcCartesianPointList3D:
  ((0.,0.,0.), (1.,0.,0.), (1.,1.,0.), (0.,1.,0.), (0.,0.,2.), (1.,0.,2.), (1.,1.,2.), (0.,1.,2.))
  
*/ class IFC4X4_EXPORT IfcTriangulatedFaceSet : public IfcTessellatedFaceSet { //DOM-IGNORE-BEGIN OD_EXP_DECLARE_MEMBERS(OdIfc4x4::IfcTriangulatedFaceSet); //DOM-IGNORE-END public: // // OdDAI early binding accessors // /** \details Gets the value of Normals attribute. This attribute represents an ordered list of three directions for normals. It is a two-dimensional list of directions provided by three parameter values. The first dimension corresponds to the vertex indices of the Coordindex. The second dimension has three values: [1] the x-direction, [2] the y-direction and [3] the z-directions. \param Normals [out] Receives the Normals attribute value. */ void getNormals(OdArray >& Normals) const; /** \details Returns the value of Normals attribute. This attribute represents an ordered list of three directions for normals. It is a two-dimensional list of directions provided by three parameter values. The first dimension corresponds to the vertex indices of the Coordindex. The second dimension has three values: [1] the x-direction, [2] the y-direction and [3] the z-directions. \returns Returns the value of Normals attribute. */ OdDAI::List& normals(); /** \details Returns the value of Closed attribute. This attribute indicates whether the IfcTriangulatedFaceSet is a closed shell. \returns Returns the value of Closed attribute. */ OdDAI::Boolean getClosed() const; /** \details Sets the value of Closed attribute. This attribute indicates whether the IfcTriangulatedFaceSet is a closed shell. \param Closed [in] Closed attribute to set. */ void setClosed(OdDAI::Boolean Closed); /** \details Gets the value of CoordIndex attribute. This attribute represents two-dimensional list for the indexed-based triangles, where: * The first dimension represents the triangles (from 1 to N). * The second dimension has three values representing the indices to three vertex points (from 1 to 3). \param CoordIndex [out] Receives the CoordIndex attribute. \remarks The coordinates of the vertices are provided by the indexed list of SELF\IfcTessellatedFaceSet.Coordinates.CoordList. */ void getCoordIndex(OdArray >& CoordIndex) const; /** \details Returns the value of CoordIndex attribute. This attribute represents two-dimensional list for the indexed-based triangles, where: * The first dimension represents the triangles (from 1 to N). * The second dimension has three values representing the indices to three vertex points (from 1 to 3). \returns Returns the value of CoordIndex attribute. \remarks The coordinates of the vertices are provided by the indexed list of SELF\IfcTessellatedFaceSet.Coordinates.CoordList. */ OdDAI::List& coordIndex(); /** \details Gets the value of PnIndex attribute. This attribute represents the list of integers defining the locations in the IfcCartesianPointList3D to obtain the point coordinates for the indices within the CoordIndex. If the PnIndex is not provided the indices point directly to the IfcCartesianPointList3D. \param PnIndex [out] Receives the PnIndex attribute. */ void getPnIndex(OdArray& PnIndex) const; /** \details Returns the value of PnIndex attribute. This attribute represents the list of integers defining the locations in the IfcCartesianPointList3D to obtain the point coordinates for the indices within the CoordIndex. If the PnIndex is not provided the indices point directly to the IfcCartesianPointList3D. \returns Returns the value of PnIndex attribute. */ OdDAI::ListOfInt& pnIndex(); public: /** \details Default constructor for the IfcTriangulatedFaceSet class. */ IfcTriangulatedFaceSet(); /** \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 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::List m_Normals; // LIST [1:?] of LIST [3:3] of IfcParameterValue [optional] OdDAI::Boolean m_Closed; // IfcBoolean [optional] OdDAI::List m_CoordIndex; // LIST [1:?] of LIST [3:3] of IfcPositiveInteger OdDAI::ListOfInt m_PnIndex; // LIST [1:?] of IfcPositiveInteger [optional] }; /** \details A data type that represents a smart pointer to a IfcTriangulatedFaceSet object. */ typedef OdSmartPtr IfcTriangulatedFaceSetPtr; } // namespace #include "TD_PackPop.h" #endif // _IFC4X4_IFCTRIANGULATEDFACESET_AUTO_IMPL_H