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; } } }
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; } }
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) { } }