コード例 #1
0
        /// <summary>
        /// Загрузка точек. Определение точек найденных на карте
        /// </summary>
        private void LoadPoints()
        {
            var doc = Doc;

            if (doc == null)
            {
                return;
            }

            Tree.ClearVisuals();
            Tree.Points.Clear();

            var idPoints = Map.InsPoints;

            if (idPoints == null || idPoints.Count == 0)
            {
                return;
            }

            foreach (var idPt in idPoints)
            {
                try
                {
                    DefinePoint(idPt);
                }
                catch (Exception ex)
                {
                    Inspector.AddError($"Ошибка расчета точки - {ex.Message}", idPt, System.Drawing.SystemIcons.Error);
                    Logger.Log.Error(ex, "LoadPoints()");
                }
            }

            Tree.UpdateVisualTree();
        }
コード例 #2
0
        public static List <MountingPanel> GetPanels(BlockTableRecord btr, Point3d ptBase, Matrix3d transform,
                                                     PanelLibraryLoadService libLoadServ, FloorMounting floor)
        {
            // Поиск всех панелей СБ в определении блока
            var panelsSB = new List <MountingPanel>();

            foreach (ObjectId idEnt in btr)
            {
                if (idEnt.IsValidEx() && idEnt.ObjectClass.Name == "AcDbBlockReference")
                {
                    using (var blRefPanelSB = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference)
                    {
                        var panelSb = DefinePanel(blRefPanelSB, transform, libLoadServ, floor);
                        if (panelSb != null)
                        {
                            panelsSB.Add(panelSb);
                        }
                    }
                }
            }
            if (panelsSB.Count == 0)
            {
                // Ошибка - в блоке монтажного плана, не найдена ни одна панель
                Inspector.AddError($"В блоке монтажного плана {btr.Name} не найдена ни одна панель.",
                                   new Extents3d(ptBase, new Point3d(ptBase.X + 10000, ptBase.Y + 10000, 0)),
                                   btr.Id, icon: System.Drawing.SystemIcons.Error);
            }
            return(panelsSB);
        }
コード例 #3
0
ファイル: BrepExtensions.cs プロジェクト: vildar82/AcadLib
        public static List <Region> CreateRegion([NotNull] this IEnumerable <Curve> curves)
        {
            var res = new List <Region>();

            foreach (var curve in curves)
            {
                var dbs = new DBObjectCollection {
                    curve
                };
                try
                {
                    var dbsRegions = Region.CreateFromCurves(dbs);
                    foreach (var item in dbsRegions)
                    {
                        res.Add((Region)item);
                    }
                }
                catch
                {
                    // Самопересечение
                    Inspector.AddError("Самопересечение контура", curve.GeometricExtents, Matrix3d.Identity);
                }
            }
#if DRAW
//EntityHelper.AddEntityToCurrentSpace(res);
#endif
            return(res);
        }
コード例 #4
0
        private static double GetArea(Entity ent, double unitFactor = 1, string tag = "")
        {
            double res = 0;

            try
            {
                if (ent is Curve)
                {
                    var curve = ent as Curve;
                    res = curve.Area * unitFactor;
                }
                else if (ent is Hatch)
                {
                    var h = ent as Hatch;
                    res = h.Area * unitFactor;
                }
                else
                {
                    Inspector.AddError($"Неподдерживаемый тип объекта - '{ent.GetType().Name}'. Классификатор '{tag}'. Слой '{ent.Layer}'",
                                       ent, System.Drawing.SystemIcons.Error);
                }
            }
            catch { }

            if (res == 0)
            {
                Inspector.AddError($"Не определена площадь объекта '{tag}'. Слой '{ent.Layer}'", ent, System.Drawing.SystemIcons.Error);
            }

            return(res);
        }
コード例 #5
0
ファイル: Workspace.cs プロジェクト: vildar82/PanelColorAlbum
        public static Workspace Define(BlockReference blRef)
        {
            string err = null;

            try
            {
                var ws = new Workspace(blRef);
                if (string.IsNullOrEmpty(ws.Error))
                {
                    return(ws);
                }
                else
                {
                    err = ws.Error;
                }
            }
            catch (Exception ex)
            {
                err = ex.Message;
            }
            if (err != null)
            {
                Inspector.AddError($"Ошибка определения блока рабочей области - {err}", blRef, System.Drawing.SystemIcons.Error);
            }
            return(null);
        }
