/// <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);
        }
Ejemplo n.º 2
0
        /// <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();
            }
        }
Ejemplo n.º 3
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);
        }