protected override void Process(IFCAnyHandle ifcSurface)
        {
            base.Process(ifcSurface);

            bool foundUDegree = false;

            UDegree = IFCImportHandleUtil.GetRequiredIntegerAttribute(ifcSurface, "UDegree", out foundUDegree);
            if (!foundUDegree)
            {
                Importer.TheLog.LogError(ifcSurface.StepId, "Cannot find the UDegree attribute of this surface", true);
            }

            bool foundVDegree = false;

            VDegree = IFCImportHandleUtil.GetRequiredIntegerAttribute(ifcSurface, "VDegree", out foundVDegree);
            if (!foundVDegree)
            {
                Importer.TheLog.LogError(ifcSurface.StepId, "Cannot find the VDegree attribute of this surface", true);
            }

            IList <IList <IFCAnyHandle> > controlPoints = IFCImportHandleUtil.GetListOfListOfInstanceAttribute(ifcSurface, "ControlPointsList");

            if (controlPoints == null || controlPoints.Count == 0)
            {
                Importer.TheLog.LogError(ifcSurface.StepId, "This surface has invalid number of control points", true);
            }

            List <IFCAnyHandle> controlPointsTmp = new List <IFCAnyHandle>();

            foreach (List <IFCAnyHandle> list in controlPoints)
            {
                controlPointsTmp.AddRange(list);
            }

            ControlPointsList = IFCPoint.ProcessScaledLengthIFCCartesianPoints(controlPointsTmp);

            bool foundUClosed = false;

            UClosed = IFCImportHandleUtil.GetOptionalLogicalAttribute(ifcSurface, "UClosed", out foundUClosed);
            if (!foundUClosed)
            {
                Importer.TheLog.LogWarning(ifcSurface.StepId, "Cannot find the UClosed attribute of this surface, setting to Unknown", true);
                UClosed = IFCLogical.Unknown;
            }

            bool foundVClosed = false;

            VClosed = IFCImportHandleUtil.GetOptionalLogicalAttribute(ifcSurface, "VClosed", out foundVClosed);
            if (!foundVClosed)
            {
                Importer.TheLog.LogWarning(ifcSurface.StepId, "Cannot find the VClosed attribute of this surface, setting to Unknown", true);
                VClosed = IFCLogical.Unknown;
            }
        }