public NormalEdge( Factories.Factories factories, IRouteElement parent, Vector2 location ) : base( factories, Styles.NormalStyle, parent ) { this._parent = parent; this.StartPoint.SetLocation( location - new Vector2( 0, Constans.RoadHeight / 2 ) ); this.EndPoint.SetLocation( location + new Vector2( 0, Constans.RoadHeight / 2 ) ); }
public IEnumerable<RouteElement> Add( IRouteElement routeElement ) { var last = this._route.LastOrDefault(); if ( last == null ) { var pathFromOwner = this.GetPath( ( IRouteElement ) this.Owner, routeElement ).Select( r => new RouteElement( r, PriorityType.None ) ).ToArray(); this._route.AddRange( pathFromOwner ); return pathFromOwner; } var destinationPoint = last.Control as IRouteElement; if ( destinationPoint == null ) { throw new ArgumentException(); } var path = this.GetPath( ( IRouteElement ) last.Control, routeElement ).Select( r => new RouteElement( r, PriorityType.None ) ).ToArray(); this._route.AddRange( path ); return path; }
private IEnumerable<IRouteElement> GetPath( IRouteElement from, IRouteElement to ) { return new PathFinder().GetPath( from, to ); }
private SearchResult Check( IRouteElement routeElement, List<IRouteElement> vistedControls, List<IRouteElement> currentPath, IRouteElement destination ) { if ( routeElement == destination ) { return new SearchResult( true, currentPath ); } if ( currentPath.Count >= 3 ) { return new SearchResult( false, Enumerable.Empty<IRouteElement>() ); } if ( vistedControls.Contains( routeElement ) ) { return new SearchResult( false, Enumerable.Empty<IRouteElement>() ); } vistedControls.Add( routeElement ); foreach ( var connectedControl in routeElement.GetConnectedControls() ) { var newPaht = new List<IRouteElement>( currentPath ) { connectedControl }; var found = this.Check( connectedControl, vistedControls, newPaht, destination ); if ( found.Found ) { return found; } } return new SearchResult( false, Enumerable.Empty<IRouteElement>() ); }
public IEnumerable<IRouteElement> GetPath( IRouteElement from, IRouteElement to ) { var visitedControls = new List<IRouteElement>(); var found = this.Check( from, visitedControls, new List<IRouteElement>(), to ); return found.Path; }
public InvertedEdgeAdapter( IEdge edge, IRouteElement parent ) { this._edge = edge; this._parent = parent; }
public InvertPointEdgeAdapter( IEdgeLine edgeLine, IEdge edge, IRouteElement parent ) { this._edgeLine = edgeLine; this._edge = edge; this._parent = parent; }