示例#1
0
 public override PileBase CreateNewPile(IPileProperty pileType, string pilecode, long pileId)
 {
     if (!(pileType is SquarePileGeometry) && !(pileType is SquareWithRoundHolePileGeometry) && !(pileType is PolygonPileGeometry))
     {
         throw new ArgumentOutOfRangeException("SoildPile must be one of these pile cross section (square,square with round hole, polygon)");
     }
     HCHXCodeQueryErrorCode status = pileQuery.QueryByRay(ref columnLayerInfoArray, pileType.PileTopPoint.Scale(1e4), pileType.PileBottomPoint.Scale(1e4));
     if (columnLayerInfoArray.m_layers.Count == 0)
         status = HCHXCodeQueryErrorCode.NoIntersection;
     if (status != HCHXCodeQueryErrorCode.Success)
         throw new ArgumentException("创建" + pilecode + "出错:" + status.ToString());
     var resultlayer = columnLayerInfoArray.GetSortedColumnLayerList();
     var tempLayerBase = new ObservableCollection<SoilLayerInfoBase>();
     double temppileLength;
     string soilName, soilNum;
     Regex regex = new Regex(@"\[.*\]");
     for (int i = 0; i < resultlayer.Count; i++)
     {
         if (i == resultlayer.Count - 1)
             temppileLength = resultlayer[i].TopPosition.Distance(pileType.PileBottomPoint.Scale(1e4));
         else
             temppileLength = resultlayer[i].TopPosition.Distance(resultlayer[i + 1].TopPosition);
         //temppileLength = Math.Round(temppileLength*1e-4,2);
         Match mc = regex.Match(resultlayer[i].IntersectLayerInfo.UserCode);
         soilName = soilNum = resultlayer[i].IntersectLayerInfo.UserCode;
         if (mc.Success)
         {
             soilName = mc.Value.Trim(new char[] { '[', ']' });
             soilNum = soilNum.Replace(mc.Value, string.Empty);
         }
         tempLayerBase.Add(new SoilLayerInfoBase() { SoilLayerName = soilName, SoilLayerNum = soilNum, PileInSoilLayerLength = temppileLength*1e-4, PileInSoilLayerTopZ = resultlayer[i].TopPosition.Z*1e-4, Qfi = resultlayer[i].IntersectLayerInfo.Qfi, Xii = resultlayer[i].IntersectLayerInfo.Xii });
     }
     return new SolidPile() { PileCode = pilecode, PileId = pileId, PilePropertyInfo = pileType, SolidPileSoilLayerInfoProp = tempLayerBase, GammaR = m_gammar, Qr = resultlayer.Last().IntersectLayerInfo.Qri };
 }
示例#2
0
        public override PileBase CreateNewPile(IPileProperty pileType, string pilecode, long pileId)
        {
            HCHXCodeQueryErrorCode status = pileQuery.QueryByRay(ref columnLayerInfoArray, pileType.PileTopPoint.Scale(1e4), pileType.PileBottomPoint.Scale(1e4));

            if (status != HCHXCodeQueryErrorCode.Success)
            {
                throw new ArgumentException("创建" + pilecode + "出错" + status.ToString());
            }
            var    resultlayer   = columnLayerInfoArray.GetSortedColumnLayerList();
            var    tempLayerBase = new ObservableCollection <SocketedPileSoilInfo>();
            double temppileLength;
            var    random = new Random();

            for (int i = 0; i < resultlayer.Count; i++)
            {
                if (i == resultlayer.Count - 1)
                {
                    temppileLength = resultlayer[i].TopPosition.Distance(pileType.PileBottomPoint.Scale(1e4));
                }
                else
                {
                    temppileLength = resultlayer[i].TopPosition.Distance(resultlayer[i + 1].TopPosition);
                }
                temppileLength = Math.Round(temppileLength * 1e-4, 2);
                tempLayerBase.Add(new SocketedPileSoilInfo()
                {
                    SoilLayerName = resultlayer[i].IntersectLayerInfo.Category, SoilLayerNum = resultlayer[i].IntersectLayerInfo.UserCode, PileInSoilLayerLength = temppileLength, Qfi = random.Next(), Xii = random.Next(), Xifi = random.NextDouble(), Xifi2 = random.NextDouble()
                });
            }
            return(new SocketedPile()
            {
                PileCode = pilecode, PileId = pileId, PilePropertyInfo = pileType, SocketedPileSoilLayerInfoProp = tempLayerBase, GammaCr = 1.1, GammaCs = 1.2, Frk = 10, Hr = 100, Xip = 100, Xis = 200, GammaTr = 1.2, GammaTs = 1.3, Xis2 = 1.5
            });
        }
