/// <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> /// <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> 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="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> /// <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> 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); }
/// <summary> /// 构建所有需要进行打剖面的零部件; /// </summary> private void BuildNeedSectionPartList() { CMrPart mainBeam = CMrMainBeam.GetInstance(); double mainBeamMinY = mainBeam.GetMinYPoint().Y; double mainBeamMaxY = mainBeam.GetMaxYPoint().Y; double mainBeamMinX = mainBeam.GetMinXPoint().X; double mainBeamMaxX = mainBeam.GetMaxXPoint().X; foreach (CMrPart mrPart in mrPartList) { Vector normal = mrPart.mNormal; if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0))) { if (!mrPart.IsHaveBolt()) { continue; } double partMinX = mrPart.GetMinXPoint().X; double partMaxX = mrPart.GetMaxXPoint().X; if (CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMinX) <= 0 || CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMaxX) >= 0) { continue; } mAllSectionPartList.Add(mrPart); } else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0))) { if (!mrPart.IsHaveBolt()) { continue; } double partMinX = mrPart.GetMinXPoint().X; double partMaxX = mrPart.GetMaxXPoint().X; double partMinY = mrPart.GetMinYPoint().Y; double partMaxY = mrPart.GetMaxYPoint().Y; //过滤掉双夹板; if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinY, mainBeamMinY) < 0 && CDimTools.GetInstance().CompareTwoDoubleValue(partMaxY, mainBeamMinY) > 0) { continue; } if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinY, mainBeamMaxY) < 0 && CDimTools.GetInstance().CompareTwoDoubleValue(partMaxY, mainBeamMaxY) > 0) { continue; } if (CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMinX) <= 0 || CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMaxX) >= 0) { mAllSectionPartList.Add(mrPart); } } else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1))) { if (mrPart.IsHaveBolt()) { double partMinX = mrPart.GetMinXPoint().X; double partMaxX = mrPart.GetMaxXPoint().X; double partMinY = mrPart.GetMinYPoint().Y; double partMaxY = mrPart.GetMaxYPoint().Y; if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMaxX) >= 0 || CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMinX) <= 0) { mAllSectionPartList.Add(mrPart); } } else //判断是否是底板零部件,底板零部件默认加入到链表中; { double partMinX = mrPart.GetMinXPoint().X; double partMaxX = mrPart.GetMaxXPoint().X; double partMaxY = mrPart.GetMaxYPoint().Y; if (CDimTools.GetInstance().CompareTwoDoubleValue(partMaxY, mainBeamMinY) == 0 && partMinX < mainBeamMinX && partMaxX > mainBeamMaxX) { mAllSectionPartList.Add(mrPart); } } } } }
/// <summary> /// 构建需要进行剖视的零部件; /// </summary> private void BuildNeedSectionPartList() { CMrPart mainBeam = CMrMainBeam.GetInstance(); double mainBeamMinY = mainBeam.GetMinYPoint().Y; double mainBeamMaxY = mainBeam.GetMaxYPoint().Y; double mainBeamMinX = mainBeam.GetMinXPoint().X; double mainBeamMaxX = mainBeam.GetMaxXPoint().X; CMrPart leftPart = CMrCylinderDoorFrontManager.GetInstance().mLeftPart; CMrPart leftMiddlePart = CMrCylinderDoorFrontManager.GetInstance().mLeftTopMiddlePart; CMrPart leftTopPart = CMrCylinderDoorFrontManager.GetInstance().mLeftTopPart; CMrPart rightPart = CMrCylinderDoorFrontManager.GetInstance().mRightPart; CMrPart rightMiddlePart = CMrCylinderDoorFrontManager.GetInstance().mRightTopMiddlePart; CMrPart rightTopPart = CMrCylinderDoorFrontManager.GetInstance().mRightTopPart; mrPartList.Remove(leftPart); mrPartList.Remove(leftMiddlePart); mrPartList.Remove(rightPart); mrPartList.Remove(rightMiddlePart); foreach (CMrPart mrPart in mrPartList) { double partMinX = mrPart.GetMinXPoint().X; double partMaxX = mrPart.GetMaxXPoint().X; double partMaxY = mrPart.GetMaxYPoint().Y; double partMinY = mrPart.GetMinYPoint().Y; if (!mrPart.IsHaveBolt()) { continue; } Vector normal = mrPart.mNormal; //如果法向量与X轴平行; if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0))) { if (mrPart == leftTopPart || mrPart == rightTopPart) { mAllSectionPartList.Add(mrPart); } //1.如果竖直的板在柱子中间; if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMinX) > 0 && CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMaxX) < 0) { mAllSectionPartList.Add(mrPart); } //2.如果竖直的板在主梁侧板的外侧; if (leftPart != null && CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, leftPart.GetMinXPoint().X) < 0) { mAllSectionPartList.Add(mrPart); } if (rightPart != null && CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, rightPart.GetMaxXPoint().X) > 0) { mAllSectionPartList.Add(mrPart); } } //如果法向量与Y轴平行; else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0))) { //如果是檩托板中的零部件则返回; if (CMrCylinderDoorFrontManager.GetInstance().FindMrApronPlateByYNormalPart(mrPart) != null) { continue; } //如果是底板; if (CDimTools.GetInstance().CompareTwoDoubleValue(mainBeamMinY, partMaxY) == 0) { mAllSectionPartList.Add(mrPart); } //如果是顶板; if (CDimTools.GetInstance().CompareTwoDoubleValue(mainBeamMaxY, partMinY) == 0) { mAllSectionPartList.Add(mrPart); } if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMaxX) > 0 || CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMinX) < 0) { mAllSectionPartList.Add(mrPart); } if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMinX) > 0 || CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMaxX) < 0) { mAllSectionPartList.Add(mrPart); } } } //1.把类型1中檩托板的任意一块板加进来; CMrApronPlate mrApronPlate = CMrCylinderDoorFrontManager.GetInstance().GetFirstMrApronPlateType1(); if (mrApronPlate != null) { mAllSectionPartList.Add(mrApronPlate.mYNormalPart); } }