Exemple #1
0
        private static void test12()
        {
            var g = new ElementGeometySlenderness()
            {
                b         = 30,
                h         = 40,
                izvijanje = Izvijanja.Ukljesten_Sa_Jedne,
                d1        = 4,
                L         = 350,
            };
            var f = new ForcesSlenderness()
            {
                N     = 457.5,
                M_top = 20.25,
                //M_bottom = 50,
            };
            var m = new Material()
            {
                beton    = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C25/30"),
                armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"),
            };
            var v = new VitkostEC2_V2(g, f, m);

            //v.φ_ef = 3;
            v.Calculate();
            v.KontrolaCentPritPreseka();
            v.ProracunArmature();
        }
 public IActionResult SearchForLine([FromBody] MiNi model)
 {
     if (model == null)
     {
         throw new System.ArgumentNullException(nameof(model));
     }
     try
     {
         var material = new Material()
         {
             beton    = new BetonModelEC(model.material.betonClass),
             armatura = ReinforcementType.GetArmatura().First(n => n.name == model.material.armtype),
         };
         var geometry = new ElementGeometry()
         {
             b  = model.geometry.b,
             d1 = model.geometry.d1,
             h  = model.geometry.h,
         };
         var w = new SymmetricalReinfByClassicMethod(material, geometry);
         w.Get_ω(model.mi, model.ni);
         return(Ok(new { w = w.searchingOf_ω.ω, List = w.searchingOf_ω.ListOfDotsInLineOfDiagram, textResulte = w.TextResult() }));
     }
     catch (System.Exception ex)
     {
         return(BadRequest(new { error = ex.Message }));
     }
 }
Exemple #3
0
        private static void test22()
        {
            var g = new ElementGeometySlenderness()
            {
                b         = 25,
                h         = 25,
                izvijanje = Izvijanja.Pokretan_I_Ukljeste,
                d1        = 4,
                L         = 400,
            };
            var f = new ForcesSlenderness()
            {
                N        = 85.725,
                M_top    = 0,
                M_bottom = 0,
            };
            var m = new Material()
            {
                beton    = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"),
                armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"),
            };
            var v = new VitkostEC2_V2(g, f, m);

            v.Calculate();
            v.KontrolaCentPritPreseka();
            v.ProracunArmature();
        }
 public ReinforcementModelPBAB(ReinforcementTabelModel armatura, int Number)
 {
     this.Ø        = armatura.diameter;
     this.armatura = armatura;
     this.Number   = Number;
     this.Type     = ReinforcementType.GetArmatura().First();
 }
 public ReinforcementModelPBAB(int Ø, int Number)
 {
     this.Ø      = Ø;
     armatura    = ReinforcementType.GetAramturaList().Single(n => n.diameter == Ø);
     this.Number = Number;
     this.Type   = ReinforcementType.GetArmatura().First();
 }
        public async Task CalcTSectionTest()
        {
            Section = new SectionStrainsFactory(
                new Material
            {
                beton    = new BetonModelEC("C25/30"),
                armatura = ReinforcementType.GetArmatura().Single(r => r.name == "B500B")
            }, new ElementGeometryWithReinfI
            {
                b_eff_top = 50,
                h_f_top   = 8,
                b         = 30,
                h         = 30,
                d1        = 6,
                d2        = 6,
                As_1      = 6.8,
                As_2      = 6.8
            }
                );
            Stopwatch sw = new Stopwatch();

            var Calc = new CalcForces(new ConcreteForceCalc(Section));

            Section.SetByEcEs1(-2);
            var Fc  = Calc.Calc(CalcForcesType.ConcreteForces);
            var Fs1 = Calc.Calc(CalcForcesType.ReinforcementForces1);
            var Fs2 = Calc.Calc(CalcForcesType.ReinforcementForces2);

            Assert.IsTrue(Fc.F.Round(2) == -1275 && Fc.Z.Round(2) == 0.0);
            Assert.IsTrue(Fs1.F.Round(2) == -272.0 && Fs1.Z.Round(2) == 9.0);
            Assert.IsTrue(Fs2.F.Round(2) == -272.0 && Fs2.Z.Round(2) == 9.0);
        }
 public IActionResult GetListOfAllLines([FromBody] MiNi model)
 {
     if (model == null)
     {
         throw new System.ArgumentNullException(nameof(model));
     }
     try
     {
         var material = new Material()
         {
             beton    = new BetonModelEC(model.material.betonClass),
             armatura = ReinforcementType.GetArmatura().First(n => n.name == model.material.armtype),
         };
         var geometry = new ElementGeometry()
         {
             b  = model.geometry.b,
             d1 = model.geometry.d1,
             d2 = model.geometry.d1,
             h  = model.geometry.h,
         };
         var cs = new CoeffService(material, geometry);
         return(Ok(new SymmetricalReinfByClassicMethod(material, geometry).GetAllLines(cs)));
     }
     catch (System.Exception ex)
     {
         return(BadRequest(new { error = ex.Message }));
     }
 }
