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;
            }
        }
示例#3
0
 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));
 }