Exemplo n.º 1
0
        /// <summary>
        /// 更新零件包围盒的四个角点;
        /// </summary>
        public virtual void UpdatePartBoxPoint()
        {
            Point minX = GetMinXPoint();
            Point maxX = GetMaxXPoint();
            Point minY = GetMinYPoint();
            Point maxY = GetMaxYPoint();

            MrSlopeType mrYSlopeType = CDimTools.GetInstance().JudgeLineSlope(maxY, minY);
            MrSlopeType mrXSlopeType = CDimTools.GetInstance().JudgeLineSlope(maxX, minX);

            //1.如果斜率大于零;
            if (mrYSlopeType == MrSlopeType.MORETHAN_ZERO)
            {
                mLeftBottomPoint  = minX;
                mLeftTopPoint     = maxY;
                mRightTopPoint    = maxX;
                mRightBottomPoint = minY;
            }
            //2.如果斜率小于零;
            if (mrXSlopeType == MrSlopeType.LESSTHAN_ZERO)
            {
                mLeftBottomPoint  = minY;
                mLeftTopPoint     = minX;
                mRightTopPoint    = maxY;
                mRightBottomPoint = maxX;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 得到顶板向上的标注向量;
        /// </summary>
        /// <returns></returns>
        public Vector GetTopBeamUpDimVector()
        {
            CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam;

            Point leftTopPt  = topBeam.mLeftTopPoint;
            Point rightTopPt = topBeam.mRightTopPoint;

            MrSlopeType slopeType = CDimTools.GetInstance().JudgeLineSlope(leftTopPt, rightTopPt);

            Vector normal = new Vector(rightTopPt.X - leftTopPt.X, rightTopPt.Y - leftTopPt.Y, 0);

            Vector upDimVector = new Vector(normal.Y, -normal.X, 0);

            if (slopeType == MrSlopeType.MORETHAN_ZERO)
            {
                upDimVector.X = -Math.Abs(upDimVector.X);
                upDimVector.Y = Math.Abs(upDimVector.Y);
                upDimVector.Z = 0;
            }
            else
            {
                upDimVector.X = Math.Abs(upDimVector.X);
                upDimVector.Y = Math.Abs(upDimVector.Y);
                upDimVector.Z = 0;
            }

            return(upDimVector);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 绘制主梁上螺钉的标注;
        /// </summary>
        private void DrawMainBeamBoltDimNormal()
        {
            CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam;

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

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

            foreach (CMrBoltArray mrBoltArray in mrBoltArrayList)
            {
                Point boltPoint = mrBoltArray.GetMaxXPoint();

                //寻找与该零件最近的零部件;
                CMrPart mostNearPart = CMrBeamDoorManager.GetInstance().GetMostNearPart(boltPoint);

                if (mostNearPart == null)
                {
                    continue;
                }

                //(1).与顶板平行方向标注螺钉;
                PointList pointList = new PointList();

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

                if (slopeType == MrSlopeType.MORETHAN_ZERO)
                {
                    pointList.Add(mostNearPart.mRightTopPoint);
                }
                else
                {
                    pointList.Add(mostNearPart.mLeftTopPoint);
                }

                pointList.Add(boltPoint);

                Vector dimVector   = CMrBeamDoorManager.GetInstance().GetTopBeamUpDimVector();
                double dblDistance = CCommonPara.mDefaultDimDistance;
                CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dblDistance, CCommonPara.mSizeDimPath);

                //(2).与顶板竖直方向标注板的位置;
                pointList.Clear();
                pointList.Add(boltPoint);
                Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(boltPoint, topBeam.mLeftTopPoint, topBeam.mRightTopPoint);
                pointList.Add(fontPt);
                dimVector = new Vector(rightTopPoint.X - leftTopPoint.X, rightTopPoint.Y - leftTopPoint.Y, 0);
                CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dblDistance, CCommonPara.mSizeDimPath);
            }
        }
        /// <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>
        /// 计算BoltArray的形状;
        /// </summary>
        public void InitBoltArrayShape()
        {
            if (mMrBoltList.Count() == 0)
            {
                return;
            }

            MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(mFirstPoint, mSecondPoint);

            if (mrSlopeType == MrSlopeType.EQUAL_ZERO || mrSlopeType == MrSlopeType.INFINITY || mMrBoltList.Count == 0)
            {
                mBoltArrayShapeType = MrBoltArrayShapeType.ARRAY;
            }
            else if (mrSlopeType == MrSlopeType.MORETHAN_ZERO || mrSlopeType == MrSlopeType.LESSTHAN_ZERO)
            {
                mBoltArrayShapeType = MrBoltArrayShapeType.OBLIQUELINE;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 得到右侧挡板零件向右的标注向量;
        /// </summary>
        /// <returns></returns>
        public Vector GetRightBeamRightDimVector()
        {
            Vector normal = mRightBeam.mNormal;

            Vector dimVector = new Vector();

            //根据挡板的斜率来判断标注的方向;
            MrSlopeType slopeType = CDimTools.GetInstance().JudgeLineSlope(mRightBeam.mRightTopPoint, mRightBeam.mRightBottomPoint);

            if (slopeType == MrSlopeType.MORETHAN_ZERO)
            {
                dimVector = new Vector(Math.Abs(normal.X), -Math.Abs(normal.Y), 0);
            }
            else
            {
                dimVector = new Vector(Math.Abs(normal.X), Math.Abs(normal.Y), 0);
            }

            return(dimVector);
        }
        /// <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 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);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 计算上翼板的参数;
        /// </summary>
        public void ComputeTypeMiddleParas()
        {
            Vector topNormal = mTopBeam.mNormal;

            MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), topNormal);

            Point minXmaxYPt = mTopBeam.GetMinXMaxYPoint();
            Point maxXmaxYPt = mTopBeam.GetMaxXMaxYPoint();

            if (Math.Abs(minXmaxYPt.Y - maxXmaxYPt.Y) > 10)
            {
                mMidMaxPoint = new Point((minXmaxYPt.X + maxXmaxYPt.X) / 2.0, (minXmaxYPt.Y + maxXmaxYPt.Y) / 2.0, 0);

                mType = MrBeamDoorType.TypeMiddle3;
            }
            else if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO)
            {
                //1.计算出中心Y值最大的点;
                mMidMaxPoint = mTopBeam.GetMaxYPoint();
                mType        = MrBeamDoorType.TypeMiddle1;
            }
            else if (mrSlopeType == MrSlopeType.MORETHAN_ZERO)
            {
                mMidMaxPoint = mTopBeam.GetMinYPoint();
                mType        = MrBeamDoorType.TypeMiddle2;
            }

            //2.计算出左上角和左下角的点;
            List <Point> pointList    = mTopBeam.GetPointList();
            List <Point> newPointList = new List <Point>();

            foreach (Point point in pointList)
            {
                if (point.X < mMidMaxPoint.X)
                {
                    newPointList.Add(point);
                }
            }

            Point minY = CDimTools.GetInstance().GetMinYPoint(newPointList);
            Point maxY = CDimTools.GetInstance().GetMaxYPoint(newPointList);

            mTopBeam.mLeftBottomPoint = minY;
            mTopBeam.mLeftTopPoint    = maxY;

            newPointList.Clear();

            //3.计算右上角和右下角的点;
            foreach (Point point in pointList)
            {
                if (point.X > mMidMaxPoint.X)
                {
                    newPointList.Add(point);
                }
            }

            maxY = CDimTools.GetInstance().GetMaxYPoint(newPointList);
            minY = CDimTools.GetInstance().GetMinYPoint(newPointList);

            mTopBeam.mRightTopPoint    = maxY;
            mTopBeam.mRightBottomPoint = minY;

            //4.计算左右两边的法向;
            Vector normal = mTopBeam.mNormal;

            if (mType == MrBeamDoorType.TypeMiddle1)
            {
                mLeftTopVector  = new Vector(-Math.Abs(normal.X), Math.Abs(normal.Y), 0);
                mRightTopVector = new Vector(Math.Abs(normal.X), Math.Abs(normal.Y), 0);
            }
            else if (mType == MrBeamDoorType.TypeMiddle2)
            {
                mLeftTopVector  = new Vector(Math.Abs(normal.X), Math.Abs(normal.Y), 0);
                mRightTopVector = new Vector(-Math.Abs(normal.X), Math.Abs(normal.Y), 0);
            }
            else if (mType == MrBeamDoorType.TypeMiddle3)
            {
                mLeftTopVector  = normal;
                mRightTopVector = normal;
            }
        }
