Esempio n. 1
0
        /// <summary>
        /// 绘制主梁法向朝Y方向的剖面标注;
        /// </summary>
        private void DrawYVectorSectionDim()
        {
            mLeftPart  = null;
            mRightPart = null;

            mDicBoltArrayToRightDim.Clear();
            mDicBoltArrayToUpDim.Clear();

            //构建左右零件拓扑;
            BuildLeftAndRightPart();

            //移除左右两边零件;
            mMrPartList.Remove(mLeftPart);
            mMrPartList.Remove(mRightPart);

            //如果是底板的剖面标注;
            if (IsHaveBottomPlatePart())
            {
                DrawYVectorUpDim();
                DrawYVectorRightDim();
            }
            else
            {
                DrawYVectorUpDim();
                DrawYVectorRightDim();
                DrawYVectorLeftDim();
                DrawYVectorDownDim();
            }

            mMrPartList.Add(mLeftPart);
            mMrPartList.Add(mRightPart);
        }
Esempio n. 2
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;
            }
        }
Esempio n. 3
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);
        }
Esempio n. 4
0
        /// <summary>
        /// 判断右侧的零部件是否需要标注;
        /// </summary>
        /// <param name="mrPart"></param>
        /// <returns></returns>
        private bool IsRightPartNeedDim(CMrPart mrPart)
        {
            double minX = mrPart.GetMinXPoint().X;
            double maxX = mrPart.GetMaxXPoint().X;

            double rightPartMaxX = mRightPart.GetMaxXPoint().X;
            double rightPartMinX = mRightPart.GetMinXPoint().X;

            if (CDimTools.GetInstance().CompareTwoDoubleValue(maxX, rightPartMaxX) == 0 ||
                CDimTools.GetInstance().CompareTwoDoubleValue(minX, rightPartMinX) == 0 ||
                CDimTools.GetInstance().CompareTwoDoubleValue(maxX, rightPartMinX) == 0)
            {
                return(false);
            }
            if (CDimTools.GetInstance().CompareTwoDoubleValue(minX, rightPartMinX) >= 0 &&
                CDimTools.GetInstance().CompareTwoDoubleValue(maxX, rightPartMaxX) <= 0)
            {
                return(false);
            }
            if (!CDimTools.GetInstance().IsTwoVectorParallel(mLeftPart.mNormal, new Vector(1, 0, 0)))
            {
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// 获得支撑板中间的连接板的标注;
        /// </summary>
        /// <returns></returns>
        public CMrDimSet GetSupportPlateMiddleConnectPlateDimSet(CMrPart mrSupportPlate)
        {
            if (!CDimTools.GetInstance().IsTwoVectorParallel(mrSupportPlate.mNormal, new Vector(0, 0, 1)) ||
                CDimTools.GetInstance().IsPartTheAngleSteel(mrSupportPlate) || IsOutsidePlate(mrSupportPlate))
            {
                return(null);
            }

            CCylinderTopViewSetting cylinderTopViewSetting = CCylinderDimSetting.GetInstance().mTopViewSetting;

            List <CMrPart> mrConnectPlates = GetSupportPlateMiddleConnectPlates(mrSupportPlate);

            if (mrConnectPlates == null || mrConnectPlates.Count == 0)
            {
                return(null);
            }

            CMrDimSet mrDimSet = new CMrDimSet();

            foreach (CMrPart mrPart in mrConnectPlates)
            {
                mrDimSet.AddPoint(mrPart.GetMinYMinXPoint());
                bool bValue = cylinderTopViewSetting.FindMarkValueByName(CCylinderTopViewSetting.mstrConnentPlateOnSupport);
                mrPart.SetNeedAddMarkFlag(bValue);
            }

            if (mrDimSet.Count > 0)
            {
                mrDimSet.AddPoint(new Point(0, mrDimSet.GetDimPointList()[0].Y, 0));
            }

            return(mrDimSet);
        }
Esempio n. 6
0
        /// <summary>
        /// 绘制上翼板向两边弯曲时的左右两块端板的标注;
        /// </summary>
        private void DrawLeftAndRightBeamDimMiddle()
        {
            CMrPart leftBeam        = CMrBeamDoorManager.GetInstance().mLeftBeam;
            CMrPart rightBeam       = CMrBeamDoorManager.GetInstance().mRightBeam;
            CMrPart topBeam         = CMrBeamDoorManager.GetInstance().mTopBeam;
            CMrPart leftBottomBeam  = CMrBeamDoorManager.GetInstance().mLeftBottomBeam;
            CMrPart rightBottomBeam = CMrBeamDoorManager.GetInstance().mRightBottomBeam;

            //1.标注左侧的挡板零件;
            PointList pointList = new PointList();

            pointList.Add(leftBeam.mLeftBottomPoint);
            pointList.Add(leftBeam.mLeftTopPoint);
            pointList.Add(leftBottomBeam.mLeftBottomPoint);
            pointList.Add(topBeam.mLeftTopPoint);

            double dimDistance = CCommonPara.mDefaultDimDistance;
            Vector dimVector   = CMrBeamDoorManager.GetInstance().GetLeftBeamLeftDimVector();

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

            //2.标注右侧的挡板零件;
            pointList.Clear();
            pointList.Add(rightBeam.mRightBottomPoint);
            pointList.Add(rightBeam.mRightTopPoint);
            pointList.Add(rightBottomBeam.mRightBottomPoint);
            pointList.Add(topBeam.mRightTopPoint);

            dimDistance = CCommonPara.mDefaultDimDistance;
            dimVector   = CMrBeamDoorManager.GetInstance().GetRightBeamRightDimVector();

            CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, dimDistance, CCommonPara.mSizeDimPath);
        }
Esempio n. 7
0
        /// <summary>
        /// 初始化零部件,构造出上下部件的对称性,只考虑法向与Y轴平行的板的对称性;
        /// </summary>
        /// <param name="mrPart"></param>
        private void InitMrPart(CMrPart mrPart)
        {
            Vector normal = mrPart.mNormal;

            if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
            {
                return;
            }

            Point ptLeftBottom  = mrPart.mLeftBottomPoint;
            Point ptRightBottom = mrPart.mRightBottomPoint;
            Point ptLeftTop     = mrPart.mLeftTopPoint;
            Point ptRightTop    = mrPart.mRightTopPoint;

            normal.X = Math.Abs(normal.X);
            normal.Y = Math.Abs(normal.Y);
            normal.Z = Math.Abs(normal.Z);

            String strAttribute1 = ((int)ptLeftBottom.X).ToString() + "_" + ((int)ptRightBottom.X).ToString() + "_" + normal.ToString();

            if (mDicAttributePart.ContainsKey(strAttribute1))
            {
                CMrPart symPart = mDicAttributePart[strAttribute1];
                mrPart.GetBeamTopViewInfo().mSymPart  = symPart;
                symPart.GetBeamTopViewInfo().mSymPart = mrPart;
            }
            else
            {
                mDicAttributePart.Add(strAttribute1, mrPart);
            }
        }
Esempio n. 8
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;
            }
        }
