internal List <string> IFCExportpredefined(Document doc)
        {
            //import

            List <string> ifcs = new List <string>();
            IFCExportConfigurationsMap configurationsMap = new IFCExportConfigurationsMap();

            configurationsMap.AddBuiltInConfigurations();
            configurationsMap.Add(IFCExportConfiguration.GetInSession());
            configurationsMap.AddSavedConfigurations();
            configurationsMap = AddSavedConfigurations(configurationsMap, doc);
            //configurationsMap.Add(mauro);
            //IFCExport mainWindow = new IFCExport(doc, configurationsMap, configurationsMap.Values.ToList()[5].Name);
            //IFCExporterUIWindow iFCExporterUIWindow = new IFCExporterUIWindow(configurationsMap, configurationsMap.Values.ToList()[0].Name);
            //mainWindow.ShowDialog();



            int n = configurationsMap.Values.Count();

            for (int j = 0; j < configurationsMap.Values.Count(); j++)
            {
                List <IFCExportConfiguration> val = configurationsMap.Values.ToList();
                ifcs.Add(val[j].Name);
            }
            return(ifcs);
        }
        private bool ExportIFC(Document doc, string folder, string name, ElementId viewid, string settings)
        {
            //Create an instance of IFCExportOptions
            IFCExportOptions IFCOptions = new IFCExportOptions();

            IFCExportConfigurationsMap configurationsMap = new IFCExportConfigurationsMap();

            configurationsMap.AddBuiltInConfigurations();
            configurationsMap.Add(IFCExportConfiguration.GetInSession());
            configurationsMap.AddSavedConfigurations();
            int n = configurationsMap.Values.Count();

            AddSavedConfigurations(configurationsMap, doc);


            for (int j = 0; j < configurationsMap.Values.Count(); j++)
            {
                List <IFCExportConfiguration> val = configurationsMap.Values.ToList();
                if (val[j].Name == settings)
                {
                    val[j].VisibleElementsOfCurrentView = true;
                    try
                    {
                        val[j].UpdateOptions(IFCOptions, viewid);
                    }
                    catch
                    {
                    }
                    val[j].VisibleElementsOfCurrentView = true;
                }
            }
            try
            {
                Transaction k = new Transaction(doc, "export ifc");
                k.Start();
                doc.Export(folder, name, IFCOptions);
                k.Commit();
                return(true);
            }
            catch (Exception e)
            {
                string error = e.Message;
                return(false);
            }
        }
        //public void PrintPDF(Document doc)
        //{
        //    PrintManager pm = doc.PrintManager;
        //    ViewSet viewSet = new ViewSet();

        //}
        public IFCExportConfigurationsMap AddSavedConfigurations(IFCExportConfigurationsMap conf, Document doc)
        {
            Guid   m_schemaId    = new Guid("A1E672E5-AC88-4933-A019-F9068402CFA7");
            Schema m_schema      = Schema.Lookup(m_schemaId);
            Guid   m_mapSchemaId = new Guid("DCB88B13-594F-44F6-8F5D-AE9477305AC3");
            Schema m_mapSchema   = Schema.Lookup(m_mapSchemaId);

            try
            {
                if (m_mapSchema != null)
                {
                    foreach (DataStorage storedSetup in GetSavedConfigurations(doc, m_mapSchema))
                    {
                        Entity configEntity = storedSetup.GetEntity(m_mapSchema);
                        IDictionary <string, string> configMap     = configEntity.Get <IDictionary <string, string> >(s_configMapField);
                        IFCExportConfiguration       configuration = IFCExportConfiguration.CreateDefaultConfiguration();
                        if (configMap.ContainsKey(s_setupName))
                        {
                            configuration.Name = configMap[s_setupName];
                        }
                        if (configMap.ContainsKey(s_setupVersion))
                        {
                            configuration.IFCVersion = (IFCVersion)Enum.Parse(typeof(IFCVersion), configMap[s_setupVersion]);
                        }
                        if (configMap.ContainsKey(s_setupFileFormat))
                        {
                            configuration.IFCFileType = (IFCFileFormat)Enum.Parse(typeof(IFCFileFormat), configMap[s_setupFileFormat]);
                        }
                        if (configMap.ContainsKey(s_setupSpaceBoundaries))
                        {
                            configuration.SpaceBoundaries = int.Parse(configMap[s_setupSpaceBoundaries]);
                        }
                        if (configMap.ContainsKey(s_setupActivePhase))
                        {
                            configuration.ActivePhaseId = new ElementId(int.Parse(configMap[s_setupActivePhase]));
                        }
                        if (configMap.ContainsKey(s_setupQTO))
                        {
                            configuration.ExportBaseQuantities = bool.Parse(configMap[s_setupQTO]);
                        }
                        if (configMap.ContainsKey(s_setupCurrentView))
                        {
                            configuration.VisibleElementsOfCurrentView = bool.Parse(configMap[s_setupCurrentView]);
                        }
                        if (configMap.ContainsKey(s_splitWallsAndColumns))
                        {
                            configuration.SplitWallsAndColumns = bool.Parse(configMap[s_splitWallsAndColumns]);
                        }
                        if (configMap.ContainsKey(s_setupExport2D))
                        {
                            configuration.Export2DElements = bool.Parse(configMap[s_setupExport2D]);
                        }
                        if (configMap.ContainsKey(s_setupExportRevitProps))
                        {
                            configuration.ExportInternalRevitPropertySets = bool.Parse(configMap[s_setupExportRevitProps]);
                        }
                        if (configMap.ContainsKey(s_setupExportIFCCommonProperty))
                        {
                            configuration.ExportIFCCommonPropertySets = bool.Parse(configMap[s_setupExportIFCCommonProperty]);
                        }
                        if (configMap.ContainsKey(s_setupUse2DForRoomVolume))
                        {
                            configuration.Use2DRoomBoundaryForVolume = bool.Parse(configMap[s_setupUse2DForRoomVolume]);
                        }
                        if (configMap.ContainsKey(s_setupUseFamilyAndTypeName))
                        {
                            configuration.UseFamilyAndTypeNameForReference = bool.Parse(configMap[s_setupUseFamilyAndTypeName]);
                        }
                        if (configMap.ContainsKey(s_setupExportPartsAsBuildingElements))
                        {
                            configuration.ExportPartsAsBuildingElements = bool.Parse(configMap[s_setupExportPartsAsBuildingElements]);
                        }
                        if (configMap.ContainsKey(s_useActiveViewGeometry))
                        {
                            configuration.UseActiveViewGeometry = bool.Parse(configMap[s_useActiveViewGeometry]);
                        }
                        if (configMap.ContainsKey(s_setupExportSpecificSchedules))
                        {
                            configuration.ExportSpecificSchedules = bool.Parse(configMap[s_setupExportSpecificSchedules]);
                        }
                        if (configMap.ContainsKey(s_setupExportBoundingBox))
                        {
                            configuration.ExportBoundingBox = bool.Parse(configMap[s_setupExportBoundingBox]);
                        }
                        if (configMap.ContainsKey(s_setupExportSolidModelRep))
                        {
                            configuration.ExportSolidModelRep = bool.Parse(configMap[s_setupExportSolidModelRep]);
                        }
                        if (configMap.ContainsKey(s_setupExportSchedulesAsPsets))
                        {
                            configuration.ExportSchedulesAsPsets = bool.Parse(configMap[s_setupExportSchedulesAsPsets]);
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedPsets))
                        {
                            configuration.ExportUserDefinedPsets = bool.Parse(configMap[s_setupExportUserDefinedPsets]);
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedPsetsFileName))
                        {
                            configuration.ExportUserDefinedPsetsFileName = configMap[s_setupExportUserDefinedPsetsFileName];
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedParameterMapping))
                        {
                            configuration.ExportUserDefinedParameterMapping = bool.Parse(configMap[s_setupExportUserDefinedParameterMapping]);
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedParameterMappingFileName))
                        {
                            configuration.ExportUserDefinedParameterMappingFileName = configMap[s_setupExportUserDefinedParameterMappingFileName];
                        }
                        if (configMap.ContainsKey(s_setupExportLinkedFiles))
                        {
                            configuration.ExportLinkedFiles = bool.Parse(configMap[s_setupExportLinkedFiles]);
                        }
                        if (configMap.ContainsKey(s_setupIncludeSiteElevation))
                        {
                            configuration.IncludeSiteElevation = bool.Parse(configMap[s_setupIncludeSiteElevation]);
                        }
                        if (configMap.ContainsKey(s_setupStoreIFCGUID))
                        {
                            configuration.StoreIFCGUID = bool.Parse(configMap[s_setupStoreIFCGUID]);
                        }
                        if (configMap.ContainsKey(s_setupExportRoomsInView))
                        {
                            configuration.ExportRoomsInView = bool.Parse(configMap[s_setupExportRoomsInView]);
                        }
                        if (configMap.ContainsKey(s_includeSteelElements))
                        {
                            configuration.IncludeSteelElements = bool.Parse(configMap[s_includeSteelElements]);
                        }
                        //if (configMap.ContainsKey(s_useTypeNameOnlyForIfcType))
                        //    configuration.UseTypeNameOnlyForIfcType = bool.Parse(configMap[s_useTypeNameOnlyForIfcType]);
                        //if (configMap.ContainsKey(s_useVisibleRevitNameAsEntityName))
                        //    configuration.UseVisibleRevitNameAsEntityName = bool.Parse(configMap[s_useVisibleRevitNameAsEntityName]);


                        conf.Add(configuration);
                    }
                    return(conf); // if finds the config in map schema, return and skip finding the old schema.
                }
                // find the config in old schema.
                if (m_schema != null)
                {
                    foreach (DataStorage storedSetup in GetSavedConfigurations(doc, m_schema))
                    {
                        Entity configEntity = storedSetup.GetEntity(m_schema);
                        IFCExportConfiguration configuration = IFCExportConfiguration.CreateDefaultConfiguration();
                        configuration.Name                            = configEntity.Get <String>(s_setupName);
                        configuration.IFCVersion                      = (IFCVersion)configEntity.Get <int>(s_setupVersion);
                        configuration.IFCFileType                     = (IFCFileFormat)configEntity.Get <int>(s_setupFileFormat);
                        configuration.SpaceBoundaries                 = configEntity.Get <int>(s_setupSpaceBoundaries);
                        configuration.ExportBaseQuantities            = configEntity.Get <bool>(s_setupQTO);
                        configuration.SplitWallsAndColumns            = configEntity.Get <bool>(s_splitWallsAndColumns);
                        configuration.Export2DElements                = configEntity.Get <bool>(s_setupExport2D);
                        configuration.ExportInternalRevitPropertySets = configEntity.Get <bool>(s_setupExportRevitProps);
                        Field fieldIFCCommonPropertySets = m_schema.GetField(s_setupExportIFCCommonProperty);
                        if (fieldIFCCommonPropertySets != null)
                        {
                            configuration.ExportIFCCommonPropertySets = configEntity.Get <bool>(s_setupExportIFCCommonProperty);
                        }
                        configuration.Use2DRoomBoundaryForVolume       = configEntity.Get <bool>(s_setupUse2DForRoomVolume);
                        configuration.UseFamilyAndTypeNameForReference = configEntity.Get <bool>(s_setupUseFamilyAndTypeName);
                        Field fieldPartsAsBuildingElements = m_schema.GetField(s_setupExportPartsAsBuildingElements);
                        if (fieldPartsAsBuildingElements != null)
                        {
                            configuration.ExportPartsAsBuildingElements = configEntity.Get <bool>(s_setupExportPartsAsBuildingElements);
                        }
                        Field fieldExportBoundingBox = m_schema.GetField(s_setupExportBoundingBox);
                        if (fieldExportBoundingBox != null)
                        {
                            configuration.ExportBoundingBox = configEntity.Get <bool>(s_setupExportBoundingBox);
                        }
                        Field fieldExportSolidModelRep = m_schema.GetField(s_setupExportSolidModelRep);
                        if (fieldExportSolidModelRep != null)
                        {
                            configuration.ExportSolidModelRep = configEntity.Get <bool>(s_setupExportSolidModelRep);
                        }
                        Field fieldExportSchedulesAsPsets = m_schema.GetField(s_setupExportSchedulesAsPsets);
                        if (fieldExportSchedulesAsPsets != null)
                        {
                            configuration.ExportSchedulesAsPsets = configEntity.Get <bool>(s_setupExportSchedulesAsPsets);
                        }
                        Field fieldExportUserDefinedPsets = m_schema.GetField(s_setupExportUserDefinedPsets);
                        if (fieldExportUserDefinedPsets != null)
                        {
                            configuration.ExportUserDefinedPsets = configEntity.Get <bool>(s_setupExportUserDefinedPsets);
                        }
                        Field fieldExportUserDefinedPsetsFileName = m_schema.GetField(s_setupExportUserDefinedPsetsFileName);
                        if (fieldExportUserDefinedPsetsFileName != null)
                        {
                            configuration.ExportUserDefinedPsetsFileName = configEntity.Get <string>(s_setupExportUserDefinedPsetsFileName);
                        }

                        Field fieldExportUserDefinedParameterMapingTable = m_schema.GetField(s_setupExportUserDefinedParameterMapping);
                        if (fieldExportUserDefinedParameterMapingTable != null)
                        {
                            configuration.ExportUserDefinedParameterMapping = configEntity.Get <bool>(s_setupExportUserDefinedParameterMapping);
                        }

                        Field fieldExportUserDefinedParameterMappingFileName = m_schema.GetField(s_setupExportUserDefinedParameterMappingFileName);
                        if (fieldExportUserDefinedParameterMappingFileName != null)
                        {
                            configuration.ExportUserDefinedParameterMappingFileName = configEntity.Get <string>(s_setupExportUserDefinedParameterMappingFileName);
                        }

                        Field fieldExportLinkedFiles = m_schema.GetField(s_setupExportLinkedFiles);
                        if (fieldExportLinkedFiles != null)
                        {
                            configuration.ExportLinkedFiles = configEntity.Get <bool>(s_setupExportLinkedFiles);
                        }
                        Field fieldIncludeSiteElevation = m_schema.GetField(s_setupIncludeSiteElevation);
                        if (fieldIncludeSiteElevation != null)
                        {
                            configuration.IncludeSiteElevation = configEntity.Get <bool>(s_setupIncludeSiteElevation);
                        }
                        Field fieldStoreIFCGUID = m_schema.GetField(s_setupStoreIFCGUID);
                        if (fieldStoreIFCGUID != null)
                        {
                            configuration.StoreIFCGUID = configEntity.Get <bool>(s_setupStoreIFCGUID);
                        }
                        Field fieldActivePhase = m_schema.GetField(s_setupActivePhase);
                        if (fieldActivePhase != null)
                        {
                            configuration.ActivePhaseId = new ElementId(int.Parse(configEntity.Get <string>(s_setupActivePhase)));
                        }
                        Field fieldExportRoomsInView = m_schema.GetField(s_setupExportRoomsInView);
                        if (fieldExportRoomsInView != null)
                        {
                            configuration.ExportRoomsInView = configEntity.Get <bool>(s_setupExportRoomsInView);
                        }
                        Field fieldIncludeSteelElements = m_schema.GetField(s_includeSteelElements);
                        if (fieldIncludeSteelElements != null)
                        {
                            configuration.IncludeSteelElements = configEntity.Get <bool>(s_includeSteelElements);
                        }
                        //Field fieldUseTypeNameOnlyForIfcType = m_schema.GetField(s_useTypeNameOnlyForIfcType);
                        //if (fieldUseTypeNameOnlyForIfcType != null)
                        //    configuration.UseTypeNameOnlyForIfcType = configEntity.Get<bool>(s_useTypeNameOnlyForIfcType);
                        //Field fieldUseVisibleRevitNameAsEntityName = m_schema.GetField(s_useVisibleRevitNameAsEntityName);
                        //if (fieldUseVisibleRevitNameAsEntityName != null)
                        //    configuration.UseVisibleRevitNameAsEntityName = configEntity.Get<bool>(s_useVisibleRevitNameAsEntityName);

                        conf.Add(configuration);
                    }
                }
                return(conf);
            }
            catch (Exception e)
            {
                string error = e.Message;
                return(conf);// to avoid fail to show the dialog if any exception throws in reading schema.
            }
        }