コード例 #6
0
ファイル: Place.cs プロジェクト: vildar82/GP_PIK_Acad
 /// <summary>
 /// Обновление площадки - пересчет и перерисовка
 /// </summary>
 public void Update()
 {
     try
     {
         if (!PlaceModel.IsEnableCalc)
         {
             return;
         }
         if (!IsVisualPlaceOn)
         {
             VisualPlace?.Dispose();
             VisualPlace = null;
             return;
         }
         var tiles = PlaceModel.Model.CalcService.CalcPlace.CalcPlace(this);
         // Суммирование освещенностей по уровням
         LevelsInfo = GetLevelsInfo(tiles);
         // Визуализация ячеек
         if (VisualPlace == null)
         {
             VisualPlace = new VisualPlace(this);
         }
         VisualPlace.Tiles      = tiles;
         VisualPlace.VisualIsOn = true;
     }
     catch (Exception ex)
     {
         Inspector.AddError($"Ошибка расчета площадки {Name} - {ex.Message}", PlaceId, System.Drawing.SystemIcons.Error);
         Logger.Log.Error(ex, "Place.Update()");
     }
 }
コード例 #7
0
        public static List <Pile> Filter(List <ObjectId> selblocks, PileOptions pileOptions, bool checkNum)
        {
            var resVal = new List <Pile>();
            var db     = HostApplicationServices.WorkingDatabase;

            using (var t = db.TransactionManager.StartTransaction())
            {
                foreach (var idBlRef in selblocks)
                {
                    using (var blRef = idBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference)
                    {
                        var blName = blRef.GetEffectiveName();
                        if (Regex.IsMatch(blName, pileOptions.PileBlockNameMatch))
                        {
                            var pile = new Pile(blRef, blName);
                            if (pile.Error == null)
                            {
                                resVal.Add(pile);
                            }
                            else
                            {
                                Inspector.AddError(pile.Error);
                            }
                        }
                    }
                }
                t.Commit();
            }
            return(resVal);
        }
コード例 #8
0
        public void ReadPanelsFromBase()
        {
            if (!File.Exists(XmlBasePanelsFile))
            {
                throw new FileNotFoundException("XML файл базы панелей не найден.", XmlBasePanelsFile);
            }

            // TODO: Проверка валидности xml

            // Чтение файла базы панелей
            _panelsXML = new Dictionary <string, Panel>();
            XmlSerializer ser = new XmlSerializer(typeof(Base.Panels));

            using (var fileStreamXml = new FileStream(XmlBasePanelsFile, FileMode.Open))
            {
                Panels panels     = ser.Deserialize(fileStreamXml) as Panels;
                var    panelsList = panels.Panel.ToList();
                foreach (var panel in panelsList)
                {
                    try
                    {
                        _panelsXML.Add(panel.mark.ToUpper(), panel);
                    }
                    catch (ArgumentException ex)
                    {
                        Inspector.AddError($"Ошибка получения панели из базы xml - такая панель уже есть. {ex.Message}",
                                           icon: System.Drawing.SystemIcons.Error);
                    }
                }
            }
        }
コード例 #9
0
 // загрузка АКР-панелей из библиотеки с попыткой расстановить их в виде фасадов если правильно расставлены монтажки
 public void LoadPanels()
 {
     Inspector.Clear();
     // Попытка определить фасады по монтажкам
     Facades = FacadeMounting.GetFacadesFromMountingPlans(this);
     if (Inspector.HasErrors)
     {
         Inspector.Show();
         return;
     }
     if (Facades.Count > 0)
     {
         // загрузка АКР-панелей из библиотеки
         MountingPanel.LoadBtrPanels(Facades);
         // удаление АКР-Панелей старых фасадов
         FacadeMounting.DeleteOldAkrPanels(Facades);
         // расстановка АКР-Панелей по фасадам
         FacadeMounting.CreateFacades(Facades);
     }
     else
     {
         Inspector.AddError("Не удалось определить фасады по монтажным планам.", icon: System.Drawing.SystemIcons.Error);
     }
     if (Inspector.HasErrors)
     {
         // Показать ошибки.
         Inspector.Show();
     }
 }
