/// <summary> /// 绘制中间主梁类型为3时向上的标注; /// </summary> private void DrawTypeMiddle3XUpDim() { //1.绘制左侧上方的标注; bool bNeedUpDim = false; List <Point> upDimPointList = new List <Point>(); foreach (CMrPart mrPart in mMrPartList) { CMrDimSet partDimSet = mrPart.GetBeamDoorFrontViewInfo().GetTypeMiddle3XUpDimSetMiddle(); if (partDimSet != null && partDimSet.Count > 0) { bNeedUpDim = true; upDimPointList.AddRange(partDimSet.GetDimPointList()); } } if (bNeedUpDim == false) { return; } CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; Point leftTopPt = topBeam.mLeftTopPoint; Point rightTopPt = topBeam.mRightTopPoint; upDimPointList.Add(leftTopPt); upDimPointList.Add(rightTopPt); Comparison <Point> sorterX = new Comparison <Point>(CDimTools.ComparePointX); upDimPointList.Sort(sorterX); PointList pointList = new PointList(); foreach (Point point in upDimPointList) { pointList.Add(point); } double dimDistance = Math.Abs(CCommonPara.mViewMaxY - upDimPointList[0].Y) + 2 * CCommonPara.mDefaultDimDistance; //计算标注向量; Vector directVector = new Vector(rightTopPt.X - leftTopPt.X, rightTopPt.Y - leftTopPt.Y, 0); directVector.Normalize(); Vector upDimVector = new Vector(directVector.Y, -directVector.X, 0); MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(directVector, new Point(0, 0, 0)); if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO) { upDimVector = new Vector(Math.Abs(upDimVector.X), Math.Abs(upDimVector.Y), 0); } else if (mrSlopeType == MrSlopeType.MORETHAN_ZERO) { upDimVector = new Vector(-Math.Abs(upDimVector.X), Math.Abs(upDimVector.Y), 0); } CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath); //2.再标注一个总长度; pointList.Clear(); pointList.Add(leftTopPt); pointList.Add(rightTopPt); dimDistance = Math.Abs(CCommonPara.mViewMaxY - leftTopPt.Y) + 4 * CCommonPara.mDefaultDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath); }
/// <summary> /// 绘制主梁中间的零部件标注; /// 主梁中间的零部件只有法向与主梁顶部部件平行的才进行标注; /// </summary> private void DrawMainBeamMiddlePartDimNormal() { CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; Point leftTopPoint = topBeam.mLeftTopPoint; Point rightTopPoint = topBeam.mRightTopPoint; CMrBeamDoorManager.GetInstance().BuildMostNearPartToPartList(mMrPartList); Dictionary <CMrPart, List <CMrPart> > dicPartToPartList = CMrBeamDoorManager.GetInstance().mDicPartToPartList; List <CMrDimSet> mrDimSetList = new List <CMrDimSet>(); foreach (CMrPart mostNearPart in dicPartToPartList.Keys) { List <CMrPart> mrPartList = dicPartToPartList[mostNearPart]; if (mrPartList.Count == 0) { continue; } //(1).与顶板平行方向标注螺钉; CMrDimSet mrDimSet = new CMrDimSet(); MrSlopeType slopeType = CDimTools.GetInstance().JudgeLineSlope(leftTopPoint, rightTopPoint); if (slopeType == MrSlopeType.MORETHAN_ZERO) { mrDimSet.AddPoint(mostNearPart.mRightTopPoint); } else { mrDimSet.AddPoint(mostNearPart.mLeftTopPoint); } foreach (CMrPart mrPart in mrPartList) { CMrBoltArray mrBoltArray = mrPart.GetBoltArrayList()[0]; Point boltPoint = mrBoltArray.GetMaxXPoint(); mrDimSet.AddPoint(boltPoint); } mrDimSet.mDimVector = CMrBeamDoorManager.GetInstance().GetTopBeamUpDimVector(); mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance; mrDimSetList.Add(mrDimSet); //(2).与顶板竖直方向标注; mrDimSet = new CMrDimSet(); mrDimSet.AddPoint(mrPartList[0].mRightBottomPoint); Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(mrPartList[0].mRightBottomPoint, topBeam.mLeftTopPoint, topBeam.mRightTopPoint); mrDimSet.AddPoint(fontPt); mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = new Vector(rightTopPoint.X - leftTopPoint.X, rightTopPoint.Y - leftTopPoint.Y, 0); mrDimSetList.Add(mrDimSet); } foreach (CMrDimSet mrDimSet in mrDimSetList) { List <Point> dimPointList = mrDimSet.GetDimPointList(); PointList pointList = new PointList(); foreach (Point point in dimPointList) { pointList.Add(point); } Vector dimVector = mrDimSet.mDimVector; double length = mrDimSet.mDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, length, CCommonPara.mSizeDimPath); } }
/// <summary> /// 绘制中间主梁的类型为1和2时向上的标注; /// </summary> private void DrawTypeMiddle1And2XUpDim() { //1.绘制左侧上方的标注; bool bNeedUpDim = false; List <Point> upDimPointList = new List <Point>(); foreach (CMrPart mrPart in mMrPartList) { CMrDimSet partDimSet = mrPart.GetBeamDoorFrontViewInfo().GetLeftXUpDimSetMiddle(); if (partDimSet != null && partDimSet.Count > 0) { bNeedUpDim = true; upDimPointList.AddRange(partDimSet.GetDimPointList()); } } if (bNeedUpDim == false) { return; } CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; //把中间Y值最大的点加入到标注链表中; upDimPointList.Add(CMrBeamDoorManager.GetInstance().mMidMaxPoint); upDimPointList.Add(topBeam.mLeftTopPoint); Comparison <Point> sorterX = new Comparison <Point>(CDimTools.ComparePointX); upDimPointList.Sort(sorterX); PointList pointList = new PointList(); foreach (Point point in upDimPointList) { pointList.Add(point); } Point minXPoint1 = upDimPointList[0]; double dimDistance = Math.Abs(CCommonPara.mViewMaxY - minXPoint1.Y) + 2 * CCommonPara.mDefaultDimDistance; Vector upDimVector = CMrBeamDoorManager.GetInstance().mLeftTopVector; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath); //2.再标注左侧的一个总长度; pointList.Clear(); Point firstPoint = topBeam.mLeftTopPoint; Point secondPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint; pointList.Add(firstPoint); pointList.Add(secondPoint); dimDistance = Math.Abs(CCommonPara.mViewMaxY - firstPoint.Y) + 4 * CCommonPara.mDefaultDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath); //3.绘制右侧上方的标注; bNeedUpDim = false; upDimPointList.Clear(); foreach (CMrPart mrPart in mMrPartList) { CMrDimSet partDimSet = mrPart.GetBeamDoorFrontViewInfo().GetRightXUpDimSetMiddle(); if (partDimSet != null && partDimSet.Count > 0) { bNeedUpDim = true; upDimPointList.AddRange(partDimSet.GetDimPointList()); } } if (bNeedUpDim == false) { return; } //把中间Y值最大的点加入到标注链表中; upDimPointList.Add(CMrBeamDoorManager.GetInstance().mMidMaxPoint); upDimPointList.Add(topBeam.mRightTopPoint); upDimPointList.Sort(sorterX); int nCount = upDimPointList.Count; upDimPointList.Reverse(0, nCount); pointList.Clear(); foreach (Point point in upDimPointList) { pointList.Add(point); } Point minXPoint2 = upDimPointList[0]; dimDistance = Math.Abs(CCommonPara.mViewMaxY - minXPoint2.Y) + 2 * CCommonPara.mDefaultDimDistance; upDimVector = CMrBeamDoorManager.GetInstance().mRightTopVector; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath); //4.再标注右侧的一个总长度; pointList.Clear(); firstPoint = topBeam.mRightTopPoint; secondPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint; pointList.Add(firstPoint); pointList.Add(secondPoint); dimDistance = Math.Abs(CCommonPara.mViewMaxY - firstPoint.Y) + 4 * CCommonPara.mDefaultDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath); }
/// <summary> /// 绘制第三种主梁上的螺钉的标注; /// </summary> public void DrawMainBeamBoltDimMiddle() { CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; Point leftTopPoint = topBeam.mLeftTopPoint; Point rightTopPoint = topBeam.mRightTopPoint; Point midTopPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint; List <CMrBoltArray> mrBoltArrayList = mMainBeam.GetBoltArrayList(); foreach (CMrBoltArray mrBoltArray in mrBoltArrayList) { Point boltPoint = mrBoltArray.GetMaxXPoint(); //寻找与该零件最近的零部件; CMrPart mostNearPart = CMrBeamDoorManager.GetInstance().GetMostNearPart(boltPoint); //(1).与顶板平行方向标注螺钉; PointList pointList = new PointList(); if (mostNearPart.mLeftTopPoint.X < midTopPoint.X) { pointList.Add(mostNearPart.mRightTopPoint); } else { pointList.Add(mostNearPart.mLeftTopPoint); } pointList.Add(boltPoint); Vector dimVector = new Vector(); if (boltPoint.X > midTopPoint.X) { dimVector = CMrBeamDoorManager.GetInstance().mRightTopVector; } if (boltPoint.X < midTopPoint.X) { dimVector = CMrBeamDoorManager.GetInstance().mLeftTopVector; } double dblDistance = CCommonPara.mDefaultDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dblDistance, CCommonPara.mSizeDimPath); //(2).与顶板竖直方向标注板的位置; pointList.Clear(); pointList.Add(boltPoint); if (boltPoint.X > midTopPoint.X) { Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(boltPoint, rightTopPoint, midTopPoint); dimVector = new Vector(rightTopPoint.X - midTopPoint.X, rightTopPoint.Y - midTopPoint.Y, 0); pointList.Add(fontPt); } if (boltPoint.X < midTopPoint.X) { Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(boltPoint, leftTopPoint, midTopPoint); dimVector = new Vector(leftTopPoint.X - midTopPoint.X, leftTopPoint.Y - midTopPoint.Y, 0); pointList.Add(fontPt); } CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dblDistance, CCommonPara.mSizeDimPath); } }