/// <summary>
        /// 把零件加到该剖面中;
        /// </summary>
        /// <param name="mrSection"></param>
        private void AddPartInSection(CMrSection mrSection)
        {
            double sectionMidX = mrSection.mSectionMidX;
            double dblLeftX    = 0.0;
            double dblRightX   = 0.0;

            if (CCommonPara.mHorizontalSection == MrSectionOrientation.MrSectionLeft)
            {
                dblLeftX  = sectionMidX - CCommonPara.mDblSectionDownDepth;
                dblRightX = sectionMidX + CCommonPara.mDblSectionUpDepth;
            }
            else if (CCommonPara.mHorizontalSection == MrSectionOrientation.MrSectionRight)
            {
                dblLeftX  = sectionMidX - CCommonPara.mDblSectionUpDepth;
                dblRightX = sectionMidX + CCommonPara.mDblSectionDownDepth;
            }
            foreach (CMrPart mrPart in mAllSectionPartList)
            {
                double dblMinX = mrPart.GetMinXPoint().X;
                double dblMaxX = mrPart.GetMaxXPoint().X;

                if (dblMaxX < dblLeftX || dblMinX > dblRightX)
                {
                    continue;
                }
                mrSection.AppendSectionPart(mrPart);
            }
        }
示例#2
0
        /// <summary>
        /// 创建垂直方向的剖面;
        /// </summary>
        private void CreateVerticalSection(CMrSection mrSection)
        {
            //判断是否需要创建该剖面或者只是添加零件标记;
            CMrSection mrSameSection = null;

            View.ViewAttributes viewAttributes = new View.ViewAttributes();
            viewAttributes.LoadAttributes(CCommonPara.mSectionAttPath);

            SectionMarkBase.SectionMarkAttributes sectionMarkAttributes = new SectionMarkBase.SectionMarkAttributes();
            sectionMarkAttributes.LoadAttributes(CCommonPara.mSectionMarkNotePath);

            View        sectionView = null;
            SectionMark setionMark  = null;

            double dblX          = 50;
            Point  sectionMinXPt = null;
            Point  sectionMaxXPt = null;

            double mainBeamMinX = CMrMainBeam.GetInstance().GetMinXPoint().X;
            double mainBeamMaxX = CMrMainBeam.GetInstance().GetMaxXPoint().X;

            mrSection.GetSectionMinXAndMaxXPoint(ref sectionMinXPt, ref sectionMaxXPt);

            if (sectionMaxXPt.X < mainBeamMaxX)
            {
                sectionMaxXPt.X = mainBeamMaxX;
            }
            if (sectionMinXPt.X > mainBeamMinX)
            {
                sectionMinXPt.X = mainBeamMinX;
            }

            Point startPt = new Point(sectionMaxXPt.X + dblX, mrSection.mSectionMidY, 0);
            Point endPt   = new Point(sectionMinXPt.X - dblX, mrSection.mSectionMidY, 0);

            if (CCommonPara.mVerticalSection == MrSectionOrientation.MrSectionDown)
            {
                Point tempPt = startPt;
                startPt = endPt;
                endPt   = startPt;
            }

            bool bNeedCreateView = IsTheSectionNeedCreateView(mrSection, ref mrSameSection);

            if (bNeedCreateView)
            {
                mSectionMarkIndex++;
                mrSection.mSectionMark = mSectionMarkArray[mSectionMarkIndex];

                View.CreateSectionView(mFrontView, startPt, endPt, new Point(0, 0, 0), CCommonPara.mDblSectionUpDepth
                                       , CCommonPara.mDblSectionDownDepth, viewAttributes, sectionMarkAttributes, out sectionView, out setionMark);
            }
            else if (CCommonPara.mbShowSameSectionMark)
            {
                sectionMarkAttributes.MarkName = mrSameSection.mSectionMark;
                setionMark = new SectionMark(mFrontView, startPt, endPt, sectionMarkAttributes);
                setionMark.Insert();
                mFrontView.Modify();
            }
        }