コード例 #10
0
        private Dictionary <string, ObjectId> defineBlockFromTemplate(List <string> blNames)
        {
            // Переопределение блока плитки из файла шаблона блоков
            string fileBlocksTemplate = Path.Combine(Commands.CurDllDir, Settings.Default.TemplateBlocksAKRFileName);

            if (File.Exists(fileBlocksTemplate))
            {
                try
                {
                    // копирование сечений панелей
                    Dictionary <string, ObjectId> blNamesCopy;
                    BlPanelSections = BlockSectionAbstract.LoadSections(fileBlocksTemplate, _service, blNames, out blNamesCopy);
                    return(blNamesCopy);
                    // копирование остальных блоков
                    //return AcadLib.Blocks.Block.CopyBlockFromExternalDrawing(blNames, fileBlocksTemplate,
                    //               _service.Db, DuplicateRecordCloning.Replace);
                }
                catch (Exception ex)
                {
                    Logger.Log.Error(ex, "AcadLib.Blocks.Block.CopyBlockFromExternalDrawing");
                }
            }
            else
            {
                Inspector.AddError($"Не найден файл шаблона блоков АКР - {fileBlocksTemplate}", icon: System.Drawing.SystemIcons.Error);
            }
            return(new Dictionary <string, ObjectId>());
        }
コード例 #11
0
        public Panel GetPanelXml(string markSb, MountingPanel panelMount = null)
        {
            Panel panel;

            if (!_panelsXML.TryGetValue(markSb.ToUpper(), out panel))
            {
                // Если это панель с классом бетона 2, то найти панель без индекса класса (3НСНг2 75.29.42-6 - 3НСНг 75.29.42-6 - геометрически одинаковые)
                int indexConcreteClass = panelMount != null ? panelMount.IndexConcreteClass : MountingPanel.DefineIndexConcreteClass(markSb);
                if (indexConcreteClass > 0)
                {
                    string markSbWoConcreteClass = MountingPanel.GetMarkWoConcreteClass(markSb);
                    panel = GetPanelXml(markSbWoConcreteClass, panelMount);
                    if (panel != null)
                    {
                        panel.mark = markSb;
                    }
                    return(panel);
                }
            }
            if (panel == null)
            {
                // Ошибка - панели с такой маркой нет в базе
                if (panelMount == null)
                {
                    Inspector.AddError($"Панели с такой маркой нет в базе - {markSb}", icon: System.Drawing.SystemIcons.Error);
                }
                else
                {
                    Inspector.AddError($"Панели с такой маркой нет в базе - {markSb}", panelMount.ExtTransToModel, panelMount.IdBlRef,
                                       icon: System.Drawing.SystemIcons.Error);
                }
            }
            return(panel);
        }
コード例 #12
0
        /// <summary>
        /// преобразование панеелей
        /// </summary>
        public void ConvertBtr()
        {
            ProgressMeter progress = new ProgressMeter();

            progress.SetLimit(PanelsBtrExport.Count);
            progress.Start("Преобразование блоков панелей в экспортированном файле");
            // Преобразования определений блоков панелей
            foreach (var panelBtr in PanelsBtrExport)
            {
                progress.MeterProgress();
                if (HostApplicationServices.Current.UserBreak())
                {
                    throw new System.Exception("Отменено пользователем.");
                }
                try
                {
                    panelBtr.ConvertBtr();
                    if (!string.IsNullOrEmpty(panelBtr.ErrMsg))
                    {
                        Inspector.AddError(panelBtr.ErrMsg, panelBtr.Panels.First().Extents, panelBtr.Panels.First().IdBlRefAkr,
                                           icon: System.Drawing.SystemIcons.Error);
                    }
                }
                catch (System.Exception ex)
                {
                    Inspector.AddError($"Ошибка конвертации блока панели - {ex.Message}", icon: System.Drawing.SystemIcons.Error);
                    //Logger.Log.Error(ex, "Ошибка конвертиации экспортрированного блока панели");
                }
            }
            progress.Stop();
        }
