Log In   View a printable version of the current page.
Map Representation (FP)
Added by Janice Wix, last edited by Janice Wix on Jan 30, 2007  (view change)
Labels: 
(None)


Map Representation

Overview

This functional part deals with the definition of a representation map (equivalent of a symbol or block) and the placement of copies of that representation map at multiple placement locations. Each representation map has an origin (normally 0.,0.,0.) and a representation (defined as for general forms of representation), which has a representation identifier and representation type, identifying its use within different representation views
The use of representation maps is significant within an IFC based exchange of information. The representation map provides a single entity to which shape definition(s) can be assigned. Copies of the representation map are made at the locations required with rotation and transformation applied as necessary.
Forms of representation can be replaced by representation maps, if the type concept, i.e. the use of an IfcMappedItem for sharing the geometric representation(s) of the type is used.

Results

A representation for a type product is defined and associated to the type product as a representation map. Occurrences of copies of the representation map are placed as mapped items with placement and transformation.

Description Entity/Pset/Functional Part MAN REC OPT
Define the representation that is to be the representation map for the product type concerned. IfcRepresentationMap.MappedRepresentation::IfcRepresentation    
A representation map can be created using any form of representation allowed within the IFC model as a subtype of IfcRepresentation and therefore comprising a set of occurrences of IfcRepresentationItem.
 
Refer to specific functional parts dealing with different forms of representation, for example:
_* fp_represent_composite_curve_
_* fp_represent_faceted_brep_solid_model_
_* fp_represent_polyline_
IfcRepresentation.Items::IfcRepresentationItem    
Set the mapping origin for the representation map.
 
The mapping origin is a placement that defines the position about which the mapped representation is mapped
IfcRepresentationMap.MappingOrigin::IfcAxis2Placement    

Specify the representation map as the source for a mapped item that will define an occurrence

IfcMappedItem.MappingSource::IfcRepresentationMap    
Set the transformation of the mapped item.
 
A Cartesian transformation operator defines a geometric transformation composed of translation, rotation, mirroring and scaling.
 
Note that
IfcCartesianTransformationOperator is an abstract supertype. Achievement of transformation is through the use of subtypes as below._
IfcMappedItem.MappingTarget::IfcCartesianTransformationOperator    
For all types of Cartesian transformation operation, the following attributes may be asserted:        

Set the direction used to determine U[1], the derived X axis direction

<subtype>.Axis1::IfcDirection    

Set the direction used to determine U[2], the derived Y axis direction

<subtype>.Axis2::IfcDirection    

Set the required translation as a cartesian point.

 

The actual translation included in the transformation is from the geometric origin to the local origin.

<subtype>.LocalOrgin ? fp_represent_cartesian_point    

Specify the scaling value for the transformation

 

For non uniform transformations (see below), this value acts as the x scale factor.

<subtype>.Scale::REAL    

Derive the scale S of the transformation.

 

This is equal to scale if that exists, or 1.0 otherwise.

<subtype>. Scl::REAL    

Derive the space dimensionality of the mapped item.

 

_This is determined by the space dimensionality of the local origin

<subtype>.Dim::IfcDimensionCount    
For a 2D transformation with uniform scaling Use <subtype> = IfcCartesianTransformationOperator2D      

Derive the list of mutually orthogonal, normalised vectors defining the transformation matrix T.

 

They are derived from the explicit attributes Axis1 and Axis2 in that order using the function IfcBaseAxis

IfcCartesianTransformationOperator2D.U::IfcDirection    
For a 2D transformation with non uniform scaling
 
Attributes as below are in addition to those defined for IfcCartesianTransformationOperator2D
Use <subtype> = IfcCartesianTransformationOperator2DnonUniform      

Specify the scaling value specified for the transformation along the axis 2.

 

This is normally the y scale factor.

IfcCartesianTransformationOperator2DnonUniform.Scale2 ::REAL    