Exemplo n.º 10
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();
            }
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
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);
        }
Exemplo n.º 13
0
        /// <summary>
        /// 绘制中间主梁类型为3时向上的标注;
        /// </summary>
        private void DrawTypeMiddle3XUpDim()
        {
            //1.绘制左侧上方的标注;
            bool bNeedUpDim = false;

            List <Point> upDimPointList = new List <Point>();

            foreach (CMrPart mrPart in mMrPartList)
            {
                CMrDimSet partDimSet = mrPart.GetBeamDoorFrontViewInfo().GetTypeMiddle3XUpDimSetMiddle();

                if (partDimSet != null && partDimSet.Count > 0)
                {
                    bNeedUpDim = true;
                    upDimPointList.AddRange(partDimSet.GetDimPointList());
                }
            }
            if (bNeedUpDim == false)
            {
                return;
            }

            CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam;

            Point leftTopPt  = topBeam.mLeftTopPoint;
            Point rightTopPt = topBeam.mRightTopPoint;

            upDimPointList.Add(leftTopPt);
            upDimPointList.Add(rightTopPt);

            Comparison <Point> sorterX = new Comparison <Point>(CDimTools.ComparePointX);

            upDimPointList.Sort(sorterX);

            PointList pointList = new PointList();

            foreach (Point point in upDimPointList)
            {
                pointList.Add(point);
            }

            double dimDistance = Math.Abs(CCommonPara.mViewMaxY - upDimPointList[0].Y) + 2 * CCommonPara.mDefaultDimDistance;

            //计算标注向量;
            Vector directVector = new Vector(rightTopPt.X - leftTopPt.X, rightTopPt.Y - leftTopPt.Y, 0);

            directVector.Normalize();
            Vector upDimVector = new Vector(directVector.Y, -directVector.X, 0);

            MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(directVector, new Point(0, 0, 0));

            if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO)
            {
                upDimVector = new Vector(Math.Abs(upDimVector.X), Math.Abs(upDimVector.Y), 0);
            }
            else if (mrSlopeType == MrSlopeType.MORETHAN_ZERO)
            {
                upDimVector = new Vector(-Math.Abs(upDimVector.X), Math.Abs(upDimVector.Y), 0);
            }

            CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath);

            //2.再标注一个总长度;
            pointList.Clear();
            pointList.Add(leftTopPt);
            pointList.Add(rightTopPt);

            dimDistance = Math.Abs(CCommonPara.mViewMaxY - leftTopPt.Y) + 4 * CCommonPara.mDefaultDimDistance;

            CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath);
        }
