Example #1
0
        private Bitmap _generateGeneralObject()
        {
            ImgGeneralObject imgGO = new ImgGeneralObject(ModuleWidth, genObj.SpotInf, ImagePath);

            //ImgGeneralObject imgGO = new ImgGeneralObject(ModuleWidth, 35, 31);

            foreach (HouseInfo hi in this.genObj.Houses)
            {
                ImgHouse imgH = generateOneHouse(hi);
                imgGO.ImgHouses.Add(imgH);
            }

            Bitmap bmpImageGO = imgGO.Generate(Seria);

            return(bmpImageGO);
        }
Example #2
0
        /// <summary>
        /// Построение изображений отдельных домов
        /// </summary>
        private ImgHouse generateOneHouse(HouseInfo hi)
        {
            ImgHouse      imgHouse    = new ImgHouse();
            List <Bitmap> bmpSections = new List <Bitmap>();

            foreach (FlatInfo fi in hi.Sections)
            {
                ImgSection imgSection = GetImgSection(fi, imgHouse);

                imgHouse.ImgSections.Add(imgSection);
                SectionIndex++;
            }
            //   GC.Collect();

            return(imgHouse);
        }
Example #3
0
        public void CombineImages(string imageOutPutPath)
        {
            int HouseIndex = 1;

            List <ImgHouse> imgHouses = new List <ImgHouse>();

            foreach (HouseInfo hi in this.genObj.Houses)
            {
                ImgHouse imgH = generateOneHouse(hi);

                //string imgHName = "Вариант" + HouseIndex + ".png";
                //string imgHDir = imageOutPutPath;

                //SaveImage(imgH.BmpImageHouse, imgHDir, imgHName);
                //  GC.Collect();

                HouseIndex++;
            }
        }
Example #4
0
        public Bitmap generateOneHouse(ImgHouse House, int ModuleWidth)
        {
            CalculateHouseImageDimentions(ModuleWidth);
            CalculateImageSectionsCoords(ModuleWidth);


            int width  = House.Width * ModuleWidth;
            int height = House.Height * ModuleWidth;

            var bitmap = new Bitmap(width, height);

            using (var canvas = Graphics.FromImage(bitmap))
            {
                canvas.Clear(Color.White);
                canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;



                foreach (ImgSection imgSection in House.ImgSections)
                {
                    int imgSectionWidth  = 0;
                    int imgSectionHeight = 0;

                    if (imgSection.SectionInfo.IsVertical)
                    {
                        // TODO: в классе изображения секции привести значения длины секции и высоты секции в соответствии с изображением png
                        imgSectionWidth  = imgSection.Height;
                        imgSectionHeight = imgSection.Lenght;
                    }
                    else
                    {
                        imgSectionWidth  = imgSection.Lenght;
                        imgSectionHeight = imgSection.Height;
                    }



                    imgSectionWidth   *= ModuleWidth;
                    imgSectionHeight  *= ModuleWidth;
                    imgSection.CoordX *= ModuleWidth;
                    imgSection.CoordY *= ModuleWidth;



                    Image frame;
                    try
                    {
                        frame = imgSection.BmpSection;
                    }
                    catch (Exception ex)
                    {
                        frame = new Bitmap(imgSectionWidth, imgSectionHeight);
                    }


                    //TODO: Здесь возникала ошибка с отсутствующим изображением PIK1_BS_L_10-17_A
                    try
                    {
                        canvas.DrawImage(frame,
                                         new Rectangle(imgSection.CoordX,
                                                       imgSection.CoordY,
                                                       //imgFlat.CoordY * ModuleWidth * 2,
                                                       //-ModuleWidth - ModuleWidth/4,
                                                       imgSectionWidth,
                                                       imgSectionHeight),
                                         new Rectangle(0,
                                                       0,
                                                       //imgFlat.CoordY * ModuleWidth,
                                                       //-ModuleWidth,
                                                       frame.Width,
                                                       frame.Height),
                                         GraphicsUnit.Pixel);
                    }
                    catch (Exception)
                    {
                    }



                    //canvas.Save();
                }

                // canvas.RotateTransform(7);
                canvas.Save();
            }


            return(bitmap);
        }
