Пример #1
0
        public void Dibujo_Autocad(double Xi, double Yi, int Num_Despiece)
        {
            string LayerCirculo = "FC_BORDES";

            double[] CentroDibujo = new double[3] {
                Xi + Centro[0], Yi - Centro[1], 0
            };
            double EscalaR     = (radio - 2 * 0.02) / radio;
            double EscalaR2    = radio * 4;
            string Nom_Seccion = "";
            string Escala      = "1:15";

            FunctionsAutoCAD.FunctionsAutoCAD.AddCircle(CentroDibujo, radio, LayerCirculo);
            FunctionsAutoCAD.FunctionsAutoCAD.B_Estribo_Circular(CentroDibujo, "FC_ESTRIBOS", EscalaR2, EscalaR2, EscalaR2, 1, 0);

            #region Dibujo de refuerzo en seccion

            var X_unicos = Refuerzos.Select(x => Math.Round(x.Coord[0], 2)).ToList().Distinct().ToList();
            var Y_unicos = Refuerzos.Select(x => Math.Round(x.Coord[1], 2)).ToList().Distinct().ToList();
            foreach (CRefuerzo refi in Refuerzos)
            {
                refi.Dibujo_Ref_Autocad(Xi, Yi, X_unicos.Max(), X_unicos.Min(), Y_unicos.Max(), Y_unicos.Min());
            }

            #endregion Dibujo de refuerzo en seccion

            #region Nombre_Seccion

            Nom_Seccion = "%%USeccion " + Num_Despiece;
            FunctionsAutoCAD.FunctionsAutoCAD.B_NombreSeccion(P_XYZ: new double[] { Xi + (B / 2), Yi - H - 0.20, 0 }, Seccion: Nom_Seccion, Escala: Escala, Layer: "FC_R-200", Xscale: 15, Yscale: 15, Zscale: 15, Rotation: 0);

            #endregion Nombre_Seccion
        }
Пример #2
0
        public void Set_Refuerzo_Seccion(int[] Refuerzos_temp, double Recubrimiento)
        {
            double Long_arco         = 0;
            double Theta             = 0;
            double Radio_interno     = 0;
            double Perimetro_interno = 0;

            double[]  Coord     = new double[2];
            int       id        = 0;
            CRefuerzo refuerzoi = null;

            Refuerzos.Clear();

            Radio_interno     = ((2 * radio * 100) - 2 * Recubrimiento - 2) / 2;
            Perimetro_interno = 2 * Math.PI * Radio_interno;
            Long_arco         = Perimetro_interno / Refuerzos_temp.Count();

            foreach (int Diametroi in Refuerzos_temp)
            {
                Coord[0]         = Radio_interno * Math.Cos((Math.PI / 2) - Theta);
                Coord[1]         = Radio_interno * Math.Sin((Math.PI / 2) - Theta);
                refuerzoi        = FunctionsProject.DeepClone(new CRefuerzo(id, "#" + Diametroi, Coord, TipodeRefuerzo.longitudinal));
                refuerzoi.Alzado = 1;
                Refuerzos.Add(refuerzoi);
                id++;
                Theta += Long_arco / Radio_interno;
            }
        }
Пример #3
0
        public void Pn_Balanceado(double recubrimiento, double DiyMax, int Angulo)
        {
            double Magnitud_Cb, Magnitud_ab;
            double Pc_b, Mc_B;
            double Pb, Mb;
            double cb, ab;
            double Centroide;
            double fsl, Msl;

            float  ecu = 0.003f;
            float  Fy = 4220;
            float  fc = Material.FC;
            float  Es = 2000000;
            float  beta = 0.85f - 0.05f * (fc - 280) / 70f;
            float  ey = Fy / Es;
            double A1, A2, AreaComp;

            Magnitud_Cb = (DiyMax + radio * 100) * ecu / (ey + ecu);
            Magnitud_ab = beta * Magnitud_Cb;

            cb = Magnitud_Cb - (radio * 100);
            ab = Magnitud_ab - (radio * 100);

            A1       = Area_Segmento((float)ab);
            A2       = Area_Segmento(-(float)radio * 100);
            AreaComp = (A1 - A2);

            Pc_b = 0.85 * fc * AreaComp;

            Centroide = Centroide_Segmento(ab, AreaComp);
            Mc_B      = Pc_b * Math.Abs(Centroide);

            List <float> temp_c = new List <float>();

            temp_c.Add((float)cb);

            foreach (CRefuerzo refuezo in Refuerzos)
            {
                refuezo.CalcularDeformacion(temp_c, ecu, Angulo, Fy, Es, (float)radio * 100, Shape);
            }

            fsl = Refuerzos.Select(x => x.Fuerzas_PorCadaCPorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[0]).First()).ToList().Sum();
            Msl = Refuerzos.Select(x => x.Momento_PorCadaCPorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[0]).First()).ToList().Sum();
            var coord  = Refuerzos.Select(x => x.Coordenadas_PorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[1]).First()).ToList();
            var prueba = Refuerzos.Select(x => x.Fuerzas_PorCadaCPorCadaAngulo.Select(x1 => x1.Item1).Select(x2 => x2[0]).First()).ToList();

            Pb = Pc_b + fsl;
            Mb = Mc_B + Msl;

            float[] Temp = new float[] { (float)Mb, (float)Pb };
            PbMb3D.Add(new Tuple <float[], int>(Temp, Angulo));
        }
