Пример #1
0
        public void UnExecute()
        {
            if (m_points2Remove != null)
            {
                foreach (var point in m_points2Remove)
                {
                    m_pointsContainer.Add(point);
                }
            }

            if (m_lines2Remove != null)
            {
                foreach (var line in m_lines2Remove)
                {
                    m_linesContainer.Add(line);
                }
            }
            if (m_observations2Remove != null)
            {
                foreach (var observation in m_observations2Remove)
                {
                    m_observationsContainer.Add(observation);
                }
            }
        }
 private void UpdateMap <T>(
     ICollection <T> source,
     Func <T, bool> isNewSelector,
     Func <T, bool> isRemovedSelector,
     Func <T, bool> justColoredSelector,
     Func <T, bool> isValidSelector,
     ICloudObjectsContainer <T> map)
 {
     if (source != null)
     {
         foreach (var element in source)
         {
             if (isValidSelector(element))
             {
                 if (isNewSelector(element))
                 {
                     map.Add(element);
                 }
                 else if (isRemovedSelector(element))
                 {
                     map.Remove(element);
                 }
                 else if (justColoredSelector(element))
                 {
                     map.ChangeColor(element);
                 }
                 else
                 {
                     map.Update(element);
                 }
             }
         }
     }
 }
        private void MakeConnectionsAndConnectionPlaceholdersFor(SlamObservation observation)
        {
            foreach (var covisible in observation.CovisibleInfos)
            {
                int connectionIdx = m_connections.FindIndex(c =>
                                                            c.obsId1 == observation.Point.id && c.obsId2 == covisible.id ||
                                                            c.obsId2 == observation.Point.id && c.obsId1 == covisible.id);
                if (connectionIdx == -1)
                {
                    connectionIdx = m_connections.Count;
                    m_connections.Add(new Connection(observation.Point.id, covisible.id, observation));
                }

                var             connection   = m_connections[connectionIdx];
                SlamObservation covisibleObs = m_nodes.FirstOrDefault(node => node.Point.id == covisible.id);
                if (
                    /*already in map*/ covisibleObs != null &&
                    /*is placeholder*/ covisibleObs.Point.id == connection.obsId2 && connection.lineId == -1)
                {
                    SlamLine line = new SlamLine()
                    {
                        vert1     = observation.Point.position,
                        vert2     = covisibleObs.Point.position,
                        pointId1  = observation.Point.id,
                        pointId2  = covisibleObs.Point.id,
                        color1    = observation.Point.color,
                        color2    = covisibleObs.Point.color,
                        isRemoved = false
                    };
                    m_connections[connectionIdx] = new Connection(
                        connection.obsId1, connection.obsId2,
                        observation, covisibleObs,
                        m_lines.Add(line));
                }
                //Debug.Assert(m_connections[connectionIdx].first != null || m_connections[connectionIdx].second != null,
                //    $"[SlamObservationsContainer.UpdateConnectionsOf] connection.first == connection.second == null for " +
                //    $"id1 = {m_connections[connectionIdx].obsId1}, " +
                //    $"id2 = {m_connections[connectionIdx].obsId2}");
                if (!(m_connections[connectionIdx].first != null || m_connections[connectionIdx].second != null))
                {
                    throw new InvalidSlamContainerOperationException(
                              $"[SlamObservationsContainer.UpdateConnectionsOf] connection.first == connection.second == null for " +
                              $"id1 = {m_connections[connectionIdx].obsId1}, " +
                              $"id2 = {m_connections[connectionIdx].obsId2}");
                }
            }
        }
Пример #4
0
        private void ContinueTrack(Vector3 vert1, Vector3 vert2)
        {
            if (vert1 == vert2)
            {
                m_lineIdsHistory.Push(-1);
                return;
            }
            SlamLine line = new SlamLine()
            {
                color1    = color,
                isRemoved = false,
                pointId1  = m_lineSegmentIdx,
                pointId2  = ++m_lineSegmentIdx,
                vert1     = vert1,
                vert2     = vert2,
            };

            m_lastLineId = m_linesContainer.Add(line);
            m_lineIdsHistory.Push(m_lastLineId);
            m_linesContainer.Repaint();
        }
Пример #5
0
 public void Execute()
 {
     if (m_addedPoints != null)
     {
         foreach (var point in m_addedPoints)
         {
             m_pointsContainer.Add(point);
         }
     }
     if (m_addedLines != null)
     {
         foreach (var line in m_addedLines)
         {
             m_linesContainer.Add(line);
         }
     }
     if (m_addedObservations != null)
     {
         foreach (var observation in m_addedObservations)
         {
             m_observationsContainer.Add(observation);
         }
     }
 }