示例#3
0
        /// <summary>
        /// 创建所有零件的剖面;
        /// </summary>
        private void CreateAllPartSection()
        {
            CDimTools.GetInstance().SortMrPartByMaxY(mAllSectionPartList);

            foreach (CMrPart mrPart in mAllSectionPartList)
            {
                Vector normal = mrPart.mNormal;

                CMrSection mrSection = new CMrSection(MrSectionType.MrSectionCylinder);
                mrSection.AppendSectionPart(mrPart);

                if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
                {
                    Point minXPt = mrPart.GetMinXPoint();
                    Point maxXpt = mrPart.GetMaxXPoint();
                    mrSection.mSectionMidX = (minXPt.X + maxXpt.X) / 2.0;
                    mrSection.mSectionMaxY = mrPart.GetMaxYPoint().Y;
                    mrSection.mSectionMinY = mrPart.GetMinYPoint().Y;

                    mrSection.mSectionMode = MrSectionMode.MrHorizontal;
                }
                else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0)))
                {
                    Point minYPt = mrPart.GetMinYPoint();
                    Point maxYpt = mrPart.GetMaxYPoint();
                    mrSection.mSectionMidY = (minYPt.Y + maxYpt.Y) / 2.0;
                    mrSection.mSectionMode = MrSectionMode.MrVertical;
                }
                else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)))
                {
                    Point minYPt = mrPart.GetMinYPoint();
                    Point maxYpt = mrPart.GetMaxYPoint();
                    mrSection.mSectionMidY = maxYpt.Y;
                    mrSection.mSectionMode = MrSectionMode.MrVertical;
                }

                //1.如果零部件已经存在于剖面中则直接返回;
                if (IsPartInSection(mrPart, mrSection.mSectionMode))
                {
                    continue;
                }

                //2.把所有属于该剖面的零部件加入;
                AddPartInSection(mrSection);

                mSectionList.Add(mrSection);

                if (mrSection.mSectionMode == MrSectionMode.MrHorizontal)
                {
                    CreateHorizontalSection(mrSection);
                }
                else if (mrSection.mSectionMode == MrSectionMode.MrVertical)
                {
                    CreateVerticalSection(mrSection);
                }
            }
        }
示例#4
0
        /// <summary>
        /// 创建水平方向的剖面;
        /// </summary>
        private void CreateHorizontalSection(CMrSection mrSection)
        {
            //判断是否需要创建该剖面或者只是添加零件标记;
            CMrSection mrSameSection = null;

            View.ViewAttributes viewAttributes = new View.ViewAttributes();
            viewAttributes.LoadAttributes(CCommonPara.mSectionAttPath);

            SectionMarkBase.SectionMarkAttributes sectionMarkAttributes = new SectionMarkBase.SectionMarkAttributes();
            sectionMarkAttributes.LoadAttributes(CCommonPara.mSectionMarkNotePath);

            View        sectionView = null;
            SectionMark setionMark  = null;

            double sectionMinY = 0.0;
            double sectionMaxY = 0.0;
            double dblY        = 50;

            mrSection.GetSectionMinYAndMaxY(ref sectionMinY, ref sectionMaxY);

            Point startPt = new Point(mrSection.mSectionMidX, sectionMaxY + dblY, 0);
            Point endPt   = new Point(mrSection.mSectionMidX, sectionMinY - dblY, 0);

            if (CCommonPara.mHorizontalSection == MrSectionOrientation.MrSectionLeft)
            {
                Point tempPt = startPt;
                startPt = endPt;
                endPt   = tempPt;
            }

            bool bNeedCreateView = IsTheSectionNeedCreateView(mrSection, ref mrSameSection);

            if (bNeedCreateView)
            {
                mSectionMarkIndex++;
                mrSection.mSectionMark = mSectionMarkArray[mSectionMarkIndex];

                View.CreateSectionView(mFrontView, startPt, endPt, new Point(0, 0, 0), CCommonPara.mDblSectionUpDepth
                                       , CCommonPara.mDblSectionDownDepth, viewAttributes, sectionMarkAttributes, out sectionView, out setionMark);
            }
            else if (CCommonPara.mbShowSameSectionMark)
            {
                sectionMarkAttributes.MarkName = mrSameSection.mSectionMark;
                setionMark = new SectionMark(mFrontView, startPt, endPt, sectionMarkAttributes);
                setionMark.Insert();
                mFrontView.Modify();
            }
        }
