/// <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); } }
/// <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); } } }
/// <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> 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(); } } }
/// <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); } } }