Example #5
0
        private ImgSection GetImgSection(FlatInfo fi, ImgHouse imgHouse = null)
        {
            ImgSection imgSection = new ImgSection();

            //if (hi.SectionsBySize[0].)
            //{
            //    imgSection.Angle += 90;
            //}

            //if (fi.IsInvert)
            //{
            //    imgSection.Angle += 180;
            //}

            imgSection.Angle = fi.ImageAngle;

            // Корректировка точки вставки секций
            if (fi.IsCorner)
            {
                imgSection.CoordYCorrection = 0;
                if (imgHouse != null)
                {
                    imgHouse.IsCorner = true;
                }
            }

            // Определение положения дома - вертикальный/горизонтальный
            if (!fi.IsVertical)
            {
                if (imgHouse != null)
                {
                    imgHouse.IsVertical = false;
                }
            }

            int SelectedDownPrev = 0;
            int offset           = 0;
            int minX             = 0;

            int X = 0;

            bool prev3NL2  = false;
            int  FlatIndex = 0;

            foreach (RoomInfo ri in fi.Flats)
            {
                // Корректировка неверно выданных данных
                if (ri.Type.Contains("3NL2"))
                {
                    ri.SelectedIndexTop    = 4;
                    ri.SelectedIndexBottom = 0;
                    imgSection.Height      = 5;
                }

                // Корректировка неверно выданных данных
                if (ri.Type == "PIK1U_BS_A_10-17_A_2")
                {
                    ri.SelectedIndexTop = 3;
                }

                // Корректировка положения квартиры 2KL2 и 2NM1

                if (ri.Type.Contains("2KL2") || ri.Type.Contains("2NM1"))
                {
                    if (prev3NL2 || (fi.Flats.Any(x => x.Type.Contains("3NL2")) && (fi.Flats.Count == FlatIndex + 2)))
                    {
                        ri.ImageNameSuffix = "_U";

                        if (ri.Type.Contains("2NM1"))
                        {
                            ri.SelectedIndexBottom = 1;
                        }
                        if (ri.Type.Contains("2KL2"))
                        {
                            ri.SelectedIndexBottom = 2;
                        }
                        ri.HorisontalModules = 2;
                        prev3NL2             = false;
                    }
                    else
                    {
                        ri.ImageNameSuffix     = "";
                        ri.SelectedIndexBottom = 3;
                        ri.HorisontalModules   = 3;
                    }

                    if (fi.Flats.Any(x => x.Type.Contains("3NL2")) && (fi.Flats.Count == FlatIndex + 2))
                    {
                        ri.NextOffsetX = 1;
                    }
                }

                if (ri.Type.Contains("3NL2"))
                {
                    // Флаг предыдущей секции 3NL2
                    prev3NL2 = true;

                    // Если после ЛЛУ идёт квартира типа 3NL2, то дом L-ориентирован
                    if (FlatIndex == 1)
                    {
                        if (imgHouse != null)
                        {
                            imgHouse.LOrientation = true;
                        }
                    }

                    // Если встретилась повёрнутая секция, то дом не является горизонтально ориентированным
                    // TODO: неясно, для чего было условие, разобраться

                    //if (fi.IsVertical)
                    //{

                    //}
                }
                else
                {
                    prev3NL2 = false;
                }
                FlatIndex++;

                ImgFlat imgFlat = new ImgFlat(ImagePath, ri.Type + ri.ImageNameSuffix, 0);
                imgFlat.Width  = ri.HorisontalModules + 2;
                imgFlat.Heigth = 6;

                // Определение точки вставки квартиры
                if (ri.SelectedIndexTop > 0 && ri.SelectedIndexBottom > 0 && SelectedDownPrev > 0)
                {
                    offset           = SelectedDownPrev;
                    SelectedDownPrev = 0;
                }
                else
                {
                    offset = SelectedDownPrev - ri.SelectedIndexTop;
                    if (ri.SelectedIndexBottom > 0)
                    {
                        SelectedDownPrev = ri.HorisontalModules + ri.NextOffsetX;
                    }
                    else
                    {
                        SelectedDownPrev = ri.SelectedIndexBottom;
                    }
                }

                X = X + offset + ri.CurrentOffsetX;

                if (X < minX)
                {
                    minX = X;
                }

                imgFlat.CoordX = X;

                imgSection.Lenght += ri.SelectedIndexBottom;

                imgSection.ImgFlats.Add(imgFlat);
            }

            foreach (ImgFlat imgFlat in imgSection.ImgFlats)
            {
                imgFlat.CoordX -= minX;
            }

            imgSection.SectionInfo = fi;

            //imgSection.BmpSectionPath = imgDir + imgName;

            imgSection.BmpSection = generateOneSection(imgSection);

            // Сохранение отдельных секций для отладки
#if DEBUG
            string imgName = @"Секция" + SectionIndex + ".png";
            string imgDir  = @"Section\";// @"C:\Users\fazleevaa\Links\Desktop\RRR" + "\\";
            SaveImage(imgSection.BmpSection, imgDir, imgName);
#endif
            return(imgSection);
        }