Derive the scale S(2) of the transformation along the axis 2 (normally the y axis).

 

This is equal to Scale2 if that exists, or equal to the derived Scl1 (normally the x axis scale factor) otherwise.

IfcCartesianTransformationOperator2DnonUniform.Scl2::REAL    
For a 3D transformation with uniform scaling Use <subtype> = IfcCartesianTransformationOperator3D      

Set the exact direction of U[3], the derived Z axis direction

IfcCartesianTransformationOperator3D.Axis3::IfcDirection    

Derive the list of mutually orthogonal, normalised vectors defining the transformation matrix T.

 

They are derived from the explicit attributes Axis3, Axis1 and Axis2 in that order using the function IfcBaseAxis

IfcCartesianTransformationOperator3D.U ? IfcDirection    
For a 3D transformation with non uniform scaling
 
Attributes as below are in addition to those defined for IfcCartesianTransformationOperator3D
Use <subtype> = IfcCartesianTransformationOperator3DnonUniform      

Set the scaling value specified for the transformation along the axis 2.

 

This is normally the y scale factor

IfcCartesianTransformationOperator3DnonUniform.Scale2 ::REAL    

Set the scaling value specified for the transformation along the axis 3.

 

This is normally the z scale factor

IfcCartesianTransformationOperator3DnonUniform.Scale3 ::REAL    

Derive the scale S(2) of the transformation along the axis 2 (normally the y axis).

 

This is equal to Scale2 if that exists, or equal to the derived Scl1 (normally the x axis scale factor) otherwise

IfcCartesianTransformationOperator3DnonUniform.Scl2::REAL    

Derive the scale S(3) of the transformation along the axis 3 (normally the z axis).

 

This is equal to Scale3 if that exists, or equal to the derived Scl1 (normally the x axis scale factor) otherwise

IfcCartesianTransformationOperator3DnonUniform.Scl3::REAL    

IFC Entities Required

  • IfcAxis2Placement2d
  • IfcAxis2Placement3d
  • IfcCartesianTransformationOperator
  • IfcCartesianTransformationOperator2D
  • IfcCartesianTransformationOperator2DnonUniform
  • IfcCartesianTransformationOperator3D
  • IfcCartesianTransformationOperator3DnonUniform
  • IfcDirection
  • IfcGeometricRepresentationItem
  • IfcMappedItem
  • IfcRepresentation
  • IfcRepresentationItem
  • IfcRepresentationMap
  • IfcShapeRepresentation

IFC Datatypes Required

  • IfcAxis2Placement
  • IfcDimensionCount
  • IfcLabel

IFC Functions Required

  • IfcBaseAxis

IFC Property Sets Required

  • -

IDM Functional Parts Required

  • fp_represent_cartesian_point
  • fp_set_geometric_representation_context

EXPRESS-G

EXPRESS Schema

