Esempio n. 1
0
        /// <summary>
        /// オブジェクトの点を追加する
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        protected bool AddObjPoint(MbeObj obj)
        {
            if (obj.DeleteCount >= 0)
            {
                return(false);
            }
            if (((ulong)obj.Layer & ((ulong)MbeLayer.LayerValue.CMP |
                                     (ulong)MbeLayer.LayerValue.L2 |
                                     (ulong)MbeLayer.LayerValue.L3 |
                                     (ulong)MbeLayer.LayerValue.SOL |
                                     (ulong)MbeLayer.LayerValue.PTH)) == 0)
            {
                return(false);
            }

            if (obj.Id() == MbeObjID.MbePTH ||
                obj.Id() == MbeObjID.MbePinSMD ||
                obj.Id() == MbeObjID.MbePolygon)
            {
                return(AddPoint(obj.GetPos(0), (ulong)obj.Layer));
            }
            if (obj.Id() == MbeObjID.MbeLine)
            {
                bool result = AddPoint(obj.GetPos(0), (ulong)obj.Layer);
                result |= AddPoint(obj.GetPos(1), (ulong)obj.Layer);
                return(result);
            }
            if (obj.Id() == MbeObjID.MbeArc)
            {
                bool result = AddPoint(obj.GetPos(1), (ulong)obj.Layer);
                result |= AddPoint(obj.GetPos(2), (ulong)obj.Layer);
                return(result);
            }

            return(false);
        }
Esempio n. 2
0
 /// <summary>
 /// 同じ場所に同じオブジェクトが重なるのを防ぐ
 /// </summary>
 /// <param name="obj"></param>
 /// <returns>比較対象と重ならないときにtrue</returns>
 public virtual bool CheckRejectOverlay(MbeObj obj)
 {
     if (Id() != obj.Id())
     {
         return(false);
     }
     for (int i = 0; i < posCount; i++)
     {
         if (posArray[i] != obj.posArray[i])
         {
             return(false);
         }
     }
     if (Layer != obj.layer)
     {
         return(false);
     }
     return(true);
 }
Esempio n. 3
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);
        }