public void AddBuilding(Building building, IntVector pos) { building.Pos = pos; buildings.Add(building); if (building.HasEntrance) { _pathBuilder.ConnectBuilding(building); } BuildingAdded?.Invoke(building); }
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); }
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(); //} } }