/// <summary>
        /// 获取上翼板向两边弯时顶视图下方的标注集合;
        /// </summary>
        /// <returns></returns>
        public CMrDimSet GetXDownDimSetMiddle()
        {
            if (!IsNeedXDownDimMiddle())
            {
                return(null);
            }

            CMrDimSet mrDimSet = new CMrDimSet();

            CMrPart leftBottomBeam  = CMrBeamDoorManager.GetInstance().mLeftBottomBeam;
            CMrPart rightBottomBeam = CMrBeamDoorManager.GetInstance().mRightBottomBeam;

            Point midMaxPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint;

            if (mMrPart == leftBottomBeam)
            {
                mrDimSet.AddPoint(mMrPart.mRightBottomPoint);
            }
            else if (mMrPart == rightBottomBeam)
            {
                mrDimSet.AddPoint(mMrPart.mLeftBottomPoint);
            }
            else
            {
                if (mMrPart.mLeftBottomPoint.X < midMaxPoint.X)
                {
                    mrDimSet.AddPoint(mMrPart.mLeftBottomPoint);
                }
                else if (mMrPart.mLeftBottomPoint.X > midMaxPoint.X)
                {
                    mrDimSet.AddPoint(mMrPart.mRightBottomPoint);
                }
            }
            return(mrDimSet);
        }
        /// <summary>
        /// 获取顶视图上方的标注集合;
        /// </summary>
        /// <returns></returns>
        public CMrDimSet GetXUpDimSetNormal()
        {
            if (!IsNeedXUpDimNormal())
            {
                return(null);
            }

            CMrDimSet mrDimSet = new CMrDimSet();

            CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam;

            Vector normal        = mMrPart.mNormal;
            Vector topBeamNormal = topBeam.mNormal;

            Point leftTopPoint  = topBeam.mLeftTopPoint;
            Point rightTopPoint = topBeam.mRightTopPoint;

            MrSlopeType slopeType = CDimTools.GetInstance().JudgeLineSlope(leftTopPoint, rightTopPoint);

            if (slopeType == MrSlopeType.MORETHAN_ZERO)
            {
                if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
                {
                    mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint());
                }
                else
                {
                    mrDimSet.AddPoint(mMrPart.mRightTopPoint);
                }
            }
            else if (slopeType == MrSlopeType.LESSTHAN_ZERO)
            {
                if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
                {
                    mrDimSet.AddPoint(mMrPart.GetMinXMaxYPoint());
                }
                else
                {
                    mrDimSet.AddPoint(mMrPart.mLeftTopPoint);
                }
            }
            else
            {
                mrDimSet.AddPoint(mMrPart.mLeftTopPoint);
            }

            return(mrDimSet);
        }
        /// <summary>
        /// 获取主梁右侧螺钉组的标注;
        /// </summary>
        /// <returns></returns>
        public CMrDimSet GetYRightBoltDim()
        {
            Vector zVector = new Vector(0, 0, 1);
            Vector normal  = mMrPart.mNormal;

            double maxX = mMrPart.GetMaxXPoint().X;

            if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, zVector))
            {
                return(null);
            }
            if (maxX < CCommonPara.mDblError || !mMrPart.IsHaveBolt())
            {
                return(null);
            }

            CMrDimSet mrDimSet = new CMrDimSet();

            List <CMrBoltArray> mrBoltArrayList = mMrPart.GetBoltArrayList();

            foreach (CMrBoltArray mrBoltArray in mrBoltArrayList)
            {
                //如果螺钉组的法向与Z轴不平行,则返回继续执行;
                if (!CDimTools.GetInstance().IsTwoVectorParallel(zVector, mrBoltArray.mNormal))
                {
                    continue;
                }
                if (mrBoltArray.mBoltArrayShapeType == MrBoltArrayShapeType.ARRAY)
                {
                    List <Point> maxPointList = mrBoltArray.GetMaxXPointList();

                    mrDimSet.AddRange(maxPointList);
                }
                else if (mrBoltArray.mBoltArrayShapeType == MrBoltArrayShapeType.OBLIQUELINE)
                {
                    List <Point> boltPointList = mrBoltArray.GetBoltPointList();

                    mrDimSet.AddRange(boltPointList);
                }
            }
            return(mrDimSet);
        }
        /// <summary>
        /// 获得零件右侧的标注,主要是底部和顶部的零部件;
        /// </summary>
        /// <returns></returns>
        public CMrDimSet GetYRightPartDim()
        {
            CMrDimSet mrDimSet = new CMrDimSet();

            CMrPart yNormalBottomPart = CMrCylinderDoorTopManager.GetInstance().mYNormalBottomPart;
            CMrPart yNormalTopPart    = CMrCylinderDoorTopManager.GetInstance().mTopPart;

            if (mMrPart == yNormalBottomPart)
            {
                mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());
                mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint());
            }
            if (mMrPart == yNormalTopPart)
            {
                mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());
                mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint());
            }

            return(mrDimSet);
        }
        /// <summary>
        /// 获得法向与Z轴平行的中间的零件中螺钉标注;
        /// </summary>
        /// <returns></returns>
        public List <CMrDimSet> GetZNormalMiddleDimSet()
        {
            List <CMrDimSet> mrDimSetList = new List <CMrDimSet>();

            Vector normal = mMrPart.mNormal;

            double minX = mMrPart.GetMinXPoint().X;
            double maxX = mMrPart.GetMaxXPoint().X;

            if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)) || !mMrPart.IsHaveBolt())
            {
                return(mrDimSetList);
            }
            if (CDimTools.GetInstance().CompareTwoDoubleValue(minX, 0) >= 0 ||
                CDimTools.GetInstance().CompareTwoDoubleValue(maxX, 0) <= 0)
            {
                return(mrDimSetList);
            }

            List <CMrBoltArray> mrBoltArrayList = mMrPart.GetBoltArrayList();

            foreach (CMrBoltArray mrBoltArray in mrBoltArrayList)
            {
                if (!CDimTools.GetInstance().IsTwoVectorParallel(mrBoltArray.mNormal, new Vector(0, 0, 1)))
                {
                    continue;
                }

                List <Point> pointList = mrBoltArray.GetMaxYPointList();

                CMrDimSet mrDimSet = new CMrDimSet();

                mrDimSet.AddRange(pointList);
                mrDimSet.mDimVector   = new Vector(0, 1, 0);
                mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance;
                mrDimSetList.Add(mrDimSet);
            }

            return(mrDimSetList);
        }
        /// <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>
        /// 获取主梁为类型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>
        /// <returns></returns>
        public CMrDimSet GetXDownDimSetNormal()
        {
            if (!IsNeedXDownDimNormal())
            {
                return(null);
            }

            Vector normal = mMrPart.mNormal;

            CMrDimSet mrDimSet = new CMrDimSet();

            if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
            {
                mrDimSet.AddPoint(mMrPart.mLeftBottomPoint);
            }
            else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0)))
            {
                mrDimSet.AddPoint(mMrPart.mLeftBottomPoint);
                mrDimSet.AddPoint(mMrPart.mRightBottomPoint);
            }

            return(mrDimSet);
        }
        /// <summary>
        /// 获取零件上螺钉的标注集,只有左侧或则右侧的零部件螺钉需要标注;
        /// </summary>
        /// <returns></returns>
        public List <CMrDimSet> GetBoltDimSetList()
        {
            List <CMrDimSet> mrDimSetList = new List <CMrDimSet>();

            Vector normal = mMrPart.mNormal;

            Vector zVector = new Vector(0, 0, 1);

            double minX = mMrPart.GetMinXPoint().X;
            double maxX = mMrPart.GetMaxYPoint().X;

            if (minX < 0 && maxX > 0)
            {
                return(mrDimSetList);
            }
            if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, zVector))
            {
                return(mrDimSetList);
            }

            List <CMrBoltArray> mrBoltArrayList = mMrPart.GetBoltArrayList();

            foreach (CMrBoltArray mrBoltArray in mrBoltArrayList)
            {
                if (mrBoltArray.mBoltArrayShapeType == MrBoltArrayShapeType.ARRAY)
                {
                    List <Point> maxYPointList = mrBoltArray.GetMaxYPointList();

                    CMrDimSet mrDimSet = new CMrDimSet();

                    mrDimSet.AddRange(maxYPointList);
                    mrDimSet.AddPoint(new Point(0, maxYPointList[0].Y, 0));
                    mrDimSet.mDimVector   = new Vector(0, 1, 0);
                    mrDimSet.mDimDistance = Math.Abs(maxYPointList[0].Y - mMrPart.GetMaxYPoint().Y) + 60;

                    if (mrDimSet.mDimDistance > 500)
                    {
                        mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance;
                    }

                    mrDimSetList.Add(mrDimSet);
                }
                else if (mrBoltArray.mBoltArrayShapeType == MrBoltArrayShapeType.OBLIQUELINE)
                {
                    List <Point> boltPointList = mrBoltArray.GetBoltPointList();

                    CMrDimSet mrDimSet = new CMrDimSet();

                    Point firstPt  = mrBoltArray.mFirstPoint;
                    Point secondPt = mrBoltArray.mSecondPoint;

                    Vector dimVector = null;

                    MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(firstPt, secondPt);

                    if (mrSlopeType == MrSlopeType.MORETHAN_ZERO)
                    {
                        dimVector             = new Vector(0, 1, 0);
                        mrDimSet.mDimDistance = Math.Abs(boltPointList[0].Y - mMrPart.GetMaxYPoint().Y) + 60;
                    }
                    else if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO)
                    {
                        dimVector             = new Vector(0, -1, 0);
                        mrDimSet.mDimDistance = Math.Abs(boltPointList[0].Y - mMrPart.GetMinYPoint().Y) + 60;
                    }

                    if (mrDimSet.mDimDistance > 500)
                    {
                        mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance;
                    }

                    mrDimSet.AddRange(boltPointList);
                    mrDimSet.mDimVector = dimVector;
                    mrDimSet.AddPoint(new Point(0, boltPointList[0].Y, 0));

                    mrDimSetList.Add(mrDimSet);
                }
            }
            return(mrDimSetList);
        }