SCHEMA FP_MAP_REPRESENTATION;

  TYPE IfcDimensionCount = INTEGER;
    WHERE
      WR1 : { 0 < SELF <= 3 };
  END_TYPE;

  TYPE IfcLabel = STRING;
  END_TYPE;

  TYPE IfcAxis2Placement = SELECT
    (IfcAxis2Placement2d,
     IfcAxis2Placement3d);
  END_TYPE;

  ENTITY IfcAxis2Placement2d;
      RefDirection : OPTIONAL IfcDirection;
    DERIVE
      p            : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);
    WHERE
      WR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);
      WR2 : SELF\IfcPlacement.Location.Dim = 2;
  END_ENTITY;

  ENTITY IfcGeometricRepresentationItem
    ABSTRACT SUPERTYPE OF (ONEOF(IfcCartesianTransformationOperator, IfcDirection))
    SUBTYPE OF(IfcRepresentationItem);
  END_ENTITY;

  ENTITY IfcRepresentationItem
    ABSTRACT SUPERTYPE OF (ONEOF(IfcGeometricRepresentationItem, IfcMappedItem));
  END_ENTITY;

  ENTITY IfcMappedItem
    SUBTYPE OF(IfcRepresentationItem);
      MappingSource : IfcRepresentationMap;
      MappingTarget : IfcCartesianTransformationOperator;
  END_ENTITY;

  ENTITY IfcRepresentationMap;
      MappingOrigin        : IfcAxis2Placement;
      MappedRepresentation : IfcRepresentation;
    INVERSE
      MapUsage             : SET OF IfcMappedItem FOR MappingSource;
  END_ENTITY;

  ENTITY IfcRepresentation;
      ContextOfItems           : fp_set_geometric_representation_context;
      RepresentationIdentifier : OPTIONAL IfcLabel;
      RepresentationType       : OPTIONAL IfcLabel;
      Items                    : SET [1:?] OF IfcRepresentationItem;
  END_ENTITY;

  ENTITY IfcShapeRepresentation
    SUBTYPE OF(IfcRepresentation);
    WHERE
      WR21 : 'IFC2X2_FINAL.IFCGEOMETRICREPRESENTATIONCONTEXT' 
             IN TYPEOF(SELF\IfcRepresentation.ContextOfItems);
      WR22 : SIZEOF(QUERY(temp <* Items | 
             ('IFC2X2_FINAL.IFCTOPOLOGICALREPRESENTATIONITEM' IN TYPEOF(temp))
             AND (NOT(SIZEOF(
             ['IFC2X2_FINAL.IFCVERTEXPOINT',
             'IFC2X2_FINAL.IFCEDGECURVE',
             'IFC2X2_FINAL.IFCFACESURFACE'] * TYPEOF(temp)) = 1))
             )) = 0;
      WR23 : EXISTS(SELF\IfcRepresentation.RepresentationType);
      WR24 : IfcShapeRepresentationTypes(SELF\IfcRepresentation.RepresentationType, SELF\IfcRepresentation.Items);
  END_ENTITY;

  ENTITY IfcCartesianTransformationOperator
    ABSTRACT SUPERTYPE OF (ONEOF(IfcCartesianTransformationOperator2D, IfcCartesianTransformationOperator3D))
    SUBTYPE OF(IfcGeometricRepresentationItem);
      Axis1       : OPTIONAL IfcDirection;
      Axis2       : OPTIONAL IfcDirection;
      LocalOrigin : fp_represent_cartesian_point;
      Scale       : OPTIONAL REAL;
    DERIVE
      Scl         : REAL := NVL(Scale, 1.0);
      Dim         : IfcDimensionCount := LocalOrigin.Dim;
    WHERE
      WR1 : Scl > 0.0;
  END_ENTITY;

  ENTITY IfcCartesianTransformationOperator2D
    SUBTYPE OF(IfcCartesianTransformationOperator);
    DERIVE
      U : LIST [2:2] OF IfcDirection := IfcBaseAxis(2,SELF\IfcCartesianTransformationOperator.Axis1,
          SELF\IfcCartesianTransformationOperator.Axis2,?);
    WHERE
      WR1 : SELF\IfcCartesianTransformationOperator.Dim = 2;
      WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR 
            (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 2);
      WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR 
            (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 2);
  END_ENTITY;

  ENTITY IfcCartesianTransformationOperator2DnonUniform
    SUBTYPE OF(IfcCartesianTransformationOperator2D);
      Scale2 : OPTIONAL REAL;
    DERIVE
      Scl2   : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl);
    WHERE
      WR1 : Scl2 > 0.0;
  END_ENTITY;

  ENTITY IfcDirection
    SUBTYPE OF(IfcGeometricRepresentationItem);
      DirectionRatios : LIST [2:3] OF REAL;
    DERIVE
      Dim             : IfcDimensionCount := HIINDEX(DirectionRatios);
  END_ENTITY;

  ENTITY IfcCartesianTransformationOperator3D
    SUBTYPE OF(IfcCartesianTransformationOperator);
      Axis3 : OPTIONAL IfcDirection;
    DERIVE
      U     : LIST [3:3] OF IfcDirection := IfcBaseAxis(3,SELF\IfcCartesianTransformationOperator.Axis1,
              SELF\IfcCartesianTransformationOperator.Axis2,Axis3);
    WHERE
      WR1 : SELF\IfcCartesianTransformationOperator.Dim = 3;
      WR2 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis1)) OR 
            (SELF\IfcCartesianTransformationOperator.Axis1.Dim = 3);
      WR3 : NOT(EXISTS(SELF\IfcCartesianTransformationOperator.Axis2)) OR 
            (SELF\IfcCartesianTransformationOperator.Axis2.Dim = 3);
      WR4 : NOT(EXISTS(Axis3)) OR (Axis3.Dim = 3);
  END_ENTITY;

  ENTITY IfcCartesianTransformationOperator3DnonUniform
    SUBTYPE OF(IfcCartesianTransformationOperator3D);
      Scale2 : OPTIONAL REAL;
      Scale3 : OPTIONAL REAL;
    DERIVE
      Scl2   : REAL := NVL(Scale2, SELF\IfcCartesianTransformationOperator.Scl);
      Scl3   : REAL := NVL(Scale3, SELF\IfcCartesianTransformationOperator.Scl);
    WHERE
      WR1 : Scl2 > 0.0;
      WR2 : Scl3 > 0.0;
  END_ENTITY;

  ENTITY IfcAxis2Placement3d;
      Axis         : OPTIONAL IfcDirection;
      RefDirection : OPTIONAL IfcDirection;
    DERIVE
      p            : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);
    WHERE
      WR1 : SELF\IfcPlacement.Location.Dim = 3;
      WR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
      WR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);
      WR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
      WR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));
  END_ENTITY;

  ENTITY fp_represent_cartesian_point;
  END_ENTITY;

  ENTITY fp_set_geometric_representation_context;
    INVERSE
      RepresentationsInContext : SET OF IfcRepresentation FOR ContextOfItems;
  END_ENTITY;

  FUNCTION IfcBaseAxis
  (Dim : INTEGER; 
       Axis1, Axis2, Axis3 : IfcDirection)
  	: LIST [2:3] OF IfcDirection;
    
    LOCAL
      U : LIST [2:3] OF IfcDirection;
      Factor : REAL;
      D1, D2 : IfcDirection;
    END_LOCAL;
    
      IF (Dim = 3) THEN 
        D1 := NVL(IfcNormalise(Axis3), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
        D2 := IfcFirstProjAxis(D1, Axis1);
        U  := [D2, IfcSecondProjAxis(D1, D2, Axis2), D1];
      ELSE
        IF EXISTS(Axis1) THEN
          D1 := IfcNormalise(Axis1);
          U  := [D1, IfcOrthogonalComplement(D1)];
          IF EXISTS(Axis2) THEN
            Factor := IfcDotProduct(Axis2, U[2]);
            IF (Factor < 0.0) THEN
              U[2].DirectionRatios[1] := -U[2].DirectionRatios[1];
              U[2].DirectionRatios[2] := -U[2].DirectionRatios[2];
            END_IF;
          END_IF;
        ELSE
          IF EXISTS(Axis2) THEN
            D1 := IfcNormalise(Axis2);
            U  := [IfcOrthogonalComplement(D1), D1];
            U[1].DirectionRatios[1] := -U[1].DirectionRatios[1];
            U[1].DirectionRatios[2] := -U[1].DirectionRatios[2];
            ELSE
              U := [IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0, 0.0]), 
                    IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0, 1.0])];
          END_IF;
        END_IF;
      END_IF;
      RETURN(U);
  END_FUNCTION;

END_SCHEMA;

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