コード例 #13
0
        public void Update()
        {
            try
            {
                AddPlacesFromMap();

                if (!IsEnableCalc)
                {
                    return;
                }

                // Очистка удаленных контуров
                var deletedPlaces = Places.Where(p => !p.PlaceId.IsValidEx()).ToList();
                foreach (var item in deletedPlaces)
                {
                    Places.Remove(item);
                    item.Dispose();
                }
                foreach (var place in Places)
                {
                    place.Update();
                }
            }
            catch (Exception ex)
            {
                Inspector.AddError($"Ошибка расчета площадок - {ex.Message}");
                Logger.Log.Error(ex, "PlaceModel.Update()");
            }
        }
コード例 #14
0
 private void checkWindow()
 {
     if (string.IsNullOrEmpty(Mark))
     {
         Inspector.AddError($"Не определена марка окна '{BlName}' в блоке панели '{MarkSb.MarkSbBlockName}'", icon: System.Drawing.SystemIcons.Error);
     }
 }
コード例 #15
0
        private void checkStoreysFacade()
        {
            // проверка этажей в фасаде.
            // не должно быть одинаковых номеров этажей
            var storeysFacade     = Floors.Select(f => f.Storey);
            var storeyNumbersType = storeysFacade.Where(s => s.Type == EnumStorey.Number).ToList();
            var dublicateNumbers  = storeyNumbersType.GroupBy(s => s.Number).Where(g => g.Count() > 1).Select(g => g.Key).ToList();

            if (dublicateNumbers.Count > 0)
            {
                string nums = string.Join(",", dublicateNumbers);
                Inspector.AddError($"Повторяющиеся номера этажей в фасаде. Координата фасада X = {XMin}. " +
                                   $"Повторяющиеся номера этажей определенные по блокам монтажных планов этого фасада {nums}",
                                   icon: System.Drawing.SystemIcons.Error);
            }
            // Ч и П могут быть только по одной штуке
            var storeyUpperType = storeysFacade.Where(s => s.Type == EnumStorey.Upper);

            if (storeyUpperType.Count() > 1)
            {
                Inspector.AddError(string.Format(
                                       "Не должно быть больше одного этажа Чердака в одном фасаде. Для фасада найдено {0} блоков монтажных планов определенных как чердак. Координата фасада X = {1}.",
                                       storeyUpperType.Count(), XMin), icon: System.Drawing.SystemIcons.Error);
            }
            var storeyParapetType = storeysFacade.Where(s => s.Type == EnumStorey.Parapet);

            if (storeyParapetType.Count() > 1)
            {
                Inspector.AddError(string.Format(
                                       "Не должно быть больше одного этажа Парапета в одном фасаде. Для фасада найдено {0} блоков монтажных планов определенных как парапет. Координата фасада X = {1}.",
                                       storeyParapetType.Count(), XMin), icon: System.Drawing.SystemIcons.Error);
            }
        }
コード例 #16
0
        /// <summary>
        /// Создание таблицы спецификации блоков, с запросом выбора блоков у пользователя.
        /// Таблица будет вставлена в указанное место пользователем в текущем пространстве.
        /// </summary>
        public void CreateTable()
        {
            // Выбор блоков
            SelBlocks.Select();

            using (var t = Doc.TransactionManager.StartTransaction())
            {
                try
                {
                    // Фильтрация блоков
                    Items = SpecItem.FilterSpecItems(this);
                    // Группировка элементов
                    Groups = SpecGroup.Grouping(this);

                    // Создание таблицы
                    Table table = getTable();
                    // Вставка таблицы
                    insertTable(table);
                }
                catch (Exception ex)
                {
                    Logger.Log.Error(ex, "SpecTable.CreateTable().");
                    Inspector.AddError(ex.Message);
                }

                t.Commit();
            }
        }
