1. [ ]. URL: http://studopedia.ru/3_206285_vidi-potochnih-liniy.html ( 25.03.2016).
2. [ ]. URL: http://www.ngpedia.ru/id115310p2.html ( 25.03.2016).
3. [ ]. URL: http://science-bsea.narod.ru/2008/leskomp_2008/zaikin_opred.htm ( 25.03.2016).
4. [ ]. URL: http://studopedia.ru/4_21107_tehnologicheskie-svyazi-i-ih-vidi.html ( 27.03.2016).
5. C# . 4. XML. [ ] URL: https://msdn.microsoft.com/ru-ru/library/bb297402(v=vs.80).aspx ( 25.03.2016).
MainWindow.xaml.cs
namespace ceh
{
/// <summary>
/// </summary>
public partial class MainWindow: Window
{
private double WheelSensetiveCoef = 0.0005; // % of 120
ModelView context {
get { return (ModelView)DataContext; }
}
public MainWindow()
{
InitializeComponent();
context.Drweng = new DrawEngine(canvas);
context.Drweng.Min = -1;
context.Drweng.Max = 1;
context.Drweng.Step = 1;
context.Drweng.Tools.Offset.Offset(-5, -3);
context.PropertyChanged += Context_PropertyChanged;
}
private void Context_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(context.MachinesGraph)) Redraw();
}
private void Redraw()
{
context.Drweng.Refresh((cnx) => // context
{
var uielements = new List<Shape>();
double Min = cnx.Min,
Max = cnx.Max,
Step = cnx.Step;
#region OXY
uielements.AddRange(cnx.ConstructVerticalLines(Min, Max, Step));
uielements.AddRange(cnx.ConstructHorizontalLines(Min, Max, Step));
uielements.Add(new Polyline() //OX
{
Points = { new Point(0, cnx.Tools.ToScreenY(0)), new Point(cnx.Canvas.ActualWidth, cnx.Tools.ToScreenY(0)) },
Stroke = Brushes.Black,
StrokeThickness = 1
});
uielements.Add(new Polyline() //OY
{
Points = { new Point(cnx.Tools.ToScreenX(0), 0), new Point(cnx.Tools.ToScreenX(0), cnx.Canvas.ActualHeight) },
Stroke = Brushes.Black,
StrokeThickness = 1
});
#endregion OXY
uielements.AddRange(cnx.ConstructProductionLine(context.Nodes.ToUintArray()));
return uielements.ToArray();
});
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Redraw();
}
//private void txbx_To_TextChanged(object sender, TextChangedEventArgs e)
//{
// Redraw();
//}
//private void txbx_Step_TextChanged(object sender, TextChangedEventArgs e)
//{
// Redraw();
//}
//private void txbx_From_TextChanged(object sender, TextChangedEventArgs e)
//{
// Redraw();
//}
//private void txbx_From_MouseWheel(object sender, MouseWheelEventArgs e)
//{
// if (sender is TextBox)
// {
// TextBox txbx = (TextBox)sender;
|
|
// double num;
// if (double.TryParse(txbx.Text, out num))
// {
// string s = string.Format("{0}", num + e.Delta * WheelSensetiveCoef);
// txbx.Text = s;
// }
// }
//}
//private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
//{
// if (IsLoaded)
// {
// context.Drweng.Tools.Scale.X = (e.NewValue > 0)? e.NewValue / 10.0: ((Slider)sender).Minimum;
// context.Drweng.Tools.Scale.Y = (e.NewValue > 0)? e.NewValue / 10.0: ((Slider)sender).Minimum;
// Redraw();
// }
//}
//private void slider_MouseWheel(object sender, MouseWheelEventArgs e)
//{
// if (sender is Slider)
// {
// Slider sl = (Slider)sender;
// sl.Value += e.Delta * WheelSensetiveCoef * 10;
// }
//}
private void canvas_SizeChanged(object sender, SizeChangedEventArgs e)
{
Redraw();
}
private void button_Click(object sender, RoutedEventArgs e)
{
context.EvaluateSysOperab();
Redraw();
}
}
}
ModelView.cs
namespace ceh
{
public class ModelView: INotifyPropertyChanged
{
private ObservableCollection<WorkNode> _nodes = new ObservableCollection<WorkNode>();
public ObservableCollection<WorkNode> Nodes {
get { return _nodes; }
set {
if (value!= _nodes)
{
_nodes = value;
SendPropertyChanged(nameof(Nodes));
}
}
}
private string _machinesGraphString;
public DrawEngine Drweng { get; set; }
public float Zs { get; set; }
public float Zg { get; set; }
private float _sysOperab;
public float SysOperability
{
get { return _sysOperab; }
set
{
if (_sysOperab!= value)
{
_sysOperab = value;
SendPropertyChanged(nameof(SysOperability));
}
}
}
public string MachinesGraph
{
get
{
return _machinesGraphString;
}
set
{
if (_machinesGraphString!= value)
{
_machinesGraphString = value;
var ls = Nodes.ToList();
var parsed = ParseMachines(MachinesGraph).ToWorkNodeArray();
if (parsed.Count > ls.Count)
ls.AddRange(parsed.Skip(ls.Count));
else
ls.RemoveRange(parsed.Count, ls.Count - parsed.Count);
for (int i = 0; i < parsed.Count; i++)
{
ls[i].GroupID = parsed[i].GroupID;
ls[i].ID = parsed[i].ID;
}
Nodes = new ObservableCollection<WorkNode>(ls);
SendPropertyChanged(nameof(MachinesGraph));
}
}
}
public uint[] ParseMachines(string machines)
{
return machines.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
.Select(n =>
{
uint result;
return uint.TryParse(n, out result)? (uint?)result: null;
}).Where(n => n.HasValue).Cast<uint>().ToArray();
}
public void EvaluateSysOperab()
{
double sysOperab = 1.0, groupOperability=1.0;
foreach (var group in Nodes.GroupBy(g => g.GroupID))
{
foreach (var item in group)
groupOperability *= 1 - item.Operability;
sysOperab *= 1 - groupOperability*(1-Zg)*(1-Zs);;
}
SysOperability = (float)sysOperab;
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void SendPropertyChanged(String propertyName)
{
if (PropertyChanged == null) throw new ArgumentNullException("propertyName", "ModelView");
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
|
|
}
#endregion
}
}