Пример #4
0
        public void Actualizar_Ref(Alzado palzado, int indice, FInterfaz_Seccion fInterfaz)
        {
            if (palzado.Colum_Alzado[indice] != null)
            {
                var Refuerzo_alzado = Refuerzos.FindAll(x => x.Alzado == palzado.ID);
                foreach (var refuerzoi in Refuerzo_alzado)
                {
                    refuerzoi.Diametro = $"#{palzado.Colum_Alzado[indice].NoBarra}";
                }
            }

            if (fInterfaz != null)
            {
                fInterfaz.edicion = Tipo_Edicion.Secciones_modelo;
                fInterfaz.Get_Columna();
                fInterfaz.Load_Pisos();
                fInterfaz.Get_section(true);
                fInterfaz.Invalidate();
            }
        }
Пример #5
0
        public void DiagramaInteraccion()
        {
            float ecu  = 0.003f;
            float Fy   = 4220;
            float fc   = Material.FC;
            float Es   = 2000000;
            float beta = 0.85f - 0.05f * (fc - 280) / 70f;

            PbMb2D                  = new List <Tuple <List <float[]>, int> >();
            PbMb3D                  = new List <Tuple <float[], int> >();
            AreaComprimida          = new List <Tuple <List <float>, int> >();
            CentroideAreaComprimida = new List <Tuple <List <float[]>, int> >();

            foreach (CRefuerzo cRefuerzo in Refuerzos)
            {
                cRefuerzo.Coordenadas_PorCadaAngulo         = new List <Tuple <float[], int> >();
                cRefuerzo.Esfuerzos_PorCadaCPorCadaAngulo   = new List <Tuple <List <float>, int> >();
                cRefuerzo.Fuerzas_PorCadaCPorCadaAngulo     = new List <Tuple <List <float>, int> >();
                cRefuerzo.Momento_PorCadaCPorCadaAngulo     = new List <Tuple <List <float>, int> >();
                cRefuerzo.Deformacion_PorCadaCPorCadaAngulo = new List <Tuple <List <float>, int> >();
            }

            int DeltasVariacionC = 20;
            int Delta            = 10;

            for (int Angulo = 0; Angulo <= 360; Angulo += Delta)
            {
                List <float[]> PorCadaRotacion = new List <float[]>();
                List <float>   ms = new List <float>();

                //Rotacion de la Sección

                Refuerzos.ForEach(x => x.CalcularCoordenadasPorCadaAngulo(Angulo));

                List <float>   C_Variando               = new List <float>();
                List <float>   a_Variando               = new List <float>();
                List <float>   AreaComprimida1          = new List <float>();
                List <float[]> CentroideAreaComprimida1 = new List <float[]>();

                float Ymin = -(float)radio * 100;
                float Ymax = (float)radio * 100;
                float Magnitud_C, Magnitud_a;
                float atemp;

                for (float C = Ymin + (Ymax - Ymin) / DeltasVariacionC; C <= Ymax; C += (Ymax - Ymin) / DeltasVariacionC)
                {
                    Magnitud_C = C + (float)radio * 100;
                    Magnitud_a = beta * Magnitud_C;
                    atemp      = Magnitud_a - (float)radio * 100;

                    C_Variando.Add(C);
                    a_Variando.Add(atemp);
                }

                Refuerzos.ForEach(x => x.CalcularDeformacion(C_Variando, ecu, Angulo, Fy, Es, Ymax, Shape));

                //Calculo del area comprimida para cada variacion de c
                for (int i = 0; i < a_Variando.Count; i++)
                {
                    float   A1, A2;
                    float[] Centroide_comp;

                    A1 = Area_Segmento(a_Variando[i]);
                    A2 = Area_Segmento(-(float)Math.Round(radio, 2) * 100);

                    AreaComprimida1.Add(A1 - A2);
                    Centroide_comp = new float[] { 0, (float)Centroide_Segmento(a_Variando[i], A1 - A2) };
                    CentroideAreaComprimida1.Add(Centroide_comp);
                }

                CentroideAreaComprimida.Add(new Tuple <List <float[]>, int>(CentroideAreaComprimida1, Angulo));
                AreaComprimida.Add(new Tuple <List <float>, int>(AreaComprimida1, Angulo));
            }

            PnMn2D = new List <Tuple <List <float[]>, int> >();
            PuMu2D = new List <Tuple <List <float[]>, int> >();

            for (int i = 0; i < AreaComprimida.Count; i++)
            {
                List <float[]> PnMnAux = new List <float[]>();
                List <float[]> PuMuAux = new List <float[]>();

                for (int j = 0; j < AreaComprimida[i].Item1.Count; j++)
                {
                    float Cc = 0.85f * fc * AreaComprimida[i].Item1[j];
                    float Fs = 0; float Ms = 0;
                    float Ast = 0;

                    Ast = (float)Refuerzos.Select(x => x.As_Long).Sum();

                    foreach (CRefuerzo cRefuerzo in Refuerzos)
                    {
                        Fs += cRefuerzo.Fuerzas_PorCadaCPorCadaAngulo[i].Item1[j];
                        Ms += cRefuerzo.Momento_PorCadaCPorCadaAngulo[i].Item1[j];
                    }

                    float Pmax = 0.75f * (0.85f * fc * ((float)Area * 10000 - Ast) + Fy * Ast);
                    float Pn_  = Cc + Fs;
                    float Mn_  = Cc * (-CentroideAreaComprimida[i].Item1[j][1]) + Ms;

                    float maxY = Refuerzos.Max(x => x.Coordenadas_PorCadaAngulo[i].Item1[1]);
                    float esi  = Refuerzos.Find(x => x.Coordenadas_PorCadaAngulo[i].Item1[1] == maxY).Deformacion_PorCadaCPorCadaAngulo[i].Item1[j];

                    float et = Math.Abs(esi);
                    float fi = DeterminarFi(et);

                    float Pu = Pn_ * fi;
                    float Mu = Mn_ * fi;

                    if (Pn_ > Pmax)
                    {
                        Pn_ = Pmax;
                        Pu  = Pmax * 0.65f;
                    }

                    if (Pn_ < 0)
                    {
                        if (PnMnAux.Exists(x => x[0] == 0) == false)
                        {
                            PnMnAux.Add(new float[] { 0, (-Ast * Fy) });
                            PuMuAux.Add(new float[] { 0, (-Ast * Fy) });
                        }
                    }
                    else
                    {
                        PnMnAux.Add(new float[] { Mn_, Pn_ });
                        PuMuAux.Add(new float[] { Mu, Pu });
                    }

                    if (j == AreaComprimida[i].Item1.Count - 1)
                    {
                        PnMnAux.Add(new float[] { 0, Pmax });
                        PuMuAux.Add(new float[] { 0, 0.65f * Pmax });
                    }
                }
                PnMn2D.Add(new Tuple <List <float[]>, int>(PnMnAux, AreaComprimida[i].Item2));
                PuMu2D.Add(new Tuple <List <float[]>, int>(PuMuAux, AreaComprimida[i].Item2));
            }

            MnPn3D = new List <Tuple <List <float[]>, int> >();
            MuPu3D = new List <Tuple <List <float[]>, int> >();

            for (int i = 0; i < PnMn2D.Count; i++)
            {
                int            Angulo       = PnMn2D[i].Item2;
                List <float[]> SeriePuntos  = new List <float[]>();
                List <float[]> SeriePuntosU = new List <float[]>();

                for (int j = 0; j < PnMn2D[i].Item1.Count; j++)
                {
                    float   X1 = (float)(PnMn2D[i].Item1[j][0] * Math.Cos((Angulo * Math.PI / 180)));
                    float   Y2 = (float)(PnMn2D[i].Item1[j][0] * Math.Sin((Angulo * Math.PI / 180)));
                    float   Z2 = PnMn2D[i].Item1[j][1];
                    float[] PuntosDescompuestos = new float[] { X1, Y2, Z2 };

                    SeriePuntos.Add(PuntosDescompuestos);

                    float   X1U = (float)(PuMu2D[i].Item1[j][0] * Math.Cos((Angulo * Math.PI / 180)));
                    float   Y2U = (float)(PuMu2D[i].Item1[j][0] * Math.Sin((Angulo * Math.PI / 180)));
                    float   Z2U = PuMu2D[i].Item1[j][1];
                    float[] PuntosDescompuestosUltimos = new float[] { X1U, Y2U, Z2U };

                    SeriePuntosU.Add(PuntosDescompuestosUltimos);
                }
                MnPn3D.Add(new Tuple <List <float[]>, int>(SeriePuntos, PnMn2D[i].Item2));
                MuPu3D.Add(new Tuple <List <float[]>, int>(SeriePuntosU, PnMn2D[i].Item2));
            }
        }