コード例 #17
0
 public void DefineStorey(List <Storey> storeysNumbersTypeInAllFacades)
 {
     try
     {
         var storey = new Storey(BlRefName);
         if (storey.Type == EnumStorey.Number)
         {
             // поиск в общем списке этажей. Номерные этажи всех фасадов должны быть на одном уровне
             var storeyAllFacades = storeysNumbersTypeInAllFacades?.Find(s => s.Number == storey.Number);
             if (storeyAllFacades == null)
             {
                 storeysNumbersTypeInAllFacades?.Add(storey);
             }
             else
             {
                 storey = storeyAllFacades;
             }
             //Height = Settings.Default.FacadeFloorHeight;
         }
         Storey = storey;
     }
     catch (Exception ex)
     {
         // ошибка определения номера этажа монтажки - это не чердак (Ч), не парапет (П), и не
         // просто число
         Inspector.AddError(ex.Message + BlRefName, IdBlRefMounting, icon: System.Drawing.SystemIcons.Error);
         Logger.Log.Error(ex, "Floor - DefineStorey()");
     }
 }
コード例 #18
0
        public ParkingBuilding(BlockReference blRef, string blName) : base(blRef, blName)
        {
            IdBlRef          = blRef.Id;
            Height           = Floors * 3;
            FriendlyTypeName = "Паркинг";
            BuildingType     = BuildingTypeEnum.Garage;

            var valPlaces = BlockBase.GetPropValue <string>(ParamPlaces, exactMatch: false);
            var resPlaces = AcadLib.Strings.StringHelper.GetStartInteger(valPlaces);

            if (resPlaces.Success)
            {
                Places = resPlaces.Value;
            }
            else
            {
                BlockBase.AddError($"Не определено кол машиномест из параметра {ParamPlaces} = {valPlaces}");
            }

            // Полилиния контура
            var plContour = BlockBase.FindPolylineInLayer(LayerContour).FirstOrDefault();

            if (plContour == null)
            {
                Inspector.AddError($"Не определена полилиния контура здания парковки на слое {LayerContour}.",
                                   IdBlRef, System.Drawing.SystemIcons.Warning);
            }
            else
            {
                IdPlContour = plContour.Id;
            }
        }
コード例 #19
0
ファイル: FrontGroup.cs プロジェクト: vildar82/GP_PIK_Acad
 /// <summary>
 /// Обновление домов в группе и расчет
 /// </summary>
 public void Update()
 {
     if (!IsVisualFrontOn || Front?.Model == null)
     {
         return;
     }
     try
     {
         // Дома в области группы - без домов из других групп
         var housesInGroup = Front.Model.Map.Houses.GetHousesInExtents(SelectRegion).
                             Where(w => w.FrontGroup == null || w.FrontGroup == this).ToList();
         for (int i = 0; i < housesInGroup.Count; i++)
         {
             var house = housesInGroup[i];
             house.FrontGroup = this;
             house.Update(i + 1);
         }
         Houses = new ObservableCollection <House>(housesInGroup.OrderBy(o => o.Name, AcadLib.Comparers.AlphanumComparator.New));
     }
     catch (Exception ex)
     {
         Inspector.AddError($"Ошибка расчета фронтов '{Name}' - {ex.Message}", SelectRegion, Matrix3d.Identity, System.Drawing.SystemIcons.Error);
         Logger.Log.Error(ex, "FrontGroup.Update()");
     }
 }
コード例 #20
0
ファイル: MarkAr.cs プロジェクト: vildar82/PanelColorAlbum
        // Определение покраски панели (список цветов по порядку списка плитов в блоке СБ)
        public static List <Paint> GetPanelMarkAR(MarkSb markSb, BlockReference blRefPanel, RTree <ColorArea> rtreeColorAreas)
        {
            List <Paint> paintsAR = new List <Paint>();

            int  i = 0;
            bool hasTileWithoutPaint = false;

            foreach (Tile tileMarSb in markSb.Tiles)
            {
                Paint paintSb = markSb.Paints[i++];
                Paint paintAR;
                if (paintSb == null)
                {
                    // Опрделение покраски по зонам
                    Point3d centerTileInBlRef = GetCenterTileInBlockRef(blRefPanel.Position, tileMarSb.CenterTile);
                    paintAR = ColorArea.GetPaint(centerTileInBlRef, rtreeColorAreas);
                    if (paintAR == null)
                    {
                        if (!hasTileWithoutPaint)
                        {
                            //Ошибка. Не удалось определить покраску плитки.???
                            Inspector.AddError($"{markSb.MarkSbClean} - не все плитки покрашены", blRefPanel, icon: System.Drawing.SystemIcons.Error);
                            hasTileWithoutPaint = true;
                        }
                    }
                }
                else
                {
                    paintAR = paintSb;
                }
                paintsAR.Add(paintAR);
            }
            return(paintsAR);
        }
