|
|
cfceb0 |
using System;
|
|
|
cfceb0 |
using System.Drawing;
|
|
|
cfceb0 |
using System.Drawing.Imaging;
|
|
|
cfceb0 |
using System.Collections.Generic;
|
|
|
cfceb0 |
using System.Linq;
|
|
|
cfceb0 |
|
|
|
cfceb0 |
namespace Assistance {
|
|
|
cfceb0 |
public class Workarea {
|
|
|
cfceb0 |
public readonly List<assistant> assistants = new List<assistant>();</assistant></assistant>
|
|
|
72b17c |
public readonly List<modifier> modifiers = new List<modifier>();</modifier></modifier>
|
|
|
cfceb0 |
public readonly List<activepoint> points = new List<activepoint>();</activepoint></activepoint>
|
|
|
cfceb0 |
public readonly Canvas canvas = new Canvas();
|
|
|
cfceb0 |
|
|
|
cfceb0 |
public ActivePoint ActivePoint = null;
|
|
|
cfceb0 |
|
|
|
cfceb0 |
public ActivePoint findPoint(Point position) {
|
|
|
cfceb0 |
foreach(ActivePoint point in points.Reverse<activepoint>())</activepoint>
|
|
|
cfceb0 |
if (point.isInside(position))
|
|
|
cfceb0 |
return point;
|
|
|
cfceb0 |
return null;
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
|
|
|
cfceb0 |
public void getGuidelines(List<guideline> outGuidelines, Point target) {</guideline>
|
|
|
cfceb0 |
foreach(Assistant assistant in assistants)
|
|
|
cfceb0 |
assistant.getGuidelines(outGuidelines, target);
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
|
|
|
cfceb0 |
public void draw(Graphics g, ActivePoint activePoint, Point target, Track track) {
|
|
|
cfceb0 |
// canvas
|
|
|
cfceb0 |
canvas.draw(g);
|
|
|
cfceb0 |
|
|
|
cfceb0 |
// guidelines and track
|
|
|
cfceb0 |
List<guideline> guidelines = new List<guideline>();</guideline></guideline>
|
|
|
cfceb0 |
if (track != null && track.points.Count > 0) {
|
|
|
72b17c |
Guideline guideline;
|
|
|
72b17c |
Track modifiedTrack = modifyTrackByAssistant(track, out guideline);
|
|
|
72b17c |
|
|
|
72b17c |
getGuidelines(guidelines, modifiedTrack.transform(track.points.Last()));
|
|
|
72b17c |
foreach(Guideline gl in guidelines) gl.draw(g);
|
|
|
e6a405 |
|
|
|
72b17c |
track.draw(g, true);
|
|
|
72b17c |
if (guideline != null) guideline.draw(g, true);
|
|
|
72b17c |
|
|
|
72b17c |
List<track> modifiedTracks = modifyTrackByModifiers(modifiedTrack);
|
|
|
72b17c |
rebuildTracks(modifiedTracks);
|
|
|
72b17c |
foreach(Track t in modifiedTracks)
|
|
|
72b17c |
t.draw(g);
|
|
|
cfceb0 |
} else {
|
|
|
cfceb0 |
getGuidelines(guidelines, target);
|
|
|
cfceb0 |
foreach(Guideline guideline in guidelines)
|
|
|
cfceb0 |
guideline.draw(g);
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
|
|
|
72b17c |
// modifiers
|
|
|
72b17c |
foreach(Modifier modifier in modifiers)
|
|
|
72b17c |
modifier.draw(g);
|
|
|
72b17c |
|
|
|
cfceb0 |
// assistants
|
|
|
cfceb0 |
foreach(Assistant assistant in assistants)
|
|
|
cfceb0 |
assistant.draw(g);
|
|
|
cfceb0 |
|
|
|
72b17c |
// active points
|
|
|
cfceb0 |
foreach(ActivePoint point in points)
|
|
|
cfceb0 |
point.draw(g, activePoint == point);
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
|
|
|
72b17c |
public Track modifyTrackByAssistant(Track track, out Guideline guideline) {
|
|
|
72b17c |
guideline = null;
|
|
|
cfceb0 |
if (track.points.Count < 1)
|
|
|
72b17c |
return track.createChild(Geometry.noTransform);
|
|
|
72b17c |
|
|
|
cfceb0 |
List<guideline> guidelines = new List<guideline>();</guideline></guideline>
|
|
|
cfceb0 |
getGuidelines(guidelines, track.points[0]);
|
|
|
72b17c |
guideline = Guideline.findBest(guidelines, track);
|
|
|
cfceb0 |
if (guideline == null)
|
|
|
72b17c |
return track.createChild(Geometry.noTransform);
|
|
|
72b17c |
return track.createChild(guideline.transformPoint);
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
|
|
|
72b17c |
public List<track> modifyTrackByModifiers(Track track) {
|
|
|
72b17c |
List<track> tracks = new List<track>() { track };
|
|
|
72b17c |
foreach(Modifier modifier in modifiers)
|
|
|
72b17c |
tracks = modifier.modify(tracks);
|
|
|
72b17c |
return tracks;
|
|
|
72b17c |
}
|
|
|
72b17c |
|
|
|
72b17c |
public void rebuildTracks(List<track> tracks) {
|
|
|
72b17c |
foreach(Track track in tracks)
|
|
|
72b17c |
track.rebuild();
|
|
|
72b17c |
}
|
|
|
72b17c |
|
|
|
72b17c |
public List<track> modifyTrack(Track track) {
|
|
|
72b17c |
Guideline guideline;
|
|
|
72b17c |
List<track> tracks = modifyTrackByModifiers(
|
|
|
72b17c |
modifyTrackByAssistant(track, out guideline) );
|
|
|
72b17c |
rebuildTracks(tracks);
|
|
|
72b17c |
return tracks;
|
|
|
72b17c |
}
|
|
|
72b17c |
|
|
|
cfceb0 |
public void paintTrack(Track track) {
|
|
|
72b17c |
List<track> tracks = modifyTrack(track);
|
|
|
72b17c |
foreach(Track t in tracks)
|
|
|
72b17c |
canvas.paintTrack(t);
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
}
|
|
|
cfceb0 |
|