Exemplo n.º 1
0
 public PointObject(uctlRail _rail, PointF _point, PointType _type)
 {
     rail = _rail;
     //pointf = _point;
     pointf = reCheckPoint(rail, _point);
     type   = _type;
 }
        private void WalkingForward(uctlNewVehicle vh, double distance_scale, uctlRail matchRail, int railInterval_Pix)
        {
            int Location_X = (int)matchRail.p_Points[0].RealPointf.X;
            int Location_Y = (int)matchRail.p_Points[0].RealPointf.Y;

            if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Horizontal)
            {
                vh.PrcSetLocation(Location_X + railInterval_Pix, Location_Y);
            }
            else if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Vertical)
            {
                vh.PrcSetLocation(Location_X, Location_Y + railInterval_Pix);
            }
            else
            {
                if (distance_scale == 1)
                {
                    vh.PrcSetLocation((int)matchRail.p_Points[1].RealPointf.X, (int)matchRail.p_Points[1].RealPointf.Y);
                }
                else
                {
                    vh.PrcSetLocation((int)matchRail.p_RealCenterPoint.X, (int)matchRail.p_RealCenterPoint.Y);
                }
            }
        }
        private void findMatchRailPoint(string sectionID, string rail_id, string next_rail_id)
        {
            uctlRail railTemp     = null;
            uctlRail NextrailTemp = null;

            railTemp     = m_objItemRail.Where(r => r.p_ID.Trim() == rail_id.Trim()).FirstOrDefault();
            NextrailTemp = m_objItemRail.Where(r => r.p_ID.Trim() == next_rail_id.Trim()).FirstOrDefault();
            if (railTemp == null || NextrailTemp == null)
            {
                return;
            }
            foreach (PointObject point in railTemp.p_Points)
            {
                foreach (PointObject next_point in NextrailTemp.p_Points)
                {
                    bool isMatch = pointIsMatch(point.RealPointf, next_point.RealPointf);
                    if (isMatch)
                    {
                        point.BindingPointByGroupRails(sectionID, next_point);
                        next_point.BindingPointByGroupRails(sectionID, point);
                        //point.BindingPoint(next_point);
                        //next_point.BindingPoint(point);
                    }
                }
            }
        }
 public void DecisionFirstAndLastPoint(bool isfirst)
 {
     firstRail = uctlRails.First().Key;
     lastRail  = uctlRails.Last().Key;
     if (firstRail == lastRail)
     {
         if (RailDircetion == E_RAIL_DIR.F)
         {
             m_pPoints[0] = (PointObject)firstRail.p_Points[0].Clone();
             m_pPoints[1] = (PointObject)firstRail.p_Points[1].Clone();
         }
         else
         {
             m_pPoints[0] = (PointObject)firstRail.p_Points[1].Clone();
             m_pPoints[1] = (PointObject)firstRail.p_Points[0].Clone();
         }
     }
     else
     {
         m_pPoints[0] = (PointObject)findUnboundedPoint(Section_ID, firstRail).Clone();
         m_pPoints[1] = (PointObject)findUnboundedPoint(Section_ID, lastRail).Clone();
     }
     if (isfirst)
     {
         foreach (var rail in uctlRails)
         {
             rail.Key.p_SectionID     = Section_ID;
             rail.Key.p_SegNumDisplay = rail.Key.p_SegNumDisplay + string.Concat(Segment_Num, "-(", SegDircetion.ToString(), ") ");
             rail.Key.p_SegNum        = Segment_Num;
         }
     }
 }
        private uctlRail findTheMatchingRail(double sec_dis, out int _railInterval)
        {
            uctlRail matchRail = null;

            //int Interval = vehicleInterval * vhOrder;
            _railInterval = 0;

            foreach (var rail in uctlRails)
            {
                if (rail.Key.p_RailLength >= sec_dis)
                {
                    matchRail     = rail.Key;
                    _railInterval = (int)sec_dis;
                    break;
                }
                else
                {
                    if (uctlRails.Count == 1)
                    {
                        matchRail     = rail.Key;
                        _railInterval = matchRail.p_RailLength;
                        break;
                    }
                    sec_dis = sec_dis - rail.Key.p_RailLength;
                    continue;
                }
            }
            if (matchRail == null)
            {
                matchRail     = uctlRails.Last().Key;
                _railInterval = matchRail.p_RailLength;
            }
            return(matchRail);
        }
 public PointObject(uctlRail _rail, PointF _point, PointType _type)
 {
     rail = _rail;
     //pointf = _point;
     pointf = reCheckPoint(rail, _point);
     type   = _type;
     BindPointByGroupRails = new Dictionary <string, PointObject>();
 }
        private bool readRailDatas()
        {
            bool bRet            = false;
            int  iRailDatasCount = 0;

            try
            {
                IEnumerable <ARAIL> enumerRail = null;
                enumerRail      = mainForm.BCApp.SCApplication.MapBLL.loadAllRail();
                iRailDatasCount = enumerRail.Count();
                if (iRailDatasCount > 0)
                {
                    m_objItemRail = new uctlRail[iRailDatasCount];

                    int index = 0;
                    foreach (ARAIL rail in enumerRail)
                    {
                        m_objItemRail[index]                  = new uctlRail();
                        m_objItemRail[index].p_Num            = index + 1;
                        m_objItemRail[index].p_ID             = rail.RAIL_ID;
                        m_objItemRail[index].p_RailType       = rail.RAILTYPE;
                        m_objItemRail[index].p_StrMapRailInfo = rail;
                        m_objItemRail[index].p_RailWidth      = (int)rail.WIDTH;
                        m_objItemRail[index].p_RailColor      = BCUtility.ConvStr2Color(rail.COLOR);
                        m_objItemRail[index].p_LocX           = rail.LOCATIONX;
                        m_objItemRail[index].p_LocY           = rail.LOCATIONY;
                        m_objItemRail[index].p_RailLength     = (int)rail.LENGTH;
                        if (m_objItemRail[index].p_RailType == E_RAIL_TYPE.Straight_Vertical)
                        {
                            m_objItemRail[index].Tag = m_objItemRail[index].Top + "|" + m_objItemRail[index].Left + "|"
                                                       + m_objItemRail[index].Height + "|" + m_objItemRail[index].p_RailWidth;
                        }
                        else
                        {
                            m_objItemRail[index].Tag = m_objItemRail[index].Top + "|" + m_objItemRail[index].Left + "|"
                                                       + m_objItemRail[index].Width + "|" + m_objItemRail[index].p_RailWidth;
                        }

                        if (m_objItemRail[index].p_RailType == E_RAIL_TYPE.Arrow_Up ||
                            m_objItemRail[index].p_RailType == E_RAIL_TYPE.Arrow_Down ||
                            m_objItemRail[index].p_RailType == E_RAIL_TYPE.Arrow_Left ||
                            m_objItemRail[index].p_RailType == E_RAIL_TYPE.Arrow_Right)
                        {
                            m_objItemRail[index].Visible = false;
                        }
                        index++;
                    }
                    this.pnl_Map.Controls.AddRange(m_objItemRail);
                }
                bRet = true;
            }
            catch (Exception ex)
            {
                bRet = false;
                logger.Error(ex, "Exception");
            }
            return(bRet);
        }
        private void refreshVehicleLoaction_Dic()
        {
            foreach (string adr_id in dicVehicles.Keys)
            {
                for (int i = 0; i < dicVehicles[adr_id].Count(); i++)
                {
                    int      railInterval     = 0;
                    uctlRail matchRail        = findTheMatchingRail(dicVehicles[adr_id].Count() - i, out railInterval);
                    int      railInterval_Pix = (int)BCUtility.RealLengthToPixelsWidthByScale((double)railInterval);

                    int Location_X = 0;
                    int Location_Y = 0;
                    switch (RailDircetion)
                    {
                    case E_RAIL_DIR.F:
                        Location_X = (int)matchRail.p_Points[0].RealPointf.X;
                        Location_Y = (int)matchRail.p_Points[0].RealPointf.Y;
                        if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Horizontal)
                        {
                            dicVehicles[adr_id][i].PrcSetLocation(Location_X + railInterval_Pix, Location_Y);
                        }
                        else if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Vertical)
                        {
                            dicVehicles[adr_id][i].PrcSetLocation(Location_X, Location_Y + railInterval_Pix);
                        }
                        else
                        {
                            dicVehicles[adr_id][i].PrcSetLocation((int)matchRail.p_RealCenterPoint.X, (int)matchRail.p_RealCenterPoint.Y);
                        }
                        break;

                    case E_RAIL_DIR.R:
                        Location_X = (int)matchRail.p_Points[1].RealPointf.X;
                        Location_Y = (int)matchRail.p_Points[1].RealPointf.Y;
                        if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Horizontal)
                        {
                            dicVehicles[adr_id][i].PrcSetLocation(Location_X - railInterval_Pix, Location_Y);
                        }
                        else if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Vertical)
                        {
                            dicVehicles[adr_id][i].PrcSetLocation(Location_X, Location_Y - railInterval_Pix);
                        }
                        else
                        {
                            dicVehicles[adr_id][i].PrcSetLocation((int)matchRail.p_RealCenterPoint.X, (int)matchRail.p_RealCenterPoint.Y);
                        }
                        break;
                    }
                    dicVehicles[adr_id][i].Tag = dicVehicles[adr_id][i].Top + "|" + dicVehicles[adr_id][i].Left + "|"
                                                 + dicVehicles[adr_id][i].Height + "|" + dicVehicles[adr_id][i].Width;
                }
            }
        }
