Список использованных источников. 1. Виды поточных линий [Электронный ресурс]

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

 

}

}