public Placing(Rect[] rects, Region region) { // TODO: Проверка области размещения (должна быть хотя бы одна не фиксированная граница). this.region = region; this.rects = new Rect[rects.Length + 1]; // Добавление вспомогательного объекта (начало центра координат). this.rects[0] = new Rect(); for (int i = 0; i < rects.Length; i++) this.rects[i + 1] = rects[i]; // TODO: Удалить все объекты, которые не помещаются в область размещения. }
public MainWindow() { InitializeComponent(); R.Dim = 0; rects = new Rect[0]; region = new Region(); CreateUserInterface(); placing = new Placing(rects, region); placing.Find(); dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 10); #region Создание трёхмерного объекта размещения. mesh_geometry_3d_rect = new MeshGeometry3D(); #region Вершины единичного куба. mesh_geometry_3d_rect.Positions.Add(new Point3D(0, 0, 0)); // 0 mesh_geometry_3d_rect.Positions.Add(new Point3D(1, 0, 0)); // 1 mesh_geometry_3d_rect.Positions.Add(new Point3D(0, 1, 0)); // 2 mesh_geometry_3d_rect.Positions.Add(new Point3D(1, 1, 0)); // 3 mesh_geometry_3d_rect.Positions.Add(new Point3D(0, 0, 1)); // 4 mesh_geometry_3d_rect.Positions.Add(new Point3D(1, 0, 1)); // 5 mesh_geometry_3d_rect.Positions.Add(new Point3D(0, 1, 1)); // 6 mesh_geometry_3d_rect.Positions.Add(new Point3D(1, 1, 1)); // 7 #endregion #region Грани единичного куба. mesh_geometry_3d_rect.TriangleIndices.Add(0); mesh_geometry_3d_rect.TriangleIndices.Add(2); mesh_geometry_3d_rect.TriangleIndices.Add(1); mesh_geometry_3d_rect.TriangleIndices.Add(1); mesh_geometry_3d_rect.TriangleIndices.Add(2); mesh_geometry_3d_rect.TriangleIndices.Add(3); mesh_geometry_3d_rect.TriangleIndices.Add(0); mesh_geometry_3d_rect.TriangleIndices.Add(4); mesh_geometry_3d_rect.TriangleIndices.Add(2); mesh_geometry_3d_rect.TriangleIndices.Add(2); mesh_geometry_3d_rect.TriangleIndices.Add(4); mesh_geometry_3d_rect.TriangleIndices.Add(6); mesh_geometry_3d_rect.TriangleIndices.Add(0); mesh_geometry_3d_rect.TriangleIndices.Add(1); mesh_geometry_3d_rect.TriangleIndices.Add(4); mesh_geometry_3d_rect.TriangleIndices.Add(1); mesh_geometry_3d_rect.TriangleIndices.Add(5); mesh_geometry_3d_rect.TriangleIndices.Add(4); mesh_geometry_3d_rect.TriangleIndices.Add(1); mesh_geometry_3d_rect.TriangleIndices.Add(7); mesh_geometry_3d_rect.TriangleIndices.Add(5); mesh_geometry_3d_rect.TriangleIndices.Add(1); mesh_geometry_3d_rect.TriangleIndices.Add(3); mesh_geometry_3d_rect.TriangleIndices.Add(7); mesh_geometry_3d_rect.TriangleIndices.Add(4); mesh_geometry_3d_rect.TriangleIndices.Add(5); mesh_geometry_3d_rect.TriangleIndices.Add(6); mesh_geometry_3d_rect.TriangleIndices.Add(7); mesh_geometry_3d_rect.TriangleIndices.Add(6); mesh_geometry_3d_rect.TriangleIndices.Add(5); mesh_geometry_3d_rect.TriangleIndices.Add(2); mesh_geometry_3d_rect.TriangleIndices.Add(6); mesh_geometry_3d_rect.TriangleIndices.Add(3); mesh_geometry_3d_rect.TriangleIndices.Add(3); mesh_geometry_3d_rect.TriangleIndices.Add(6); mesh_geometry_3d_rect.TriangleIndices.Add(7); #endregion #endregion #region Создание трёхмерной области размещения. mesh_geometry_3d_region = new MeshGeometry3D(); #region Вершины единичного куба. mesh_geometry_3d_region.Positions.Add(new Point3D(0, 0, 0)); // 0 mesh_geometry_3d_region.Positions.Add(new Point3D(1, 0, 0)); // 1 mesh_geometry_3d_region.Positions.Add(new Point3D(0, 1, 0)); // 2 mesh_geometry_3d_region.Positions.Add(new Point3D(1, 1, 0)); // 3 mesh_geometry_3d_region.Positions.Add(new Point3D(0, 0, 1)); // 4 mesh_geometry_3d_region.Positions.Add(new Point3D(1, 0, 1)); // 5 mesh_geometry_3d_region.Positions.Add(new Point3D(0, 1, 1)); // 6 mesh_geometry_3d_region.Positions.Add(new Point3D(1, 1, 1)); // 7 #endregion #region Грани единичного куба. mesh_geometry_3d_region.TriangleIndices.Add(1); mesh_geometry_3d_region.TriangleIndices.Add(2); mesh_geometry_3d_region.TriangleIndices.Add(0); mesh_geometry_3d_region.TriangleIndices.Add(3); mesh_geometry_3d_region.TriangleIndices.Add(2); mesh_geometry_3d_region.TriangleIndices.Add(1); mesh_geometry_3d_region.TriangleIndices.Add(2); mesh_geometry_3d_region.TriangleIndices.Add(4); mesh_geometry_3d_region.TriangleIndices.Add(0); mesh_geometry_3d_region.TriangleIndices.Add(6); mesh_geometry_3d_region.TriangleIndices.Add(4); mesh_geometry_3d_region.TriangleIndices.Add(2); mesh_geometry_3d_region.TriangleIndices.Add(4); mesh_geometry_3d_region.TriangleIndices.Add(1); mesh_geometry_3d_region.TriangleIndices.Add(0); mesh_geometry_3d_region.TriangleIndices.Add(4); mesh_geometry_3d_region.TriangleIndices.Add(5); mesh_geometry_3d_region.TriangleIndices.Add(1); mesh_geometry_3d_region.TriangleIndices.Add(5); mesh_geometry_3d_region.TriangleIndices.Add(7); mesh_geometry_3d_region.TriangleIndices.Add(1); mesh_geometry_3d_region.TriangleIndices.Add(7); mesh_geometry_3d_region.TriangleIndices.Add(3); mesh_geometry_3d_region.TriangleIndices.Add(1); mesh_geometry_3d_region.TriangleIndices.Add(6); mesh_geometry_3d_region.TriangleIndices.Add(5); mesh_geometry_3d_region.TriangleIndices.Add(4); mesh_geometry_3d_region.TriangleIndices.Add(5); mesh_geometry_3d_region.TriangleIndices.Add(6); mesh_geometry_3d_region.TriangleIndices.Add(7); mesh_geometry_3d_region.TriangleIndices.Add(3); mesh_geometry_3d_region.TriangleIndices.Add(6); mesh_geometry_3d_region.TriangleIndices.Add(2); mesh_geometry_3d_region.TriangleIndices.Add(7); mesh_geometry_3d_region.TriangleIndices.Add(6); mesh_geometry_3d_region.TriangleIndices.Add(3); #endregion #endregion text_box_dim.Text = R.Dim.ToString(); Visualize(); }
private void ReadFromFile(string filename) { StreamReader sr = new StreamReader(filename); R.Dim = int.Parse(sr.ReadLine()); region = Region.Parse(sr.ReadLine()); int n = int.Parse(sr.ReadLine()); rects = new Rect[n]; int i; for (i = 0; i < n && !sr.EndOfStream; i++) rects[i] = Rect.Parse(sr.ReadLine()); for (; i < n; i++) rects[i] = new Rect(); sr.Close(); }
/// <summary> /// Получение объекта со строки. /// </summary> /// <param name="s">Строка.</param> /// <returns>Область размещения.</returns> public static Region Parse(string s) { Region res = new Region(); string[] ss = s.Split(' '); for (int i = 0; i < Dim; i++) { res.size[i] = int.Parse(ss[2 * i]); res.freez[i] = bool.Parse(ss[2 * i + 1]); } return res; }