示例#1
0
 public void AddBuilding(Building building, IntVector pos)
 {
     building.Pos = pos;
     buildings.Add(building);
     if (building.HasEntrance)
     {
         _pathBuilder.ConnectBuilding(building);
     }
     BuildingAdded?.Invoke(building);
 }
示例#2
0
    private void AddBuilding(IBuilding building)
    {
        Buildings.Add(building);

        for (var x = 0; x < building.Width; x++)
        {
            for (var z = 0; z < building.Height; z++)
            {
                _cells[(building.CastleZ + z) * CellsX + x + building.CastleX] = true;
            }
        }

        BuildingAdded?.Invoke(building);
    }
示例#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();
                //}
            }
        }