Exemple #1
0
        /// <summary>
        /// 绘制第三种中间梁的上标注;
        /// </summary>
        public void DrawXUpDimMiddle()
        {
            MrBeamDoorType beamDoorType = CMrBeamDoorManager.GetInstance().mType;

            if (beamDoorType == MrBeamDoorType.TypeMiddle1 || beamDoorType == MrBeamDoorType.TypeMiddle2)
            {
                DrawTypeMiddle1And2XUpDim();
            }
            if (beamDoorType == MrBeamDoorType.TypeMiddle3)
            {
                DrawTypeMiddle3XUpDim();
            }
        }
        /// <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);
        }
Exemple #3
0
        /// <summary>
        /// 构建门式框架梁的拓扑结构;
        /// </summary>
        public void BuildBeamDoorTopo(List <CMrPart> mrPartList)
        {
            ClearData();

            //先赋值主梁;
            mMainBeam = CMrMainBeam.GetInstance();

            foreach (CMrPart mrPart in mrPartList)
            {
                if (mrPart == mMainBeam)
                {
                    continue;
                }

                JudgeLeftBeam(mrPart);
                JudgeRightBeam(mrPart);
                JudgeTopBeam(mrPart);
                JudgeBottomBeam(mrPart);
                JudgeLeftAndRightBottomBeam(mrPart);
            }
            if (mBottonBeam == mTopBeam && mLeftBottomBeam != null && mRightBottomBeam != null)
            {//这个是一块板的形式;
                mBottonBeam = null;

                UpdatePartBoxPoint(mLeftBottomBeam);
                UpdatePartBoxPoint(mRightBottomBeam);

                ComputeTypeMiddleParas();
            }
            else
            {//这个是三块板的形式,下翼缘part不为空;
                mType = MrBeamDoorType.TypeNormal;

                UpdatePartBoxPoint(mTopBeam);
                UpdatePartBoxPoint(mBottonBeam);
                UpdatePartBoxPoint(mMainBeam);
            }
        }
        /// <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);
        }
Exemple #5
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;
            }
        }