コード例 #21
0
        public static void CreateTable(bool isNew)
        {
            Doc = Application.DocumentManager.MdiActiveDocument;
            Db  = Doc.Database;
            Ed  = Doc.Editor;

            OptionsKPBS.PromptOptions();

            // Выбор блоков блок-секций
            var blocks = SelectBlocksection(isNew, false);

            // Определение точных контуров ГНС - с учетом стыковки блок-секций
            if (isNew)
            {
                try
                {
                    DefineHouses(blocks, false);
                }
                catch (Exception ex)
                {
                    Inspector.AddError($"Ошибка определения точного контура ГНС Блок-Секций - {ex}");
                }
            }

            // Подсчет блок-секций
            var dataSec = new DataSection(blocks, OptionsKPBS.Instance);

            dataSec.Calc();

            // Создание таблицы и вставка
            var tableSec = new TableSection(dataSec);

            tableSec.Create();
        }
コード例 #22
0
ファイル: ExportColor.cs プロジェクト: 15831944/KR_SB_GK_Acad
        private List <OutsidePanel> defineOutsidePanelsToExport()
        {
            List <OutsidePanel> outPanelsToExport = new List <OutsidePanel>();
            // Выбор блоков
            SelectBlocks selectBl = new SelectBlocks();

            selectBl.SelectOutsidesAndWorkspaces();

            // Связывание блоков наружек и рабочих областей.
            RTree <Workspace> treeWs = getRTreeWS(selectBl.Workspaces);

            foreach (var outPanel in selectBl.OutsidePanels)
            {
                Point p         = new Point(outPanel.Position.X, outPanel.Position.Y, 0);
                var   nearestWs = treeWs.Nearest(p, 1).FirstOrDefault();
                if (nearestWs != null)
                {
                    outPanel.Workspace = nearestWs;
                    outPanelsToExport.Add(outPanel);
                }
                else
                {
                    // Для панели не определена рабочая область
                    Inspector.AddError($"Для наружной стеновой панели '{outPanel.Mark}' не определена рабочая область.",
                                       outPanel.IdBlRef, System.Drawing.SystemIcons.Exclamation);
                }
            }
            return(outPanelsToExport);
        }
コード例 #23
0
        public static void CheckNums(List <Pile> piles)
        {
            // Проверка последовательности номеров.
            //var sortNums = piles.OrderBy(p => p.Pos);

            // Проверка повторяющихся номеров
            var repeatNums = piles.GroupBy(g => g.Pos).Where(g => g.Skip(1).Any());

            foreach (var repaet in repeatNums)
            {
                foreach (var item in repaet)
                {
                    Inspector.AddError($"Повтор номера {item.Pos}", item.IdBlRef, System.Drawing.SystemIcons.Error);
                }
            }

            // Проверка пропущенных номеров
            var minNum   = piles.First().Pos;
            var maxNum   = piles.Last().Pos;
            var trueSeq  = Enumerable.Range(minNum, maxNum - minNum);
            var missNums = trueSeq.Except(piles.Select(p => p.Pos)).Where(p => p > 0);

            foreach (var item in missNums)
            {
                Inspector.AddError($"Пропущен номер сваи {item}", System.Drawing.SystemIcons.Error);
            }

            // Недопустимые номера - меньше 1
            var negateNums = piles.Where(p => p.Pos < 1);

            foreach (var item in negateNums)
            {
                Inspector.AddError($"Недопустимый номер сваи {item.Pos}", item.IdBlRef, System.Drawing.SystemIcons.Error);
            }
        }
