/// <summary> /// 判断该螺钉是否可以加到该螺钉组中,主要是判断螺钉与该螺钉组的方向向量是否相同,并且距离小于阈值距离; /// </summary> /// <param name="mrBoltArray"></param> /// <param name="mrBoltArrayGroup"></param> /// <returns></returns> private bool IsMrBoltArrayCanAddToMrBoltArrayGroup(CMrBoltArray mrBoltArray, CMrBoltArrayGroup mrBoltArrayGroup) { if (mrBoltArrayGroup.mrBoltArrayList.Count == 0) { return(true); } Vector boltDirectionNormal = mrBoltArray.mDirectionNormal; Vector groupDirectionNormal = mrBoltArrayGroup.mrBoltArrayList[0].mDirectionNormal; if (!CDimTools.GetInstance().IsTwoVectorParallel(boltDirectionNormal, groupDirectionNormal)) { return(false); } Point boltPoint = mrBoltArray.GetMinXMaxYPoint(); foreach (CMrBoltArray groupBoltArray in mrBoltArrayGroup.mrBoltArrayList) { Point groupBoltPoint = groupBoltArray.GetMinXMaxYPoint(); if (Math.Abs(boltPoint.Y - groupBoltPoint.Y) < CCommonPara.mDefaultTwoBoltArrayGap) { return(true); } } return(false); }
/// <summary> /// 初始化螺钉组; /// </summary> /// <param name="mrBoltArray"></param> protected void InitMrBoltArray(CMrBoltArray mrBoltArray) { Vector zVector = new Vector(0, 0, 1); if (!CDimTools.GetInstance().IsTwoVectorParallel(zVector, mrBoltArray.mNormal)) { return; } //构造螺钉组的对称性;螺钉组的堆成都是上下对称; List <Point> pointList = mrBoltArray.GetBoltPointList(); String strAttributeX = null; foreach (Point point in pointList) { strAttributeX = strAttributeX + "_" + ((int)point.X).ToString() + "_" + ((int)point.Z).ToString(); } if (mDicAttributeBoltArray.ContainsKey(strAttributeX)) { CMrBoltArray symMrBoltArray = mDicAttributeBoltArray[strAttributeX]; symMrBoltArray.GetMrBoltArrayInfo().mXSymBoltArray = mrBoltArray; mrBoltArray.GetMrBoltArrayInfo().mXSymBoltArray = symMrBoltArray; } else { mDicAttributeBoltArray.Add(strAttributeX, mrBoltArray); } }
/// <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> /// <param name="mrBoltArray"></param> protected void InitMrBoltArray(CMrBoltArray mrBoltArray) { Vector zVector = new Vector(0, 0, 1); if (!CDimTools.GetInstance().IsTwoVectorParallel(zVector, mrBoltArray.mNormal)) { return; } //构造螺钉组的对称性; List <Point> pointList = mrBoltArray.GetBoltPointList(); String strAttributeX = null; String strAttributeY = null; foreach (Point point in pointList) { strAttributeX = strAttributeX + "_" + point.X.ToString(); strAttributeY = strAttributeY + "_" + point.Y.ToString(); } if (mrBoltArray.mBoltArrayShapeType == MrBoltArrayShapeType.ARRAY) { if (mXDicAttributeBoltArray.ContainsKey(strAttributeX)) { CMrBoltArray symMrBoltArray = mXDicAttributeBoltArray[strAttributeX]; symMrBoltArray.GetMrBoltArrayInfo().mXSymBoltArray = mrBoltArray; mrBoltArray.GetMrBoltArrayInfo().mXSymBoltArray = symMrBoltArray; } else { mXDicAttributeBoltArray.Add(strAttributeX, mrBoltArray); } } else if (mrBoltArray.mBoltArrayShapeType == MrBoltArrayShapeType.ARRAY) { if (mYDicAttributeBoltArray.ContainsKey(strAttributeY)) { CMrBoltArray symMrBoltArray = mYDicAttributeBoltArray[strAttributeY]; symMrBoltArray.GetMrBoltArrayInfo().mYSymBoltArray = mrBoltArray; mrBoltArray.GetMrBoltArrayInfo().mYSymBoltArray = symMrBoltArray; } else { mYDicAttributeBoltArray.Add(strAttributeY, mrBoltArray); } } }
/// <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); mrPart.GetCylinderTopViewInfo().InitCylinderTopViewInfo(); InitMrPart(mrPart); //第一次遍历时就把所有的垂直加筋板保存起来,后面需要使用; if (CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, new Vector(1, 0, 0))) { mVerticalConnectPlateList.Add(mrPart); } //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); mrPart.AppendMrBoltArray(mrBoltArray); } dimTools.UpdateViewBox(mrPart); } InitCylinderGridLine(); //构建剪切板的拓扑结构; CMrClipPlateManager.GetInstance().BuildMrClipPlate(mMrPartList, MrViewType.CylinderTopView); //清空标记管理器中的数据; CMrMarkManager.GetInstance().Clear(); }
/// <summary> /// 获得主梁螺钉在X向的标注集; /// </summary> /// <returns></returns> private List <CMrDimSet> GetMainPartBoltDimSetX() { List <CMrDimSet> mrDimSetList = new List <CMrDimSet>(); //.主梁上剩下未标注的螺钉组; List <CMrBoltArray> lastMrBoltArrayList = new List <CMrBoltArray>(); //构建具有相同属性螺钉组的集合; List <CMrBoltArrayGroup> mrBoltArrayGroupList = new List <CMrBoltArrayGroup>(); //构建主梁中间剩下的螺钉组的链表; foreach (CMrBoltArray mrBoltArray in mMainBeam.GetBoltArrayList()) { if (mrBoltArray.mBoltArrayShapeType != MrBoltArrayShapeType.ARRAY) { continue; } if (!CDimTools.GetInstance().IsTwoVectorParallel(mrBoltArray.mNormal, new Vector(0, 0, 1))) { continue; } lastMrBoltArrayList.Add(mrBoltArray); } //构建剩下螺钉组的组合; int nCount = lastMrBoltArrayList.Count; //螺钉的唯一标识符与螺钉组集合的映射表; Dictionary <Identifier, CMrBoltArrayGroup> mapIdentifierToBoltArrayGroup = new Dictionary <Identifier, CMrBoltArrayGroup>(); for (int i = 0; i < nCount; i++) { CMrBoltArray firstBoltArray = lastMrBoltArrayList[i]; //如果该螺钉已经加到螺钉组的集合中则返回继续查找; if (mapIdentifierToBoltArrayGroup.ContainsKey(firstBoltArray.mBoltArrayInModel.Identifier)) { continue; } CMrBoltArrayGroup mrBoltArrayGroup = new CMrBoltArrayGroup(); mrBoltArrayGroup.AppendMrBoltArray(firstBoltArray); mrBoltArrayGroupList.Add(mrBoltArrayGroup); mapIdentifierToBoltArrayGroup.Add(firstBoltArray.mBoltArrayInModel.Identifier, mrBoltArrayGroup); for (int j = i + 1; j < nCount; j++) { CMrBoltArray secondBoltArray = lastMrBoltArrayList[j]; if (IsMrBoltArrayCanAddToMrBoltArrayGroup(secondBoltArray, mrBoltArrayGroup)) { mrBoltArrayGroup.AppendMrBoltArray(secondBoltArray); mapIdentifierToBoltArrayGroup.Add(secondBoltArray.mBoltArrayInModel.Identifier, mrBoltArrayGroup); } } } //根据组合好的螺钉组集合来进行标注; foreach (CMrBoltArrayGroup mrBoltArrayGroup in mrBoltArrayGroupList) { CMrDimSet yMrDimSet = new CMrDimSet(); foreach (CMrBoltArray mrBoltArray in mrBoltArrayGroup.mrBoltArrayList) { List <Point> minYPointList = mrBoltArray.GetMinYPointList(); yMrDimSet.AddRange(minYPointList); } yMrDimSet.AddPoint(new Point(0, yMrDimSet.GetDimPointList()[0].Y, 0)); //需要判断螺钉是否在柱子的底端或上端; double maxY = mrBoltArrayGroup.GetMaxYPoint().Y; double minY = mrBoltArrayGroup.GetMinYPoint().Y; double mainBeamMaxY = mMainBeam.GetMaxYPoint().Y; double mainBeamMinY = mMainBeam.GetMinYPoint().Y; if (Math.Abs(maxY - mainBeamMaxY) < CCommonPara.mDefaultDimDistanceThreshold) { yMrDimSet.mDimDistance = Math.Abs(yMrDimSet.GetDimPointList()[0].Y - CCommonPara.mViewMaxY) + CCommonPara.mDefaultDimDistance; yMrDimSet.mDimVector = new Vector(0, 1, 0); mrDimSetList.Add(yMrDimSet); } else if (Math.Abs(minY - mainBeamMinY) < CCommonPara.mDefaultDimDistanceThreshold) { yMrDimSet.mDimDistance = Math.Abs(yMrDimSet.GetDimPointList()[0].Y - CCommonPara.mViewMinY) + CCommonPara.mDefaultDimDistance; yMrDimSet.mDimVector = new Vector(0, -1, 0); mrDimSetList.Add(yMrDimSet); } else { yMrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance; yMrDimSet.mDimVector = new Vector(0, -1, 0); mrDimSetList.Add(yMrDimSet); } } return(mrDimSetList); }
/// <summary> /// 初始化函数; /// </summary> protected void Init() { if (mViewBase == null) { return; } //初始化视图的包围盒; CDimTools.GetInstance().InitViewBox(); //获取所有螺钉的数据字典; Dictionary <Identifier, TSD.Bolt> dicIdentifierBolt = CDimTools.GetInstance().GetAllBoltInDrawing(mViewBase); //获取所有Drawing视图中的Part; List <TSD.Part> partList = CDimTools.GetInstance().GetAllPartInDrawing(mViewBase); foreach (TSD.Part partInDrawing in partList) { //1.获取部件的信息; TSM.ModelObject modelObjectInModel = CDimTools.GetInstance().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; CDimTools.GetInstance().InitMrPart(modelObjectInModel, mViewBase, mrPart); AppendMrPart(mrPart); } else { mrPart = new CMrPart(partInModel, partInDrawing); CDimTools.GetInstance().InitMrPart(modelObjectInModel, mViewBase, mrPart); AppendMrPart(mrPart); } //2.获取部件中的所有螺钉组; List <BoltArray> boltArrayList = CDimTools.GetInstance().GetAllBoltArray(partInModel); foreach (BoltArray boltArray in boltArrayList) { TSD.Bolt boltInDrawing = dicIdentifierBolt[boltArray.Identifier]; CMrBoltArray mrBoltArray = new CMrBoltArray(boltArray, boltInDrawing); CDimTools.GetInstance().InitMrBoltArray(boltArray, mViewBase, mrBoltArray); mrPart.AppendMrBoltArray(mrBoltArray); } CDimTools.GetInstance().UpdateViewBox(mrPart); UpdateMinAndMaxYPart(mrPart); } //移除主柱子; mMrPartList.Remove(mMainBeam); //清空零件标记管理器中的零件标记; CMrMarkManager.GetInstance().Clear(); //构建门式框架结构柱标注顶视图的拓扑; CMrCylinderDoorTopManager.GetInstance().BuildCylinderDoorTopTopo(mMrPartList); }
/// <summary> /// 初始化函数; /// </summary> protected void Init() { if (mViewBase == null) { return; } CDimTools dimTools = CDimTools.GetInstance(); //初始化视图的包围盒; dimTools.InitViewBox(); Point viewMinPoint = mViewBase.RestrictionBox.MinPoint; Point viewMaxPoint = mViewBase.RestrictionBox.MaxPoint; //获取所有螺钉的数据字典; 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); List <Point> pointList = mrPart.GetPointList(); int nCount = pointList.Count; Comparison <Point> sorterX = new Comparison <Point>(CDimTools.ComparePointX); pointList.Sort(sorterX); Point minXPoint = pointList[0]; Point maxXPoint = pointList[nCount - 1]; if (minXPoint.X > viewMaxPoint.X || maxXPoint.X < viewMinPoint.X) { continue; } Comparison <Point> sorterY = new Comparison <Point>(CDimTools.ComparePointY); pointList.Sort(sorterY); Point minYPoint = pointList[0]; Point maxYPoint = pointList[nCount - 1]; if (minYPoint.Y > viewMaxPoint.Y || maxYPoint.Y < viewMinPoint.Y) { continue; } Comparison <Point> sorterZ = new Comparison <Point>(CDimTools.ComparePointZ); pointList.Sort(sorterZ); Point minZPoint = pointList[0]; Point maxZPoint = pointList[nCount - 1]; if (minZPoint.Z > viewMaxPoint.Z || maxZPoint.Z < viewMinPoint.Z) { continue; } dimTools.UpdateViewBox(mrPart); AppendMrPart(mrPart); //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); mrPart.AppendMrBoltArray(mrBoltArray); } } CMrMarkManager.GetInstance().Clear(); }
/// <summary> /// 标注下方的零部件; /// </summary> private void DrawBottomPartDim() { List <Point> pointList = new List <Point>(); Vector xVector = new Vector(1, 0, 0); Vector yVector = new Vector(0, 1, 0); Vector zVector = new Vector(0, 0, 1); bool bFlagLeft = false; bool bFlagRight = false; double mainBeamMinX = mMainBeam.GetMinXPoint().X; double mainBeamMaxX = mMainBeam.GetMaxXPoint().X; foreach (CMrPart mrPart in mMrPartList) { if (!IsInvalidPart(mrPart)) { continue; } Point minYPoint = mrPart.GetMinYPoint(); Point maxYPoint = mrPart.GetMaxYPoint(); //0.如果零件在上侧则直接返回; if (minYPoint.Y > CCommonPara.mDblError) { continue; } //1.如果存在板的法向与x轴平行; if (CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, xVector)) { Point minYminXPoint = mrPart.GetMinYMinXPoint(); Point minYmaxXPoint = mrPart.GetMinYMaxXPoint(); if (Math.Abs(minYminXPoint.X - mainBeamMinX) < CCommonPara.mDblError) { bFlagLeft = true; pointList.Add(minYminXPoint); } else if (Math.Abs(minYmaxXPoint.X - mainBeamMaxX) < CCommonPara.mDblError) { bFlagRight = true; pointList.Add(minYmaxXPoint); } else { pointList.Add(minYminXPoint); } } //2.如果板的法向与Z轴平行; if (CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, zVector) || CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, yVector)) { if (!mrPart.IsHaveBolt()) { continue; } List <CMrBoltArray> mrBoltArrayList = mrPart.GetBoltArrayList(); foreach (CMrBoltArray mrBoltArray in mrBoltArrayList) { //如果该螺钉组的对称螺钉组已经标注,则不进行标注; CMrBoltArray mXSymBoltArray = mrBoltArray.GetMrBoltArrayInfo().mXSymBoltArray; if (mXSymBoltArray != null && mXSymBoltArray.GetMrBoltArrayInfo().mbIsUpDim == true) { continue; } Vector boltNormal = mrBoltArray.mNormal; if (!CDimTools.GetInstance().IsTwoVectorParallel(boltNormal, zVector)) { continue; } List <Point> boltPointList = mrBoltArray.GetMinYPointList(); if (boltPointList == null || boltPointList.Count == 0) { continue; } pointList.AddRange(boltPointList); } } } if (pointList.Count == 0) { return; } //3.增加柱两边的端点; double mainBeamMinY = mMainBeam.GetMinYPoint().Y; if (bFlagLeft == false) { pointList.Add(new Point(mainBeamMinX, mainBeamMinY, 0)); } if (bFlagRight == false) { pointList.Add(new Point(mainBeamMaxX, mainBeamMinY, 0)); } CMrDimSet mrDimSet = new CMrDimSet(); mrDimSet.AddRange(pointList); pointList = mrDimSet.GetDimPointList(); Point viewMinPoint = mViewBase.RestrictionBox.MinPoint; double viewMinY = viewMinPoint.Y; Vector dimVector = new Vector(0, -1, 0); double distance = Math.Abs(viewMinY - pointList[0].Y) + CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = dimVector; mrDimSet.mDimDistance = distance; CreateDimByMrDimSet(mrDimSet); }
/// <summary> /// 标注左侧的零部件; /// </summary> private void DrawLeftPartDim() { List <Point> pointList = new List <Point>(); Vector xVector = new Vector(1, 0, 0); Vector yVector = new Vector(0, 1, 0); Vector zVector = new Vector(0, 0, 1); bool bFlag = false; foreach (CMrPart mrPart in mMrPartList) { if (!IsInvalidPart(mrPart)) { continue; } Point minXPoint = mrPart.GetMinXPoint(); Point maxXPoint = mrPart.GetMaxXPoint(); //0.如果零件在右侧则直接返回; if (minXPoint.X > CCommonPara.mDblError) { continue; } //1.如果存在板的法向与y轴平行; if (CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, yVector)) { //有些零件的法向朝Y,但是上面的螺钉是朝Z轴的,需要排除掉; List <CMrBoltArray> mrBoltArrayList = mrPart.GetBoltArrayList(); if (mrBoltArrayList != null && mrBoltArrayList.Count > 0) { Vector boltNormal = mrBoltArrayList[0].mNormal; if (CDimTools.GetInstance().IsTwoVectorParallel(boltNormal, zVector)) { } } else { //如果有水平的板的刚好水平放置在柱的中间,则取水平板的中间点即可; Point minXminYPoint = mrPart.GetMinXMinYPoint(); Point minXmaxYPoint = mrPart.GetMinXMaxYPoint(); if (Math.Abs(minXmaxYPoint.Y) < 10 && Math.Abs(minXminYPoint.Y) < 10 && Math.Abs(minXmaxYPoint.Y + minXminYPoint.Y) < CCommonPara.mDblError) { Point newPoint = new Point(0, 0, 0); newPoint.Y = 0; newPoint.X = minXminYPoint.X; pointList.Add(newPoint); bFlag = true; } else { pointList.Add(minXminYPoint); } } } //2.如果板的法向与Z轴平行; if (CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, zVector) || CDimTools.GetInstance().IsTwoVectorParallel(mrPart.mNormal, yVector)) { if (!mrPart.IsHaveBolt()) { continue; } List <CMrBoltArray> mrBoltArrayList = mrPart.GetBoltArrayList(); foreach (CMrBoltArray mrBoltArray in mrBoltArrayList) { //如果该螺钉组的对称螺钉已经标注则不进行标注; CMrBoltArray mYSymBoltArray = mrBoltArray.GetMrBoltArrayInfo().mYSymBoltArray; if (mYSymBoltArray != null && mYSymBoltArray.GetMrBoltArrayInfo().mbIsRightDim == true) { continue; } Vector boltNormal = mrBoltArray.mNormal; if (!CDimTools.GetInstance().IsTwoVectorParallel(boltNormal, zVector)) { continue; } List <Point> boltPointList = mrBoltArray.GetMinXPointList(); if (boltPointList == null || boltPointList.Count == 0) { continue; } pointList.AddRange(boltPointList); } } } if (pointList.Count == 0) { return; } //3.如果没有设置水平中间板的点,则自动设置改点; if (false == bFlag && pointList.Count > 0) { double mainBeamMinX = mMainBeam.GetMinXPoint().X; pointList.Add(new Point(mainBeamMinX, 0, 0)); } CMrDimSet mrDimSet = new CMrDimSet(); mrDimSet.AddRange(pointList); pointList = mrDimSet.GetDimPointList(); Point viewMinPoint = mViewBase.RestrictionBox.MinPoint; double viewMinX = viewMinPoint.X; Vector dimVector = new Vector(-1, 0, 0); double distance = Math.Abs(viewMinX - pointList[0].X) + CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = dimVector; mrDimSet.mDimDistance = distance; CreateDimByMrDimSet(mrDimSet); }
/// <summary> /// 初始化函数; /// </summary> protected void Init() { if (mViewBase == null) { return; } mDicBoltPoint.Clear(); mYDicAttributeBoltArray.Clear(); mXDicAttributeBoltArray.Clear(); CDimTools dimTools = CDimTools.GetInstance(); Point viewMinPoint = mViewBase.RestrictionBox.MinPoint; Point viewMaxPoint = mViewBase.RestrictionBox.MaxPoint; //获取所有螺钉的数据字典; 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); Point minXPoint = mrPart.GetMinXPoint(); Point maxXPoint = mrPart.GetMaxXPoint(); if (minXPoint.X > viewMaxPoint.X || maxXPoint.X < viewMinPoint.X) { continue; } Point minYPoint = mrPart.GetMinYPoint(); Point maxYPoint = mrPart.GetMaxYPoint(); if (minYPoint.Y > viewMaxPoint.Y || maxYPoint.Y < viewMinPoint.Y) { continue; } Point minZPoint = mrPart.GetMinZPoint(); Point maxZPoint = mrPart.GetMaxZPoint(); if (minZPoint.Z > viewMaxPoint.Z || maxZPoint.Z < viewMinPoint.Z) { continue; } AppendMrPart(mrPart); //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); mrPart.AppendMrBoltArray(mrBoltArray); InitMrBoltArray(mrBoltArray); } } CMrMarkManager.GetInstance().Clear(); }
/// <summary> /// 绘制主梁中间的零部件标注; /// 主梁中间的零部件只有法向与主梁顶部部件平行的才进行标注; /// </summary> private void DrawMainBeamMiddlePartDimMiddle() { CMrPart topBeam = CMrBeamDoorManager.GetInstance().mTopBeam; Point midMaxPoint = CMrBeamDoorManager.GetInstance().mMidMaxPoint; Point leftTopPoint = topBeam.mLeftTopPoint; Point rightTopPoint = topBeam.mRightTopPoint; CMrBeamDoorManager.GetInstance().BuildMostNearPartToPartList(mMrPartList); Dictionary <CMrPart, List <CMrPart> > dicPartToPartList = CMrBeamDoorManager.GetInstance().mDicPartToPartList; List <CMrDimSet> mrDimSetList = new List <CMrDimSet>(); foreach (CMrPart mostNearPart in dicPartToPartList.Keys) { List <CMrPart> mrPartList = dicPartToPartList[mostNearPart]; if (mrPartList.Count == 0) { continue; } //(1).与顶板平行方向标注螺钉; CMrDimSet mrDimSet = new CMrDimSet(); if (mostNearPart.mLeftTopPoint.X < midMaxPoint.X) { mrDimSet.AddPoint(mostNearPart.mRightTopPoint); } else { mrDimSet.AddPoint(mostNearPart.mLeftTopPoint); } //如果在上翼板的左侧; if (mostNearPart.mLeftTopPoint.X < midMaxPoint.X) { foreach (CMrPart mrPart in mrPartList) { CMrBoltArray mrBoltArray = mrPart.GetBoltArrayList()[0]; Point boltPoint = mrBoltArray.GetMaxXPoint(); mrDimSet.AddPoint(boltPoint); } mrDimSet.mDimVector = CMrBeamDoorManager.GetInstance().mLeftTopVector; mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance; mrDimSetList.Add(mrDimSet); //(2).与顶板竖直方向标注; mrDimSet = new CMrDimSet(); mrDimSet.AddPoint(mrPartList[0].mLeftBottomPoint); Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(mrPartList[0].mLeftBottomPoint, leftTopPoint, midMaxPoint); mrDimSet.AddPoint(fontPt); mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = new Vector(leftTopPoint.X - midMaxPoint.X, leftTopPoint.Y - midMaxPoint.Y, 0); mrDimSetList.Add(mrDimSet); } //如果在上翼板的右侧; else if (mostNearPart.mLeftTopPoint.X > midMaxPoint.X) { foreach (CMrPart mrPart in mrPartList) { CMrBoltArray mrBoltArray = mrPart.GetBoltArrayList()[0]; Point boltPoint = mrBoltArray.GetMaxXPoint(); mrDimSet.AddPoint(boltPoint); } mrDimSet.mDimVector = CMrBeamDoorManager.GetInstance().mRightTopVector; mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance; mrDimSetList.Add(mrDimSet); //(2).与顶板竖直方向标注; mrDimSet = new CMrDimSet(); mrDimSet.AddPoint(mrPartList[0].mRightBottomPoint); Point fontPt = CDimTools.GetInstance().ComputeFootPointToLine(mrPartList[0].mRightBottomPoint, rightTopPoint, midMaxPoint); mrDimSet.AddPoint(fontPt); mrDimSet.mDimDistance = CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = new Vector(rightTopPoint.X - midMaxPoint.X, rightTopPoint.Y - midMaxPoint.Y, 0); mrDimSetList.Add(mrDimSet); } } foreach (CMrDimSet mrDimSet in mrDimSetList) { List <Point> dimPointList = mrDimSet.GetDimPointList(); PointList pointList = new PointList(); foreach (Point point in dimPointList) { pointList.Add(point); } Vector dimVector = mrDimSet.mDimVector; double length = mrDimSet.mDimDistance; CDimTools.GetInstance().DrawDimensionSet(mViewBase, pointList, dimVector, length, CCommonPara.mSizeDimPath); } }
/// <summary> /// 绘制主梁法向朝Y方向的剖面标注; /// </summary> private void DrawYVectorSectionDim() { Vector zVector = new Vector(0, 0, 1); Vector yVector = new Vector(0, 1, 0); Vector xVector = new Vector(1, 0, 0); foreach (CMrPart mrPart in mMrPartList) { Vector normal = mrPart.mNormal; if (CDimTools.GetInstance().IsTwoVectorParallel(normal, new Vector(0, 0, 1)) && mrPart.IsHaveBolt()) { double minY = mrPart.GetMinYPoint().Y; double maxY = mrPart.GetMaxYPoint().Y; //如果零件在X轴上方或者下方; if (minY > 0 || maxY < 0) { List <CMrBoltArray> mrBoltArrayList = mrPart.GetBoltArrayList(); CMrBoltArray mrBoltArray = mrBoltArrayList[0]; List <Point> maxYBoltPointList = mrBoltArray.GetMaxYPointList(); List <Point> maxXBoltPointList = mrBoltArray.GetMaxXPointList(); Vector dimVector = null; if (minY > 0) { dimVector = new Vector(0, 1, 0); } if (maxY < 0) { dimVector = new Vector(0, -1, 0); } //标注零部件的顶侧标注; CMrDimSet mrDimSet = new CMrDimSet(); mrDimSet.AddPoint(mrPart.GetMinXMaxYPoint()); mrDimSet.AddPoint(mrPart.GetMaxXMaxYPoint()); mrDimSet.AddRange(maxYBoltPointList); mrDimSet.mDimDistance = 1.2 * CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = dimVector; CreateDimByMrDimSet(mrDimSet); //标注零部件的右侧标注; mrDimSet = new CMrDimSet(); mrDimSet.AddRange(maxXBoltPointList); mrDimSet.AddPoint(new Point(maxXBoltPointList[0].X, 0, 0)); mrDimSet.mDimDistance = 1.5 * CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = xVector; CreateDimByMrDimSet(mrDimSet); } else if (minY < 0 && maxY > 0) { List <CMrBoltArray> mrBoltArrayList = mrPart.GetBoltArrayList(); CMrBoltArray mrBoltArray = mrBoltArrayList[0]; List <Point> maxYBoltPointList = mrBoltArray.GetMaxYPointList(); List <Point> maxXBoltPointList = mrBoltArray.GetMaxXPointList(); //标注零部件的顶侧标注; CMrDimSet mrDimSet = new CMrDimSet(); mrDimSet.AddRange(maxYBoltPointList); mrDimSet.AddPoint(mrPart.GetMinXMaxYPoint()); mrDimSet.AddPoint(mrPart.GetMaxXMaxYPoint()); mrDimSet.mDimDistance = 1.2 * CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = yVector; CreateDimByMrDimSet(mrDimSet); //标注零部件的右侧标注; mrDimSet = new CMrDimSet(); mrDimSet.AddPoint(mrPart.GetMaxXMaxYPoint()); mrDimSet.AddPoint(mrPart.GetMaxXMinYPoint()); mrDimSet.AddRange(maxXBoltPointList); mrDimSet.AddPoint(new Point(maxXBoltPointList[0].X, 0, 0)); mrDimSet.mDimDistance = 1.2 * CCommonPara.mDefaultDimDistance; mrDimSet.mDimVector = xVector; CreateDimByMrDimSet(mrDimSet); } } } }