void MapDisplay_MouseDoubleClick(object sender, MouseButtonEventArgs e) { if (!this.MapDisplay.IsReady) { return; } var mousePos = e.GetPosition(this.MapDisplay); LabelNameWindow nameWindow = new LabelNameWindow(); if (nameWindow.ShowDialog().Value) { MapLandmark newLandmark = new MapLandmark(); newLandmark.Name = nameWindow.EnteredText; var mapTransform = this.MapDisplay.CalculateMapTransform(); var mapPoint = mapTransform.Inverse.Transform(mousePos); newLandmark.Position = new System.Drawing.Point((int)mapPoint.X, (int)mapPoint.Y); this.MapDisplay.MapLandmarks.Add(newLandmark); } }
/// <summary> /// Saves the new landmark. /// /// </summary> /// <param name="mapLandmark"></param> /// <returns>marker view model</returns> public async Task <MarkerViewModel> SaveLandmarks(MapLandmark mapLandmark) { try { await using var context = new LandmarkDbContext(); var newLandMark = context.MapLandmark.Add(new MapLandmark { Text = mapLandmark.Text, Lat = mapLandmark.Lat, Lng = mapLandmark.Lng, UserId = mapLandmark.UserId }).Entity; context.SaveChanges(); var userName = context.UserContextInfo.First(x => x.UserId == newLandMark.UserId).Name; return(new MarkerViewModel(newLandMark.Lat, newLandMark.Lng, newLandMark.Text, false, userName)); } catch (Exception ex) { _logger.LogError(ex, "Error saving landmarks. Method: {Method}, time: {time}", nameof(SaveLandmarks), DateTime.Now); throw; } }
public void GetLandmarkTransform(MapLandmark marker, Transform transform, BoundingBox meshBounds) { Vector4 param = landmarks[(int)marker]; Vector3 pos = new Vector3(param.X, param.Y, param.Z); transform.SetPosition(pos); Vector3 rotation = transform.GetRotation(); rotation.Y = param.W; transform.SetRotation(rotation); List<TriangleGraph> triangles; BoundingBox region = meshBounds; Vector3 sides = (meshBounds.Max - meshBounds.Min)*0.5f; region.Min = pos - sides; region.Max = pos + sides; region.Min.Y = this.Transformation.GetBounds().Min.Y; region.Max.Y = this.Transformation.GetBounds().Max.Y; if (GetTrianglesInRegion(RandomHelper.RandomGen, out triangles, region, true)) { TriangleGraph bestTri = triangles[0]; float bestDist = Vector3.DistanceSquared(bestTri.Centroid, pos); for (int i = 1; i < triangles.Count; i++) { float dist = Vector3.DistanceSquared(triangles[i].Centroid, pos); if (dist < bestDist) { bestTri = triangles[i]; bestDist = dist; } } transform.SetPosition(bestTri.GeneratePointInTriangle(RandomHelper.RandomGen)); BoundingBox newRegion = transform.TransformBounds(meshBounds); Vector3 offsetVector = Vector3.One * 5.0f; newRegion.Min = newRegion.Min - offsetVector; newRegion.Max = newRegion.Max + offsetVector; triangles = null; if (GetTrianglesInRegion(RandomHelper.RandomGen, out triangles, newRegion, true)) { for (int i = 0; i < triangles.Count; i++) { if(!usedLandmarkTriangles.ContainsKey(triangles[i].ID)) usedLandmarkTriangles.Add(triangles[i].ID, (char)1); } } } }
public async Task <MarkerViewModel> Post([FromBody] MapLandmark mapLandmark) { return(await _landmarkOperation.SaveLandmarks(mapLandmark)); }