コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
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();
        }
コード例 #4
0
        /// <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);
                }
            }
        }
コード例 #5
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);

                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();
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        /// <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();
        }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
        /// <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);
        }
コード例 #11
0
        /// <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();
        }
コード例 #12
0
        /// <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);
            }
        }
コード例 #13
0
        /// <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);
                    }
                }
            }
        }