/// <summary> /// 获得零件左侧的标注,主要是底部和顶部的零部件; /// </summary> /// <returns></returns> public CMrDimSet GetYLeftPartDim() { CMrDimSet mrDimSet = new CMrDimSet(); CMrPart yNormalBottomPart = CMrCylinderDoorTopManager.GetInstance().mYNormalBottomPart; CMrPart yNormalTopPart = CMrCylinderDoorTopManager.GetInstance().mTopPart; if (mMrPart == yNormalBottomPart) { mrDimSet.AddPoint(mMrPart.GetMinXMinYPoint()); mrDimSet.AddPoint(mMrPart.GetMinXMaxYPoint()); } if (mMrPart == yNormalTopPart) { mrDimSet.AddPoint(mMrPart.GetMinXMinYPoint()); mrDimSet.AddPoint(mMrPart.GetMinXMaxYPoint()); } return(mrDimSet); }
/// <summary> /// 更新上部板和下部板的四个角点; /// </summary> public void UpdatePartBoxPoint(CMrPart mrPart) { Point minX = mrPart.GetMinXPoint(); Point maxX = mrPart.GetMaxXPoint(); Point minY = mrPart.GetMinYPoint(); Point maxY = mrPart.GetMaxYPoint(); Point minXmaxY = mrPart.GetMinXMaxYPoint(); Point minXminY = mrPart.GetMinXMinYPoint(); Point maxXmaxY = mrPart.GetMaxXMaxYPoint(); Point maxXminY = mrPart.GetMaxXMinYPoint(); MrSlopeType mrYSlopeType = CDimTools.GetInstance().JudgeLineSlope(maxY, minY); //1.如果斜率小于零; if (mrYSlopeType == MrSlopeType.LESSTHAN_ZERO) { if (CDimTools.GetInstance().CompareTwoDoubleValue(minXmaxY.X, minXminY.X) == 0 && CDimTools.GetInstance().CompareTwoDoubleValue(minXmaxY.Y, minXminY.Y) != 0) { mrPart.mLeftBottomPoint = minXminY; mrPart.mLeftTopPoint = minXmaxY; if (CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.X, maxXminY.X) == 0 && CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.Y, maxXminY.Y) != 0) { mrPart.mRightTopPoint = maxXmaxY; mrPart.mRightBottomPoint = maxXminY; } else { mrPart.mRightTopPoint = maxX; mrPart.mRightBottomPoint = minY; } } else { mrPart.mLeftBottomPoint = minX; mrPart.mLeftTopPoint = maxY; if (CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.X, maxXminY.X) == 0 && CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.Y, maxXminY.Y) != 0) { mrPart.mRightTopPoint = maxXmaxY; mrPart.mRightBottomPoint = maxXminY; } else { mrPart.mRightTopPoint = maxX; mrPart.mRightBottomPoint = minY; } } } //2.如果斜率大于零; else if (mrYSlopeType == MrSlopeType.MORETHAN_ZERO) { if (CDimTools.GetInstance().CompareTwoDoubleValue(minXmaxY.X, minXminY.X) == 0 && CDimTools.GetInstance().CompareTwoDoubleValue(minXmaxY.Y, minXminY.Y) != 0) { mrPart.mLeftBottomPoint = minXminY; mrPart.mLeftTopPoint = minXmaxY; if (CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.X, maxXminY.X) == 0 && CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.Y, maxXminY.Y) != 0) { mrPart.mRightTopPoint = maxXmaxY; mrPart.mRightBottomPoint = maxXminY; } else { mrPart.mRightTopPoint = maxY; mrPart.mRightBottomPoint = maxX; } } else { mrPart.mLeftBottomPoint = minY; mrPart.mLeftTopPoint = minX; if (CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.X, maxXminY.X) == 0 && CDimTools.GetInstance().CompareTwoDoubleValue(maxXmaxY.Y, maxXminY.Y) != 0) { mrPart.mRightTopPoint = maxXmaxY; mrPart.mRightBottomPoint = maxXminY; } else { mrPart.mRightTopPoint = maxY; mrPart.mRightBottomPoint = maxX; } } } //3.如果斜率为无穷; else if (mrYSlopeType == MrSlopeType.INFINITY) { mrPart.mLeftBottomPoint = mrPart.GetMinXMinYPoint(); mrPart.mLeftTopPoint = mrPart.GetMinXMaxYPoint(); mrPart.mRightTopPoint = mrPart.GetMaxXMaxYPoint(); mrPart.mRightBottomPoint = mrPart.GetMaxXMinYPoint(); } }
/// <summary> /// 获取主梁左侧的标注集合; /// </summary> /// <returns></returns> public CMrDimSet GetYPartMainLeftDimSet() { CMrDimSet mrDimSet = new CMrDimSet(); Vector xVector = new Vector(1, 0, 0); Vector yVector = new Vector(0, 1, 0); Vector zVector = new Vector(0, 0, 1); double mainBeamMinX = CMrMainBeam.GetInstance().GetMinXPoint().X; double mainBeamMaxX = CMrMainBeam.GetInstance().GetMaxXPoint().X; double partMinX = mMrPart.GetMinXPoint().X; double partMaxX = mMrPart.GetMaxXPoint().X; CMrPart mrLeftPart = CMrCylinderDoorFrontManager.GetInstance().mLeftPart; CMrPart mrLeftTopPart = CMrCylinderDoorFrontManager.GetInstance().mLeftTopPart; CMrPart mrLeftTopMiddlePart = CMrCylinderDoorFrontManager.GetInstance().mLeftTopMiddlePart; CMrPart mrZNormalBottomPart = CMrCylinderDoorFrontManager.GetInstance().mZNormalBottomPart; CMrPart mrYNormalBottomPart = CMrCylinderDoorFrontManager.GetInstance().mYNormalBottomPart; CMrPart mrTopPart = CMrCylinderDoorFrontManager.GetInstance().mTopPart; CMrPart mrRightPart = CMrCylinderDoorFrontManager.GetInstance().mRightPart; Vector normal = mMrPart.mNormal; //1.如果是左下侧法向与z轴平行的零部件; if (mMrPart == mrZNormalBottomPart) { mrDimSet.AddPoint(mMrPart.GetMinXMinYPoint()); return(mrDimSet); } //2.如果是左侧上方的零部件; if (mMrPart == mrLeftTopPart) { if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMinX) > 0) { return(null); } else { mrDimSet.AddPoint(mMrPart.GetMinXMinYPoint()); return(mrDimSet); } } //3.如果是左上侧上方中间的零部件; if (mMrPart == mrLeftTopMiddlePart) { mrDimSet.AddPoint(mMrPart.GetMinXMaxYPoint()); return(mrDimSet); } //4.如果是下侧法向与Y轴平行的零部件; if (mMrPart == mrYNormalBottomPart) { mrDimSet.AddPoint(mrYNormalBottomPart.GetMinXMaxYPoint()); mrDimSet.AddPoint(mrYNormalBottomPart.GetMinXMinYPoint()); return(mrDimSet); } //5.如果是上侧的零部件; if (mMrPart == mrTopPart) { //如果上侧零件的法向与Y轴平行; if (CDimTools.GetInstance().IsTwoVectorParallel(normal, yVector)) { mrDimSet.AddPoint(mrTopPart.GetMinXMaxYPoint()); mrDimSet.AddPoint(mrTopPart.GetMinXMinYPoint()); return(mrDimSet); } //如果法向不与Y轴平行; else if (CDimTools.GetInstance().IsVectorInXYPlane(normal)) { Point maxYPoint = mMrPart.GetMaxYPoint(); Point minYPoint = mMrPart.GetMinYPoint(); MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(minYPoint, maxYPoint); if (mrSlopeType == MrSlopeType.MORETHAN_ZERO) { mrDimSet.AddPoint(mMrPart.GetMaxYPoint()); mrDimSet.AddPoint(mMrPart.GetMinXPoint()); return(mrDimSet); } } } double leftMinX = mrLeftPart.GetMinXPoint().X; //6.如果向量与X轴平行,并且该零部件贴在左侧板上; if (CDimTools.GetInstance().IsTwoVectorParallel(normal, xVector)) { //A:如果左上侧零部件不为空; if (mrLeftTopPart != null && mrLeftTopPart.GetMinXMinYPoint().Y < mMrPart.GetMaxYPoint().Y) { double leftTopMinX = mrLeftTopPart.GetMinXPoint().X; if (Math.Abs(partMaxX - leftTopMinX) < CCommonPara.mDblError) { mrDimSet.AddPoint(mMrPart.GetMinXMinYPoint()); return(mrDimSet); } else if (partMaxX < leftTopMinX) { CMrCylinderDoorFrontManager.GetInstance().AppendXNormalAloneDimPart(mMrPart); } } //B:如果左上侧中间零件不为空; if (mrLeftTopMiddlePart != null && mrLeftTopMiddlePart.GetMinXMinYPoint().Y < mMrPart.GetMaxYPoint().Y) { double leftTopMiddleMinX = mrLeftTopMiddlePart.GetMinXPoint().X; if (Math.Abs(partMaxX - leftTopMiddleMinX) < CCommonPara.mDblError) { mrDimSet.AddPoint(mMrPart.GetMinXMinYPoint()); return(mrDimSet); } else if (partMaxX < leftTopMiddleMinX) { CMrCylinderDoorFrontManager.GetInstance().AppendXNormalAloneDimPart(mMrPart); } } else { if (Math.Abs(partMaxX - leftMinX) < CCommonPara.mDblError) { mrDimSet.AddPoint(mMrPart.GetMinXMinYPoint()); return(mrDimSet); } else if (partMaxX < leftMinX) { CMrCylinderDoorFrontManager.GetInstance().AppendXNormalAloneDimPart(mMrPart); } } } //7.如果向量与Y轴平行; else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, yVector)) { if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, leftMinX) < 0 && CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, leftMinX) >= 0) { CMrApronPlate mrApronPlate = CMrCylinderDoorFrontManager.GetInstance().FindMrApronPlateByYNormalPart(mMrPart); if (mrApronPlate != null) { if (mrApronPlate.mIsUp == true) { mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint()); } else { mrDimSet.AddPoint(mMrPart.GetMinXMaxYPoint()); } } else { mrDimSet.AddPoint(mMrPart.GetMinXMaxYPoint()); } } } return(mrDimSet); }