Esempio n. 9
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);
        }
Esempio n. 10
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);
        }
Esempio n. 11
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;
            }
        }
Esempio n. 12
0
        /// <summary>
        /// 获取左侧檩托板的标注集;
        /// </summary>
        /// <param name="nFlag">1:左侧;2:右侧</param>
        /// <returns></returns>
        private List <CMrDimSet> GetMrApronPlateDimSet(int nFlag)
        {
            List <CMrDimSet> mrDimSetList = new List <CMrDimSet>();

            Dictionary <CMrPart, CMrApronPlate> mMapPartToApronPlate = CMrCylinderDoorTopManager.GetInstance().mMapYNormalPartToMrApronPlate;

            //如果是右侧;
            if (nFlag == 2)
            {
                foreach (CMrApronPlate mrApronPlate in mMapPartToApronPlate.Values)
                {
                    CMrPart yNormalPart = mrApronPlate.mYNormalPart;
                    double  minX        = yNormalPart.GetMinXPoint().X;
                    if (minX < 0)
                    {
                        continue;
                    }
                    CMrDimSet mrDimSet = new CMrDimSet();
                    bool      bIsUp    = mrApronPlate.mIsUp;

                    if (bIsUp)
                    {
                        mrDimSet.AddPoint(yNormalPart.GetMaxXMinYPoint());
                    }
                    else
                    {
                        mrDimSet.AddPoint(yNormalPart.GetMaxXMaxYPoint());
                    }
                    mrDimSetList.Add(mrDimSet);
                }
            }
            //如果是左侧;
            else if (nFlag == 1)
            {
                foreach (CMrApronPlate mrApronPlate in mMapPartToApronPlate.Values)
                {
                    CMrPart yNormalPart = mrApronPlate.mYNormalPart;
                    double  maxX        = yNormalPart.GetMaxXPoint().X;
                    if (maxX > 0)
                    {
                        continue;
                    }
                    CMrDimSet mrDimSet = new CMrDimSet();
                    bool      bIsUp    = mrApronPlate.mIsUp;

                    if (bIsUp)
                    {
                        mrDimSet.AddPoint(yNormalPart.GetMinXMinYPoint());
                    }
                    else
                    {
                        mrDimSet.AddPoint(yNormalPart.GetMinXMaxYPoint());
                    }
                    mrDimSetList.Add(mrDimSet);
                }
            }

            return(mrDimSetList);
        }
