/// <summary>
        /// Compares two objects for geomtric equality
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b">object to compare with</param>
        /// <returns></returns>
        public static bool GeometricEquals(this IfcCartesianTransformationOperator2D a, IfcCartesianTransformationOperator2D b)
        {
            bool originEqual = a.LocalOrigin.GeometricEquals(b.LocalOrigin);
            bool axis1Equal = (a.Axis1 != null && b.Axis1 != null && a.Axis1.GeometricEquals(b.Axis1)) || (a.Axis1 == null && b.Axis1 == null);
            bool axis2Equal = (a.Axis2 != null && b.Axis2 != null && a.Axis2.GeometricEquals(b.Axis2)) || (a.Axis2 == null && b.Axis2 == null);
            bool scaleEqual =  a.Scale.Value == b.Scale.Value;
            return originEqual && axis1Equal && axis2Equal && scaleEqual;

        }
 public override void IfcParse(int propIndex, IPropertyValue value)
 {
     switch (propIndex)
     {
         case 0:
             _definition = (IfcDefinedSymbolSelect) value.EntityVal;
             break;
         case 1:
             _target = (IfcCartesianTransformationOperator2D) value.EntityVal;
             break;
         default:
             this.HandleUnexpectedAttribute(propIndex, value); break;
     }
 }
 public virtual void IfcParse(int propIndex, IPropertyValue value)
 {
     switch (propIndex)
     {
         case 0:
             _repeatS = value.BooleanVal;
             break;
         case 1:
             _repeatT = value.BooleanVal;
             break;
         case 2:
             _textureType =
                 (IfcSurfaceTextureEnum) Enum.Parse(typeof (IfcSurfaceTextureEnum), value.EnumVal, true);
             break;
         case 3:
             _textureTransform = (IfcCartesianTransformationOperator2D) value.EntityVal;
             break;
         default:
             this.HandleUnexpectedAttribute(propIndex, value); break;
     }
 }
 public override void IfcParse(int propIndex, IPropertyValue value)
 {
     switch (propIndex)
     {
         case 0:
         case 1:
             base.IfcParse(propIndex, value);
             break;
         case 2:
             _parentProfile = (IfcProfileDef) value.EntityVal;
             break;
         case 3:
             _operator = (IfcCartesianTransformationOperator2D) value.EntityVal;
             break;
         case 4:
             _label = value.StringVal;
             break;
         default:
             this.HandleUnexpectedAttribute(propIndex, value); break;
     }
 }