示例#5
0
        /// <summary>
        /// 判断是否需要创建剖面视图;
        /// </summary>
        /// <param name="mrSection"></param>
        /// <param name="mrSameSection"></param>
        /// <returns></returns>
        private bool IsTheSectionNeedCreateView(CMrSection mrSection, ref CMrSection mrSameSection)
        {
            foreach (CMrSection section in mSectionList)
            {
                if (section == mrSection)
                {
                    continue;
                }
                bool bRes = section.IsSameSection(mrSection);

                if (bRes)
                {
                    mrSameSection = section;
                    return(false);
                }
            }
            return(true);
        }
示例#6
0
        /// <summary>
        /// 把零件加到该剖面中;
        /// </summary>
        /// <param name="mrSection"></param>
        private void AddPartInSection(CMrSection mrSection)
        {
            if (mrSection.mSectionMode == MrSectionMode.MrHorizontal)
            {
                double sectionMidX = mrSection.mSectionMidX;
                double sectionMinY = mrSection.mSectionMinY;
                double sectionMaxY = mrSection.mSectionMaxY;
                double dblLeftX    = 0.0;
                double dblRightX   = 0.0;

                if (CCommonPara.mHorizontalSection == MrSectionOrientation.MrSectionLeft)
                {
                    dblLeftX  = sectionMidX - CCommonPara.mDblSectionUpDepth;
                    dblRightX = sectionMidX + CCommonPara.mDblSectionDownDepth;
                }
                else if (CCommonPara.mHorizontalSection == MrSectionOrientation.MrSectionRight)
                {
                    dblLeftX  = sectionMidX - CCommonPara.mDblSectionDownDepth;
                    dblRightX = sectionMidX + CCommonPara.mDblSectionUpDepth;
                }
                foreach (CMrPart mrPart in mAllSectionPartList)
                {
                    double dblMinX = mrPart.GetMinXPoint().X;
                    double dblMaxX = mrPart.GetMaxXPoint().X;
                    double dblMaxY = mrPart.GetMaxYPoint().Y;
                    double dblMinY = mrPart.GetMinYPoint().Y;

                    if (dblMaxX < dblLeftX || dblMinX > dblRightX)
                    {
                        continue;
                    }
                    if (dblMaxY < sectionMinY || dblMinY > sectionMaxY)
                    {
                        continue;
                    }

                    mrSection.AppendSectionPart(mrPart);
                }
            }
            else if (mrSection.mSectionMode == MrSectionMode.MrVertical)
            {
                double sectionMidY = mrSection.mSectionMidY;
                double dblTopY     = 0.0;
                double dblBottomY  = 0.0;

                if (CCommonPara.mVerticalSection == MrSectionOrientation.MrSectionUp)
                {
                    dblTopY    = sectionMidY + CCommonPara.mDblSectionUpDepth;
                    dblBottomY = sectionMidY - CCommonPara.mDblSectionDownDepth;
                }
                else if (CCommonPara.mVerticalSection == MrSectionOrientation.MrSectionDown)
                {
                    dblTopY    = sectionMidY + CCommonPara.mDblSectionUpDepth;
                    dblBottomY = sectionMidY - CCommonPara.mDblSectionDownDepth;
                }
                foreach (CMrPart mrPart in mAllSectionPartList)
                {
                    double dblMinY = mrPart.GetMinYPoint().Y;
                    double dblMaxY = mrPart.GetMaxYPoint().Y;

                    if (dblMaxY < dblBottomY || dblMinY > dblTopY)
                    {
                        continue;
                    }
                    mrSection.AppendSectionPart(mrPart);
                }
            }
        }
        /// <summary>
        /// 创建水平方向的剖面;
        /// </summary>
        /// <param name="mrSection"></param>
        private void CreateVerticalMiddleSection(CMrSection mrSection, CMrPart mrPart)
        {
            //判断是否需要创建该剖面或者只是添加零件标记;
            CMrSection mrSameSection = null;

            View.ViewAttributes viewAttributes = new View.ViewAttributes();
            viewAttributes.LoadAttributes(CCommonPara.mSectionAttPath);

            SectionMarkBase.SectionMarkAttributes sectionMarkAttributes = new SectionMarkBase.SectionMarkAttributes();
            sectionMarkAttributes.LoadAttributes(CCommonPara.mSectionMarkNotePath);

            View        sectionView = null;
            SectionMark setionMark  = null;

            double dblX = 50;

            CMrPart mTopBeam     = CMrBeamDoorManager.GetInstance().mTopBeam;
            Point   tBLeftTopPt  = mTopBeam.mLeftTopPoint;
            Point   tBRightTopPt = mTopBeam.mRightTopPoint;
            Point   midMaxYPt    = CMrBeamDoorManager.GetInstance().mMidMaxPoint;

            Vector leftDirectVector  = new Vector(midMaxYPt.X - tBLeftTopPt.X, midMaxYPt.Y - tBLeftTopPt.Y, 0);
            Vector rightDirectVector = new Vector(midMaxYPt.X - tBRightTopPt.X, midMaxYPt.Y - tBRightTopPt.Y, 0);

            Point leftTopPt  = null;
            Point rightTopPt = null;

            if (CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, new Vector(0, 1, 0)))
            {
                leftTopPt  = mrPart.GetMinXMaxYPoint();
                rightTopPt = mrPart.GetMaxXMaxYPoint();
            }
            else if (CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), leftDirectVector) == MrSlopeType.MORETHAN_ZERO ||
                     CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), rightDirectVector) == MrSlopeType.MORETHAN_ZERO)
            {
                leftTopPt  = mrPart.GetMinXPoint();
                rightTopPt = mrPart.GetMaxYPoint();
            }
            else if (CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), leftDirectVector) == MrSlopeType.LESSTHAN_ZERO ||
                     CDimTools.GetInstance().JudgeLineSlope(new Point(0, 0, 0), rightDirectVector) == MrSlopeType.LESSTHAN_ZERO)
            {
                leftTopPt  = mrPart.GetMaxYPoint();
                rightTopPt = mrPart.GetMaxXPoint();
            }

            Point newPt   = new Point(rightTopPt.X + dblX, rightTopPt.Y, 0);
            Point startPt = CDimTools.GetInstance().ComputeFootPointToLine(newPt, leftTopPt, rightTopPt);

            newPt = new Point(leftTopPt.X - dblX, leftTopPt.Y, 0);
            Point endPt = CDimTools.GetInstance().ComputeFootPointToLine(newPt, leftTopPt, rightTopPt);

            if (CCommonPara.mVerticalSection == MrSectionOrientation.MrSectionDown)
            {
                Point tempPt = startPt;
                startPt = endPt;
                endPt   = startPt;
            }

            bool bNeedCreateView = IsTheSectionNeedCreateView(mrSection, ref mrSameSection);

            if (bNeedCreateView)
            {
                mSectionMarkIndex++;
                mrSection.mSectionMark = mSectionMarkArray[mSectionMarkIndex];

                View.CreateSectionView(mFrontView, startPt, endPt, new Point(0, 0, 0), CCommonPara.mDblSectionUpDepth
                                       , CCommonPara.mDblSectionDownDepth, viewAttributes, sectionMarkAttributes, out sectionView, out setionMark);
            }
        }
        /// <summary>
        /// 创建水平方向的剖面;
        /// </summary>
        /// <param name="mrSection"></param>
        private void CreateHorizontalMiddleSection(CMrSection mrSection, CMrPart mrPart)
        {
            CMrPart mTopBeam         = CMrBeamDoorManager.GetInstance().mTopBeam;
            CMrPart mLeftBottomBeam  = CMrBeamDoorManager.GetInstance().mLeftBottomBeam;
            CMrPart mRightBottomBeam = CMrBeamDoorManager.GetInstance().mRightBottomBeam;

            //1.判断是否需要创建该剖面或者只是添加零件标记;
            CMrSection mrSameSection = null;

            View.ViewAttributes viewAttributes = new View.ViewAttributes();
            viewAttributes.LoadAttributes(CCommonPara.mSectionAttPath);

            SectionMarkBase.SectionMarkAttributes sectionMarkAttributes = new SectionMarkBase.SectionMarkAttributes();
            sectionMarkAttributes.LoadAttributes(CCommonPara.mSectionMarkNotePath);

            View        sectionView = null;
            SectionMark setionMark  = null;

            Point sectionMinYPt = new Point();
            Point sectionMaxYPt = new Point();

            mrSection.GetSectionMinYAndMaxYPoint(ref sectionMinYPt, ref sectionMaxYPt);

            double dblY = 50;

            Point startPt = null;
            Point endPt   = null;

            Point tBLeftTopPt  = null;
            Point tBRightTopPt = null;

            Point bBLeftTopPt  = null;
            Point bBRightTopPt = null;

            Point maxXPt    = mrPart.GetMaxXPoint();
            Point midMaxYPt = CMrBeamDoorManager.GetInstance().mMidMaxPoint;

            if (maxXPt.X < midMaxYPt.X)
            {
                tBLeftTopPt  = mTopBeam.mLeftTopPoint;
                tBRightTopPt = midMaxYPt;

                bBLeftTopPt  = mLeftBottomBeam.mLeftTopPoint;
                bBRightTopPt = mLeftBottomBeam.mRightTopPoint;
            }
            else if (maxXPt.X > midMaxYPt.X)
            {
                tBLeftTopPt  = midMaxYPt;
                tBRightTopPt = mTopBeam.mRightTopPoint;

                bBLeftTopPt  = mRightBottomBeam.mLeftTopPoint;
                bBRightTopPt = mRightBottomBeam.mRightTopPoint;
            }

            Point partLeftBottomPt = mrPart.mLeftBottomPoint;
            Point partLeftTopPt    = mrPart.mLeftTopPoint;

            //2.如果Y值最大的点在顶部梁的上方;
            if (CDimTools.GetInstance().IsThePointOnLine(sectionMaxYPt, tBLeftTopPt, tBRightTopPt) > 0)
            {
                Point newMaxYPt = new Point(sectionMaxYPt.X, sectionMaxYPt.Y + dblY, 0);
                Point footPt    = CDimTools.GetInstance().ComputeFootPointToLine(newMaxYPt, partLeftBottomPt, partLeftTopPt);
                startPt = footPt;
            }
            else
            {
                Point footPt    = CDimTools.GetInstance().ComputeFootPointToLine(partLeftTopPt, tBLeftTopPt, tBRightTopPt);
                Point newMaxYPt = new Point(footPt.X, footPt.Y + dblY, 0);
                footPt  = CDimTools.GetInstance().ComputeFootPointToLine(newMaxYPt, partLeftBottomPt, partLeftTopPt);
                startPt = footPt;
            }

            //3.如果Y值最小的点在底部梁的下方;
            if (CDimTools.GetInstance().IsThePointOnLine(sectionMinYPt, bBLeftTopPt, bBRightTopPt) < 0)
            {
                Point newMinYPt = new Point(sectionMinYPt.X, sectionMinYPt.Y - dblY, 0);
                Point footPt    = CDimTools.GetInstance().ComputeFootPointToLine(newMinYPt, partLeftBottomPt, partLeftTopPt);
                endPt = footPt;
            }
            else
            {
                Point footPt    = CDimTools.GetInstance().ComputeFootPointToLine(partLeftBottomPt, bBLeftTopPt, bBRightTopPt);
                Point newMinYPt = new Point(footPt.X, footPt.Y - dblY, 0);
                footPt = CDimTools.GetInstance().ComputeFootPointToLine(newMinYPt, partLeftBottomPt, partLeftTopPt);
                endPt  = footPt;
            }

            if (CCommonPara.mHorizontalSection == MrSectionOrientation.MrSectionRight)
            {
                Point tempPt = startPt;
                startPt = endPt;
                endPt   = startPt;
            }

            bool bNeedCreateView = IsTheSectionNeedCreateView(mrSection, ref mrSameSection);

            if (bNeedCreateView)
            {
                mSectionMarkIndex++;
                mrSection.mSectionMark = mSectionMarkArray[mSectionMarkIndex];
                View.CreateSectionView(mFrontView, startPt, endPt, new Point(0, 0, 0), CCommonPara.mDblSectionUpDepth
                                       , CCommonPara.mDblSectionDownDepth, viewAttributes, sectionMarkAttributes, out sectionView, out setionMark);
            }
            else if (CCommonPara.mbShowSameSectionMark)
            {
                sectionMarkAttributes.MarkName = mrSameSection.mSectionMark;
                setionMark = new SectionMark(mFrontView, startPt, endPt, sectionMarkAttributes);
                setionMark.Insert();
                mFrontView.Modify();
            }
        }
        /// <summary>
        /// 创建门式框架结构中间梁的剖面;
        /// </summary>
        private void CreateMiddleSection()
        {
            CDimTools.GetInstance().SortMrPartByMinX(mAllSectionPartList);

            CMrPart mLeftBeam  = CMrBeamDoorManager.GetInstance().mLeftBeam;
            CMrPart mRightBeam = CMrBeamDoorManager.GetInstance().mRightBeam;
            CMrPart mTopBeam   = CMrBeamDoorManager.GetInstance().mTopBeam;

            Point midMaxPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint;
            Point leftTopPt   = mTopBeam.mLeftTopPoint;
            Point rightTopPt  = mTopBeam.mRightTopPoint;

            Vector leftDirectVector  = new Vector(midMaxPoint.X - leftTopPt.X, midMaxPoint.Y - leftTopPt.Y, 0);
            Vector rightDirectVector = new Vector(midMaxPoint.X - rightTopPt.X, midMaxPoint.Y - rightTopPt.Y, 0);

            foreach (CMrPart mrPart in mAllSectionPartList)
            {
                Vector normal = mrPart.mNormal;

                CMrSection mrSection = new CMrSection(MrSectionType.MrSectionBeamDoor);
                mrSection.AppendSectionPart(mrPart);

                if (CDimTools.GetInstance().IsTwoVectorParallel(normal, leftDirectVector) ||
                    CDimTools.GetInstance().IsTwoVectorParallel(normal, rightDirectVector) ||
                    CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
                {
                    Point minXPt = mrPart.GetMinXPoint();
                    Point maxXpt = mrPart.GetMaxXPoint();
                    mrSection.mSectionMidX = (minXPt.X + maxXpt.X) / 2.0;
                    mrSection.mSectionMode = MrSectionMode.MrHorizontal;
                }
                else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)) ||
                         CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0)) ||
                         CDimTools.GetInstance().IsTwoVectorVertical(normal, leftDirectVector) ||
                         CDimTools.GetInstance().IsTwoVectorVertical(normal, rightDirectVector))
                {
                    Point minXPt = mrPart.GetMinXPoint();
                    Point maxXPt = mrPart.GetMaxXPoint();
                    Point minYPt = mrPart.GetMinYPoint();
                    Point maxYpt = mrPart.GetMaxYPoint();

                    mrSection.mSectionMinX = minXPt.X;
                    mrSection.mSectionMaxX = maxXPt.X;
                    mrSection.mSectionMidY = (minYPt.Y + maxYpt.Y) / 2.0;
                    mrSection.mSectionMode = MrSectionMode.MrVertical;
                }

                //1.如果零部件已经存在于剖面中则直接返回;
                if (IsPartInSection(mrPart, mrSection.mSectionMode))
                {
                    continue;
                }

                //2.把所有属于该剖面的零部件加入;
                AddPartInSection(mrSection);

                mSectionList.Add(mrSection);

                if (mrSection.mSectionMode == MrSectionMode.MrHorizontal)
                {
                    CreateHorizontalMiddleSection(mrSection, mrPart);
                }
                else if (mrSection.mSectionMode == MrSectionMode.MrVertical)
                {
                    CreateVerticalMiddleSection(mrSection, mrPart);
                }
            }
        }
        /// <summary>
        /// 创建所有零部件的剖面;
        /// </summary>
        private void CreateAllPartSection()
        {
            CDimTools.GetInstance().SortMrPartByMinX(mAllSectionPartList);

            foreach (CMrPart mrPart in mAllSectionPartList)
            {
                //1.如果零部件已经存在于剖面中则直接返回;
                if (IsPartInSection(mrPart))
                {
                    continue;
                }

                CMrSection mrSection = new CMrSection(MrSectionType.MrSectionBeam);
                mrSection.AppendSectionPart(mrPart);

                Point minXPt = mrPart.GetMinXPoint();
                Point maxXpt = mrPart.GetMaxXPoint();

                mrSection.mSectionMidX = (minXPt.X + maxXpt.X) / 2.0;

                //2.把所有属于该剖面的零部件加入;
                AddPartInSection(mrSection);

                mSectionList.Add(mrSection);

                //3.判断是否需要创建该剖面或者只是添加零件标记;
                CMrSection mrSameSection = null;

                View.ViewAttributes viewAttributes = new View.ViewAttributes();
                viewAttributes.LoadAttributes(CCommonPara.mSectionAttPath);

                SectionMarkBase.SectionMarkAttributes sectionMarkAttributes = new SectionMarkBase.SectionMarkAttributes();
                sectionMarkAttributes.LoadAttributes(CCommonPara.mSectionMarkNotePath);

                View        sectionView = null;
                SectionMark setionMark  = null;

                double mainBeamMaxY = CMrMainBeam.GetInstance().GetMaxYPoint().Y;
                double mainBeamMinY = CMrMainBeam.GetInstance().GetMinYPoint().Y;
                double dblY         = 50;

                double sectionMinY = 0.0;
                double sectionMaxY = 0.0;

                mrSection.GetSectionMinYAndMaxY(ref sectionMinY, ref sectionMaxY);

                Point startPt = null;
                Point endPt   = null;

                if (sectionMinY > mainBeamMinY)
                {
                    sectionMinY = mainBeamMinY;
                }
                if (sectionMaxY < mainBeamMaxY)
                {
                    sectionMaxY = mainBeamMaxY;
                }
                startPt = new Point(mrSection.mSectionMidX, sectionMaxY + dblY, 0);
                endPt   = new Point(mrSection.mSectionMidX, sectionMinY - dblY, 0);

                if (CCommonPara.mHorizontalSection == MrSectionOrientation.MrSectionLeft)
                {
                    Point tempPt = startPt;
                    startPt = endPt;
                    endPt   = tempPt;
                }
                bool bNeedCreateView = IsTheSectionNeedCreateView(mrSection, ref mrSameSection);

                if (bNeedCreateView)
                {
                    mSectionMarkIndex++;
                    mrSection.mSectionMark = mSectionMarkArray[mSectionMarkIndex];

                    View.CreateSectionView(mFrontView, startPt, endPt, new Point(0, 0, 0), CCommonPara.mDblSectionUpDepth
                                           , CCommonPara.mDblSectionDownDepth, viewAttributes, sectionMarkAttributes, out sectionView, out setionMark);
                }
                else if (CCommonPara.mbShowSameSectionMark)
                {
                    sectionMarkAttributes.MarkName = mrSameSection.mSectionMark;
                    setionMark = new SectionMark(mFrontView, startPt, endPt, sectionMarkAttributes);
                    setionMark.Insert();
                    mFrontView.Modify();
                }
            }
        }
