예제 #1
0
        public override bool IsApplicable(RXObject overruledSubject)
        {
            // Проверка точки - инсоляционная или нет
            var dPt = (DBPoint)overruledSubject;

            return(InsPointHelper.IsInsPoint(dPt));
        }
예제 #2
0
        /// <summary>
        /// Создание точки на чертеже
        /// </summary>
        public void CreatePoint()
        {
            var doc = Model.Doc;

            // Создать точку на чертеже и записать в нее xdata и dictionary
            if (DBPointId.IsNull)
            {
                using (doc.LockDocument())
                    using (var t = doc.TransactionManager.StartTransaction())
                    {
                        // Если точка уже не была добавлена в чертеж
                        Model.Map.IsEventsOn = false;
                        var dbPoint = new DBPoint(Point);
                        var cs      = doc.Database.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                        DBPointId = cs.AppendEntity(dbPoint);
                        SubscribeDbo(dbPoint);
                        t.AddNewlyCreatedDBObject(dbPoint, true);
                        InsPointHelper.SetInsPoint(dbPoint);
                        t.Commit();
                    }
                Model.Map.IsEventsOn = true;
            }
        }
예제 #3
0
        private void DefineEnt(Entity ent)
        {
            var building = ElementFactory.Create <IBuilding>(ent);

            if (building != null)
            {
                // Если это не полилиния или блок - такие объекты пока не поддерживаются
                if (!(ent is Polyline) && !(ent is BlockReference))
                {
                    Inspector.AddError($"Тип здания не подходит для инсоляции - '{ent.GetRXClass().Name}', слой '{ent.Layer}'", ent, System.Drawing.SystemIcons.Error);
                    return;
                }

                var insBuild = new MapBuilding(building);
                Buildings.Add(insBuild);
                var r = GetBuildingRectangle(insBuild);
                treeBuildings.Add(r, insBuild);

                // Подписывание на изменения объекта
                ent.Modified += Building_Modified;
                ent.Erased   += Building_Erased;

                // Оповещение расчета о изменении здания
                if (IsEventsOn)
                {
                    BuildingAdded?.Invoke(this, insBuild);
                }
                return;
            }
            // Сбор точек инсоляции
            var dbPt = ent as DBPoint;

            if (dbPt != null)
            {
                if (InsPointHelper.IsInsPoint(dbPt))
                {
                    InsPoints.Add(dbPt.Id);

                    // Оповещение о создании точки
                    if (IsEventsOn)
                    {
                        InsPointAdded?.Invoke(this, dbPt.Id);
                    }
                }
                return;
            }
            var pl = ent as Polyline;

            if (pl != null)
            {
                var entExtDicExt = new EntDictExt(pl, InsService.PluginName);
                var dic          = entExtDicExt.Load();
                if (dic != null)
                {
                    var dicPlace = dic.GetInner(Place.PlaceDicName);
                    if (dicPlace != null)
                    {
                        Places.Add(new KeyValuePair <ObjectId, DicED>(pl.Id, dicPlace));
                    }
                }
                //// Если она на  слое sapr_ins_visuals - удаление
                //if (VisualDatabase.IsVisualElement(ent))
                //{
                //    ent.UpgradeOpen();
                //    ent.Erase();
                //}
            }
        }