Exemplo n.º 9
0
 private PointObject findUnboundedPoint(uctlRail rail)
 {
     if (rail.p_Points[0].BindPointObj == null)
     {
         return(rail.p_Points[0]);
     }
     else if (rail.p_Points[1].BindPointObj == null)
     {
         return(rail.p_Points[1]);
     }
     return(null);
 }
        private void refreshVehicleLoaction(uctlNewVehicle vh, double sec_dis, sc.ProtocolFormat.OHTMessage.DriveDirction driveDirction)
        {
            //if (driveDirction == sc.ProtocolFormat.OHTMessage.DriveDirction.DriveDirReverse)
            //{
            //    if (RealDistance >= sec_dis)//確保不會一減 ,就變負的
            //        sec_dis = RealDistance - sec_dis;
            //    else
            //        sec_dis = 0;
            //}
            double distance_scale = 1;
            double distanceTemp   = 0;

            if (RealDistance > 10)
            {
                distance_scale = sec_dis / RealDistance;
            }
            else
            {
            }
            distanceTemp = Distance * distance_scale;

            int railInterval = 0;


            uctlRail matchRail        = findTheMatchingRail((int)distanceTemp, out railInterval);
            int      railInterval_Pix = (int)BCUtility.RealLengthToPixelsWidthByScale((double)railInterval);

            //int Location_X = 0;
            //int Location_Y = 0;

            KeyValuePair <uctlRail, E_RAIL_DIR> keyValuePairTemp = uctlRails.Where(keyValue => keyValue.Key == matchRail).SingleOrDefault();

            if (keyValuePairTemp.Equals(default(KeyValuePair <uctlRail, E_RAIL_DIR>)))
            {
                return;
            }
            E_RAIL_DIR railDIR = keyValuePairTemp.Value;

            //switch (RailDircetion)
            switch (railDIR)
            {
            case E_RAIL_DIR.F:
                WalkingForward(vh, distance_scale, matchRail, railInterval_Pix);
                break;

            case E_RAIL_DIR.R:
                ReverseWalking(vh, distance_scale, matchRail, railInterval_Pix);
                break;
            }
        }
        private bool BidingRailPointAndGroupForRail()
        {
            bool bRet = false;
            List <AGROUPRAILS> listGroup = mainForm.BCApp.SCApplication.MapBLL.loadAllGroupRail();

            for (int i = 0; i < listGroup.Count - 1; i++)
            {
                if (!BCFUtility.isMatche(listGroup[i].SECTION_ID, listGroup[i + 1].SECTION_ID))
                {
                    continue;
                }
                findMatchRailPoint(listGroup[i].RAIL_ID, listGroup[i + 1].RAIL_ID);
            }

            foreach (AGROUPRAILS group_rail in listGroup)
            {
                uctlRail railTemp   = null;
                string   section_id = group_rail.SECTION_ID.Trim();
                railTemp = m_objItemRail.Where(r => r.p_ID.Trim() == group_rail.RAIL_ID.Trim()).FirstOrDefault();
                if (railTemp == null)
                {
                    continue;
                }
                if (!m_DicSectionGroupRails.ContainsKey(section_id))
                {
                    ASECTION ASEC_ObJ = mainForm.BCApp.SCApplication.MapBLL.getSectiontByID(section_id);
                    ASEGMENT ASEG_ObJ = mainForm.BCApp.SCApplication.MapBLL.getSegmentByID(ASEC_ObJ.SEG_NUM);
                    m_DicSectionGroupRails.Add(group_rail.SECTION_ID.Trim(), new GroupRails(group_rail.SECTION_ID, ASEC_ObJ.SEC_DIS, group_rail.DIR
                                                                                            , ASEG_ObJ.SEG_NUM, ASEG_ObJ.DIR));
                }
                m_DicSectionGroupRails[section_id].uctlRails.Add(new KeyValuePair <uctlRail, E_RAIL_DIR>(railTemp, group_rail.DIR));
            }

            foreach (GroupRails group in m_DicSectionGroupRails.Values)
            {
                group.RefreshDistance();
                group.DecisionFirstAndLastPoint(true);
            }

            List <ASEGMENT> listSegment = mainForm.BCApp.SCApplication.MapBLL.loadAllSegments();

            foreach (ASEGMENT seg in listSegment)
            {
                List <GroupRails> segSections = m_DicSectionGroupRails.Values
                                                .Where(group => group.Segment_Num.Trim() == seg.SEG_NUM.Trim()).ToList();
                m_DicSegmentGroupRails.Add(seg.SEG_NUM.Trim(), segSections);
            }
            return(bRet);
        }
 private PointObject findUnboundedPoint(string secID, uctlRail rail)
 {
     if (!rail.p_Points[0].BindPointByGroupRails.ContainsKey(secID.Trim()))
     {
         return(rail.p_Points[0]);
     }
     else if (!rail.p_Points[1].BindPointByGroupRails.ContainsKey(secID.Trim()))
     {
         return(rail.p_Points[1]);
     }
     //if (rail.p_Points[0].BindPointObj == null)
     //    return rail.p_Points[0];
     //else if (rail.p_Points[1].BindPointObj == null)
     //    return rail.p_Points[1];
     return(null);
 }
 private bool isCurve(out uctlRail curveRail)
 {
     curveRail = null;
     foreach (var ucrlRail in uctlRails)
     {
         if (ucrlRail.Key.p_RailType == E_RAIL_TYPE.Straight_Horizontal ||
             ucrlRail.Key.p_RailType == E_RAIL_TYPE.Straight_Vertical)
         {
             continue;
         }
         else
         {
             curveRail = ucrlRail.Key;
             return(true);
         }
     }
     return(false);
 }
        private void findLableLocation(int lbl_width, int lbl_height, ref int loacation_x, ref int loaction_y)
        {
            uctlRail curveRail = null;

            if (isCurve(out curveRail))
            {
                switch (curveRail.p_RailType)
                {
                case E_RAIL_TYPE.Curve_0to90:
                case E_RAIL_TYPE.Curve_270to360:
                    loacation_x = (int)curveRail.p_RealCenterPoint.X -
                                  (curveRail.p_RailWidth) - lbl_width;

                    loaction_y = (int)curveRail.p_RealCenterPoint.Y;
                    break;

                case E_RAIL_TYPE.Curve_90to180:
                case E_RAIL_TYPE.Curve_180to270:
                    loacation_x = (int)curveRail.p_RealCenterPoint.X + lbl_width;

                    loaction_y = (int)curveRail.p_RealCenterPoint.Y;
                    break;
                }
            }
            else
            {
                if (RailDircetion == E_RAIL_DIR.F)
                {
                    loacation_x = (int)m_pPoints[0].RealPointf.X;
                    loaction_y  = (int)m_pPoints[0].RealPointf.Y -
                                  (firstRail.p_RailWidth / 2) -
                                  lbl_height;
                }
                else
                {
                    loacation_x = (int)m_pPoints[0].RealPointf.X - lbl_width;
                    loaction_y  = (int)m_pPoints[0].RealPointf.Y -
                                  (firstRail.p_RailWidth / 2) -
                                  lbl_height;
                }
            }
        }
        private PointF reCheckPoint(uctlRail ucrlRail, PointF sorcePoint)
        {
            if (sorcePoint.X < 0)
            {
                sorcePoint.X = 0;
            }
            else if (sorcePoint.X > ucrlRail.Width)
            {
                sorcePoint.X = ucrlRail.Width;
            }

            if (sorcePoint.Y < 0)
            {
                sorcePoint.Y = 0;
            }
            else if (sorcePoint.Y > ucrlRail.Height)
            {
                sorcePoint.Y = ucrlRail.Height;
            }
            return(sorcePoint);
        }
        private void refreshVehicleLoaction(uctlVehicle vh, double sec_dis)
        {
            double distance_scale = 1;
            double distanceTemp   = 0;

            if (RealDistance > 10)
            {
                distance_scale = sec_dis / RealDistance;
            }
            else
            {
            }
            distanceTemp = Distance * distance_scale;
            int railInterval = 0;


            uctlRail matchRail        = findTheMatchingRail((int)distanceTemp, out railInterval);
            int      railInterval_Pix = (int)BCUtility.RealLengthToPixelsWidthByScale((double)railInterval);

            int Location_X = 0;
            int Location_Y = 0;

            KeyValuePair <uctlRail, E_RAIL_DIR> keyValuePairTemp = uctlRails.Where(keyValue => keyValue.Key == matchRail).SingleOrDefault();

            if (keyValuePairTemp.Equals(default(KeyValuePair <uctlRail, E_RAIL_DIR>)))
            {
                return;
            }
            E_RAIL_DIR railDIR = keyValuePairTemp.Value;

            //switch (RailDircetion)
            switch (railDIR)
            {
            case E_RAIL_DIR.F:
                Location_X = (int)matchRail.p_Points[0].RealPointf.X;
                Location_Y = (int)matchRail.p_Points[0].RealPointf.Y;
                if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Horizontal)
                {
                    vh.PrcSetLocation(Location_X + railInterval_Pix, Location_Y);
                }
                else if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Vertical)
                {
                    vh.PrcSetLocation(Location_X, Location_Y + railInterval_Pix);
                }
                else
                {
                    vh.PrcSetLocation((int)matchRail.p_RealCenterPoint.X, (int)matchRail.p_RealCenterPoint.Y);
                }
                break;

            case E_RAIL_DIR.R:
                Location_X = (int)matchRail.p_Points[1].RealPointf.X;
                Location_Y = (int)matchRail.p_Points[1].RealPointf.Y;
                if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Horizontal)
                {
                    vh.PrcSetLocation(Location_X - railInterval_Pix, Location_Y);
                }
                else if (matchRail.p_RailType == E_RAIL_TYPE.Straight_Vertical)
                {
                    vh.PrcSetLocation(Location_X, Location_Y - railInterval_Pix);
                }
                else
                {
                    vh.PrcSetLocation((int)matchRail.p_RealCenterPoint.X, (int)matchRail.p_RealCenterPoint.Y);
                }
                break;
            }
        }
