/// <summary> /// 绘制第三种中间梁的上标注; /// </summary> public void DrawXUpDimMiddle() { MrBeamDoorType beamDoorType = CMrBeamDoorManager.GetInstance().mType; if (beamDoorType == MrBeamDoorType.TypeMiddle1 || beamDoorType == MrBeamDoorType.TypeMiddle2) { DrawTypeMiddle1And2XUpDim(); } if (beamDoorType == MrBeamDoorType.TypeMiddle3) { DrawTypeMiddle3XUpDim(); } }
/// <summary> /// 得到右侧向上的零部件; /// </summary> /// <returns></returns> public CMrDimSet GetRightXUpDimSetMiddle() { if (!IsNeedXUpDimMiddle()) { return(null); } Point maxXPoint = mMrPart.GetMaxXPoint(); Point midTopPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint; if (maxXPoint.X < midTopPoint.X) { return(null); } Vector normal = mMrPart.mNormal; CMrDimSet mrDimSet = new CMrDimSet(); if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0))) { mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint()); } else { MrBeamDoorType beamDoorType = CMrBeamDoorManager.GetInstance().mType; if (beamDoorType == MrBeamDoorType.TypeMiddle1) { mrDimSet.AddPoint(mMrPart.mLeftTopPoint); } else if (beamDoorType == MrBeamDoorType.TypeMiddle2) { mrDimSet.AddPoint(mMrPart.mRightTopPoint); } } return(mrDimSet); }
/// <summary> /// 构建门式框架梁的拓扑结构; /// </summary> public void BuildBeamDoorTopo(List <CMrPart> mrPartList) { ClearData(); //先赋值主梁; mMainBeam = CMrMainBeam.GetInstance(); foreach (CMrPart mrPart in mrPartList) { if (mrPart == mMainBeam) { continue; } JudgeLeftBeam(mrPart); JudgeRightBeam(mrPart); JudgeTopBeam(mrPart); JudgeBottomBeam(mrPart); JudgeLeftAndRightBottomBeam(mrPart); } if (mBottonBeam == mTopBeam && mLeftBottomBeam != null && mRightBottomBeam != null) {//这个是一块板的形式; mBottonBeam = null; UpdatePartBoxPoint(mLeftBottomBeam); UpdatePartBoxPoint(mRightBottomBeam); ComputeTypeMiddleParas(); } else {//这个是三块板的形式,下翼缘part不为空; mType = MrBeamDoorType.TypeNormal; UpdatePartBoxPoint(mTopBeam); UpdatePartBoxPoint(mBottonBeam); UpdatePartBoxPoint(mMainBeam); } }
/// <summary> /// 获取主梁为类型3时的标注集合; /// </summary> /// <returns></returns> public CMrDimSet GetTypeMiddle3XUpDimSetMiddle() { if (!IsNeedXUpDimMiddle()) { return(null); } Point maxXPoint = mMrPart.GetMaxXPoint(); Vector normal = mMrPart.mNormal; CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; Vector topBeamNormal = topBeam.mNormal; CMrDimSet mrDimSet = new CMrDimSet(); if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0))) { mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint()); } else { MrBeamDoorType beamDoorType = CMrBeamDoorManager.GetInstance().mType; MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), topBeamNormal); if (mrSlopeType == MrSlopeType.MORETHAN_ZERO) { mrDimSet.AddPoint(mMrPart.mLeftTopPoint); } else if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO) { mrDimSet.AddPoint(mMrPart.mRightTopPoint); } } return(mrDimSet); }
/// <summary> /// 计算上翼板的参数; /// </summary> public void ComputeTypeMiddleParas() { Vector topNormal = mTopBeam.mNormal; MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), topNormal); Point minXmaxYPt = mTopBeam.GetMinXMaxYPoint(); Point maxXmaxYPt = mTopBeam.GetMaxXMaxYPoint(); if (Math.Abs(minXmaxYPt.Y - maxXmaxYPt.Y) > 10) { mMidMaxPoint = new Point((minXmaxYPt.X + maxXmaxYPt.X) / 2.0, (minXmaxYPt.Y + maxXmaxYPt.Y) / 2.0, 0); mType = MrBeamDoorType.TypeMiddle3; } else if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO) { //1.计算出中心Y值最大的点; mMidMaxPoint = mTopBeam.GetMaxYPoint(); mType = MrBeamDoorType.TypeMiddle1; } else if (mrSlopeType == MrSlopeType.MORETHAN_ZERO) { mMidMaxPoint = mTopBeam.GetMinYPoint(); mType = MrBeamDoorType.TypeMiddle2; } //2.计算出左上角和左下角的点; List <Point> pointList = mTopBeam.GetPointList(); List <Point> newPointList = new List <Point>(); foreach (Point point in pointList) { if (point.X < mMidMaxPoint.X) { newPointList.Add(point); } } Point minY = CDimTools.GetInstance().GetMinYPoint(newPointList); Point maxY = CDimTools.GetInstance().GetMaxYPoint(newPointList); mTopBeam.mLeftBottomPoint = minY; mTopBeam.mLeftTopPoint = maxY; newPointList.Clear(); //3.计算右上角和右下角的点; foreach (Point point in pointList) { if (point.X > mMidMaxPoint.X) { newPointList.Add(point); } } maxY = CDimTools.GetInstance().GetMaxYPoint(newPointList); minY = CDimTools.GetInstance().GetMinYPoint(newPointList); mTopBeam.mRightTopPoint = maxY; mTopBeam.mRightBottomPoint = minY; //4.计算左右两边的法向; Vector normal = mTopBeam.mNormal; if (mType == MrBeamDoorType.TypeMiddle1) { mLeftTopVector = new Vector(-Math.Abs(normal.X), Math.Abs(normal.Y), 0); mRightTopVector = new Vector(Math.Abs(normal.X), Math.Abs(normal.Y), 0); } else if (mType == MrBeamDoorType.TypeMiddle2) { mLeftTopVector = new Vector(Math.Abs(normal.X), Math.Abs(normal.Y), 0); mRightTopVector = new Vector(-Math.Abs(normal.X), Math.Abs(normal.Y), 0); } else if (mType == MrBeamDoorType.TypeMiddle3) { mLeftTopVector = normal; mRightTopVector = normal; } }