/// <summary>
        /// Scia open API run example
        /// DO NOT PLAY WITH GUI ELEMENTS HERE.
        /// It is not done run on GUI main thread
        /// </summary>
        /// <param name="env">Data for from calculation</param>
        /// <returns></returns>
        private object SciaOpenApiWorker(SCIA.OpenAPI.Environment env)
        {
            OpenApiSimpleExampleContext APIContext = new OpenApiSimpleExampleContext()
            {
                A             = this.A,
                B             = this.B,
                C             = this.C,
                SlabThickness = this.SlabThickness,
                LoadValue     = this.LoadValue,
                ConcreteGrade = this.ConcreteGrade,
                SteelGrade    = this.SteelGrade,
                SteelProfile  = this.SteelProfile
            };

            env.RunSCIAEngineer(SCIA.OpenAPI.Environment.GuiMode.ShowWindowShow);
            SciaFileGetter fileGetter = new SciaFileGetter();
            var            esaFile    = fileGetter.PrepareBasicEmptyFile(env.AppTempPath);

            if (!File.Exists(esaFile))
            {
                throw new InvalidOperationException($"File from manifest resource is not created ! Temp: {env.AppTempPath}");
            }
            EsaProject project = env.OpenProject(esaFile);



            OpenAPISimpleExample.CreateModel(project.Model, APIContext);
            project.Model.RefreshModel_ToSCIAEngineer();
            project.RunCalculation();
            return(OpenAPISimpleExample.ReadResults(project.Model, APIContext));
        }
        static void Main(string[] args)
        {
            string MyAppPath = AppDomain.CurrentDomain.BaseDirectory;

            using (SCIA.OpenAPI.Environment env = new SCIA.OpenAPI.Environment(@"c:\Program Files (x86)\SCIA\Engineer19.0\", @".\temp", "1.0.0.0"))
            {
                env.RunSCIAEngineer(SCIA.OpenAPI.Environment.GuiMode.ShowWindowShow);

                SCIA.OpenAPI.EsaProject UpXmlProj = env.OpenProject(System.IO.Path.Combine(MyAppPath, @"..\..\..\res\template.esa"));
                env.UpdateProject(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeXML, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\xml\test.xml"), UpXmlProj.ProjectID);
                UpXmlProj.CloseProject(SaveMode.SaveChangesNo);

                SCIA.OpenAPI.EsaProject UpEsaProj = env.OpenProject(System.IO.Path.Combine(MyAppPath, @"..\..\..\res\template.esa"));
                env.UpdateProject(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeESA, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\esa\test.esa"), UpEsaProj.ProjectID);
                UpEsaProj.CloseProject(SaveMode.SaveChangesNo);

                SCIA.OpenAPI.EsaProject UpIfcProj = env.OpenProject(System.IO.Path.Combine(MyAppPath, @"..\..\..\res\template.esa"));
                env.UpdateProject(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeIFC, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\ifc\test.ifc"), UpIfcProj.ProjectID);
                UpIfcProj.CloseProject(SaveMode.SaveChangesNo);

                SCIA.OpenAPI.EsaProject UpRevitProj = env.OpenProject(System.IO.Path.Combine(MyAppPath, @"..\..\..\res\template.esa"));
                env.UpdateProject(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeRevit, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\revit\test.r2s"), UpRevitProj.ProjectID);
                UpRevitProj.CloseProject(SaveMode.SaveChangesNo);

                SCIA.OpenAPI.EsaProject UpTeklaProj = env.OpenProject(System.IO.Path.Combine(MyAppPath, @"..\..\..\res\template.esa"));
                env.UpdateProject(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeTekla, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\tekla\test.t2s"), UpTeklaProj.ProjectID);
                UpTeklaProj.CloseProject(SaveMode.SaveChangesNo);

                SCIA.OpenAPI.EsaProject UpXlsxProj = env.OpenProject(System.IO.Path.Combine(MyAppPath, @"..\..\..\res\template.esa"));
                env.UpdateProject(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeAEF, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\aef\test.xlsx"), UpXlsxProj.ProjectID);
                UpXlsxProj.CloseProject(SaveMode.SaveChangesNo);

                //==========================================================
                ApiGuid newXmlproject;
                //ApiGuid newEsaproject;
                ApiGuid newIfcproject;
                ApiGuid newRevitproject;
                ApiGuid newTeklaproject;
                ApiGuid newAefproject;

                EsaProject ImXmlpProj = env.ImportProjectFromFile(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeXML, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\xml\test.xml"), out newXmlproject);
                //ESA project cannot be "imported" into SEn...just opened //EsaProject ImpEsaProj = env.ImportProjectFromFile(System.IO.Path.Combine(MyAppPath, @"..\..\..\res\esa\test.esa"), out newEsaproject);
                EsaProject ImpIfcProj   = env.ImportProjectFromFile(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeIFC, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\ifc\test.ifc"), out newIfcproject);
                EsaProject ImpRevitProj = env.ImportProjectFromFile(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeRevit, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\revit\test.r2s"), out newRevitproject);
                EsaProject ImpTeklaProj = env.ImportProjectFromFile(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeTekla, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\tekla\test.t2s"), out newTeklaproject);
                EsaProject ImpAefProj   = env.ImportProjectFromFile(SCIA.OpenAPI.Environment.TypeOfExtProject.TypeAEF, System.IO.Path.Combine(MyAppPath, @"..\..\..\res\aef\test.xlsx"), out newAefproject);

                env.CloseAllProjects(SaveMode.SaveChangesNo);
            }
        }
        /// <summary>
        /// This method represented advance use of OpenAPI, initialization of environment is done on background thanks to Context, EmptyFile is generated on backround and used than follows creation of model, linear calculation and reading results
        /// </summary>
        private static object SCIAOpenAPIWorker(SCIA.OpenAPI.Environment env)
        {
            #region Run SCIA Engineer
            //Run SCIA Engineer application
            bool openedSE = env.RunSCIAEngineer(SCIA.OpenAPI.Environment.GuiMode.ShowWindowShow);
            if (!openedSE)
            {
                throw new InvalidOperationException($"Cannot run SCIA Engineer");
            }
            #endregion
            #region Open Project Template file
            SciaFileGetter fileGetter = new SciaFileGetter();
            var            EsaFile    = fileGetter.PrepareBasicEmptyFile(@"C:/TEMP/");//path where the template file "template.esa" is created
            if (!File.Exists(EsaFile))
            {
                throw new InvalidOperationException($"File from manifest resource is not created ! Temp: {env.AppTempPath}");
            }

            EsaProject proj = env.OpenProject(EsaFile);
            if (proj == null)
            {
                throw new InvalidOperationException($"File from manifest resource is not opened ! Temp: {env.AppTempPath}");
            }
            #endregion

            CreateModel(proj.Model);
            #region  ---------- Calculation----------
            #region Send Model to SCIA Engineer
            //Refresh model in SCIA Engineer from local ADM
            proj.Model.RefreshModel_ToSCIAEngineer();
            #endregion
            #region Calculate

            // Run calculation
            proj.RunCalculation();
            Console.WriteLine($"My model calculate");
            OpenApiE2EResults storage = new OpenApiE2EResults();
            #endregion
            #endregion
            #region  ---------- Results -------------
            //Initialize Results API
            using (ResultsAPI resultsApi = proj.Model.InitializeResultsAPI())
            {
                if (resultsApi == null)
                {
                    return(storage);
                }
                {
                    OpenApiE2EResult beamB1InnerForLc = new OpenApiE2EResult("beamB1InnerForcesLC1")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Beam,
                            EntityName  = beamName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_1D,
                            ResultType  = eResultType.eFemBeamInnerForces,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    beamB1InnerForLc.Result = resultsApi.LoadResult(beamB1InnerForLc.ResultKey);
                    storage.SetResult(beamB1InnerForLc);
                }
                {
                    OpenApiE2EResult beamB1IDeformationLc = new OpenApiE2EResult("beamB1DeformationsLC1")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Beam,
                            EntityName  = beamName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_1D,
                            ResultType  = eResultType.eFemBeamDeformation,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    beamB1IDeformationLc.Result = resultsApi.LoadResult(beamB1IDeformationLc.ResultKey);
                    storage.SetResult(beamB1IDeformationLc);
                }
                {
                    OpenApiE2EResult beamB1RelIDeformationLc = new OpenApiE2EResult("beamB1RelativeDeformationsLC1")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Beam,
                            EntityName  = beamName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_1D,
                            ResultType  = eResultType.eFemBeamRelativeDeformation,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    beamB1RelIDeformationLc.Result = resultsApi.LoadResult(beamB1RelIDeformationLc.ResultKey);
                    storage.SetResult(beamB1RelIDeformationLc);
                }
                {
                    OpenApiE2EResult beamInnerForcesCombi = new OpenApiE2EResult("beamInnerForcesCombi")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Beam,
                            EntityName  = beamName,
                            CaseType    = eDsElementType.eDsElementType_Combination,
                            CaseId      = C1Id,
                            Dimension   = eDimension.eDim_1D,
                            ResultType  = eResultType.eFemBeamInnerForces,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    beamInnerForcesCombi.Result = resultsApi.LoadResult(beamInnerForcesCombi.ResultKey);
                    storage.SetResult(beamInnerForcesCombi);
                }


                {
                    OpenApiE2EResult slabInnerForces = new OpenApiE2EResult("slabInnerForces")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Slab,
                            EntityName  = SlabName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_2D,
                            ResultType  = eResultType.eFemInnerForces,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    slabInnerForces.Result = resultsApi.LoadResult(slabInnerForces.ResultKey);
                    storage.SetResult(slabInnerForces);
                }
                {
                    OpenApiE2EResult slabDeformations = new OpenApiE2EResult("slabDeformations")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Slab,
                            EntityName  = SlabName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_2D,
                            ResultType  = eResultType.eFemDeformations,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    slabDeformations.Result = resultsApi.LoadResult(slabDeformations.ResultKey);
                    storage.SetResult(slabDeformations);
                }
                {
                    OpenApiE2EResult slabStresses = new OpenApiE2EResult("slabStresses")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Slab,
                            EntityName  = SlabName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_2D,
                            ResultType  = eResultType.eFemStress,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    slabStresses.Result = resultsApi.LoadResult(slabStresses.ResultKey);
                    storage.SetResult(slabStresses);
                }
                {
                    OpenApiE2EResult slabStrains = new OpenApiE2EResult("slabStrains")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Slab,
                            EntityName  = SlabName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_2D,
                            ResultType  = eResultType.eFemStrains,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    slabStrains.Result = resultsApi.LoadResult(slabStrains.ResultKey);
                    storage.SetResult(slabStrains);
                }
                {
                    OpenApiE2EResult slabInnerForcesExtended = new OpenApiE2EResult("slabInnerForcesExtended")
                    {
                        ResultKey = new ResultKey
                        {
                            EntityType  = eDsElementType.eDsElementType_Slab,
                            EntityName  = SlabName,
                            CaseType    = eDsElementType.eDsElementType_LoadCase,
                            CaseId      = Lc1Id,
                            Dimension   = eDimension.eDim_2D,
                            ResultType  = eResultType.eFemInnerForces_Extended,
                            CoordSystem = eCoordSystem.eCoordSys_Local
                        }
                    };
                    slabInnerForcesExtended.Result = resultsApi.LoadResult(slabInnerForcesExtended.ResultKey);
                    storage.SetResult(slabInnerForcesExtended);
                }

                //{
                //    OpenApiE2EResult reactions = new OpenApiE2EResult("ReactionsN1")
                //    {
                //        ResultKey = new ResultKey
                //        {
                //            CaseType = eDsElementType.eDsElementType_LoadCase,
                //            CaseId = Lc1Id,
                //            EntityType = eDsElementType.eDsElementType_Node,
                //            EntityName = "n1",
                //            Dimension = eDimension.eDim_reactionsPoint,
                //            ResultType = eResultType.eReactionsNodes,
                //            CoordSystem = eCoordSystem.eCoordSys_Global
                //        }
                //    };
                //    reactions.Result = resultsApi.LoadResult(reactions.ResultKey);
                //    storage.SetResult(reactions);
                //}
                //{
                //    OpenApiE2EResult reactions = new OpenApiE2EResult("ReactionsSu1")
                //    {
                //        ResultKey = new ResultKey
                //        {
                //            CaseType = eDsElementType.eDsElementType_LoadCase,
                //            CaseId = Lc1Id,
                //            EntityType = eDsElementType.eDsElementType_PointSupportPoint,
                //            EntityName = "Su1",
                //            Dimension = eDimension.eDim_reactionsPoint,
                //            ResultType = eResultType.eResultTypeReactionsSupport0D,
                //            CoordSystem = eCoordSystem.eCoordSys_Global,

                //        }
                //    };
                //    reactions.Result = resultsApi.LoadResult(reactions.ResultKey);
                //    storage.SetResult(reactions);
                //}
                //{
                //    OpenApiE2EResult ReactionslinSupBeam = new OpenApiE2EResult("ReactionslinSupBeam")
                //    {
                //        ResultKey = new ResultKey
                //        {
                //            EntityType = eDsElementType.eDsElementType_LineSupportLine,
                //            EntityName = "linSupBeam",
                //            Dimension = eDimension.eDim_reactionsLine,
                //            CoordSystem = eCoordSystem.eCoordSys_Global,
                //            CaseType = eDsElementType.eDsElementType_LoadCase,
                //            CaseId = Lc1Id,
                //            ResultType = eResultType.eResultTypeReactionsSupport1D,

                //        }
                //    };
                //    ReactionslinSupBeam.Result = resultsApi.LoadResult(ReactionslinSupBeam.ResultKey);
                //    storage.SetResult(ReactionslinSupBeam);
                //}

                return(storage);
            }
            #endregion
        }