Exemplo n.º 14
0
        /// <summary>
        /// 绘制主梁中间的零部件标注;
        /// 主梁中间的零部件只有法向与主梁顶部部件平行的才进行标注;
        /// </summary>
        private void DrawMainBeamMiddlePartDimNormal()
        {
            CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam;

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

            CMrBeamDoorManager.GetInstance().BuildMostNearPartToPartList(mMrPartList);

            Dictionary <CMrPart, List <CMrPart> > dicPartToPartList = CMrBeamDoorManager.GetInstance().mDicPartToPartList;

            List <CMrDimSet> mrDimSetList = new List <CMrDimSet>();

            foreach (CMrPart mostNearPart in dicPartToPartList.Keys)
            {
                List <CMrPart> mrPartList = dicPartToPartList[mostNearPart];

                if (mrPartList.Count == 0)
                {
                    continue;
                }

                //(1).与顶板平行方向标注螺钉;
                CMrDimSet mrDimSet = new CMrDimSet();

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

                if (slopeType == MrSlopeType.MORETHAN_ZERO)
                {
                    mrDimSet.AddPoint(mostNearPart.mRightTopPoint);
                }
                else
                {
                    mrDimSet.AddPoint(mostNearPart.mLeftTopPoint);
                }

                foreach (CMrPart mrPart in mrPartList)
                {
                    CMrBoltArray mrBoltArray = mrPart.GetBoltArrayList()[0];
                    Point        boltPoint   = mrBoltArray.GetMaxXPoint();
                    mrDimSet.AddPoint(boltPoint);
                }

                mrDimSet.mDimVector   = CMrBeamDoorManager.GetInstance().GetTopBeamUpDimVector();
                mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance;
                mrDimSetList.Add(mrDimSet);

                //(2).与顶板竖直方向标注;
                mrDimSet = new CMrDimSet();
                mrDimSet.AddPoint(mrPartList[0].mRightBottomPoint);

                Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(mrPartList[0].mRightBottomPoint, topBeam.mLeftTopPoint, topBeam.mRightTopPoint);
                mrDimSet.AddPoint(fontPt);
                mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance;

                mrDimSet.mDimVector = new Vector(rightTopPoint.X - leftTopPoint.X, rightTopPoint.Y - leftTopPoint.Y, 0);
                mrDimSetList.Add(mrDimSet);
            }
            foreach (CMrDimSet mrDimSet in mrDimSetList)
            {
                List <Point> dimPointList = mrDimSet.GetDimPointList();

                PointList pointList = new PointList();

                foreach (Point point in dimPointList)
                {
                    pointList.Add(point);
                }

                Vector dimVector = mrDimSet.mDimVector;
                double length    = mrDimSet.mDimDistance;

                CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, length, CCommonPara.mSizeDimPath);
            }
        }
        /// <summary>
        /// 获取上翼板左斜或者右斜时的零件标记;
        /// </summary>
        /// <returns></returns>
        public CMrMark GetPartMarkNormal()
        {
            CMrPart topBeam    = CMrBeamDoorManager.GetInstance().mTopBeam;
            CMrPart bottomBeam = CMrBeamDoorManager.GetInstance().mBottonBeam;
            CMrPart leftBeam   = CMrBeamDoorManager.GetInstance().mLeftBeam;
            CMrPart rightBeam  = CMrBeamDoorManager.GetInstance().mRightBeam;

            Point  minY   = mMrPart.GetMinYPoint();
            Point  maxY   = mMrPart.GetMaxYPoint();
            Vector normal = mMrPart.mNormal;

            CMrMark mrMark   = new CMrMark();
            double  dblAngle = CCommonPara.mPartMarkAngle;

            mrMark.mModelObject = mMrPart.mPartInDrawing;

            if (mMrPart == leftBeam)
            {
                mrMark.mInsertPoint = mMrPart.mMidPoint;
                double increaseXDistance = 1.8 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                mrMark.mTextPoint.X = mrMark.mInsertPoint.X - increaseXDistance;
                mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 1.8 * CCommonPara.mPartMarkLength;
                return(mrMark);
            }
            if (mMrPart == rightBeam)
            {
                mrMark.mInsertPoint = mMrPart.mMidPoint;
                double increaseXDistance = 1.8 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 1.8 * CCommonPara.mPartMarkLength;
                return(mrMark);
            }
            if (mMrPart == topBeam || mMrPart == bottomBeam)
            {
                mrMark.mInsertPoint = mMrPart.mMidPoint;
                double increaseXDistance = CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y - CCommonPara.mPartMarkLength;
                return(mrMark);
            }
            //如果向量与Z轴平行;
            if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)))
            {
                //如果是在上翼板的上方;
                if (CDimTools.GetInstance().IsThePointOnLine(maxY, topBeam.mLeftTopPoint, topBeam.mRightTopPoint) > 0)
                {
                    //1.如果是靠右侧挡板的那块板;
                    if (Math.Abs(mMrPart.GetMaxYPoint().X - rightBeam.mLeftTopPoint.X) < 5)
                    {
                        double x           = mMrPart.GetMaxXPoint().X - 20;
                        double y           = mMrPart.GetMinYPoint().Y + 20;
                        Point  insertPoint = new Point(x, y, 0);
                        mrMark.mInsertPoint = insertPoint;
                        double increaseXDistance = 1.2 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                        mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                        mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 1.2 * CCommonPara.mPartMarkLength;
                        return(mrMark);
                    }
                    //2.如果是靠左侧挡板的那块板;
                    if (Math.Abs(mMrPart.GetMaxYPoint().X - leftBeam.mRightTopPoint.X) < 5)
                    {
                        double x           = mMrPart.GetMaxXPoint().X - 20;
                        double y           = mMrPart.GetMinYPoint().Y + 20;
                        Point  insertPoint = new Point(x, y, 0);
                        mrMark.mInsertPoint = insertPoint;
                        double increaseXDistance = 1.2 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                        mrMark.mTextPoint.X = mrMark.mInsertPoint.X - increaseXDistance;
                        mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 1.2 * CCommonPara.mPartMarkLength;
                        return(mrMark);
                    }
                    else
                    {
                        MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), topBeam.mNormal);

                        if (mrSlopeType == MrSlopeType.MORETHAN_ZERO)
                        {
                            double x           = mMrPart.GetMinXPoint().X + 20;
                            double y           = mMrPart.GetMinYPoint().Y + 20;
                            Point  insertPoint = new Point(x, y, 0);
                            mrMark.mInsertPoint = insertPoint;
                            double increaseXDistance = CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                            mrMark.mTextPoint.X = mrMark.mInsertPoint.X + 1.1 * increaseXDistance;
                            mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 0.8 * CCommonPara.mPartMarkLength;
                            return(mrMark);
                        }
                        else if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO)
                        {
                            double x           = mMrPart.GetMinXPoint().X + 20;
                            double y           = mMrPart.GetMinYPoint().Y + 20;
                            Point  insertPoint = new Point(x, y, 0);
                            mrMark.mInsertPoint = insertPoint;
                            double increaseXDistance = CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                            mrMark.mTextPoint.X = mrMark.mInsertPoint.X - 1.1 * increaseXDistance;
                            mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 0.8 * CCommonPara.mPartMarkLength;
                            return(mrMark);
                        }
                    }
                }
                //如果在下翼板下方;
                if (CDimTools.GetInstance().IsThePointOnLine(minY, bottomBeam.mLeftBottomPoint, bottomBeam.mRightBottomPoint) < 0)
                {
                    //1.如果是靠右侧挡板的那块板;
                    if (Math.Abs(mMrPart.GetMinYPoint().X - rightBeam.mLeftBottomPoint.X) < 5)
                    {
                        double x           = mMrPart.GetMaxXPoint().X - 20;
                        double y           = mMrPart.GetMaxYPoint().Y - 20;
                        Point  insertPoint = new Point(x, y, 0);
                        mrMark.mInsertPoint = insertPoint;
                        double increaseXDistance = 1.2 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                        mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                        mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y - 1.2 * CCommonPara.mPartMarkLength;
                        return(mrMark);
                    }
                    //2.如果是靠左侧挡板的那块板;
                    else if (Math.Abs(mMrPart.GetMinYPoint().X - leftBeam.mRightBottomPoint.X) < 5)
                    {
                        double x           = mMrPart.GetMaxXPoint().X - 20;
                        double y           = mMrPart.GetMaxYPoint().Y - 20;
                        Point  insertPoint = new Point(x, y, 0);
                        mrMark.mInsertPoint = insertPoint;
                        double increaseXDistance = 1.2 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                        mrMark.mTextPoint.X = mrMark.mInsertPoint.X - increaseXDistance;
                        mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y - 1.2 * CCommonPara.mPartMarkLength;
                        return(mrMark);
                    }
                    else
                    {
                        double x           = mMrPart.GetMinXPoint().X + 20;
                        double y           = mMrPart.GetMaxYPoint().Y - 20;
                        Point  insertPoint = new Point(x, y, 0);
                        mrMark.mInsertPoint = insertPoint;
                        double increaseXDistance = CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                        mrMark.mTextPoint.X = mrMark.mInsertPoint.X + 1.1 * increaseXDistance;
                        mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y - 0.8 * CCommonPara.mPartMarkLength;
                        return(mrMark);
                    }
                }
            }
            else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
            {
                mrMark.mInsertPoint = mMrPart.mRightBottomPoint;
                double increaseXDistance = CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y - CCommonPara.mPartMarkLength;
                return(mrMark);
            }
            //如果法向量与上翼板的法向垂直;
            else if (CDimTools.GetInstance().IsTwoVectorVertical(normal, topBeam.mNormal))
            {
                //如果在上翼板的上方;
                if (CDimTools.GetInstance().IsThePointOnLine(maxY, topBeam.mLeftTopPoint, topBeam.mRightTopPoint) > 0)
                {
                    MrSlopeType mrSlopeType = CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), topBeam.mNormal);

                    if (mrSlopeType == MrSlopeType.MORETHAN_ZERO)
                    {
                        mrMark.mInsertPoint = mMrPart.mRightTopPoint;
                        double increaseXDistance = 1.2 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                        mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                        mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 1.2 * CCommonPara.mPartMarkLength;
                        return(mrMark);
                    }
                    else if (mrSlopeType == MrSlopeType.LESSTHAN_ZERO)
                    {
                        mrMark.mInsertPoint = mMrPart.mRightTopPoint;
                        double increaseXDistance = 1.2 * CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                        mrMark.mTextPoint.X = mrMark.mInsertPoint.X - increaseXDistance;
                        mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y + 1.2 * CCommonPara.mPartMarkLength;
                        return(mrMark);
                    }
                }
                else if (CDimTools.GetInstance().IsThePointOnLine(maxY, bottomBeam.mLeftTopPoint, bottomBeam.mRightTopPoint) > 0)
                {
                    mrMark.mInsertPoint = mMrPart.mRightBottomPoint;
                    double increaseXDistance = CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                    mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                    mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y - 1.2 * CCommonPara.mPartMarkLength;
                    return(mrMark);
                }
            }
            else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, topBeam.mNormal) && mMrPart.IsHaveBolt())
            {
                mrMark.mInsertPoint = mMrPart.mRightBottomPoint;
                double increaseXDistance = CCommonPara.mPartMarkLength / Math.Tan(dblAngle);
                mrMark.mTextPoint.X = mrMark.mInsertPoint.X + increaseXDistance;
                mrMark.mTextPoint.Y = mrMark.mInsertPoint.Y - CCommonPara.mPartMarkLength;
                return(mrMark);
            }
            return(null);
        }