int editor_track_draw_new_direction_roads () {
  int k; 
  int count = editor_override_get_count();
  
  if (TrackConfirmedStreet.valid)
     editor_track_draw_current_new_direction_road();
   	 for (k=0; k<count; k++) {
   		int line_id, square, flags, direction;
   		
   		if (!editor_override_get(k, &line_id, &square, &direction, &flags)) continue;
       
   		if (flags & ED_LINE_NEW_DIRECTION){
			   RoadMapPosition from;
         	RoadMapPosition to;
         	int first_shape;
         	int last_shape;
         	RoadMapPen layer_pens[LAYER_PROJ_AREAS];
         	int i;
         	if (!roadmap_square_set_current(square))
         	   continue;
         	
         	if (line_id >= roadmap_line_count() || line_id < 0)
         	   continue;
         	
         	roadmap_line_shapes (line_id, &first_shape, &last_shape);


            roadmap_line_from (line_id, &from);
            roadmap_line_to (line_id, &to);
            

            if (!roadmap_layer_is_visible (roadmap_line_cfcc(line_id), 0))
            	continue;

            if (!roadmap_math_line_is_visible (&from, &to))
            	continue;

         	for (i = 0; i < LAYER_PROJ_AREAS; i++) {
      			layer_pens[i] = roadmap_layer_get_pen (roadmap_line_cfcc(line_id),1, i);
   			}
				
            roadmap_screen_draw_one_line
               (&from, &to, 0,
                &from, first_shape, last_shape,
                NULL, layer_pens, LAYER_PROJ_AREAS, -1, 0, 0, 0);

   	    }
   	 }
   return 0;
}
int editor_track_draw_current_new_direction_road(){
  	RoadMapPen layer_pens[LAYER_PROJ_AREAS];
 	NavigateSegment segment;
 	RoadMapPosition intersection;
 	int distance;
 	int i;
 	
  	if (points_count < 1) return 0;
  		
  	roadmap_square_set_current(TrackConfirmedLine.line.square);
  	if (!roadmap_line_route_is_low_weight (TrackConfirmedLine.line.line_id)) {
  	   return 0;
	}

	segment.square = TrackConfirmedLine.line.square;
	segment.line = TrackConfirmedLine.line.line_id;
	roadmap_line_from(TrackConfirmedLine.line.line_id, &segment.from_pos);
	roadmap_line_to(TrackConfirmedLine.line.line_id, &segment.to_pos);

	roadmap_line_shapes (TrackConfirmedLine.line.line_id, &segment.first_shape, &segment.last_shape);
	segment.shape_initial_pos = segment.from_pos;
   
   	for (i = 0; i < LAYER_PROJ_AREAS; i++) {
      			layer_pens[i] = roadmap_layer_get_pen (roadmap_line_cfcc(TrackConfirmedLine.line.line_id),1, i);
	}
	
	navigate_instr_fix_line_end(track_point_pos(points_count - 1), &segment,
							TrackConfirmedStreet.line_direction == ROUTE_DIRECTION_WITH_LINE ? LINE_END : LINE_START);
	
   	if (!editor_override_exists(TrackConfirmedLine.line.line_id, TrackConfirmedLine.line.square)){
   		distance =
            roadmap_math_get_distance_from_segment
            (track_point_pos(points_count - 1), &segment.from_pos, &segment.to_pos, &intersection, NULL);
	
						
		if (TrackConfirmedStreet.line_direction == ROUTE_DIRECTION_WITH_LINE)
   			distance = roadmap_math_distance (&intersection, &segment.from_pos);
   		else
   			distance = roadmap_math_distance (&intersection, &segment.to_pos);
	    roadmap_ticker_set_last_event(road_munching_event);
   		editor_points_display(distance);
   	}
   roadmap_screen_draw_one_line
               (&segment.from_pos, &segment.to_pos, 0, &segment.shape_initial_pos, segment.first_shape, segment.last_shape,
                NULL, layer_pens, LAYER_PROJ_AREAS, -1, 0, 0, 0);
                
	return 0;              
}
static void RealtimeTrafficInfoScreenRepaint (int max_pen) {
   int i;
   int iNumLines;
   int width = TRAFFIC_PEN_WIDTH;
   int previous_with = -1;
   int previous_type = -1;

   if (!isDisplayingTrafficInfoOn())
   	return;

	if (RTTrafficInfo_IsEmpty()) return;

    iNumLines = RTTrafficInfo_GetNumLines();


    for (i=0; i<iNumLines; i++) {
		RTTrafficInfoLines *pTrafficLine = RTTrafficInfo_GetLine(i);
		RoadMapGuiPoint seg_middle;
		RoadMapPen previous_pen;
        RoadMapPen layer_pen;

		roadmap_square_set_current(pTrafficLine->pluginLine.square);

		if (!roadmap_layer_is_visible (pTrafficLine->pluginLine.cfcc, 0))
			continue;

		if (!roadmap_math_line_is_visible (&pTrafficLine->positionFrom, &pTrafficLine->positionTo))
			continue;

		layer_pen = roadmap_layer_get_pen (pTrafficLine->pluginLine.cfcc, 0, 0);

        if (layer_pen)
         	width = roadmap_canvas_get_thickness (layer_pen)+1;
        else
         	width = TRAFFIC_PEN_WIDTH;

        if (width < TRAFFIC_PEN_WIDTH) {
            width = TRAFFIC_PEN_WIDTH;
        }

        previous_pen = roadmap_canvas_select_pen (pens[pTrafficLine->iType]);
        roadmap_canvas_set_thickness (width);

	    if (previous_pen) {
    	       roadmap_canvas_select_pen (previous_pen);
      	}


		if ((width != previous_with) || (previous_type != pTrafficLine->iType))
	  		roadmap_screen_draw_flush();

	  	previous_with = width;
	  	previous_type = pTrafficLine->iType;


      roadmap_screen_draw_one_line (&pTrafficLine->positionFrom,
   	                                &pTrafficLine->positionTo,
      	                            0,
      	                            &pTrafficLine->positionFrom,
            	                    pTrafficLine->iFirstShape,
               	                    pTrafficLine->iLastShape,
                  	                roadmap_shape_get_position,
                     	            &pens[pTrafficLine->iType],
                        	        1,
                                   -1,
                           	        NULL,
                              	    &seg_middle,
                                 	NULL);

      	if (width >= 4){
      			static const char *direction_colors[3] = {"#fd9f0b", "#FFF380", "#FFFFFF"};
		 		roadmap_screen_draw_line_direction (&pTrafficLine->positionFrom,
       												&pTrafficLine->positionTo,
       												&pTrafficLine->positionFrom,
                  									pTrafficLine->iFirstShape,
                  									pTrafficLine->iLastShape,
                  									roadmap_shape_get_position,
		                  							width,
      		            							pTrafficLine->iDirection,
      		            							direction_colors[pTrafficLine->iType]);
       }
   }
}