Exemple #8
0
        private static void PBAB_TacnPostupak()
        {
            double Msd = 770;
            double Mu;
            double Du;
            double b_eff = 60;
            double b_w   = 30;
            double h_f   = 10;
            double d     = 51;
            double s;
            double δ = h_f / d;
            //BetonModel beton = BetonClasses.GetBetonClassList().Single(b => b.name == "C25/30");
            ReinforcementTypeModelEC arm = ReinforcementType.GetArmatura().Single(a => a.name == "B500B");
            var fcd = 2.05;

            KofZaProracunPravougaonogPresekaModelEC kof1 = new KofZaProracunPravougaonogPresekaModelEC();
            KofZaProracunPravougaonogPresekaModelEC kof2 = new KofZaProracunPravougaonogPresekaModelEC();

            bool done = false;

            s = δ;
            int i     = 0;
            var s_add = 0.1;

            do
            {
                i++;
                //kof1.SetByS_PBAB(s);
                var x   = s * d;
                var Du1 = kof1.αv * b_eff * s * d * fcd;
                var zb1 = d * (1 - kof1.ka * s);
                var Ebd = ((s - δ) / s) * kof1.εc;
                kof2.SetByEcEs1(Ebd, 10);

                var Du2 = kof2.αv * (b_eff - b_w) * (x - h_f) * fcd;
                var zb2 = d - h_f - kof2.ka * (x - h_f);

                Mu = Math.Round(Du1 * zb1 / 100 - Du2 * zb2 / 100, 2);

                if (Mu < Msd)
                {
                    s += s_add; continue;
                }
                //if (Mu > Msd) { s -= 0.09; continue; }
                if (Mu > Math.Round(Msd * 1.001, 2))
                {
                    s_add = s_add / 2; s -= s_add; continue;
                }
                if (Mu >= Msd && Mu <= Math.Round(Msd * 1.001, 2))
                {
                    done = true;
                }
            } while (!done);


            Console.WriteLine(i);
            Console.ReadKey();
            GC.Collect();
        }