Пример #6
0
        public void Refuerzo_Base(double recub)
        {
            int    Num_Barras = 0;
            int    Barra_aux  = 0;
            int    Diametro1  = 0;
            int    Diametro2  = 0;
            double As_min;
            double As_i;
            double p_error;
            int    Cont_Aux1 = 0;
            int    Cont_Aux2 = 0;
            int    X1        = 0; //Cantidad de barras para diametro1
            int    X2        = 0; //Cantida de barras para diametro2

            Refuerzos.Clear();
            Num_Barras = 4;
            As_min     = 0.01 * Area;
            As_i       = As_min / Num_Barras;

            while (As_i > FunctionsProject.Find_As(6))
            {
                Num_Barras += 2;
                As_i        = (As_min / Num_Barras);
            }

            //Asociar As_i a un diametro de barra
            Barra_aux = FunctionsProject.Find_Barra(As_i);

            //Encontrar Combinatoria optima para el acero base mas aproximado al 1%
            p_error = Math.Abs(((FunctionsProject.Find_As(Barra_aux) * Num_Barras) - As_min) / As_min) * 100;

            if (p_error >= 1.05)

            {
                if (FunctionsProject.Find_As(Barra_aux) * Num_Barras > As_min)
                {
                    Diametro1 = Barra_aux;
                    if (Diametro1 == 4)
                    {
                        Diametro2 = 0;
                    }
                    else
                    {
                        Diametro2 = Barra_aux - 1;
                    }
                }
                else
                {
                    Diametro1 = Barra_aux;
                    Diametro2 = Barra_aux + 1;
                }

                if (Diametro2 > 0)
                {
                    X2 = Convert.ToInt32((As_min - FunctionsProject.Find_As(Diametro1) * Num_Barras) / (FunctionsProject.Find_As(Diametro2) - FunctionsProject.Find_As(Diametro1)));
                }
                else
                {
                    X2 = 0;
                }

                if (X2 % 2 != 0)
                {
                    X2 = FunctionsProject.Redondear_Entero(X2, 4, true);
                }

                X1 = Num_Barras - X2;
            }
            else
            {
                Diametro1 = Barra_aux;
                Diametro2 = 0;
                X1        = Num_Barras;
                X2        = 0;
            }

            int[] Aux_Refuerzos  = new int[Num_Barras];
            int   Aux_num_barras = Num_Barras;
            int   i = 0;

            Cont_Aux1 = X1;
            Cont_Aux2 = X2;

            while (Aux_num_barras > 0)
            {
                if (X2 > 0)
                {
                    if (Cont_Aux1 > 0)
                    {
                        if (Cont_Aux1 > 0)
                        {
                            Aux_Refuerzos[i] = Diametro1;
                            Cont_Aux1       -= 1;
                            Aux_num_barras  -= 1;
                        }

                        if (Cont_Aux1 > 0)
                        {
                            Aux_Refuerzos[i + (Num_Barras / 2) - 1] = Diametro1;
                            Cont_Aux1      -= 1;
                            Aux_num_barras -= 1;
                        }
                    }
                    else
                    {
                        if (Aux_Refuerzos[i] == 0)
                        {
                            Aux_Refuerzos[i] = Diametro2;
                            Cont_Aux2       -= 1;
                            Aux_num_barras  -= 1;
                        }
                    }
                }
                else
                {
                    Aux_Refuerzos[i] = Diametro1;
                    Cont_Aux1       -= 1;
                    Aux_num_barras  -= 1;
                }
                i++;
            }
            Set_Refuerzo_Seccion(Aux_Refuerzos, recub);
        }