Esempio n. 1
0
        public bool ScanData(MbeObj startObj, LinkedList <MbeObj> objList)
        {
            startObj.SetConnectCheck();
            AddObjPoint(startObj);

            LinkedListNode <MbeConChkElm> node = chkPointList.First;

            while (node != null)
            {
                scanObj(node.Value, objList);
                node = node.Next;
            }
            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// objがchkPointと接続されているかの判定を行う
        /// </summary>
        /// <param name="chkPoint"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        protected bool testObj(MbeConChkElm chkPoint, MbeObj obj)
        {
            if (obj.DeleteCount >= 0)
            {
                return(false);
            }
            if (obj.ConnectionCheckActive)
            {
                return(false);
            }

            if (obj.Id() == MbeObjID.MbePTH)
            {
                if (obj.GetPos(0).Equals(chkPoint.pt))
                {
                    obj.SetConnectCheck();
                    AddObjPoint(obj);                           //反対面にchkPointの追加
                    return(true);
                }
            }
            else if (obj.Id() == MbeObjID.MbePinSMD)
            {
                if ((chkPoint.layer == (ulong)obj.Layer) && obj.GetPos(0).Equals(chkPoint.pt))
                {
                    obj.SetConnectCheck();
                    return(true);
                }
            }
            else if (obj.Id() == MbeObjID.MbePolygon)
            {
                if ((chkPoint.layer == (ulong)obj.Layer) && obj.GetPos(0).Equals(chkPoint.pt))
                {
                    obj.SetConnectCheck();
                    return(true);
                }
            }
            else if (obj.Id() == MbeObjID.MbeArc)
            {
                if (chkPoint.layer != (ulong)obj.Layer)
                {
                    return(false);
                }
                if (obj.GetPos(1).Equals(chkPoint.pt))
                {
                    obj.SetConnectCheck();
                    AddPoint(obj.GetPos(2), (ulong)obj.Layer);
                }
                if (obj.GetPos(2).Equals(chkPoint.pt))
                {
                    obj.SetConnectCheck();
                    AddPoint(obj.GetPos(1), (ulong)obj.Layer);
                }
                return(obj.ConnectionCheckActive);
            }
            else if (obj.Id() == MbeObjID.MbeLine)
            {
                if (chkPoint.layer != (ulong)obj.Layer)
                {
                    return(false);
                }
                if (obj.GetPos(0).Equals(chkPoint.pt))
                {
                    obj.SetConnectCheck();
                    AddPoint(obj.GetPos(1), (ulong)obj.Layer);
                }
                if (obj.GetPos(1).Equals(chkPoint.pt))
                {
                    obj.SetConnectCheck();
                    AddPoint(obj.GetPos(0), (ulong)obj.Layer);
                }
                return(obj.ConnectionCheckActive);
            }
            else if (obj.Id() == MbeObjID.MbeComponent)
            {
                bool result = false;
                foreach (MbeObj objContent in ((MbeObjComponent)obj).ContentsObj)
                {
                    result |= testObj(chkPoint, objContent);                            //再帰呼び出し
                }
                return(result);
            }
            return(false);
        }