示例#1
0
        /// <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;
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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;
            }
        }
示例#4
0
        /// <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;
            }
        }
示例#5
0
        /// <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);
        }
示例#6
0
        /// <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);
        }
示例#8
0
        /// <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);
                        }
                    }
                }
            }
        }
示例#9
0
        /// <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);
            }
        }