/// <summary> /// 绘制主梁法向朝Y方向的剖面标注; /// </summary> private void DrawYVectorSectionDim() { mLeftPart = null; mRightPart = null; mDicBoltArrayToRightDim.Clear(); mDicBoltArrayToUpDim.Clear(); //构建左右零件拓扑; BuildLeftAndRightPart(); //移除左右两边零件; mMrPartList.Remove(mLeftPart); mMrPartList.Remove(mRightPart); //如果是底板的剖面标注; if (IsHaveBottomPlatePart()) { DrawYVectorUpDim(); DrawYVectorRightDim(); } else { DrawYVectorUpDim(); DrawYVectorRightDim(); DrawYVectorLeftDim(); DrawYVectorDownDim(); } mMrPartList.Add(mLeftPart); mMrPartList.Add(mRightPart); }
/// <summary> /// 判断左侧的零部件; /// </summary> /// <param name="mrPart"></param> private void JudgeLeftPart(CMrPart mrPart) { double minX = mrPart.GetMinXPoint().X; double maxX = mrPart.GetMaxXPoint().X; double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; if (minX > 0 || minY > 0 || maxY < 0) { return; } if (mLeftPart == null) { mLeftPart = mrPart; return; } if (Math.Abs(maxX - minX) > 50) { return; } double leftPartMinX = mLeftPart.GetMinXPoint().X; if (leftPartMinX < minX) { mLeftPart = mrPart; } }
/// <summary> /// 判断是否是中间的板状零件; /// </summary> /// <param name="mrPart"></param> /// <returns></returns> private bool IsMidPlate(CMrPart mrPart) { Vector normal = mrPart.mNormal; if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1))) { return(false); } if (!mrPart.IsHaveBolt()) { return(false); } double minX = mrPart.GetMinXPoint().X; double maxX = mrPart.GetMaxXPoint().X; double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; if (minX < 0 && maxX > 0 && minY < 0 && maxY > 0) { return(true); } return(false); }
/// <summary> /// 判断右侧的零部件是否需要标注; /// </summary> /// <param name="mrPart"></param> /// <returns></returns> private bool IsRightPartNeedDim(CMrPart mrPart) { double minX = mrPart.GetMinXPoint().X; double maxX = mrPart.GetMaxXPoint().X; double rightPartMaxX = mRightPart.GetMaxXPoint().X; double rightPartMinX = mRightPart.GetMinXPoint().X; if (CDimTools.GetInstance().CompareTwoDoubleValue(maxX, rightPartMaxX) == 0 || CDimTools.GetInstance().CompareTwoDoubleValue(minX, rightPartMinX) == 0 || CDimTools.GetInstance().CompareTwoDoubleValue(maxX, rightPartMinX) == 0) { return(false); } if (CDimTools.GetInstance().CompareTwoDoubleValue(minX, rightPartMinX) >= 0 && CDimTools.GetInstance().CompareTwoDoubleValue(maxX, rightPartMaxX) <= 0) { return(false); } if (!CDimTools.GetInstance().IsTwoVectorParallel(mLeftPart.mNormal, new Vector(1, 0, 0))) { return(false); } return(true); }
/// <summary> /// 获得支撑板中间的连接板的标注; /// </summary> /// <returns></returns> public CMrDimSet GetSupportPlateMiddleConnectPlateDimSet(CMrPart mrSupportPlate) { if (!CDimTools.GetInstance().IsTwoVectorParallel(mrSupportPlate.mNormal, new Vector(0, 0, 1)) || CDimTools.GetInstance().IsPartTheAngleSteel(mrSupportPlate) || IsOutsidePlate(mrSupportPlate)) { return(null); } CCylinderTopViewSetting cylinderTopViewSetting = CCylinderDimSetting.GetInstance().mTopViewSetting; List <CMrPart> mrConnectPlates = GetSupportPlateMiddleConnectPlates(mrSupportPlate); if (mrConnectPlates == null || mrConnectPlates.Count == 0) { return(null); } CMrDimSet mrDimSet = new CMrDimSet(); foreach (CMrPart mrPart in mrConnectPlates) { mrDimSet.AddPoint(mrPart.GetMinYMinXPoint()); bool bValue = cylinderTopViewSetting.FindMarkValueByName(CCylinderTopViewSetting.mstrConnentPlateOnSupport); mrPart.SetNeedAddMarkFlag(bValue); } if (mrDimSet.Count > 0) { mrDimSet.AddPoint(new Point(0, mrDimSet.GetDimPointList()[0].Y, 0)); } return(mrDimSet); }
/// <summary> /// 绘制上翼板向两边弯曲时的左右两块端板的标注; /// </summary> private void DrawLeftAndRightBeamDimMiddle() { CMrPart leftBeam = CMrBeamDoorManager.GetInstance().mLeftBeam; CMrPart rightBeam = CMrBeamDoorManager.GetInstance().mRightBeam; CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; CMrPart leftBottomBeam = CMrBeamDoorManager.GetInstance().mLeftBottomBeam; CMrPart rightBottomBeam = CMrBeamDoorManager.GetInstance().mRightBottomBeam; //1.标注左侧的挡板零件; PointList pointList = new PointList(); pointList.Add(leftBeam.mLeftBottomPoint); pointList.Add(leftBeam.mLeftTopPoint); pointList.Add(leftBottomBeam.mLeftBottomPoint); pointList.Add(topBeam.mLeftTopPoint); double dimDistance = CCommonPara.mDefaultDimDistance; Vector dimVector = CMrBeamDoorManager.GetInstance().GetLeftBeamLeftDimVector(); CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dimDistance, CCommonPara.mSizeDimPath); //2.标注右侧的挡板零件; pointList.Clear(); pointList.Add(rightBeam.mRightBottomPoint); pointList.Add(rightBeam.mRightTopPoint); pointList.Add(rightBottomBeam.mRightBottomPoint); pointList.Add(topBeam.mRightTopPoint); dimDistance = CCommonPara.mDefaultDimDistance; dimVector = CMrBeamDoorManager.GetInstance().GetRightBeamRightDimVector(); CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dimDistance, CCommonPara.mSizeDimPath); }
/// <summary> /// 初始化零部件,构造出上下部件的对称性,只考虑法向与Y轴平行的板的对称性; /// </summary> /// <param name="mrPart"></param> private void InitMrPart(CMrPart mrPart) { Vector normal = mrPart.mNormal; if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0))) { return; } Point ptLeftBottom = mrPart.mLeftBottomPoint; Point ptRightBottom = mrPart.mRightBottomPoint; Point ptLeftTop = mrPart.mLeftTopPoint; Point ptRightTop = mrPart.mRightTopPoint; normal.X = Math.Abs(normal.X); normal.Y = Math.Abs(normal.Y); normal.Z = Math.Abs(normal.Z); String strAttribute1 = ((int)ptLeftBottom.X).ToString() + "_" + ((int)ptRightBottom.X).ToString() + "_" + normal.ToString(); if (mDicAttributePart.ContainsKey(strAttribute1)) { CMrPart symPart = mDicAttributePart[strAttribute1]; mrPart.GetBeamTopViewInfo().mSymPart = symPart; symPart.GetBeamTopViewInfo().mSymPart = mrPart; } else { mDicAttributePart.Add(strAttribute1, mrPart); } }
/// <summary> /// 更新视图中Y值最大和最小的零部件; /// </summary> /// <param name="mrPart"></param> private void UpdateMinAndMaxYPart(CMrPart mrPart) { double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; if (mMinYPart == null) { mMinYPart = mrPart; return; } if (mMaxYPart == null) { mMaxYPart = mrPart; return; } if (minY < mMinYPart.GetMinYPoint().Y) { mMinYPart = mrPart; } if (maxY > mMaxYPart.GetMaxYPoint().Y) { mMaxYPart = mrPart; } }
/// <summary> /// 判断是否需要向下标注; /// </summary> /// <returns></returns> private bool IsNeedDownDim(CMrPart mrPart) { Vector normal = mrPart.mNormal; Vector zVector = new Vector(0, 0, 1); if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, zVector) || !mrPart.IsHaveBolt()) { return(false); } double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; double minX = mrPart.GetMinXPoint().X; double maxX = mrPart.GetMaxXPoint().X; // if (minY < 0 && maxY > 0 && minX < 0 && maxX > 0) // { // return true; // } if (maxY < 0) { return(true); } return(false); }
/// <summary> /// 判断一个零件是否需要在顶部进行标注; /// </summary> /// <param name="mrPart"></param> /// <returns></returns> private bool IsNeedTopDim(CMrPart mrPart) { Vector normal = mrPart.mNormal; Vector zVector = new Vector(0, 0, 1); if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, zVector) || !mrPart.IsHaveBolt()) { return(false); } double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; //如果该板是与主梁交叉; if (minY < 0 && maxY > 0) { return(true); } //如果在主梁上方; if (minY > 0) { return(true); } return(false); }
/// <summary> /// 判断右侧的零部件; /// </summary> /// <param name="mrPart"></param> private void JudgeRightPart(CMrPart mrPart) { double minX = mrPart.GetMinXPoint().X; double maxX = mrPart.GetMinXPoint().X; double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; if (maxX < 0 || minY > 0 || maxY < 0) { return; } if (mRightPart == null) { mRightPart = mrPart; return; } if (Math.Abs(maxX - minX) > 50) { return; } double rightPartMaxX = mRightPart.GetMaxXPoint().X; if (rightPartMaxX > maxX) { mRightPart = mrPart; } }
/// <summary> /// 获取左侧檩托板的标注集; /// </summary> /// <param name="nFlag">1:左侧;2:右侧</param> /// <returns></returns> private List <CMrDimSet> GetMrApronPlateDimSet(int nFlag) { List <CMrDimSet> mrDimSetList = new List <CMrDimSet>(); Dictionary <CMrPart, CMrApronPlate> mMapPartToApronPlate = CMrCylinderDoorTopManager.GetInstance().mMapYNormalPartToMrApronPlate; //如果是右侧; if (nFlag == 2) { foreach (CMrApronPlate mrApronPlate in mMapPartToApronPlate.Values) { CMrPart yNormalPart = mrApronPlate.mYNormalPart; double minX = yNormalPart.GetMinXPoint().X; if (minX < 0) { continue; } CMrDimSet mrDimSet = new CMrDimSet(); bool bIsUp = mrApronPlate.mIsUp; if (bIsUp) { mrDimSet.AddPoint(yNormalPart.GetMaxXMinYPoint()); } else { mrDimSet.AddPoint(yNormalPart.GetMaxXMaxYPoint()); } mrDimSetList.Add(mrDimSet); } } //如果是左侧; else if (nFlag == 1) { foreach (CMrApronPlate mrApronPlate in mMapPartToApronPlate.Values) { CMrPart yNormalPart = mrApronPlate.mYNormalPart; double maxX = yNormalPart.GetMaxXPoint().X; if (maxX > 0) { continue; } CMrDimSet mrDimSet = new CMrDimSet(); bool bIsUp = mrApronPlate.mIsUp; if (bIsUp) { mrDimSet.AddPoint(yNormalPart.GetMinXMinYPoint()); } else { mrDimSet.AddPoint(yNormalPart.GetMinXMaxYPoint()); } mrDimSetList.Add(mrDimSet); } } return(mrDimSetList); }
/// <summary> /// 对于正常的左右倾斜梁的上标注; /// </summary> public void DrawXUpDimNormal() { bool bNeedUpDim = false; List <Point> upDimPointList = new List <Point>(); foreach (CMrPart mrPart in mMrPartList) { CMrDimSet partDimSet = mrPart.GetBeamDoorFrontViewInfo().GetXUpDimSetNormal(); if (partDimSet != null && partDimSet.Count > 0) { bNeedUpDim = true; upDimPointList.AddRange(partDimSet.GetDimPointList()); } } if (bNeedUpDim == false) { return; } CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; upDimPointList.Add(topBeam.mLeftTopPoint); upDimPointList.Add(topBeam.mRightTopPoint); Comparison <Point> sorterX = new Comparison <Point>(CDimTools.ComparePointX); upDimPointList.Sort(sorterX); PointList pointList = new PointList(); foreach (Point point in upDimPointList) { pointList.Add(point); } Point MinXPoint = upDimPointList[0]; double dimDistance = Math.Abs(CCommonPara.mViewMaxY - MinXPoint.Y) + 2 * CCommonPara.mDefaultDimDistance; Vector upDimVector = CMrBeamDoorManager.GetInstance().GetTopBeamUpDimVector(); CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath); //再标注一个总长度; pointList.Clear(); Point firstPoint = topBeam.mLeftTopPoint; Point secondPoint = topBeam.mRightTopPoint; 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> protected void Init() { if (mViewBase == null) { return; } CDimTools dimTools = CDimTools.GetInstance(); //初始化视图包围盒; dimTools.InitViewBox(); //获取所有螺钉的数据字典; Dictionary <Identifier, TSD.Bolt> dicIdentifierBolt = dimTools.GetAllBoltInDrawing(mViewBase); //获取所有Drawing视图中的Part; List <TSD.Part> partList = dimTools.GetAllPartInDrawing(mViewBase); foreach (TSD.Part partInDrawing in partList) { //1.获取部件的信息; TSM.ModelObject modelObjectInModel = dimTools.TransformDrawingToModel(partInDrawing); TSM.Part partInModel = modelObjectInModel as TSM.Part; CMrPart mrPart = null; if (CMrMainBeam.GetInstance().mPartInModel.Identifier.GUID == partInModel.Identifier.GUID) { mrPart = CMrMainBeam.GetInstance(); mMainBeam = CMrMainBeam.GetInstance(); mMainBeam.mPartInDrawing = partInDrawing; } else { mrPart = new CMrPart(partInModel, partInDrawing); } dimTools.InitMrPart(modelObjectInModel, mViewBase, mrPart); AppendMrPart(mrPart); InitMrPart(mrPart); mrPart.GetBeamTopViewInfo().InitMrPartTopViewInfo(); //2.获取部件中的所有螺钉组; List <BoltArray> boltArrayList = dimTools.GetAllBoltArray(partInModel); foreach (BoltArray boltArray in boltArrayList) { TSD.Bolt boltInDrawing = dicIdentifierBolt[boltArray.Identifier]; CMrBoltArray mrBoltArray = new CMrBoltArray(boltArray, boltInDrawing); dimTools.InitMrBoltArray(boltArray, mViewBase, mrBoltArray); InitMrBoltArray(mrBoltArray); mrPart.AppendMrBoltArray(mrBoltArray); } dimTools.UpdateViewBox(mrPart); } CMrMarkManager.GetInstance().Clear(); }
/// <summary> /// 构建正常情况下需要创建剖面的零部件; /// </summary> private void BuildNormalNeedSectionPartList() { CMrPart mLeftBeam = CMrBeamDoorManager.GetInstance().mLeftBeam; CMrPart mRightBeam = CMrBeamDoorManager.GetInstance().mRightBeam; CMrPart mTopBeam = CMrBeamDoorManager.GetInstance().mTopBeam; CMrPart mBottomBeam = CMrBeamDoorManager.GetInstance().mBottonBeam; //1.左右侧挡板需要进行剖视; mAllSectionPartList.Add(mLeftBeam); mAllSectionPartList.Add(mRightBeam); Point leftTopPt = mTopBeam.mLeftTopPoint; Point rightTopPt = mTopBeam.mRightTopPoint; Point leftBottomPt = mBottomBeam.mLeftBottomPoint; Point rightBottomPt = mBottomBeam.mRightBottomPoint; Vector directVector = new Vector(rightTopPt.X - leftTopPt.X, rightTopPt.Y - leftTopPt.Y, rightTopPt.Z - leftTopPt.Z); mrPartList.Remove(CMrMainBeam.GetInstance()); mrPartList.Remove(mTopBeam); mrPartList.Remove(mBottomBeam); foreach (CMrPart mrPart in mrPartList) { //排除在主梁外面的零部件; if (CDimTools.GetInstance().IsThePointOnLine(mrPart.GetMaxYPoint(), leftTopPt, rightTopPt) > 0 || CDimTools.GetInstance().IsThePointOnLine(mrPart.GetMinYPoint(), leftBottomPt, rightBottomPt) < 0) { continue; } Vector normal = mrPart.mNormal; //判断主梁的螺钉是否在板内,如果在则需要剖面; if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1))) { if (JudgeMainBeamBoltInPlate(mrPart)) { mAllSectionPartList.Add(mrPart); } } if (!mrPart.IsHaveBolt()) { continue; } if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)) || CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)) || CDimTools.GetInstance().IsTwoVectorParallel(normal, directVector) || CDimTools.GetInstance().IsTwoVectorVertical(normal, directVector)) { mAllSectionPartList.Add(mrPart); } } }
/// <summary> /// 零件信息显示到界面上; /// </summary> /// <param name="mrPart"></param> private void UpdateUIInfo(CMrPart mrPart) { modelObjectTextBox.Text = ""; modelObjectTextBox.Text = mrPart.mBeamType.ToString() + Environment.NewLine + "Normal" + mrPart.mNormal.ToString() + Environment.NewLine + "LeftTop" + mrPart.mLeftTopPoint.ToString() + Environment.NewLine + "LeftBottom" + mrPart.mLeftBottomPoint.ToString() + Environment.NewLine + "RightTop" + mrPart.mRightTopPoint.ToString() + Environment.NewLine + "RightBottom" + mrPart.mRightBottomPoint.ToString(); }
/// <summary> /// 判断零件是否已经在剖面中; /// </summary> /// <param name="mrPart"></param> /// <returns></returns> private bool IsPartInSection(CMrPart mrPart) { foreach (CMrSection mrSection in mSectionList) { if (mrSection.IsHaveThePart(mrPart)) { return(true); } } return(false); }
/// <summary> /// 绘制在中间法向与Y轴方向平行的零件标注; /// </summary> public void DrawYNormalPartDimMiddle() { CMrPart midYNormalPart = null; Point midPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint; CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; CMrPart leftBottomBeam = CMrBeamDoorManager.GetInstance().mLeftBottomBeam; CMrPart rightBottomBeam = CMrBeamDoorManager.GetInstance().mRightBottomBeam; foreach (CMrPart mrPart in mMrPartList) { if (mrPart == topBeam || mrPart == leftBottomBeam || mrPart == rightBottomBeam) { continue; } Vector normal = mrPart.mNormal; if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0))) { continue; } Point minXPoint = mrPart.GetMinXPoint(); Point maxXPoint = mrPart.GetMaxXPoint(); if (minXPoint.X < midPoint.X && maxXPoint.X > midPoint.X) { if (midYNormalPart == null) { midYNormalPart = mrPart; } else if (mrPart.GetMaxYPoint().Y > midYNormalPart.GetMaxYPoint().Y) { midYNormalPart = mrPart; } } } if (midYNormalPart == null) { return; } PointList pointList = new PointList(); pointList.Add(midYNormalPart.GetMaxXMinYPoint()); pointList.Add(rightBottomBeam.GetMinXMaxYPoint()); Vector dimVector = new Vector(1, 0, 0); double length = 2 * CCommonPara.mDefaultDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, length, CCommonPara.mSizeDimPath); }
/// <summary> /// 绘制主梁上螺钉的标注; /// </summary> private void DrawMainBeamBoltDimNormal() { CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; Point leftTopPoint = topBeam.mLeftTopPoint; Point rightTopPoint = topBeam.mRightTopPoint; List <CMrBoltArray> mrBoltArrayList = mMainBeam.GetBoltArrayList(); foreach (CMrBoltArray mrBoltArray in mrBoltArrayList) { Point boltPoint = mrBoltArray.GetMaxXPoint(); //寻找与该零件最近的零部件; CMrPart mostNearPart = CMrBeamDoorManager.GetInstance().GetMostNearPart(boltPoint); if (mostNearPart == null) { continue; } //(1).与顶板平行方向标注螺钉; PointList pointList = new PointList(); MrSlopeType slopeType = CDimTools.GetInstance().JudgeLineSlope(leftTopPoint, rightTopPoint); if (slopeType == MrSlopeType.MORETHAN_ZERO) { pointList.Add(mostNearPart.mRightTopPoint); } else { pointList.Add(mostNearPart.mLeftTopPoint); } pointList.Add(boltPoint); Vector dimVector = CMrBeamDoorManager.GetInstance().GetTopBeamUpDimVector(); double dblDistance = CCommonPara.mDefaultDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dblDistance, CCommonPara.mSizeDimPath); //(2).与顶板竖直方向标注板的位置; pointList.Clear(); pointList.Add(boltPoint); Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(boltPoint, topBeam.mLeftTopPoint, topBeam.mRightTopPoint); pointList.Add(fontPt); dimVector = new Vector(rightTopPoint.X - leftTopPoint.X, rightTopPoint.Y - leftTopPoint.Y, 0); CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dblDistance, CCommonPara.mSizeDimPath); } }
/// <summary> /// 绘制第三种中间梁的下标注; /// </summary> public void DrawXDownDimMiddle() { bool bNeedDownDim = false; List <Point> downDimPointList = new List <Point>(); foreach (CMrPart mrPart in mMrPartList) { CMrDimSet partDimSet = mrPart.GetBeamDoorFrontViewInfo().GetXDownDimSetMiddle(); if (partDimSet != null && partDimSet.Count > 0) { bNeedDownDim = true; downDimPointList.AddRange(partDimSet.GetDimPointList()); } } if (bNeedDownDim == false) { return; } CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; CMrPart leftBottomBeam = CMrBeamDoorManager.GetInstance().mLeftBottomBeam; CMrPart rightBottomBeam = CMrBeamDoorManager.GetInstance().mRightBottomBeam; downDimPointList.Add(leftBottomBeam.mLeftBottomPoint); downDimPointList.Add(topBeam.mLeftTopPoint); downDimPointList.Add(rightBottomBeam.mRightBottomPoint); downDimPointList.Add(topBeam.mRightTopPoint); Comparison <Point> sorterX = new Comparison <Point>(CDimTools.ComparePointX); downDimPointList.Sort(sorterX); PointList pointList = new PointList(); foreach (Point point in downDimPointList) { pointList.Add(point); } Point MinXPoint = downDimPointList[0]; double dimDistance = Math.Abs(CCommonPara.mViewMinY - MinXPoint.Y) + 1.2 * CCommonPara.mDefaultDimDistance; Vector downDimVector = new Vector(0, -1, 0); CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, downDimVector, dimDistance, CCommonPara.mSizeDimPath); }
/// <summary> /// 判断零件是否已经在剖面中; /// </summary> /// <param name="mrPart"></param> /// <returns></returns> private bool IsPartInSection(CMrPart mrPart, MrSectionMode sectionMode) { foreach (CMrSection mrSection in mSectionList) { if ((sectionMode != MrSectionMode.None) && (mrSection.mSectionMode != sectionMode)) { continue; } if (mrSection.IsHaveThePart(mrPart)) { return(true); } } return(false); }
/// <summary> /// 判断右侧挡板零件是否需要标注; /// </summary> /// <returns></returns> private bool IsRightBeamNeedDim() { CMrPart rightBeam = CMrBeamDoorManager.GetInstance().mRightBeam; CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; CMrPart bottomBeam = CMrBeamDoorManager.GetInstance().mBottonBeam; double distance1 = Math.Abs(rightBeam.mLeftTopPoint.X - topBeam.mRightTopPoint.X); double distance2 = Math.Abs(rightBeam.mLeftBottomPoint.X - bottomBeam.mRightBottomPoint.X); if (distance1 > 10 || distance2 > 10) { return(false); } return(true); }
/// <summary> /// 构建垂直连接板左右侧的对称性; /// </summary> /// <param name="mrPart"></param> private void InitMrPart(CMrPart mrPart) { Vector normal = mrPart.mNormal; //1.板的法向与Y轴平行或者法向在XY平面内才可以进行对称性判断; if (!(CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0)) || CDimTools.GetInstance().IsVectorInXYPlane(normal))) { return; } //2.需要判断板的位置; if (mrPart.GetCylinderTopViewInfo().mPostionType == MrPositionType.LEFT) { Point maxXMaxY = mrPart.GetMaxXMaxYPoint(); Point maxXMinY = mrPart.GetMaxXMinYPoint(); String strAttribute1 = ((int)maxXMaxY.Y).ToString(); if (mDicAttributePart.ContainsKey(strAttribute1)) { CMrPart symPart = mDicAttributePart[strAttribute1]; mrPart.GetCylinderTopViewInfo().mSymPart = symPart; symPart.GetCylinderTopViewInfo().mSymPart = mrPart; } else { mDicAttributePart.Add(strAttribute1, mrPart); } } if (mrPart.GetCylinderTopViewInfo().mPostionType == MrPositionType.RIGHT) { Point minXMaxY = mrPart.GetMinXMaxYPoint(); Point minXMinY = mrPart.GetMinXMinYPoint(); String strAttribute1 = ((int)minXMaxY.Y).ToString(); if (mDicAttributePart.ContainsKey(strAttribute1)) { CMrPart symPart = mDicAttributePart[strAttribute1]; mrPart.GetCylinderTopViewInfo().mSymPart = symPart; symPart.GetCylinderTopViewInfo().mSymPart = mrPart; } else { mDicAttributePart.Add(strAttribute1, mrPart); } } }
/// <summary> /// 绘制檩托板的零件标记; /// </summary> private void DrawMrApronPlateMark() { DrawingHandler drawingHandler = new DrawingHandler(); TSD.UI.DrawingObjectSelector DS = drawingHandler.GetDrawingObjectSelector(); Dictionary <CMrPart, CMrApronPlate> mapPartToMrApronPlate = CMrCylinderDoorFrontManager.GetInstance().mMapYNormalPartToMrApronPlate; foreach (CMrApronPlate mrApronPlate in mapPartToMrApronPlate.Values) { CMrPart yNormalPart = mrApronPlate.mYNormalPart; CMrPart zNormalPart = mrApronPlate.mZNormalPart; DS.SelectObject(yNormalPart.mPartInDrawing); DS.SelectObject(zNormalPart.mPartInDrawing); } CDimTools.GetInstance().DrawMarkByMacro(); }
/// <summary> /// 判断零部件是否无效,主要是判断零部件的z坐标与柱子的z坐标的关系; /// </summary> /// <param name="mrPart"></param> /// <returns></returns> private bool IsInvalidPart(CMrPart mrPart) { double mainBeamMinZ = mMainBeam.GetMinZPoint().Z; double mainBeamMaxZ = mMainBeam.GetMaxZPoint().Z; double mrPartMinZ = mrPart.GetMinZPoint().Z; double mrPartMaxZ = mrPart.GetMaxZPoint().Z; if (CDimTools.GetInstance().CompareTwoDoubleValue(mrPartMaxZ, mainBeamMinZ) < 0) { return(false); } if (CDimTools.GetInstance().CompareTwoDoubleValue(mrPartMinZ, mainBeamMaxZ) > 0) { return(false); } return(true); }
/// <summary> /// 判断零件是否是外围板; /// </summary> /// <param name="mrPart"></param> /// <returns></returns> private bool IsOutsidePlate(CMrPart mrPart) { Vector normal = mrPart.mNormal; double minZ = mrPart.GetMinZPoint().Z; double maxZ = mrPart.GetMaxZPoint().Z; double mainBeamMinZ = CMrMainBeam.GetInstance().GetMinZPoint().Z; double mainBeamMaxZ = CMrMainBeam.GetInstance().GetMaxZPoint().Z; if (CDimTools.GetInstance().CompareTwoDoubleValue(minZ, mainBeamMaxZ) >= 0) { return(true); } if (CDimTools.GetInstance().CompareTwoDoubleValue(maxZ, mainBeamMinZ) <= 0) { return(true); } return(false); }
/// <summary> /// 获得支撑及牛腿中间的垂直加筋板; /// </summary> /// <param name="mrSupportPlate"></param> /// <returns></returns> private List <CMrPart> GetSupportPlateMiddleConnectPlates(CMrPart mrSupportPlate) { Point maxXPoint = mrSupportPlate.GetMaxXPoint(); Point minXPoint = mrSupportPlate.GetMinXPoint(); List <CMrPart> mrConnectPlates = new List <CMrPart>(); if (maxXPoint.X < 0) { foreach (CMrPart mrPart in mVerticalConnectPlateList) { if (IsOutsidePlate(mrPart) || mrPart.GetMaxXPoint().X > 0) { continue; } if (CDimTools.GetInstance().IsPartInOtherPartBox(mrPart, mrSupportPlate)) { mrConnectPlates.Add(mrPart); } } return(mrConnectPlates); } else if (minXPoint.X > 0) { foreach (CMrPart mrPart in mVerticalConnectPlateList) { if (IsOutsidePlate(mrPart) || mrPart.GetMinXPoint().X < 0) { continue; } if (CDimTools.GetInstance().IsPartInOtherPartBox(mrPart, mrSupportPlate)) { mrConnectPlates.Add(mrPart); } } return(mrConnectPlates); } return(null); }
/// <summary> /// 对于正常的左右倾斜梁的下标注; /// </summary> public void DrawXDownDimNormal() { List <Point> downDimPointList = new List <Point>(); foreach (CMrPart mrPart in mMrPartList) { CMrDimSet partDimSet = mrPart.GetBeamDoorFrontViewInfo().GetXDownDimSetNormal(); if (partDimSet != null && partDimSet.Count > 0) { downDimPointList.AddRange(partDimSet.GetDimPointList()); } } CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; CMrPart bottomBeam = CMrBeamDoorManager.GetInstance().mBottonBeam; CMrPart leftBeam = CMrBeamDoorManager.GetInstance().mLeftBeam; CMrPart rightBeam = CMrBeamDoorManager.GetInstance().mRightBeam; downDimPointList.Add(topBeam.mLeftTopPoint); downDimPointList.Add(bottomBeam.mLeftBottomPoint); downDimPointList.Add(topBeam.mRightTopPoint); downDimPointList.Add(bottomBeam.mRightBottomPoint); Comparison <Point> sorterX = new Comparison <Point>(CDimTools.ComparePointX); downDimPointList.Sort(sorterX); PointList pointList = new PointList(); foreach (Point point in downDimPointList) { pointList.Add(point); } double dimDistance = Math.Abs(CCommonPara.mViewMinY - downDimPointList[0].Y) + 1.5 * CCommonPara.mDefaultDimDistance; Vector downDimVector = new Vector(0, -1, 0); CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, downDimVector, dimDistance, CCommonPara.mSizeDimPath); }
/// <summary> /// 判断法向与Y轴平行的主梁中间进行标注的零部件是否需要进行标注; /// </summary> /// <returns></returns> private bool IsYNormalMiddlePartNeedDim(CMrPart mrPart) { List <CMrPart> rightPartList = CMrCylinderDoorFrontManager.GetInstance().mRightDimPartList; int minY = (int)mrPart.GetMaxXMinYPoint().Y; int maxY = (int)mrPart.GetMaxXMaxYPoint().Y; string strY = minY.ToString() + "," + maxY.ToString(); foreach (CMrPart mrHaveDimPart in rightPartList) { minY = (int)mrHaveDimPart.GetMaxXMinYPoint().Y; maxY = (int)mrHaveDimPart.GetMaxXMaxYPoint().Y; string strNewY = minY.ToString() + "," + maxY.ToString(); if (strY.Equals(strNewY)) { return(false); } } return(true); }
/// <summary> /// 判断主梁的螺钉是否在该平板内; /// </summary> private bool JudgeMainBeamBoltInPlate(CMrPart mrPart) { List <CMrBoltArray> mrBoltArrayList = CMrMainBeam.GetInstance().GetBoltArrayList(); double minX = mrPart.GetMinXPoint().X; double maxX = mrPart.GetMaxXPoint().X; double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; foreach (CMrBoltArray mrBoltArray in mrBoltArrayList) { List <Point> pointList = mrBoltArray.GetBoltPointList(); foreach (Point pt in pointList) { if (pt.X < maxX && pt.X > minX && pt.Y < maxY && pt.Y > minY) { return(true); } } } return(false); }