public override bool IsApplicable(RXObject overruledSubject) { // Проверка точки - инсоляционная или нет var dPt = (DBPoint)overruledSubject; return(InsPointHelper.IsInsPoint(dPt)); }
/// <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; } }
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(); //} } }