/// <summary>
        /// Creates extruded solid from extrusion data.
        /// </summary>
        /// <param name="exporterIFC">The ExporterIFC object.</param>
        /// <param name="categoryId">The category id.</param>
        /// <param name="extrusionData">The extrusion data.</param>
        /// <returns>The IfcExtrudedAreaSolid handle.</returns>
        public static IFCAnyHandle CreateExtrudedSolidFromExtrusionData(ExporterIFC exporterIFC, ElementId categoryId,
           IFCExtrusionData extrusionData)
        {
            if (!extrusionData.IsValid())
                return IFCAnyHandle.Create();

            Plane plane = GeometryUtil.CreateDefaultPlane();

            IList<CurveLoop> extrusionLoops = extrusionData.GetLoops();
            if (extrusionLoops != null)
            {
                XYZ extrusionDir = extrusionData.ExtrusionDirection;
                double extrusionSize = extrusionData.ScaledExtrusionLength;

                if (ExporterIFCUtils.CorrectCurveLoopOrientation(extrusionLoops, plane, extrusionDir))
                {
                    IFCFile file = exporterIFC.GetFile();
                    IFCAnyHandle extrudedSolid = file.CreateExtrudedSolidFromCurveLoop(exporterIFC, categoryId,
                       extrusionLoops, plane, extrusionDir, extrusionSize);
                    if (!extrudedSolid.HasValue)
                        return IFCAnyHandle.Create();

                    return extrudedSolid;
                }
            }

            return IFCAnyHandle.Create();
        }
        /// <summary>
        /// Creates extruded solid from extrusion data.
        /// </summary>
        /// <param name="exporterIFC">The ExporterIFC object.</param>
        /// <param name="extrusionData">The extrusion data.</param>
        /// <returns>The IfcExtrudedAreaSolid handle.</returns>
        public static IFCAnyHandle CreateExtrudedSolidFromExtrusionData(ExporterIFC exporterIFC, Element element, IFCExtrusionData extrusionData)
        {
            if (!extrusionData.IsValid())
                return null;

            IList<CurveLoop> extrusionLoops = extrusionData.GetLoops();
            if (extrusionLoops != null)
            {
                XYZ extrusionDir = extrusionData.ExtrusionDirection;
                double extrusionSize = extrusionData.ScaledExtrusionLength;

                Plane plane = null;
                if (CorrectCurveLoopOrientation(extrusionLoops, extrusionDir, out plane))
                {
                    string profileName = null;
                    if (element != null)
                    {
                        ElementType type = element.Document.GetElement(element.GetTypeId()) as ElementType;
                        if (type != null)
                            profileName = type.Name;
                    }
                    IFCAnyHandle extrudedSolid = CreateExtrudedSolidFromCurveLoop(exporterIFC, profileName, extrusionLoops,
                        plane, extrusionDir, extrusionSize);
                    return extrudedSolid;
                }
            }

            return null;
        }