Exemplo n.º 17
0
        private void buildSectionLable()
        {
            try
            {
                int      lbl_width   = 30;
                int      lbl_height  = 20;
                int      loacation_x = 0;
                int      loaction_y  = 0;
                uctlRail curveRail   = null;
                if (isCurve(out curveRail))
                {
                    switch (curveRail.p_RailType)
                    {
                    case E_RAIL_TYPE.Curve_0to90:
                    case E_RAIL_TYPE.Curve_270to360:
                        loacation_x = (int)curveRail.p_RealCenterPoint.X -
                                      (curveRail.p_RailWidth) - lbl_width;

                        loaction_y = (int)curveRail.p_RealCenterPoint.Y;
                        break;

                    case E_RAIL_TYPE.Curve_90to180:
                    case E_RAIL_TYPE.Curve_180to270:
                        loacation_x = (int)curveRail.p_RealCenterPoint.X + lbl_width;

                        loaction_y = (int)curveRail.p_RealCenterPoint.Y;
                        break;
                    }
                }
                else
                {
                    if (RailDircetion == E_RAIL_DIR.F)
                    {
                        loacation_x = (int)m_pPoints[0].RealPointf.X;
                        loaction_y  = (int)m_pPoints[0].RealPointf.Y -
                                      (firstRail.p_RailWidth / 2) -
                                      lbl_height;
                    }
                    else
                    {
                        loacation_x = (int)m_pPoints[0].RealPointf.X - lbl_width;
                        loaction_y  = (int)m_pPoints[0].RealPointf.Y -
                                      (firstRail.p_RailWidth / 2) -
                                      lbl_height;
                    }
                }
                lbl_SectionID           = new Label();
                lbl_SectionID.Text      = Section_ID;
                lbl_SectionID.Font      = new System.Drawing.Font("Arial", 7F);
                lbl_SectionID.ForeColor = Color.White;
                lbl_SectionID.BackColor = Color.Transparent;
                lbl_SectionID.Margin    = new Padding(1);
                lbl_SectionID.Size      = new System.Drawing.Size(lbl_width, lbl_height);
                lbl_SectionID.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                lbl_SectionID.Location  = new System.Drawing.Point(loacation_x, loaction_y);
                lbl_SectionID.Visible   = false;
            }
            catch (Exception ex)
            {
            }
        }