Esempio n. 13
0
        /// <summary>
        /// 对于正常的左右倾斜梁的上标注;
        /// </summary>
        public void DrawXUpDimNormal()
        {
            bool bNeedUpDim = false;

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

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

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

            if (bNeedUpDim == false)
            {
                return;
            }

            CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam;

            upDimPointList.Add(topBeam.mLeftTopPoint);
            upDimPointList.Add(topBeam.mRightTopPoint);

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

            upDimPointList.Sort(sorterX);

            PointList pointList = new PointList();

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

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

            Vector upDimVector = CMrBeamDoorManager.GetInstance().GetTopBeamUpDimVector();

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

            //再标注一个总长度;
            pointList.Clear();

            Point firstPoint  = topBeam.mLeftTopPoint;
            Point secondPoint = topBeam.mRightTopPoint;

            pointList.Add(firstPoint);
            pointList.Add(secondPoint);

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

            CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, upDimVector, dimDistance, CCommonPara.mSizeDimPath);
        }
Esempio n. 14
0
        /// <summary>
        /// 初始化;
        /// </summary>
        protected void Init()
        {
            if (mViewBase == null)
            {
                return;
            }
            CDimTools dimTools = CDimTools.GetInstance();

            //初始化视图包围盒;
            dimTools.InitViewBox();

            //获取所有螺钉的数据字典;
            Dictionary <Identifier, TSD.Bolt> dicIdentifierBolt = dimTools.GetAllBoltInDrawing(mViewBase);

            //获取所有Drawing视图中的Part;
            List <TSD.Part> partList = dimTools.GetAllPartInDrawing(mViewBase);

            foreach (TSD.Part partInDrawing in partList)
            {
                //1.获取部件的信息;
                TSM.ModelObject modelObjectInModel = dimTools.TransformDrawingToModel(partInDrawing);
                TSM.Part        partInModel        = modelObjectInModel as TSM.Part;
                CMrPart         mrPart             = null;

                if (CMrMainBeam.GetInstance().mPartInModel.Identifier.GUID == partInModel.Identifier.GUID)
                {
                    mrPart    = CMrMainBeam.GetInstance();
                    mMainBeam = CMrMainBeam.GetInstance();
                    mMainBeam.mPartInDrawing = partInDrawing;
                }
                else
                {
                    mrPart = new CMrPart(partInModel, partInDrawing);
                }

                dimTools.InitMrPart(modelObjectInModel, mViewBase, mrPart);
                AppendMrPart(mrPart);
                InitMrPart(mrPart);

                mrPart.GetBeamTopViewInfo().InitMrPartTopViewInfo();

                //2.获取部件中的所有螺钉组;
                List <BoltArray> boltArrayList = dimTools.GetAllBoltArray(partInModel);

                foreach (BoltArray boltArray in boltArrayList)
                {
                    TSD.Bolt boltInDrawing = dicIdentifierBolt[boltArray.Identifier];

                    CMrBoltArray mrBoltArray = new CMrBoltArray(boltArray, boltInDrawing);
                    dimTools.InitMrBoltArray(boltArray, mViewBase, mrBoltArray);
                    InitMrBoltArray(mrBoltArray);
                    mrPart.AppendMrBoltArray(mrBoltArray);
                }
                dimTools.UpdateViewBox(mrPart);
            }
            CMrMarkManager.GetInstance().Clear();
        }
        /// <summary>
        /// 构建正常情况下需要创建剖面的零部件;
        /// </summary>
        private void BuildNormalNeedSectionPartList()
        {
            CMrPart mLeftBeam   = CMrBeamDoorManager.GetInstance().mLeftBeam;
            CMrPart mRightBeam  = CMrBeamDoorManager.GetInstance().mRightBeam;
            CMrPart mTopBeam    = CMrBeamDoorManager.GetInstance().mTopBeam;
            CMrPart mBottomBeam = CMrBeamDoorManager.GetInstance().mBottonBeam;

            //1.左右侧挡板需要进行剖视;
            mAllSectionPartList.Add(mLeftBeam);
            mAllSectionPartList.Add(mRightBeam);

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

            Point leftBottomPt  = mBottomBeam.mLeftBottomPoint;
            Point rightBottomPt = mBottomBeam.mRightBottomPoint;

            Vector directVector = new Vector(rightTopPt.X - leftTopPt.X, rightTopPt.Y - leftTopPt.Y, rightTopPt.Z - leftTopPt.Z);

            mrPartList.Remove(CMrMainBeam.GetInstance());
            mrPartList.Remove(mTopBeam);
            mrPartList.Remove(mBottomBeam);

            foreach (CMrPart mrPart in mrPartList)
            {
                //排除在主梁外面的零部件;
                if (CDimTools.GetInstance().IsThePointOnLine(mrPart.GetMaxYPoint(), leftTopPt, rightTopPt) > 0 ||
                    CDimTools.GetInstance().IsThePointOnLine(mrPart.GetMinYPoint(), leftBottomPt, rightBottomPt) < 0)
                {
                    continue;
                }

                Vector normal = mrPart.mNormal;

                //判断主梁的螺钉是否在板内,如果在则需要剖面;
                if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)))
                {
                    if (JudgeMainBeamBoltInPlate(mrPart))
                    {
                        mAllSectionPartList.Add(mrPart);
                    }
                }

                if (!mrPart.IsHaveBolt())
                {
                    continue;
                }
                if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)) ||
                    CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)) ||
                    CDimTools.GetInstance().IsTwoVectorParallel(normal, directVector) ||
                    CDimTools.GetInstance().IsTwoVectorVertical(normal, directVector))
                {
                    mAllSectionPartList.Add(mrPart);
                }
            }
        }