示例#3
0
        BCOM.Element CreatePileCrossSectionElement(IPileProperty pileprop)
        {
            //double uorpermaster = app.ActiveModelReference.UORsPerMasterUnit;
            BCOM.Matrix3d m         = app.Matrix3dIdentity();
            BCOM.Point3d  centroidp = pileprop.PileTopPoint.Point3dToBCOMPoint3d(1e4 / uorpermaster);
            centroidp.Z = 0; // xy平面
            double pilediameter = pileprop.PileDiameter * 1e4 / uorpermaster;
            int    colorindex   = 3;

            if ((pileprop is SquarePileGeometry) || (pileprop is SquarePileGeometry))
            {
                BCOM.Point3d[] squarvertexs =
                {
                    app.Point3dFromXY(pilediameter / 2,  pilediameter / 2),
                    app.Point3dFromXY(-pilediameter / 2, pilediameter / 2),
                    app.Point3dFromXY(-pilediameter / 2, -pilediameter / 2),
                    app.Point3dFromXY(pilediameter / 2, -pilediameter / 2)
                };
                BCOM.ShapeElement shape = app.CreateShapeElement1(null, ref squarvertexs, BCOM.MsdFillMode.NotFilled);
                shape.Move(ref centroidp);
                shape.Color = colorindex;
                return(shape);
            }
            else
            {
                var c = app.CreateEllipseElement2(null, ref centroidp, pilediameter / 2, pilediameter / 2, ref m, BCOM.MsdFillMode.NotFilled);
                c.Color = colorindex;
                return(c);
            }
        }
示例#4
0
        //posistion unit:m
        BCOM.LineElement[] CreateArrowElement(Point3d position, IPileProperty pileprop)
        {
            //double uorpermaster = app.ActiveModelReference.UORsPerMasterUnit;
            BCOM.Point3d centroidp = position.Point3dToBCOMPoint3d(1e4 / uorpermaster);
            centroidp.Z = 0; // 平面
            BG.DVector3d linevector     = new BG.DVector3d(pileprop.PileTopPoint.Point3dToDPoint3d(), pileprop.PileBottomPoint.Point3dToDPoint3d());
            double       xyrotationRad  = linevector.AngleXY.Radians;
            double       arrowbarlength = 5 * pileprop.PileDiameter * 1e4 / uorpermaster;

            BCOM.Point3d     startp = app.Point3dZero(), endp = app.Point3dFromXY(arrowbarlength, 0);
            BCOM.LineElement bar      = app.CreateLineElement2(null, ref startp, ref endp);
            BCOM.Point3d     wingendp = app.Point3dFromXY(-arrowbarlength / 3, 0);
            var wing1 = app.CreateLineElement2(null, ref startp, ref wingendp);
            var wing2 = wing1.Clone().AsLineElement();

            wing1.RotateAboutZ(ref startp, app.Radians(25));
            wing2.RotateAboutZ(ref startp, app.Radians(-25));
            wing1.Move(ref endp); wing2.Move(ref endp);
            var lineArray = new BCOM.LineElement[] { bar, wing1, wing2 };

            foreach (var line in lineArray)
            {
                line.RotateAboutZ(ref startp, xyrotationRad);
                line.Move(ref centroidp);
                line.Color = 2;
                //line.LineWeight = 3;
            }
            return(lineArray);
        }
        public override PileBase CreateNewPile(IPileProperty pileType, string pilecode, long pileId)
        {
            if (!(pileType is AnnularPileGeometry))
            {
                throw new ArgumentOutOfRangeException("SteelAndPercastConcretePile must be Annular cross section!");
            }
            HCHXCodeQueryErrorCode status = pileQuery.QueryByRay(ref columnLayerInfoArray, pileType.PileTopPoint.Scale(1e4), pileType.PileBottomPoint.Scale(1e4));

            if (columnLayerInfoArray.m_layers.Count == 0)
            {
                status = HCHXCodeQueryErrorCode.NoIntersection;
            }
            if (status != HCHXCodeQueryErrorCode.Success)
            {
                throw new ArgumentException("创建" + pilecode + "出错" + status.ToString());
            }
            var    resultlayer   = columnLayerInfoArray.GetSortedColumnLayerList();
            var    tempLayerBase = new ObservableCollection <SoilLayerInfoBase>();
            double temppileLength;
            var    random = new Random();
            string soilName, soilNum;
            Regex  regex = new Regex(@"\[.*\]");

            for (int i = 0; i < resultlayer.Count; i++)
            {
                if (i == resultlayer.Count - 1)
                {
                    temppileLength = resultlayer[i].TopPosition.Distance(pileType.PileBottomPoint.Scale(1e4));
                }
                else
                {
                    temppileLength = resultlayer[i].TopPosition.Distance(resultlayer[i + 1].TopPosition);
                }
                //temppileLength = Math.Round(temppileLength * 1e-4, 2);
                Match mc = regex.Match(resultlayer[i].IntersectLayerInfo.UserCode);
                soilName = soilNum = resultlayer[i].IntersectLayerInfo.UserCode;
                if (mc.Success)
                {
                    soilName = mc.Value.Trim(new char[] { '[', ']' });
                    soilNum  = soilNum.Replace(mc.Value, string.Empty);
                }
                tempLayerBase.Add(new SoilLayerInfoBase()
                {
                    SoilLayerName = soilName, SoilLayerNum = soilNum, PileInSoilLayerLength = temppileLength * 1e-4, PileInSoilLayerTopZ = resultlayer[i].TopPosition.Z * 1e-4, Qfi = resultlayer[i].IntersectLayerInfo.Qfi, Xii = resultlayer[i].IntersectLayerInfo.Xii
                });
            }
            return(new SteelAndPercastConcretePile()
            {
                PileCode = pilecode, PileId = pileId, PilePropertyInfo = pileType, SteelAndPercastConcretPileLayerInfoProp = tempLayerBase, GammaR = m_gammar, Qr = resultlayer.Last().IntersectLayerInfo.Qri, Eta = m_eta                                       /*应该由最后一层土层性质决定,参见规范*/
            });
        }