示例#11
0
        /// <summary>
        /// 创建所有剖面;
        /// </summary>
        private void CreateAllPartSection()
        {
            double mainBeamMinX = CMrMainBeam.GetInstance().GetMinXPoint().X;
            double mainBeamMaxX = CMrMainBeam.GetInstance().GetMaxXPoint().X;
            double mainBeamMinY = CMrMainBeam.GetInstance().GetMinYPoint().Y;

            CMrPart leftTopPart  = CMrCylinderDoorFrontManager.GetInstance().mLeftTopPart;
            CMrPart rightTopPart = CMrCylinderDoorFrontManager.GetInstance().mRightTopPart;

            bool bFlag = false;

            CDimTools.GetInstance().SortMrPartByMaxY(mAllSectionPartList);

            foreach (CMrPart mrPart in mAllSectionPartList)
            {
                double partMinX = mrPart.GetMinXPoint().X;
                double partMaxX = mrPart.GetMaxXPoint().X;
                double partMinY = mrPart.GetMinYPoint().Y;

                Vector     normal    = mrPart.mNormal;
                CMrSection mrSection = new CMrSection(MrSectionType.MrSectionCylinder);
                mrSection.AppendSectionPart(mrPart);

                if (mrPart == leftTopPart || mrPart == rightTopPart)
                {
                    Point minXPt = mrPart.GetMinXPoint();
                    Point maxXpt = mrPart.GetMaxXPoint();
                    Point minYPt = mrPart.GetMinYPoint();
                    Point maxYpt = mrPart.GetMaxYPoint();
                    mrSection.mSectionMaxY = maxYpt.Y;
                    mrSection.mSectionMinY = minYPt.Y;
                    mrSection.mSectionMidX = minXPt.X;
                    mrSection.mSectionMode = MrSectionMode.MrHorizontal;
                }
                else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(1, 0, 0)))
                {
                    if (CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMinX) < 0 ||
                        CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMaxX) > 0)
                    {
                        Point minXPt = mrPart.GetMinXPoint();
                        Point maxXpt = mrPart.GetMaxXPoint();
                        Point minYPt = mrPart.GetMinYPoint();
                        Point maxYpt = mrPart.GetMaxYPoint();
                        mrSection.mSectionMaxY = maxYpt.Y;
                        mrSection.mSectionMinY = minYPt.Y;
                        mrSection.mSectionMidX = (minXPt.X + maxXpt.X) / 2.0;
                        mrSection.mSectionMode = MrSectionMode.MrHorizontal;
                    }
                    else if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMinX) > 0 &&
                             CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMaxX) < 0 &&
                             CDimTools.GetInstance().CompareTwoDoubleValue(partMinY, mainBeamMinY) > 0)
                    {
                        Point minXPt = mrPart.GetMinXPoint();
                        Point maxXpt = mrPart.GetMaxXPoint();
                        Point minYPt = mrPart.GetMinYPoint();
                        Point maxYpt = mrPart.GetMaxYPoint();
                        mrSection.mSectionMidX = (minXPt.X + maxXpt.X) / 2.0;
                        mrSection.mSectionMidY = maxYpt.Y;
                        mrSection.mSectionMode = MrSectionMode.MrVertical;
                    }
                }
                else if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 1, 0)))
                {
                    if (CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMinX) < 0 ||
                        CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMaxX) > 0)
                    {
                        Point minYPt = mrPart.GetMinYPoint();
                        Point maxYpt = mrPart.GetMaxYPoint();
                        mrSection.mSectionMidY = (minYPt.Y + maxYpt.Y) / 2.0;
                        mrSection.mSectionMode = MrSectionMode.MrVertical;
                    }
                    if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMinX) < 0 &&
                        CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMaxX) > 0)
                    {
                        Point minYPt = mrPart.GetMinYPoint();
                        Point maxYpt = mrPart.GetMaxYPoint();
                        mrSection.mSectionMidY = (minYPt.Y + maxYpt.Y) / 2.0;
                        mrSection.mSectionMode = MrSectionMode.MrVertical;
                    }
                    if (CDimTools.GetInstance().CompareTwoDoubleValue(partMinX, mainBeamMinX) > 0 &&
                        CDimTools.GetInstance().CompareTwoDoubleValue(partMaxX, mainBeamMaxX) < 0)
                    {
                        CMrApronPlate mrApronPlate = CMrCylinderDoorFrontManager.GetInstance().FindMrApronPlate2ByYNormalPart(mrPart);

                        //梁中间的檩托板只剖一次;
                        if (mrApronPlate != null && bFlag == false)
                        {
                            Point minYPt = mrPart.GetMinYPoint();
                            Point maxYpt = mrPart.GetMaxYPoint();
                            mrSection.mSectionMidY = (minYPt.Y + maxYpt.Y) / 2.0;
                            mrSection.mSectionMode = MrSectionMode.MrVertical;
                            bFlag = true;
                        }
                    }
                }

                //1.如果零部件已经存在于剖面中则直接返回;
                if (IsPartInSection(mrPart, mrSection.mSectionMode))
                {
                    continue;
                }

                if (mrSection.mSectionMode == MrSectionMode.None)
                {
                    continue;
                }

                //2.把所有属于该剖面的零部件加入;
                AddPartInSection(mrSection);

                mSectionList.Add(mrSection);

                if (mrSection.mSectionMode == MrSectionMode.MrHorizontal)
                {
                    CreateHorizontalSection(mrSection);
                }
                if (mrSection.mSectionMode == MrSectionMode.MrVertical)
                {
                    CreateVerticalSection(mrSection);
                }
            }
        }