Esempio n. 16
0
        /// <summary>
        /// 零件信息显示到界面上;
        /// </summary>
        /// <param name="mrPart"></param>
        private void UpdateUIInfo(CMrPart mrPart)
        {
            modelObjectTextBox.Text = "";

            modelObjectTextBox.Text = mrPart.mBeamType.ToString() + Environment.NewLine +
                                      "Normal" + mrPart.mNormal.ToString() + Environment.NewLine +
                                      "LeftTop" + mrPart.mLeftTopPoint.ToString() + Environment.NewLine +
                                      "LeftBottom" + mrPart.mLeftBottomPoint.ToString() + Environment.NewLine +
                                      "RightTop" + mrPart.mRightTopPoint.ToString() + Environment.NewLine +
                                      "RightBottom" + mrPart.mRightBottomPoint.ToString();
        }
 /// <summary>
 /// 判断零件是否已经在剖面中;
 /// </summary>
 /// <param name="mrPart"></param>
 /// <returns></returns>
 private bool IsPartInSection(CMrPart mrPart)
 {
     foreach (CMrSection mrSection in mSectionList)
     {
         if (mrSection.IsHaveThePart(mrPart))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 18
0
        /// <summary>
        /// 绘制在中间法向与Y轴方向平行的零件标注;
        /// </summary>
        public void DrawYNormalPartDimMiddle()
        {
            CMrPart midYNormalPart = null;
            Point   midPoint       = CMrBeamDoorManager.GetInstance().mMidMaxPoint;

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

            foreach (CMrPart mrPart in mMrPartList)
            {
                if (mrPart == topBeam || mrPart == leftBottomBeam || mrPart == rightBottomBeam)
                {
                    continue;
                }

                Vector normal = mrPart.mNormal;

                if (!CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0)))
                {
                    continue;
                }

                Point minXPoint = mrPart.GetMinXPoint();
                Point maxXPoint = mrPart.GetMaxXPoint();

                if (minXPoint.X < midPoint.X && maxXPoint.X > midPoint.X)
                {
                    if (midYNormalPart == null)
                    {
                        midYNormalPart = mrPart;
                    }
                    else if (mrPart.GetMaxYPoint().Y > midYNormalPart.GetMaxYPoint().Y)
                    {
                        midYNormalPart = mrPart;
                    }
                }
            }
            if (midYNormalPart == null)
            {
                return;
            }

            PointList pointList = new PointList();

            pointList.Add(midYNormalPart.GetMaxXMinYPoint());
            pointList.Add(rightBottomBeam.GetMinXMaxYPoint());

            Vector dimVector = new Vector(1, 0, 0);
            double length    = 2 * CCommonPara.mDefaultDimDistance;

            CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, length, CCommonPara.mSizeDimPath);
        }