示例#6
0
        BCOM.TextElement CreatePileSkewnessText(IPileProperty pileprop)
        {
            //double uorpermaster = app.ActiveModelReference.UORsPerMasterUnit;
            BCOM.Point3d centroidp = pileprop.PileTopPoint.Point3dToBCOMPoint3d(1e4 / uorpermaster);
            centroidp.Z = 0; // xy plane
            BCOM.Point3d     zerop = app.Point3dZero();
            BCOM.Point3d     textelefirstpoisition = app.Point3dFromXY(pileprop.PileDiameter * 1e4 / uorpermaster, 0);
            BCOM.Matrix3d    identitym             = app.Matrix3dIdentity();
            BCOM.TextElement textele = app.CreateTextElement1(null, Utilities.GetPileSkewnessString(pileprop.GetCosAlpha()), ref textelefirstpoisition, ref identitym);

            BG.DVector3d linevector    = new BG.DVector3d(pileprop.PileTopPoint.Point3dToDPoint3d(), pileprop.PileBottomPoint.Point3dToDPoint3d());
            double       xyrotationRad = linevector.AngleXY.Radians;

            textele.RotateAboutZ(ref zerop, xyrotationRad);
            textele.Move(ref centroidp);
            return(textele);
        }
示例#7
0
 string GetPileCrossSectionString(IPileProperty pileproperty)
 {
     if (pileCrossSectionDict.ContainsKey(pileproperty.GetType()))
     {
         string    enumvalue        = pileCrossSectionDict[pileproperty.GetType()].ToString();
         FieldInfo fieldinfo        = pileCrossSectionDict[pileproperty.GetType()].GetType().GetField(enumvalue);
         var       displayattribute = fieldinfo.GetCustomAttribute <DisplayAttribute>();
         if (displayattribute != null)
         {
             return(displayattribute.Name);
         }
         else
         {
             return(enumvalue);
         }
     }
     else
     {
         return("环形截面桩");
     }
 }
        void GetGetPileCalculateInfo(out Dictionary <double, double> pileLengthAndBearingForce)
        {
            pileLengthAndBearingForce = new Dictionary <double, double>();
            Point3d originalBottomPoint = new HCHXCodeQueryLib.Point3d()
            {
                X = m_pile.PilePropertyInfo.PileBottomPoint.X,
                Y = m_pile.PilePropertyInfo.PileBottomPoint.Y,
                Z = m_pile.PilePropertyInfo.PileBottomPoint.Z,
            };
            IPileProperty tempprop = m_pile.PilePropertyInfo;//set pile to the whole length pile

            tempprop.PileBottomPoint = GetVirtualPileAxisBottomPoint(2 * GetActiveModelBoundaryZ() * 1e-4).DPoint3dToPoint3d();
            List <double> eachlayerz = new List <double>();

            #region SolidPile
            if (m_pile is SolidPile)
            {
                var solidpile = m_pile as SolidPile;
                SolidPileFactory solidfactory = new SolidPileFactory(solidpile.GammaR);

                var tempsolidpile = solidfactory.CreateNewPile(tempprop, solidpile.PileCode, solidpile.PileId) as SolidPile;
                //double[] qfiliacummlate = new double[tempsolidpile.SolidPileSoilLayerInfoProp.Count];
                //double[] qri = new double[tempsolidpile.SolidPileSoilLayerInfoProp.Count];
                //double gammar = solidpile.GammaR;
                //double perimeter = solidpile.PilePropertyInfo.GetPilePerimeter();
                //double area = solidpile.PilePropertyInfo.GetPileOutLineArea();

                //for (int i = 0; i < tempsolidpile.SolidPileSoilLayerInfoProp.Count; i++)
                //{
                //    if (i == 0)
                //        qfiliacummlate[i] = tempsolidpile.SolidPileSoilLayerInfoProp[i].Qfi * tempsolidpile.SolidPileSoilLayerInfoProp[i].PileInSoilLayerLength;
                //    else
                //        qfiliacummlate[i] = qfiliacummlate[i - 1] + tempsolidpile.SolidPileSoilLayerInfoProp[i].Qfi * tempsolidpile.SolidPileSoilLayerInfoProp[i].PileInSoilLayerLength;
                //    qri[i] = tempsolidpile.SolidPileSoilLayerInfoProp[i].
                //}
                for (int i = 0; i < tempsolidpile.SolidPileSoilLayerInfoProp.Count; i++)
                {
                    if (i == 0)
                    {
                        eachlayerz.Add(tempsolidpile.SolidPileSoilLayerInfoProp[i].PileInSoilLayerTopZ);
                    }
                    else
                    {
                        eachlayerz.Add(tempsolidpile.SolidPileSoilLayerInfoProp[i].PileInSoilLayerTopZ + 1e-4);
                        eachlayerz.Add(tempsolidpile.SolidPileSoilLayerInfoProp[i].PileInSoilLayerTopZ - 1e-4);
                    }
                }
                eachlayerz.Add(2 * GetActiveModelBoundaryZ() * 1e-4); //添加底点

                for (int i = 0; i < eachlayerz.Count; i++)
                {
                    tempprop.PileBottomPoint = GetVirtualPileAxisBottomPoint(eachlayerz[i]).DPoint3dToPoint3d();
                    if (i == 0)
                    {
                        pileLengthAndBearingForce.Add(tempprop.GetPileLength(), 0);
                    }
                    else
                    {
                        tempsolidpile = solidfactory.CreateNewPile(tempprop, solidpile.PileCode, solidpile.PileId) as SolidPile;
                        double tempbearing = tempsolidpile.CalculateQd();
                        pileLengthAndBearingForce.Add(tempprop.GetPileLength(), tempbearing);
                        if (tempbearing > m_wantedPileBearing)
                        {
                            break;
                        }
                    }
                }
            }
            #endregion

            #region steelpile
            if (m_pile is SteelAndPercastConcretePile)
            {
                var steelandpercastconcretepile = m_pile as SteelAndPercastConcretePile;
                SteelAndPercastConcretePileFactory steelandpercastpilefactory = new SteelAndPercastConcretePileFactory(steelandpercastconcretepile.GammaR, steelandpercastconcretepile.Eta);
                var temppile = steelandpercastpilefactory.CreateNewPile(tempprop, steelandpercastconcretepile.PileCode, steelandpercastconcretepile.PileId) as SteelAndPercastConcretePile;
                //foreach (var layer in temppile.SteelAndPercastConcretPileLayerInfoProp)
                //{
                //    eachlayerz.Add(layer.PileInSoilLayerTopZ);
                //}
                for (int i = 0; i < temppile.SteelAndPercastConcretPileLayerInfoProp.Count; i++)
                {
                    if (i == 0)
                    {
                        eachlayerz.Add(temppile.SteelAndPercastConcretPileLayerInfoProp[i].PileInSoilLayerTopZ);
                    }
                    else
                    {
                        eachlayerz.Add(temppile.SteelAndPercastConcretPileLayerInfoProp[i].PileInSoilLayerTopZ + 1e-4);
                        eachlayerz.Add(temppile.SteelAndPercastConcretPileLayerInfoProp[i].PileInSoilLayerTopZ - 1e-4);
                    }
                }
                eachlayerz.Add(2 * GetActiveModelBoundaryZ() * 1e-4); //添加底点


                for (int i = 0; i < eachlayerz.Count; i++)
                {
                    tempprop.PileBottomPoint = GetVirtualPileAxisBottomPoint(eachlayerz[i]).DPoint3dToPoint3d();
                    if (i == 0)
                    {
                        pileLengthAndBearingForce.Add(tempprop.GetPileLength(), 0);
                    }
                    else
                    {
                        temppile = steelandpercastpilefactory.CreateNewPile(tempprop, steelandpercastconcretepile.PileCode, steelandpercastconcretepile.PileId) as SteelAndPercastConcretePile;
                        double tempbearing = temppile.CalculateQd();
                        pileLengthAndBearingForce.Add(tempprop.GetPileLength(), tempbearing);
                        if (tempbearing > m_wantedPileBearing)
                        {
                            break;
                        }
                    }
                }
            }
            #endregion

            tempprop.PileBottomPoint = originalBottomPoint;//setback
        }
        void GetPileCacluateInfo(out Dictionary <double, double> pilelengthbearingforce)
        {
            try
            {
                IPileProperty temppropinfo = m_pile.PilePropertyInfo.Clone() as IPileProperty;
                temppropinfo.PileBottomPoint = GetVirtualPileAxisBottomPoint(1.2 * GetActiveModelBoundaryZ() * 1e-4).DPoint3dToPoint3d();
                pilelengthbearingforce       = new Dictionary <double, double>(); //输出参数

                HCHXCodeQueryErrorCode status = pileQuery.QueryByRay(ref columnLayerInfoArray, temppropinfo.PileTopPoint.Scale(1e4), temppropinfo.PileBottomPoint.Scale(1e4));
                if (columnLayerInfoArray.m_layers.Count == 0)
                {
                    status = HCHXCodeQueryErrorCode.NoIntersection;
                }
                if (status != HCHXCodeQueryErrorCode.Success)
                {
                    throw new ArgumentException("创建出错:" + status.ToString());
                }
                var resultlayer = columnLayerInfoArray.GetSortedColumnLayerList();

                #region SoildPile
                if (m_pile is SolidPile)
                {
                    SolidPile solidpile      = m_pile as SolidPile;
                    double[]  qfiliacummlate = new double[resultlayer.Count];
                    double[]  qri            = new double[resultlayer.Count];
                    double    gammar         = solidpile.GammaR;
                    double    perimeter      = solidpile.PilePropertyInfo.GetPilePerimeter();
                    double    area           = solidpile.PilePropertyInfo.GetPileOutLineArea();

                    for (int i = 0; i < resultlayer.Count; i++)
                    {
                        qri[i] = resultlayer[i].IntersectLayerInfo.Qri;
                        if (i == 0)
                        {
                            qfiliacummlate[i] = resultlayer[i].IntersectLayerInfo.Qfi * (resultlayer[i].TopPosition.Distance(resultlayer[i + 1].TopPosition) * 1e-4);
                        }
                        else if (i == resultlayer.Count - 1)
                        {
                            qfiliacummlate[i] = qfiliacummlate[i - 1] + resultlayer[i].IntersectLayerInfo.Qfi * (resultlayer[i].TopPosition.Distance(temppropinfo.PileBottomPoint.Scale(1e4)) * 1e-4);
                        }
                        else
                        {
                            qfiliacummlate[i] = qfiliacummlate[i - 1] + resultlayer[i].IntersectLayerInfo.Qfi * (resultlayer[i].TopPosition.Distance(resultlayer[i + 1].TopPosition) * 1e-4);
                        }
                    }
                    pilelengthbearingforce.Add(resultlayer[0].TopPosition.Distance(temppropinfo.PileTopPoint.Scale(1e4)) * 1e-4, 0);
                    for (int i = 0; i < qfiliacummlate.Length - 1; i++)
                    {
                        pilelengthbearingforce.Add((resultlayer[i + 1].TopPosition.Distance(temppropinfo.PileTopPoint.Scale(1e4)) - 1) * 1e-4, (perimeter * qfiliacummlate[i] + qri[i] * area) / gammar);
                        pilelengthbearingforce.Add((resultlayer[i + 1].TopPosition.Distance(temppropinfo.PileTopPoint.Scale(1e4)) + 1) * 1e-4, (perimeter * qfiliacummlate[i] + qri[i + 1] * area) / gammar);
                    }
                    pilelengthbearingforce.Add(temppropinfo.GetPileLength(), (perimeter * qfiliacummlate.Last() + qri.Last() * area) / gammar);
                }
                if (m_pile is SteelAndPercastConcretePile)
                {
                    SteelAndPercastConcretePile spcpile = m_pile as SteelAndPercastConcretePile;
                    double[] qfiliacummlate             = new double[resultlayer.Count];
                    double[] qriWitheta = new double[resultlayer.Count];
                    double   gammar     = spcpile.GammaR;
                    double   eta        = spcpile.Eta;
                    double   perimeter  = spcpile.PilePropertyInfo.GetPilePerimeter();
                    double   area       = spcpile.PilePropertyInfo.GetPileOutLineArea();

                    for (int i = 0; i < resultlayer.Count; i++)
                    {
                        qriWitheta[i] = resultlayer[i].IntersectLayerInfo.Qri * eta;
                        if (i == 0)
                        {
                            qfiliacummlate[i] = resultlayer[i].IntersectLayerInfo.Qfi * (resultlayer[i].TopPosition.Distance(resultlayer[i + 1].TopPosition) * 1e-4);
                        }
                        else if (i == resultlayer.Count - 1)
                        {
                            qfiliacummlate[i] = qfiliacummlate[i - 1] + resultlayer[i].IntersectLayerInfo.Qfi * (resultlayer[i].TopPosition.Distance(temppropinfo.PileBottomPoint.Scale(1e4)) * 1e-4);
                        }
                        else
                        {
                            qfiliacummlate[i] = qfiliacummlate[i - 1] + resultlayer[i].IntersectLayerInfo.Qfi * (resultlayer[i].TopPosition.Distance(resultlayer[i + 1].TopPosition) * 1e-4);
                        }
                    }
                    pilelengthbearingforce.Add(resultlayer[0].TopPosition.Distance(temppropinfo.PileTopPoint.Scale(1e4)) * 1e-4, 0);
                    for (int i = 0; i < qfiliacummlate.Length - 1; i++)
                    {
                        pilelengthbearingforce.Add((resultlayer[i + 1].TopPosition.Distance(temppropinfo.PileTopPoint.Scale(1e4)) - 1) * 1e-4, (perimeter * qfiliacummlate[i] + qriWitheta[i] * area) / gammar);
                        pilelengthbearingforce.Add((resultlayer[i + 1].TopPosition.Distance(temppropinfo.PileTopPoint.Scale(1e4)) + 1) * 1e-4, (perimeter * qfiliacummlate[i] + qriWitheta[i + 1] * area) / gammar);
                    }
                    pilelengthbearingforce.Add(temppropinfo.GetPileLength(), (perimeter * qfiliacummlate.Last() + qriWitheta.Last() * area) / gammar);
                }
                #endregion
            }
            catch
            {
                throw;
            }
        }
示例#10
0
 protected ColumnLayerInfoArray columnLayerInfoArray = new ColumnLayerInfoArray(); //之后应由华创生成不同的土层类
 public abstract PileBase CreateNewPile(IPileProperty pileType, string pilecode, long pileId);