Esempio n. 1
0
        /// <summary>
        /// Определение высоты здания. По параметрам высот 1,тип и тех этажа, или = переданной высоте
        /// </summary>
        /// <param name="height">Высота заданная в параметре Высота в классифицированном объекте</param>
        private double CalcHeight(double height)
        {
            double resHeight;

            // Определение параметров - для расчета инсоляции
            HeightFirstFloor     = FCProperties.GetPropValue(BlockSectionBase.PropHeightFirstFloor, 3.6);
            HeightTypicalFloors  = FCProperties.GetPropValue(BlockSectionBase.PropHeightTypicalFloor, 2.9);
            HeightTechnicalFloor = FCProperties.GetPropValue(BlockSectionBase.PropHeightTechFloor, 1.6);

            if (height != 0)
            {
                resHeight = height;
            }
            else
            {
                resHeight = BlockSectionBase.CalcHeight(HeightFirstFloor, HeightTypicalFloors, HeightTechnicalFloor, Floors);
            }
            return(resHeight);
        }
Esempio n. 2
0
        /// <summary>
        /// Определение точных габаритов Блок-Секций - по стыковке Блок-Секций
        /// </summary>
        private static void DefineHouses(List <BlockSectionKP> blocks, bool fill)
        {
            // Дерево блок-секций
            var       rtreeBs   = GetRtreeBs(blocks);
            Tolerance tolerance = new Tolerance(0.1, 0.1);

            using (var t = Db.TransactionManager.StartTransaction())
            {
                var layerGNS = AcadLib.Layers.LayerExt.CheckLayerState(OptionsKPBS.Instance.LayerBSContourGNS);

                var cs = Db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                foreach (var bs in blocks)
                {
                    // Полилиния ГНС этой секции скопированная в модель
                    var idPlExtern = bs.IdPlContour.CopyEnt(cs.Id);
                    var plExtern   = idPlExtern.GetObject(OpenMode.ForWrite, false, true) as Polyline;
                    plExtern.Layer      = OptionsKPBS.Instance.LayerBSContourGNS;
                    plExtern.ColorIndex = 256;
                    plExtern.Linetype   = SymbolUtilityServices.LinetypeByLayerName;
                    plExtern.LineWeight = LineWeight.ByLayer;
                    plExtern.TransformBy(bs.BlockBase.Transform);

                    try
                    {
                        // Пересечение с другими секциями
                        var bsIntersects = rtreeBs.Intersects(bs.Rectangle);
                        if (bsIntersects.Count > 1)
                        {
                            List <Point2d> vertexModified = new List <Point2d> ();

                            foreach (var bsIntersect in bsIntersects)
                            {
                                // Пропускаем саму себя
                                if (ReferenceEquals(bs, bsIntersect))
                                {
                                    continue;
                                }

                                // Проверка пересечения полилиний контуров

                                // ГНС линия пересекаемой секции
                                var plExternItem = bsIntersect.IdPlContour.GetObject(OpenMode.ForRead, false, true) as Polyline;
                                plExternItem = plExternItem.Clone() as Polyline;
                                plExternItem.TransformBy(bsIntersect.BlockBase.Transform);

                                // Корректировка контура б.с. если она пересекается с другим контуром б.с.
                                BlockSectionBase.CorrectSectionsConnect(ref plExtern, plExternItem);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Inspector.AddError($"Ошибка определения точного контура ГНС блок-секции - {ex}",
                                           bs.BlockBase.IdBlRef, System.Drawing.SystemIcons.Warning);
                    }
                    bs.AreaGNS = plExtern.Area;

                    if (fill)
                    {
                        // Заливка контура штриховкой
                        try
                        {
                            FillContour(bs, plExtern, cs, t);
                        }
                        catch (Exception ex)
                        {
                            Inspector.AddError($"Ошибка заполнения штриховки контура ГНС блок-секции - {ex}",
                                               bs.BlockBase.IdBlRef, System.Drawing.SystemIcons.Warning);
                        }
                    }
                }
                t.Commit();
            }
        }