Esempio n. 19
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);
            }
        }
Esempio n. 20
0
        /// <summary>
        /// 绘制第三种中间梁的下标注;
        /// </summary>
        public void DrawXDownDimMiddle()
        {
            bool bNeedDownDim = false;

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

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

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

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

            downDimPointList.Add(leftBottomBeam.mLeftBottomPoint);
            downDimPointList.Add(topBeam.mLeftTopPoint);
            downDimPointList.Add(rightBottomBeam.mRightBottomPoint);
            downDimPointList.Add(topBeam.mRightTopPoint);

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

            downDimPointList.Sort(sorterX);

            PointList pointList = new PointList();

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

            Point MinXPoint = downDimPointList[0];

            double dimDistance = Math.Abs(CCommonPara.mViewMinY - MinXPoint.Y) + 1.2 * CCommonPara.mDefaultDimDistance;

            Vector downDimVector = new Vector(0, -1, 0);

            CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, downDimVector, dimDistance, CCommonPara.mSizeDimPath);
        }
Esempio n. 21
0
 /// <summary>
 /// 判断零件是否已经在剖面中;
 /// </summary>
 /// <param name="mrPart"></param>
 /// <returns></returns>
 private bool IsPartInSection(CMrPart mrPart, MrSectionMode sectionMode)
 {
     foreach (CMrSection mrSection in mSectionList)
     {
         if ((sectionMode != MrSectionMode.None) && (mrSection.mSectionMode != sectionMode))
         {
             continue;
         }
         if (mrSection.IsHaveThePart(mrPart))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 22
0
        /// <summary>
        /// 判断右侧挡板零件是否需要标注;
        /// </summary>
        /// <returns></returns>
        private bool IsRightBeamNeedDim()
        {
            CMrPart rightBeam  = CMrBeamDoorManager.GetInstance().mRightBeam;
            CMrPart topBeam    = CMrBeamDoorManager.GetInstance().mTopBeam;
            CMrPart bottomBeam = CMrBeamDoorManager.GetInstance().mBottonBeam;

            double distance1 = Math.Abs(rightBeam.mLeftTopPoint.X - topBeam.mRightTopPoint.X);
            double distance2 = Math.Abs(rightBeam.mLeftBottomPoint.X - bottomBeam.mRightBottomPoint.X);

            if (distance1 > 10 || distance2 > 10)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// 构建垂直连接板左右侧的对称性;
        /// </summary>
        /// <param name="mrPart"></param>
        private void InitMrPart(CMrPart mrPart)
        {
            Vector normal = mrPart.mNormal;

            //1.板的法向与Y轴平行或者法向在XY平面内才可以进行对称性判断;
            if (!(CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0)) || CDimTools.GetInstance().IsVectorInXYPlane(normal)))
            {
                return;
            }
            //2.需要判断板的位置;
            if (mrPart.GetCylinderTopViewInfo().mPostionType == MrPositionType.LEFT)
            {
                Point maxXMaxY = mrPart.GetMaxXMaxYPoint();
                Point maxXMinY = mrPart.GetMaxXMinYPoint();

                String strAttribute1 = ((int)maxXMaxY.Y).ToString();

                if (mDicAttributePart.ContainsKey(strAttribute1))
                {
                    CMrPart symPart = mDicAttributePart[strAttribute1];
                    mrPart.GetCylinderTopViewInfo().mSymPart  = symPart;
                    symPart.GetCylinderTopViewInfo().mSymPart = mrPart;
                }
                else
                {
                    mDicAttributePart.Add(strAttribute1, mrPart);
                }
            }
            if (mrPart.GetCylinderTopViewInfo().mPostionType == MrPositionType.RIGHT)
            {
                Point minXMaxY = mrPart.GetMinXMaxYPoint();
                Point minXMinY = mrPart.GetMinXMinYPoint();

                String strAttribute1 = ((int)minXMaxY.Y).ToString();

                if (mDicAttributePart.ContainsKey(strAttribute1))
                {
                    CMrPart symPart = mDicAttributePart[strAttribute1];
                    mrPart.GetCylinderTopViewInfo().mSymPart  = symPart;
                    symPart.GetCylinderTopViewInfo().mSymPart = mrPart;
                }
                else
                {
                    mDicAttributePart.Add(strAttribute1, mrPart);
                }
            }
        }
        /// <summary>
        /// 绘制檩托板的零件标记;
        /// </summary>
        private void DrawMrApronPlateMark()
        {
            DrawingHandler drawingHandler = new DrawingHandler();

            TSD.UI.DrawingObjectSelector DS = drawingHandler.GetDrawingObjectSelector();

            Dictionary <CMrPart, CMrApronPlate> mapPartToMrApronPlate = CMrCylinderDoorFrontManager.GetInstance().mMapYNormalPartToMrApronPlate;

            foreach (CMrApronPlate mrApronPlate in mapPartToMrApronPlate.Values)
            {
                CMrPart yNormalPart = mrApronPlate.mYNormalPart;
                CMrPart zNormalPart = mrApronPlate.mZNormalPart;

                DS.SelectObject(yNormalPart.mPartInDrawing);
                DS.SelectObject(zNormalPart.mPartInDrawing);
            }
            CDimTools.GetInstance().DrawMarkByMacro();
        }
        /// <summary>
        /// 判断零部件是否无效,主要是判断零部件的z坐标与柱子的z坐标的关系;
        /// </summary>
        /// <param name="mrPart"></param>
        /// <returns></returns>
        private bool IsInvalidPart(CMrPart mrPart)
        {
            double mainBeamMinZ = mMainBeam.GetMinZPoint().Z;
            double mainBeamMaxZ = mMainBeam.GetMaxZPoint().Z;

            double mrPartMinZ = mrPart.GetMinZPoint().Z;
            double mrPartMaxZ = mrPart.GetMaxZPoint().Z;

            if (CDimTools.GetInstance().CompareTwoDoubleValue(mrPartMaxZ, mainBeamMinZ) < 0)
            {
                return(false);
            }
            if (CDimTools.GetInstance().CompareTwoDoubleValue(mrPartMinZ, mainBeamMaxZ) > 0)
            {
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// 判断零件是否是外围板;
        /// </summary>
        /// <param name="mrPart"></param>
        /// <returns></returns>
        private bool IsOutsidePlate(CMrPart mrPart)
        {
            Vector normal = mrPart.mNormal;
            double minZ   = mrPart.GetMinZPoint().Z;
            double maxZ   = mrPart.GetMaxZPoint().Z;

            double mainBeamMinZ = CMrMainBeam.GetInstance().GetMinZPoint().Z;
            double mainBeamMaxZ = CMrMainBeam.GetInstance().GetMaxZPoint().Z;

            if (CDimTools.GetInstance().CompareTwoDoubleValue(minZ, mainBeamMaxZ) >= 0)
            {
                return(true);
            }
            if (CDimTools.GetInstance().CompareTwoDoubleValue(maxZ, mainBeamMinZ) <= 0)
            {
                return(true);
            }
            return(false);
        }
        /// <summary>
        /// 获得支撑及牛腿中间的垂直加筋板;
        /// </summary>
        /// <param name="mrSupportPlate"></param>
        /// <returns></returns>
        private List <CMrPart> GetSupportPlateMiddleConnectPlates(CMrPart mrSupportPlate)
        {
            Point maxXPoint = mrSupportPlate.GetMaxXPoint();
            Point minXPoint = mrSupportPlate.GetMinXPoint();

            List <CMrPart> mrConnectPlates = new List <CMrPart>();

            if (maxXPoint.X < 0)
            {
                foreach (CMrPart mrPart in mVerticalConnectPlateList)
                {
                    if (IsOutsidePlate(mrPart) || mrPart.GetMaxXPoint().X > 0)
                    {
                        continue;
                    }
                    if (CDimTools.GetInstance().IsPartInOtherPartBox(mrPart, mrSupportPlate))
                    {
                        mrConnectPlates.Add(mrPart);
                    }
                }
                return(mrConnectPlates);
            }
            else if (minXPoint.X > 0)
            {
                foreach (CMrPart mrPart in mVerticalConnectPlateList)
                {
                    if (IsOutsidePlate(mrPart) || mrPart.GetMinXPoint().X < 0)
                    {
                        continue;
                    }
                    if (CDimTools.GetInstance().IsPartInOtherPartBox(mrPart, mrSupportPlate))
                    {
                        mrConnectPlates.Add(mrPart);
                    }
                }
                return(mrConnectPlates);
            }

            return(null);
        }
Esempio n. 28
0
        /// <summary>
        /// 对于正常的左右倾斜梁的下标注;
        /// </summary>
        public void DrawXDownDimNormal()
        {
            List <Point> downDimPointList = new List <Point>();

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

                if (partDimSet != null && partDimSet.Count > 0)
                {
                    downDimPointList.AddRange(partDimSet.GetDimPointList());
                }
            }

            CMrPart topBeam    = CMrBeamDoorManager.GetInstance().mTopBeam;
            CMrPart bottomBeam = CMrBeamDoorManager.GetInstance().mBottonBeam;
            CMrPart leftBeam   = CMrBeamDoorManager.GetInstance().mLeftBeam;
            CMrPart rightBeam  = CMrBeamDoorManager.GetInstance().mRightBeam;

            downDimPointList.Add(topBeam.mLeftTopPoint);
            downDimPointList.Add(bottomBeam.mLeftBottomPoint);
            downDimPointList.Add(topBeam.mRightTopPoint);
            downDimPointList.Add(bottomBeam.mRightBottomPoint);

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

            downDimPointList.Sort(sorterX);

            PointList pointList = new PointList();

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

            double dimDistance   = Math.Abs(CCommonPara.mViewMinY - downDimPointList[0].Y) + 1.5 * CCommonPara.mDefaultDimDistance;
            Vector downDimVector = new Vector(0, -1, 0);

            CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, downDimVector, dimDistance, CCommonPara.mSizeDimPath);
        }
        /// <summary>
        /// 判断法向与Y轴平行的主梁中间进行标注的零部件是否需要进行标注;
        /// </summary>
        /// <returns></returns>
        private bool IsYNormalMiddlePartNeedDim(CMrPart mrPart)
        {
            List <CMrPart> rightPartList = CMrCylinderDoorFrontManager.GetInstance().mRightDimPartList;

            int minY = (int)mrPart.GetMaxXMinYPoint().Y;
            int maxY = (int)mrPart.GetMaxXMaxYPoint().Y;

            string strY = minY.ToString() + "," + maxY.ToString();

            foreach (CMrPart mrHaveDimPart in rightPartList)
            {
                minY = (int)mrHaveDimPart.GetMaxXMinYPoint().Y;
                maxY = (int)mrHaveDimPart.GetMaxXMaxYPoint().Y;

                string strNewY = minY.ToString() + "," + maxY.ToString();

                if (strY.Equals(strNewY))
                {
                    return(false);
                }
            }
            return(true);
        }
        /// <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);
        }