コード例 #24
0
        /// <summary>
        ///  Поиск блока стены по границам стен и точке вставки блока двери
        /// </summary>
        public void SearchHostWallDwg(List <Element> elements)
        {
            this.HostWall = new List <WallElement>();
            var walls = elements.OfType <WallElement>();

            foreach (var wall in walls)
            {
                // Попадает ли точка вствавки блока двери в границы стены
                if (wall.Contour == null)
                {
                    if (wall.ExtentsClean.IsPointInBounds(Position))
                    {
                        HostWall.Add(wall);
                    }
                }
                else
                {
                    if (wall.Contour.IsPointInsidePolygon(Position))
                    {
                        HostWall.Add(wall);
                    }
                }
            }
            // Ошибка если не найдена стена
            if (this.HostWall.Count == 0)
            {
                Inspector.AddError($"Не определена стена для двери {FamilySymbolName}. ",
                                   ExtentsInModel, IdBlRef, System.Drawing.SystemIcons.Error);
                // Исключить дверь из элементов модуля - и дверь не будет записана в базк
                elements.Remove(this);
            }
        }
コード例 #25
0
        /// <summary>
        /// Определение номеров строк и столбцов ячеек инсоляции
        /// </summary>
        public void DefineNumCells()
        {
            foreach (var cell in Cells)
            {
                cell.DefineNumCell();
            }

            // Проверка наложения ячеек - не должно быть ячеек с одинаковым номером строки и столбца
            var dublicateCells = Cells.GroupBy(g => new { row = g.Row, col = g.Column }).Where(w => w.Skip(1).Any());

            foreach (var dubl in dublicateCells)
            {
                // Ошибка
                var fp  = dubl.First();
                var err = $"Наложение ячеек инсоляции! Координата {fp.PtCenterOrig}. Ячейка в Excel [{dubl.Key.row};{dubl.Key.col}]";
                var ext = fp.PtCenterOrig.GetRectangleFromCenter(InsCell.ModuleSize).Convert3d();
                Inspector.AddError(err, ext, Matrix3d.Identity, System.Drawing.SystemIcons.Error);
            }

#if TEST
            // Подпись ячеек
            foreach (var item in Cells)
            {
                item.TestDraw();
            }
#endif
        }
コード例 #26
0
        public void DefineOrientation(BlockReference blRefElem)
        {
            // Определение направления
            var  btr      = blRefElem.BlockTableRecord.GetObject(OpenMode.ForRead) as BlockTableRecord;
            bool isFinded = false;

            foreach (var idEnt in btr)
            {
                var lineOrient = idEnt.GetObject(OpenMode.ForRead, false, true) as Line;
                if (lineOrient == null || lineOrient.ColorIndex != Options.Instance.DoorOrientLineColorIndex || !lineOrient.Visible)
                {
                    continue;
                }
                var lineTemp = (Line)lineOrient.Clone();
                lineTemp.TransformBy(blRefElem.BlockTransform);
                Direction = Element.GetDirection(lineTemp.Angle);
                isFinded  = true;
                break;
            }
            if (!isFinded)
            {
                Inspector.AddError($"Не определено направление открывания двери {Name}. " +
                                   $"Направление открывания двери определяется отрезком с цветом {Options.Instance.DoorOrientLineColorIndex} в блоке двери.",
                                   this.ExtentsInModel, this.IdBlRef, System.Drawing.SystemIcons.Error);
            }
        }