Exemple #9
0
        public async Task <IActionResult> SearchForLineAsync([FromBody] MN model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            try
            {
                var material = new Material()
                {
                    beton    = new BetonModelEC(model.material.betonClass),
                    armatura = ReinforcementType
                               .GetArmatura()
                               .First(n => n.name == model.material.armtype),
                };

                var geometry = new ElementGeometryWithReinfI()
                {
                    b_eff_top = model.geometry.b_eff,
                    h_f_top   = model.geometry.h_f,
                    b         = model.geometry.b,
                    d1        = model.geometry.d1,
                    d2        = model.geometry.d2,
                    h         = model.geometry.h,
                    As_1      = model.geometry.as1,
                    As_2      = model.geometry.as2,
                };

                var s = new Solver(material, geometry);
                await s.CalcAsync();

                //s.GetWorrnings(model.m, model.n);
                var isValid = s.List.IsMNValid(model.m, model.n);

                var listMaxMin = new List <SectionStrainsModel>();
                listMaxMin.AddRange(
                    s.List
                    .OrderBy(n => Math.Abs(n.M_Rd - model.m))
                    .Take(2)
                    );
                listMaxMin.AddRange(s.List.OrderBy(n => Math.Abs(n.N_Rd - model.n))
                                    .Take(2));

                return(Ok(
                           new
                {
                    extrims = InfoDetailModel.Converts(listMaxMin.ToArray()),
                    isValid = isValid,
                    worrnings = s.Worrnings,
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest(new { error = ex.Message }));
            }
        }
Exemple #10
0
        public async Task <List <IReinforcementTypeModel> > GetReinforcementTypesAsync()
        {
            var reinforcementTypes = new List <IReinforcementTypeModel>();
            await Task.Run(() =>
            {
                reinforcementTypes = ReinforcementType.GetArmatura();
            });

            return(reinforcementTypes);
        }
Exemple #11
0
        protected override void OnInitialized()
        {
            MaterialModel = new MaterialModel();

            ListBeton    = new List <string>(betonService.GetNameList());
            ListArmatura = new List <string>(ReinforcementType.GetArmatura().Select(x => x.name));

            MaterialModel.SelectedReinf    = ListArmatura.FirstOrDefault(x => x == "B500B");
            MaterialModel.SelectedConcrete = ListBeton.FirstOrDefault(x => x == "C25/30");
        }
 public ReinforcementModelEC(int Ø, int Number, ReinforcementTypeModelEC Type = null)
 {
     this.Ø      = Ø;
     armatura    = ReinforcementType.GetAramturaList().Single(n => n.diameter == Ø);
     this.Number = Number;
     if (Type == null)
     {
         this.Type = ReinforcementType.GetArmatura().First();
     }
 }
Exemple #13
0
        public async Task <List <ReinforcementTabelModel> > GetReinforcementListsAsync()
        {
            var reinforcementList = new List <ReinforcementTabelModel>();
            await Task.Run(() =>
            {
                reinforcementList = ReinforcementType.GetAramturaList();
            });

            return(reinforcementList);
        }
 public override bool IsValid(object value)
 {
     if (value is string)
     {
         var b = value as string;
         return(ReinforcementType.GetArmatura()
                .Any(x => x.name == (string)value));;
     }
     return(false);
 }
Exemple #15
0
        private static void EC_T_Presek_PomocuFormule()
        {
            double Msd   = 6100;
            double b_eff = 175;
            double b_w   = 35;
            double h_f   = 15;
            double d     = 143;
            double s;
            double δ   = h_f / d;
            var    μSd = 0.0;
            var    bi  = b_eff;

            BetonModelEC             beton = BetonClasses.GetBetonClassListEC().Single(b => b.name == "C25/30");
            ReinforcementTypeModelEC arm   = ReinforcementType.GetArmatura().Single(a => a.name == "B500B");
            var fcd = beton.fcd / 10;

            KofZaProracunPravougaonogPresekaModelEC kof1         = new KofZaProracunPravougaonogPresekaModelEC();
            KofZaProracunPravougaonogPresekaModelEC kof2         = new KofZaProracunPravougaonogPresekaModelEC();
            KofZaProracunPravougaonogPresekaModelEC kof_zvezdica = new KofZaProracunPravougaonogPresekaModelEC();

            //kof1.
            bool done = false;

            s = δ;
            kof1.SetByξ(s);
            kof2 = kof1;
            int i = 0;

            //var s_add = 0.1;
            do
            {
                var x  = kof2.ξ * d;
                var Eb = ((x - h_f) / x) * kof2.εc;
                kof_zvezdica.SetByEcEs1(Eb, 20);
                if (kof2.εc == 0)///na pocetku ce uvek biti kof2 0;
                {
                    bi = 1 * b_eff;
                }
                else
                {
                    bi = (1 - (kof_zvezdica.αv / kof1.αv) * (1 - (h_f / (kof2.ξ * d))) * (1 - (b_w / b_eff))) * b_eff;
                }


                μSd = Msd * 100 / (bi * Math.Pow(d, 2) * fcd);
                var kof3 = KofZaProracunPravougaonogPresekaEC.Get_Kof_From_μ(μSd);
                if (Math.Round(kof2.ξ, 3) == Math.Round(kof3.ξ, 3))
                {
                    done = true;
                    continue;
                }
                kof2 = kof3;
            } while (!done);
        }
Exemple #16
0
        private static void test()
        {
            var m = new Material()
            {
                beton    = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"),
                armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"),
            };
            var s = new SymmetricalReinforsmentOfColumn(m);

            var r = s.Get_ρ(457.5, 67.83, 40, 30);
        }
Exemple #17
0
        private static void testqq()
        {
            var m = new Material()
            {
                beton    = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"),
                armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"),
            };
            var s = new Generate_ρ_LineForDiagram(m);

            var r = s.ListOfDotsInLineOfDiagram;
        }
Exemple #18
0
        public void CreckTest()
        {
            var a = new CreckingENCalc.Solver(
                new Material
            {
                beton    = new BetonModelEC("C40/50"),
                armatura = ReinforcementType.GetArmatura().Single(r => r.name == "B500B")
            },
                beam,
                new Forces {
                M3 = 43.90
            });

            Assert.IsTrue(a.CalcValid);
        }
Exemple #19
0
            public static EventType ToActionType(ReinforcementType type)
            {
                switch (type)
                {
                default:
                case ReinforcementType.CARRYALL:
                    return(EventType.DEPLOY);

                case ReinforcementType.STARPORT:
                    return(EventType.REINFORCE);

                case ReinforcementType.SPAWN:
                    return(EventType.ADDUNITS);
                }
            }
Exemple #20
0
        // Token: 0x0600017C RID: 380 RVA: 0x0000AB34 File Offset: 0x00008D34
        protected void SetGroup()
        {
            string            ownerUid         = null;
            PosReinfLayer     posReinfLayer    = PosReinfLayer.Undefined;
            ReinforcementType precastReinfType = ReinforcementType.NotDefined;
            bool flag = this.Data != null;

            if (flag)
            {
                ownerUid         = this.Data.uniqueOwner;
                posReinfLayer    = this.Data.LayerPosition;
                precastReinfType = this.Data.reinforcementType;
            }
            this.Group = new SteelGroup(this.Host, ownerUid, posReinfLayer, precastReinfType);
        }
Exemple #21
0
        private static void testSteper()
        {
            var beton = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C25/30");
            var arm   = ReinforcementType.GetArmatura().First(n => n.name == "B500B");
            //var b = new SavijanjePravougaonogPresekaEC2_V2(25,40,4,4, beton,arm,30,20,20);
            var b = new SavijanjePravougaonogPresekaEC2_V2(25, 40, 6, 6, beton, arm, 50, 30, 50);

            b.Calc();
            foreach (var item in b.Steper.Steps)
            {
                Console.WriteLine("Step number " + item.StepNumber);
                Console.WriteLine("--" + item.Description + "--");
                Console.WriteLine("  " + item.StepText);
                Console.WriteLine();
            }
            Console.ReadKey();
        }
        // Token: 0x0600021C RID: 540 RVA: 0x0000ECC4 File Offset: 0x0000CEC4
        public override void SetReinforcementType()
        {
            ReinforcementType reinforcementType = base.Data.reinforcementType;
            bool flag = reinforcementType == ReinforcementType.LintelReinf;

            if (flag)
            {
                this.SetReinforcementTypeForLintel(this.IronSetsRealistic);
            }
            else
            {
                IEqualityComparer <Tuple <double, double> > equalComparer = ItComparerFactory.getEqualComparer <Tuple <double, double> >((Tuple <double, double> t1, Tuple <double, double> t2) => t1.Item1.Eq(t2.Item1, -1.0), (Tuple <double, double> t1) => t1.Item1.GetHashCode());
                IEnumerable <Tuple <double, double> >       source        = (from element in base.Group.Elements
                                                                             select Tuple.Create <double, double>(element.MinZ, element.MaxZ)).Distinct(equalComparer);
                List <Tuple <double, double> > list = (from t in source
                                                       orderby t.Item1
                                                       select t).ToList <Tuple <double, double> >();
                int  num   = list.FindIndex((Tuple <double, double> t) => base.MinZ.Eq(t.Item1, -1.0));
                bool flag2 = num == -1;
                if (flag2)
                {
                    base.SetReinforcementTypeUnknown();
                }
                else
                {
                    bool flag3 = base.Host.productType().isWall();
                    if (flag3)
                    {
                        this.SetReinforcementTypeForWall(num);
                    }
                    else
                    {
                        bool flag4 = base.Host.productType().isFloor();
                        if (flag4)
                        {
                            this.SetReinforcementTypeForFloor(num);
                        }
                        else
                        {
                            base.SetReinforcementTypeUnknown();
                        }
                    }
                }
            }
        }
 public static void Init(TestContext tc)
 {
     Section = new SectionStrainsFactory(
         new Material
     {
         beton    = new BetonModelEC("C25/30"),
         armatura = ReinforcementType.GetArmatura().Single(r => r.name == "B500B")
     }, new ElementGeometryWithReinfT
     {
         b    = 30,
         h    = 30,
         d1   = 6,
         d2   = 6,
         As_1 = 6.8,
         As_2 = 6.8
     }
         );
 }
Exemple #24
0
        private void testqq()
        {
            var m = new Material()
            {
                beton    = TabeleEC2.BetonClasses.GetBetonClassListEC().First(n => n.name == "C30/37"),
                armatura = ReinforcementType.GetArmatura().First(n => n.name == "B500B"),
            };
            var s = new Generate_ρ_LineForDiagram(m);

            s.GetLineForDiagram();
            var r      = s.ListOfDotsInLineOfDiagram;
            var points = r.Select(n => new Point(n.Mbh, n.NbhPower2)).AsEnumerable();

            var l = new List <IEnumerable <Point> >();

            l.Add(points);
            list.ItemsSource = l;
        }
        public async Task <List <CoeffForCalcRectCrossSectionModelEC> > GetKofZaProracunPravougaonogPresekaAsync([FromBody] MaterialModel model)
        {
            var kofList  = new List <CoeffForCalcRectCrossSectionModelEC>();
            var material = new Material()
            {
                beton    = new BetonModelEC(model.betonClass),
                armatura = ReinforcementType.GetArmatura().First(n => n.name == model.armtype),
            };
            var geometry = new ElementGeometry()
            {
                b  = model.b,
                d1 = model.d1,
                d2 = model.d2,
                h  = model.h,
            };
            var cService = new CoeffService(material, geometry);
            await Task.Run(() =>
            {
                kofList = cService.GetList();
            });

            return(kofList);
        }
Exemple #26
0
        public async Task <IActionResult> GetListOfAllLines([FromBody] MN model)
        {
            if (model == null)
            {
                Logger.LogError("model not valid");
                throw new System.ArgumentNullException(nameof(model));
            }
            try
            {
                var material = new Material()
                {
                    beton    = new BetonModelEC(model.material.betonClass),
                    armatura = ReinforcementType.GetArmatura().First(n => n.name == model.material.armtype),
                };
                var geometry = new ElementGeometryWithReinfI()
                {
                    b_eff_top = model.geometry.b_eff,
                    h_f_top   = model.geometry.h_f,
                    b         = model.geometry.b,
                    d1        = model.geometry.d1,
                    d2        = model.geometry.d2,
                    h         = model.geometry.h,
                    As_1      = model.geometry.as1,
                    As_2      = model.geometry.as2,
                };
                var s = new Solver(material, geometry);
                await s.CalcAsync(0.5);

                Logger.LogInformation("API send interacion curves");
                return(Ok(s.List.Select(x => new { x = x.M_Rd, y = x.N_Rd })));
            }
            catch (System.Exception ex)
            {
                Logger.LogError("something went wrrong: " + ex.Message);
                return(BadRequest(new { error = ex.Message }));
            }
        }
        private void CreateMaterialAndGeometry(MaterialModel materalModel, GeometryModel geometryModel)
        {
            Material = new Material
            {
                armatura = ReinforcementType.GetArmatura().Find(x => x.name == materalModel.SelectedReinf),
                beton    = betonServices.GetNew(materalModel.SelectedConcrete),
            };

            Material.beton.αcc = Settings.MaterialSettings.alfa_cc;

            Geometry = new ElementGeometryWithReinfI
            {
                b            = geometryModel.b,
                h            = geometryModel.h,
                d1           = geometryModel.d1,
                d2           = geometryModel.d2,
                As_1         = geometryModel.As_1,
                As_2         = geometryModel.As_2,
                b_eff_top    = geometryModel.b_eff_top,
                h_f_top      = geometryModel.h_f_top,
                b_eff_bottom = geometryModel.b_eff_bottom,
                h_f_bottom   = geometryModel.h_f_bottom,
            };
        }
        public FInt Reinforce(ArcenSimContext Context, Planet planet, WorldSide side, FInt budget, ReinforcementType reinforcementType)
        {
            ShortRangePlanning_StrengthData_CombatSide_Stance strengthData = planet.Combat.GetSideForWorldSide(side).DataByStance[SideStance.Self];

            FInt strengthCap;
            FInt strengthPresent;

            switch (reinforcementType)
            {
            case ReinforcementType.FleetShip:
                strengthCap     = planet.GetGuardingAIFleetShipStrengthCap();
                strengthPresent = strengthData.GuardStrength - strengthData.TurretStrength - strengthData.ShieldStrength;
                break;

            case ReinforcementType.Turret:
                strengthCap     = planet.GetGuardingAITurretStrengthCap();
                strengthPresent = strengthData.TurretStrength;
                break;

            case ReinforcementType.Shield:
                strengthCap     = planet.GetGuardingAIShieldStrengthCap();
                strengthPresent = strengthData.ShieldStrength;
                break;

            default:
                return(FInt.Zero);
            }

            if (strengthPresent >= strengthCap)
            {
                return(FInt.Zero);
            }

            List <GameEntity> entitiesWeCanReinforce = new List <GameEntity>();

            planet.Combat.GetSideForWorldSide(side).Entities.DoForEntities(EntityRollupType.ReinforcementLocations, delegate(GameEntity guardian)
            {
                switch (reinforcementType)
                {
                case ReinforcementType.Shield:
                case ReinforcementType.Turret:
                    if (guardian.EntitySpecificOrders.Behavior != EntityBehaviorType.Guard_Guardian_Anchored)
                    {
                        return(DelReturn.Continue);
                    }
                    break;
                }
                entitiesWeCanReinforce.Add(guardian);
                guardian.Working_ReinforcementsOnly_ContentsStrength = guardian.GetStrengthOfContentsIfAny();
                return(DelReturn.Continue);
            });

            switch (reinforcementType)
            {
            case ReinforcementType.Turret:
            case ReinforcementType.Shield:
                GameEntity controller = planet.GetController();
                if (controller.Side.WorldSide == side)
                {
                    entitiesWeCanReinforce.Add(controller);
                }
                break;
            }

            FInt             result     = FInt.Zero;
            List <BuildMenu> buildMenus = null;

            bool atMostOnePerReinforceable = false;

            switch (reinforcementType)
            {
            case ReinforcementType.Shield:
                List <GameEntity> entitiesThatNeedMoreShieldCoverage = new List <GameEntity>();
                for (int i = 0; i < entitiesWeCanReinforce.Count; i++)
                {
                    GameEntity entity = entitiesWeCanReinforce[i];
                    if (entity.ProtectingShieldIDs.Count > 0)
                    {
                        continue;
                    }
                    entitiesThatNeedMoreShieldCoverage.Add(entity);
                }

                buildMenus                = side.AITypeData.BudgetItems[AIBudgetType.Reinforcement].ShieldMenusToBuyFrom;
                entitiesWeCanReinforce    = entitiesThatNeedMoreShieldCoverage;
                atMostOnePerReinforceable = true;
                break;

            case ReinforcementType.Turret:
                buildMenus = side.AITypeData.BudgetItems[AIBudgetType.Reinforcement].TurretMenusToBuyFrom;
                break;

            case ReinforcementType.FleetShip:
                buildMenus = side.AITypeData.BudgetItems[AIBudgetType.Reinforcement].NormalMenusToBuyFrom;
                break;
            }

            result += Inner_ReinforceWithFleetShipsOrTurrets(Context, planet, side, ref budget, reinforcementType, strengthCap, ref strengthPresent, buildMenus, entitiesWeCanReinforce, atMostOnePerReinforceable);

            return(result);
        }
Exemple #29
0
        public TransverzalneSileEc2ResultModel CalculateInit(TransverzalneSileEc2Model trans)
        {
            TransverzalneSileEc2ResultModel Result;
            var beton = new BetonModelEC(trans.betonClass, 1);
            var arm   = ReinforcementType.GetArmatura().Where(n => n.name == trans.armtype).SingleOrDefault();

            if (trans.settings != null)
            {
                beton = new BetonModelEC(trans.betonClass, trans.settings.alfa_cc, trans.settings.alfa_ct, trans.settings.y_c);
                arm   = ReinforcementType.GetArmatura(trans.settings.y_s).Where(n => n.name == trans.armtype).SingleOrDefault();
            }


            beton.ni = 0.85;

            var  armLong = new ReinforcementModelEC(trans.armLongitudinal.diametar, trans.armLongitudinal.kom);
            bool armCalc = false;

            if (trans.u_diametar != 0 && trans.m != 0 && trans.s != 0)
            {
                armCalc = true;
            }


            var g = new ElementGeometryTransversal()
            {
                b    = trans.b,
                h    = trans.h,
                d1   = trans.d1,
                d2   = trans.d1,
                As1  = new ReinforcementModelEC(trans.armLongitudinal.diametar, trans.armLongitudinal.kom),
                unit = UnitDimesionType.cm
            };
            var f = new ForcesTransversal()
            {
                Ved = trans.Ved,
                Vg  = trans.Vg,
                Vq  = trans.Vq
            };
            var m = new Material()
            {
                beton    = beton,
                armatura = arm,
            };

            using (var t = new TransversalCalcEC2(g, f, m))
            {
                if (armCalc)
                {
                    if (trans.alfa == null)
                    {
                        t.CalculateArmature(trans.m, trans.s, new ReinforcementModelEC(trans.u_diametar, 1));
                    }
                    else
                    {
                        t.CalculateArmature(trans.m, trans.s, new ReinforcementModelEC(trans.u_diametar, 1), trans.teta, (double)trans.alfa);
                    }
                }
                Result = new TransverzalneSileEc2ResultModel()
                {
                    Result       = t.ToString(),
                    s            = t.Asw_min == 0 ? trans.s : t.s,
                    ListS        = t.List_s,
                    ListM        = t.List_m,
                    m            = t.Asw_min == 0 ? trans.m : t.m,
                    teta         = t.Θ,
                    alfa         = t.alfa,
                    u_diametar   = trans.u_diametar,
                    addArm_pot   = t.As_add,
                    TransArm_pot = t.Asw,
                    minArm_pot   = t.Asw_min,
                    IskorArm     = t.IskoriscenostArmature / 100,
                    IskorBeton   = t.IskoriscenostBetona / 100,
                    Errors       = t.Errors
                };
            }
            return(Result);
        }
        private FInt Inner_ReinforceWithFleetShipsOrTurrets(ArcenSimContext Context, Planet planet, WorldSide side, ref FInt budget, ReinforcementType reinforcementType, FInt strengthCap, ref FInt strengthPresent, List <BuildMenu> buildMenus, List <GameEntity> entitiesWeCanReinforce, bool atMostOnePerReinforceable)
        {
            if (entitiesWeCanReinforce.Count <= 0)
            {
                return(FInt.Zero);
            }

            ArcenRandomDrawBag <GameEntityTypeData> bag = new ArcenRandomDrawBag <GameEntityTypeData>();

            for (int i = 0; i < buildMenus.Count; i++)
            {
                BuildMenu menu = buildMenus[i];
                for (int j = 0; j < menu.List.Count; j++)
                {
                    int timesToAdd = 0;
                    GameEntityTypeData buyableType = menu.List[j];
                    if (buyableType.Balance_MarkLevel.Ordinal > 0 && buyableType.Balance_MarkLevel != planet.MarkLevel)
                    {
                        continue;
                    }
                    if (World_AIW2.Instance.CorruptedAIDesigns.Contains(buyableType))
                    {
                        continue;
                    }
                    if (!buyableType.AICanUseThisWithoutUnlockingIt && !World_AIW2.Instance.UnlockedAIDesigns.Contains(buyableType))
                    {
                        continue;
                    }
                    timesToAdd = 1;
                    if (timesToAdd <= 0)
                    {
                        continue;
                    }
                    bag.AddItem(buyableType, timesToAdd);
                }
            }

            if (!bag.GetHasItems())
            {
                return(FInt.Zero);
            }

            entitiesWeCanReinforce.Sort(delegate(GameEntity Left, GameEntity Right)
            {
                return(Left.Working_ReinforcementsOnly_ContentsStrength.CompareTo(Right.Working_ReinforcementsOnly_ContentsStrength));
            });

            FInt result = FInt.Zero;

            while (budget > FInt.Zero && strengthPresent < strengthCap && entitiesWeCanReinforce.Count > 0)
            {
                int index = 0;
                switch (reinforcementType)
                {
                case ReinforcementType.Turret:
                case ReinforcementType.Shield:
                    index = Context.QualityRandom.Next(0, entitiesWeCanReinforce.Count);
                    break;
                }
                GameEntity         entityToReinforce = entitiesWeCanReinforce[index];
                GameEntityTypeData typeToBuy         = bag.PickRandomItemAndReplace(Context.QualityRandom);
                budget          -= typeToBuy.BalanceStats.StrengthPerSquad;
                result          += typeToBuy.BalanceStats.StrengthPerSquad;
                strengthPresent += typeToBuy.BalanceStats.StrengthPerSquad;

                switch (reinforcementType)
                {
                case ReinforcementType.Turret:
                case ReinforcementType.Shield:
                {
                    int        minDistance = (ExternalConstants.Instance.Balance_AverageGravWellRadius * FInt.FromParts(0, 050)).IntValue;
                    int        maxDistance = (ExternalConstants.Instance.Balance_AverageGravWellRadius * FInt.FromParts(0, 150)).IntValue;
                    ArcenPoint point       = planet.Combat.GetSafePlacementPoint(Context, typeToBuy, entityToReinforce.WorldLocation, minDistance, maxDistance);
                    if (point == ArcenPoint.ZeroZeroPoint)
                    {
                        continue;
                    }

                    result += typeToBuy.BalanceStats.StrengthPerSquad;

                    GameEntity newEntity = GameEntity.CreateNew(planet.Combat.GetSideForWorldSide(side), typeToBuy, point, Context);
                    newEntity.EntitySpecificOrders.Behavior = EntityBehaviorType.Stationary;
                }
                break;

                case ReinforcementType.FleetShip:
                {
                    entityToReinforce.ChangeContents(typeToBuy, 1);
                    entityToReinforce.Working_ReinforcementsOnly_ContentsStrength += typeToBuy.BalanceStats.StrengthPerSquad;

                    for (int i = 1; i < entitiesWeCanReinforce.Count; i++)
                    {
                        GameEntity otherReinforceable = entitiesWeCanReinforce[i];
                        if (entityToReinforce.Working_ReinforcementsOnly_ContentsStrength <= otherReinforceable.Working_ReinforcementsOnly_ContentsStrength)
                        {
                            break;
                        }
                        entitiesWeCanReinforce[i - 1] = otherReinforceable;
                        entitiesWeCanReinforce[i]     = entityToReinforce;
                    }
                }
                break;
                }

                if (atMostOnePerReinforceable)
                {
                    entitiesWeCanReinforce.Remove(entityToReinforce);
                }
            }

            return(result);
        }