Пример #10
0
        /// <summary>
        /// 获取主梁右侧的标注集合;
        /// </summary>
        /// <returns></returns>
        public CMrDimSet GetYPartMainRightDimSet()
        {
            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;

            if (partMaxX < CCommonPara.mDblError)
            {
                return(null);
            }

            CMrPart mrRightPart          = CMrCylinderDoorFrontManager.GetInstance().mRightPart;
            CMrPart mrRightTopPart       = CMrCylinderDoorFrontManager.GetInstance().mRightTopPart;
            CMrPart mrRightTopMiddlePart = CMrCylinderDoorFrontManager.GetInstance().mRightTopMiddlePart;

            CMrPart mrTopPart           = CMrCylinderDoorFrontManager.GetInstance().mTopPart;
            CMrPart mrZNormalBottomPart = CMrCylinderDoorFrontManager.GetInstance().mZNormalBottomPart;
            CMrPart mrYNormalBottomPart = CMrCylinderDoorFrontManager.GetInstance().mYNormalBottomPart;

            Vector normal = mMrPart.mNormal;

            //1.如果是左下侧法向与z轴平行的零部件;
            if (mMrPart == mrZNormalBottomPart)
            {
                mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());
                return(mrDimSet);
            }
            //2.如果是右上侧的零部件;
            if (mMrPart == mrRightTopPart)
            {
                if (CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMaxX) < 0)
                {
                    return(null);
                }
                else
                {
                    mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());
                    return(mrDimSet);
                }
            }
            //3.如果是右上侧中间的零部件;
            if (mMrPart == mrRightTopMiddlePart)
            {
                mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint());
                return(mrDimSet);
            }
            //4.如果是下侧法向与Y轴平行的零部件;
            if (mMrPart == mrYNormalBottomPart)
            {
                mrDimSet.AddPoint(mrYNormalBottomPart.GetMaxXMaxYPoint());
                mrDimSet.AddPoint(mrYNormalBottomPart.GetMaxXMinYPoint());

                return(mrDimSet);
            }
            //5.如果是上侧的零部件;
            if (mMrPart == mrTopPart)
            {
                //A.如果上侧零件的法向与Y轴平行;
                if (CDimTools.GetInstance().IsTwoVectorParallel(normal, yVector))
                {
                    mrDimSet.AddPoint(mrTopPart.GetMaxXMaxYPoint());
                    mrDimSet.AddPoint(mrTopPart.GetMaxXMinYPoint());
                    return(mrDimSet);
                }
                //B.如果法向不与Y轴平行;
                else if (CDimTools.GetInstance().IsVectorInXYPlane(normal))
                {
                    Point minYPoint = mMrPart.GetMinYPoint();
                    Point maxYPoint = mMrPart.GetMaxYPoint();

                    MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(minYPoint, maxYPoint);

                    if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO)
                    {
                        mrDimSet.AddPoint(mMrPart.GetMaxYPoint());
                        mrDimSet.AddPoint(mMrPart.GetMaxXPoint());
                        return(mrDimSet);
                    }
                }
            }
            //6.如果向量与X轴平行,并且该零部件贴在右侧板上或右上侧板上的;
            if (CDimTools.GetInstance().IsTwoVectorParallel(normal, xVector))
            {
                //A.如果右上侧的零件不为空,并且该零件的左侧就是右上侧的板;
                if (mrRightTopPart != null && mrRightTopPart.GetMaxXMinYPoint().Y < mMrPart.GetMaxYPoint().Y)
                {
                    double rightTopMaxX = mrRightTopPart.GetMaxXPoint().X;

                    if (Math.Abs(partMinX - rightTopMaxX) < CCommonPara.mDblError)
                    {
                        mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());

                        CMrCylinderDoorFrontManager.GetInstance().AppendRightDimPart(mMrPart);

                        return(mrDimSet);
                    }
                    else if (partMinX > rightTopMaxX)
                    {
                        CMrCylinderDoorFrontManager.GetInstance().AppendXNormalAloneDimPart(mMrPart);
                    }
                }
                //B.如果右上侧中间的零件不为空,并且该零件的左侧就是右上侧中间的板;
                if (mrRightTopMiddlePart != null && mrRightTopMiddlePart.GetMaxXMinYPoint().Y < mMrPart.GetMaxYPoint().Y)
                {
                    double rightTopMiddleMaxX = mrRightTopMiddlePart.GetMaxXPoint().X;

                    if (Math.Abs(partMinX - rightTopMiddleMaxX) < CCommonPara.mDblError)
                    {
                        mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());

                        CMrCylinderDoorFrontManager.GetInstance().AppendRightDimPart(mMrPart);

                        return(mrDimSet);
                    }
                    else if (partMinX > rightTopMiddleMaxX)
                    {
                        CMrCylinderDoorFrontManager.GetInstance().AppendXNormalAloneDimPart(mMrPart);
                    }
                }
                //C.如果零件的左侧不是右上侧板;
                else
                {
                    double rightMaxX = mrRightPart.GetMaxXPoint().X;

                    if (Math.Abs(partMinX - rightMaxX) < CCommonPara.mDblError)
                    {
                        mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());

                        CMrCylinderDoorFrontManager.GetInstance().AppendRightDimPart(mMrPart);

                        return(mrDimSet);
                    }
                    else if (partMinX > rightMaxX)
                    {
                        CMrCylinderDoorFrontManager.GetInstance().AppendXNormalAloneDimPart(mMrPart);
                    }
                }
            }
            //7.如果向量与Y轴平行;
            else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, yVector))
            {
                double rightMaxX = mrRightPart.GetMaxXPoint().X;

                if (CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, rightMaxX) > 0 &&
                    CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, rightMaxX) <= 0)
                {
                    CMrApronPlate mrApronPlate = CMrCylinderDoorFrontManager.GetInstance().FindMrApronPlateByYNormalPart(mMrPart);

                    if (mrApronPlate != null)
                    {
                        if (mrApronPlate.mIsUp == true)
                        {
                            mrDimSet.AddPoint(mMrPart.GetMaxXMinYPoint());
                        }
                        else
                        {
                            mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint());
                        }
                    }
                    else
                    {
                        mrDimSet.AddPoint(mMrPart.GetMaxXMaxYPoint());
                    }

                    CMrCylinderDoorFrontManager.GetInstance().AppendRightDimPart(mMrPart);
                }
                else if (IsYNormalPartInMainBeamMiddle(mMrPart))
                {
                    CMrCylinderDoorFrontManager.GetInstance().AppendYNormalMiddleDimPart(mMrPart);

                    return(null);
                }
            }
            return(mrDimSet);
        }
Пример #11
0
        /// <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);
        }