コード例 #27
0
ファイル: SpecItem.cs プロジェクト: 15831944/SpecBlocks
        /// <summary>
        /// Проверка соответствия значениям в столбцах
        /// </summary>
        /// <param name="columnsValue"></param>
        public void CheckColumnsValur(List <ColumnValue> columnsValue, SpecTable specTable)
        {
            string err = string.Empty;

            foreach (var colVal in columnsValue)
            {
                if (colVal.ColumnSpec.ItemPropName == "Count")
                {
                    continue;
                }

                DBText atr;
                if (AttrsDict.TryGetValue(colVal.ColumnSpec.ItemPropName, out atr))
                {
                    if (!colVal.Value.Equals(atr.TextString, StringComparison.OrdinalIgnoreCase))
                    {
                        err += $"'{colVal.ColumnSpec.ItemPropName}'='{atr.TextString}' не соответствует эталонному значению '{colVal.Value}', '{specTable.SpecOptions.KeyPropName}' = '{Key}'.\n";
                    }
                }
                else
                {
                    // В элементе вообще нет свойства для этого столбца
                    err += $"Не определено свойство '{colVal.ColumnSpec.ItemPropName}'.\n";
                }
            }
            if (!string.IsNullOrEmpty(err))
            {
                Inspector.AddError($"Ошибки в блоке {BlName}: {err} Этот блок попадет в спецификацию с эталонными значениями.", IdBlRef);
            }
        }
コード例 #28
0
        private static void ShowSelection()
        {
            if (Palette.IsStop || !providers.Any())
            {
                Clear();
                return;
            }

            var doc = AcadHelper.Doc;
            var sel = doc.Editor.SelectImplied();

            if (sel.Status != PromptStatus.OK || sel.Value.Count == 0)
            {
                // Очистить палитру свойств
                Clear();
                return;
            }

            entModifiedObs?.Dispose();
            var ids = sel.Value.GetObjectIds();

            idsHash = new HashSet <ObjectId>(ids);

            // группы по типу объектов
            var groups = new List <PalettePropsType>();

            using (doc.LockDocument())
                using (var t = doc.TransactionManager.StartTransaction())
                {
                    foreach (var provider in providers)
                    {
                        try
                        {
                            var types = provider.GetTypes(ids, doc)
                                        .Where(w => w?.Groups?.Any(g => g?.Properties?.Any() == true) == true);
                            groups.AddRange(types);
                        }
                        catch (Exception ex)
                        {
                            Inspector.AddError($"Ошибка обработки группы свойств '{provider.Name}' - {ex}");
                        }
                    }

                    t.Commit();
                }

            if (groups.Count == 0)
            {
                propsVM.Clear();
            }
            else
            {
                propsVM.Types        = groups.OrderByDescending(o => o.Count).ToList();
                propsVM.SelectedType = propsVM.Types[0];
            }

            SubscibeEntityModified(doc.Database);

            Inspector.Show();
        }
コード例 #29
0
        private List <AirConditioner> Filter(List <ObjectId> selBls)
        {
            var airConds = new List <AirConditioner>();

            foreach (var idBlRef in selBls)
            {
                using (var blRef = idBlRef.Open(OpenMode.ForRead, false, true) as BlockReference)
                {
                    var blName = blRef.GetEffectiveName();
                    if (blName.Equals("АР_Корзина_Кондиционера", StringComparison.OrdinalIgnoreCase))
                    {
                        var airCond = new AirConditioner(blRef);
                        airConds.Add(airCond);
                        if (!string.IsNullOrEmpty(airCond.Error))
                        {
                            Inspector.AddError($"Ошибки в блоке кондиционера - {airCond.Error}", blRef, System.Drawing.SystemIcons.Warning);
                        }
                    }
                }
            }
            if (airConds.Count == 0)
            {
                throw new Exception("Не найдены блоки кондиционеров 'АР_Корзина_Кондиционера'");
            }
            return(airConds);
        }
コード例 #30
0
        public void CalcRows(List <IGrouping <string, IArea> > groups)
        {
            data = new List <BalanceRow>();
            foreach (var item in groups)
            {
                BalanceRow row = new BalanceRow(item.ToList());
                data.Add(row);
            }

            // Строка Площади участка дома
            var homeRow = data.Find(r => r.ClassType.ClassName == BalanceClassService.HomeArea);

            if (homeRow != null)
            {
                // Процент остальных площадей
                foreach (var item in data)
                {
                    item.PercentTerritory = Math.Round(item.Area / homeRow.Area * 100, 2);
                }
            }
            else
            {
                Inspector.AddError($"Не определен объект класса '{BalanceClassService.HomeArea}'");
            }

            CalcRows();
        }