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 }; }
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 }); }
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); } }
//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 /*应该由最后一层土层性质决定,参见规范*/ }); }
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); }
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; } }
protected ColumnLayerInfoArray columnLayerInfoArray = new ColumnLayerInfoArray(); //之后应由华创生成不同的土层类 public abstract PileBase CreateNewPile(IPileProperty pileType, string pilecode, long pileId);