Example #1
0
        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: Удалить все объекты, которые не помещаются в область размещения.
        }
Example #2
0
        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();
        }
Example #3
0
        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();
        }
Example #4
0
File: Region.cs Project: Ring-r/opt
 /// <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;
 }