/// <summary> /// Initializes the view model. /// </summary> private void InitializeViewModel() { MainContext mainContext = new MainContext(_graphic.Building); _mainView.DataContext = mainContext; FloorContext floorContext = new FloorContext(_graphic.Building.Floors, _graphic.Sources, _floorView); floorContext.Parent = mainContext; mainContext.Child = floorContext; _floorView.DataContext = floorContext; ZoneContext zoneContext = new ZoneContext(_graphic.Building.Floors[0].Zones, _graphic.Sources); zoneContext.Parent = floorContext; floorContext.Child = zoneContext; _zoneView.DataContext = zoneContext; _navigator = new Navigator(mainContext); this.DataContext = _navigator; _mainView.Focus(); _floorView.Focus(); _zoneView.Focus(); }
public BuildingController( FloorContext argFloorContext, UserManager <ApplicationUser> argUserManager) { _floorContext = argFloorContext; _userManager = argUserManager; }
/// <summary> /// Get floor by id /// </summary> /// <param name="id"></param> /// <returns></returns> public Floor Get(int id) { using (var context = new FloorContext()) { var floor = context.Floors.Find(id); return(floor); } }
/// <summary> /// Get All Floors as List /// </summary> /// <returns></returns> public List <Floor> AllList() { using (var context = new FloorContext()) { var floors = context.Floors.ToList(); return(floors); } }
/// <summary> /// Get All Floors as IQueryable /// </summary> /// <returns></returns> public IQueryable <Floor> All() { using (var context = new FloorContext()) { var floors = context.Floors; return(floors); } }
/// <summary> /// Get floor by id /// </summary> /// <param name="id"></param> /// <returns></returns> public Floor Get(int id) { using (var context = new FloorContext()) { var floor = context.Floors.Find(id); //log call _loggingService.Info("Elevator.Infrastructure.Data.Repositories: FloorRepository.Get"); return(floor); } }
/// <summary> /// Get All Floors as List /// </summary> /// <returns></returns> public List <Floor> AllList() { using (var context = new FloorContext()) { var floors = context.Floors.ToList(); // Log call _loggingService.Info("Elevator.Infrastructure.Data.Repositories: FloorRepository.AllList"); return(floors); } }
/// <summary> /// Get All Floors as IQueryable /// </summary> /// <returns></returns> public IQueryable <Floor> All() { using (var context = new FloorContext()) { var floors = context.Floors; // Log call _loggingService.Info("Elevator.Infrastructure.Data.Repositories: FloorRepository.All"); return(floors); } }
/// <summary> /// Update Floor to db /// </summary> /// <param name="floor"></param> /// <returns></returns> public bool Update(Floor floor) { using (var context = new FloorContext()) { context.Floors.Attach(floor); var entry = context.Entry(floor); entry.State = EntityState.Modified; context.SaveChanges(); return(true); } }
/// <summary> /// Update Floor to db /// </summary> /// <param name="floor"></param> /// <returns></returns> public bool Update(Floor floor) { using (var context = new FloorContext()) { context.Floors.Attach(floor); var entry = context.Entry(floor); entry.State = EntityState.Modified; context.SaveChanges(); //log call _loggingService.Info("Elevator.Infrastructure.Data.Repositories: FloorRepository.Update"); return(true); } }
private static void AddTransitWalls(InDoorGeneratorSettings settings, Floor floor, FloorContext context, Apartment apartment, List <Wall> extrudedWalls, Vector2d transitWallSplitPoint, int lastTransitIndex) { // this is last apartment if (transitWallSplitPoint == Vector2d.Empty) { context.TransitWallIndex = context.FirstTransitWallIndex; transitWallSplitPoint = extrudedWalls[context.FirstTransitWallIndex].Start; } // this is first apartment if (!floor.TransitWalls.Any()) { // copy all next walls without splitting if (context.TransitWallIndex != context.LastTransitWallIndex) { for (var i = context.LastTransitWallIndex; i > context.TransitWallIndex; i = --i < 0 ? extrudedWalls.Count + i : i) { var wall = extrudedWalls[i]; AddTransitWall(floor, apartment, wall.End, wall.Start); } } AddTransitWall(floor, apartment, extrudedWalls[context.TransitWallIndex].End, transitWallSplitPoint); } // this is intermediate or last apartment else { if (context.TransitWallIndex != lastTransitIndex) { var index = lastTransitIndex; while (index != context.TransitWallIndex) { var wall = extrudedWalls[index]; AddTransitWall(floor, apartment, floor.TransitWalls.Last().End, wall.Start); index = --index < 0 ? extrudedWalls.Count + index : index; if (index == context.LastOuterWallIndex) { index = context.LastTransitWallIndex; } } } AddTransitWall(floor, apartment, floor.TransitWalls.Last().End, transitWallSplitPoint); } }
private static void AddOuterWalls(InDoorGeneratorSettings settings, Floor floor, FloorContext context, Apartment apartment, List <Wall> extrudedWalls, Vector2d outerWallSplitPoint, int lastOuterIndex) { // this is last apartment if (outerWallSplitPoint == Vector2d.Empty) { context.OuterWallIndex = context.LastOuterWallIndex; outerWallSplitPoint = extrudedWalls[context.LastOuterWallIndex].End; } // this is first apartment if (!floor.OuterWalls.Any()) { // copy all previous walls without splitting if (context.OuterWallIndex != context.FirstOuterWallIndex) { for (var i = context.FirstOuterWallIndex; i < context.OuterWallIndex; i = (i + 1) % extrudedWalls.Count) { var wall = extrudedWalls[i]; AddOuterWall(floor, apartment, wall.Start, wall.End); } } // add part of current wall AddOuterWall(floor, apartment, extrudedWalls[context.OuterWallIndex].Start, outerWallSplitPoint); } // this is intermediate or last apartment else { if (context.OuterWallIndex != lastOuterIndex) { var index = lastOuterIndex; while (index != context.OuterWallIndex) { var wall = extrudedWalls[index]; var startPoint = index == lastOuterIndex ? floor.OuterWalls.Last().End : wall.Start; AddOuterWall(floor, apartment, startPoint, wall.End); index = (index + 1) % extrudedWalls.Count; } } AddOuterWall(floor, apartment, floor.OuterWalls.Last().End, outerWallSplitPoint); } }
private static void InsertAparment(InDoorGeneratorSettings settings, Floor floor, FloorContext context, List <Wall> extrudedWalls, Vector2d outerWallSplitPoint, Vector2d transitWallSplitPoint, ref int lastOuterIndex, ref int lastTransitIntex) { var apartment = new Apartment(settings.ObjectPool); AddOuterWalls(settings, floor, context, apartment, extrudedWalls, outerWallSplitPoint, lastOuterIndex); AddTransitWalls(settings, floor, context, apartment, extrudedWalls, transitWallSplitPoint, lastTransitIntex); if (outerWallSplitPoint != Vector2d.Empty) { floor.PartitionWalls.Add(new LineSegment2d(outerWallSplitPoint, transitWallSplitPoint)); } floor.Apartments.Add(apartment); lastOuterIndex = context.OuterWallIndex; lastTransitIntex = context.TransitWallIndex; }
private static void CreateAparments(InDoorGeneratorSettings settings, Floor floor, FloorContext context, List <Wall> extrudedWalls, List <Wall> connectedSkeletonWalls, double outerWallLength) { var currentWidthStep = settings.PreferedWidthStep; var remainingOuterWallLength = outerWallLength; var lastUsedOuterIndex = InvalidIndex; var usedTransitIndex = InvalidIndex; var stopIterationIndex = context.FirstOuterWallIndex + context.OuterWallCount; for (var i = context.FirstOuterWallIndex; i < stopIterationIndex; i++) { var index = i == extrudedWalls.Count ? 0 : i % extrudedWalls.Count; var wall = extrudedWalls[index]; var start = wall.Start; var end = wall.End; var distance = start.DistanceTo(end); remainingOuterWallLength -= distance; // last apartment if (remainingOuterWallLength < currentWidthStep) { InsertAparment(settings, floor, context, extrudedWalls, Vector2d.Empty, Vector2d.Empty, ref lastUsedOuterIndex, ref usedTransitIndex); break; } var remainingCurrentWallLength = distance; do { if (remainingCurrentWallLength < currentWidthStep) { currentWidthStep = settings.MinimalWidthStep; break; } remainingCurrentWallLength -= currentWidthStep; // get intermediate point var vec = (end - start).Normalized(); var outerWallSplitPoint = start + vec * currentWidthStep; var ortogonalRight = new Vector2d(-vec.Y, vec.X); var someFarPointOnOuterWall = outerWallSplitPoint + ortogonalRight * 1000; Vector2d transitWallSplitPoint; int transitWallIndex; if (HasIntersectPoint(extrudedWalls, connectedSkeletonWalls, outerWallSplitPoint, someFarPointOnOuterWall, out transitWallSplitPoint, out transitWallIndex)) { context.OuterWallIndex = index; context.TransitWallIndex = transitWallIndex; InsertAparment(settings, floor, context, extrudedWalls, outerWallSplitPoint, transitWallSplitPoint, ref lastUsedOuterIndex, ref usedTransitIndex); currentWidthStep = settings.PreferedWidthStep; } start = outerWallSplitPoint; } while (true); } }
private static void CreateApartments(InDoorGeneratorSettings settings, Floor floor, List <IntPoint> footprint, List <List <IntPoint> > transitArea, List <Wall> connected) { var extrudedPolygons = new List <List <IntPoint> >(4); settings.Clipper.AddPaths(transitArea, PolyType.ptClip, true); settings.Clipper.AddPath(footprint, PolyType.ptSubject, true); settings.Clipper.Execute(ClipType.ctDifference, extrudedPolygons); settings.Clipper.Clear(); //SVGBuilder.SaveToFile(extrudedPolygons, "regions_ex.svg", 0.01, 100); foreach (var extrudedPolygon in extrudedPolygons) { // Clipper may produce small polygons on building offsets if (Clipper.Area(extrudedPolygon) / DoubleScale < settings.MinimalArea) { continue; } var firstOuterWallIndex = InvalidIndex; var firstTransitWallIndex = InvalidIndex; var outerWallCount = 0; double outerWallLength = 0; var extrudedWalls = new List <Wall>(); var lastItemIndex = extrudedPolygon.Count - 1; var mergePoint = Vector2d.Empty; double skippedDistance = 0; for (var i = 0; i <= lastItemIndex; i++) { var start = extrudedPolygon[i]; var end = extrudedPolygon[i == lastItemIndex ? 0 : i + 1]; var isOuterWall = ClipperUtils.CalcMinDistance(start, footprint) < IntPrecisionError && ClipperUtils.CalcMinDistance(end, footprint) < IntPrecisionError; var p1 = new Vector2d(start.X / Scale, start.Y / Scale); var p2 = new Vector2d(end.X / Scale, end.Y / Scale); // NOTE this allows to skip artifacts of clipper offset library // which I don't know to avoid by clipper API. var distance = p1.DistanceTo(p2); if (distance < settings.HalfTransitAreaWidth && skippedDistance < settings.TransitAreaWidth) { skippedDistance += distance; if (mergePoint != Vector2d.Empty) { continue; } mergePoint = p1; continue; } if (mergePoint != Vector2d.Empty) { p1 = mergePoint; mergePoint = Vector2d.Empty; skippedDistance = 0; } if (isOuterWall) { outerWallCount++; outerWallLength += ClipperUtils.Distance(start, end) / Scale; if (firstOuterWallIndex == InvalidIndex) { firstOuterWallIndex = extrudedWalls.Count; } } if (!isOuterWall && firstTransitWallIndex == InvalidIndex) { firstTransitWallIndex = extrudedWalls.Count; } extrudedWalls.Add(new Wall(p1, p2, isOuterWall)); } firstOuterWallIndex = firstOuterWallIndex != 0 ? firstOuterWallIndex : firstTransitWallIndex + extrudedWalls.Count - outerWallCount; var context = new FloorContext(outerWallCount, extrudedWalls.Count - outerWallCount, firstOuterWallIndex, firstTransitWallIndex); CreateAparments(settings, floor, context, extrudedWalls, connected, outerWallLength); } }