Skip to content

MultiDrawingVisualizer -> HistoryDrawingVisualizer #184

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace Unity.Robotics.MessageVisualizers
{
public class PointTracingVisualizerExample : MultiDrawingVisualizer<PointMsg>
public class PointTracingVisualizerExample : HistoryDrawingVisualizer<PointMsg>
{
[SerializeField]
Color m_Color;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
using RosMessageTypes.Std;
using System;
using System.Collections.Generic;
using System.Linq;
using Unity.Robotics.ROSTCPConnector;
using Unity.Robotics.ROSTCPConnector.MessageGeneration;
using UnityEngine;

namespace Unity.Robotics.MessageVisualizers
{
public abstract class MultiDrawingVisualizer<T> : BaseVisualFactory<T>
public abstract class HistoryDrawingVisualizer<T> : BaseVisualFactory<T>
where T : Message
{
[SerializeField]
Expand All @@ -18,10 +19,15 @@ public abstract class MultiDrawingVisualizer<T> : BaseVisualFactory<T>

protected override IVisual CreateVisual(string topic)
{
return new MultiDrawingVisual(topic, this, m_HistoryLength);
return new HistoryDrawingVisual(topic, this, m_HistoryLength);
}

public virtual void Draw(Drawing3d drawing, IEnumerable<Tuple<T, MessageMetadata>> messages) { }
public virtual void Draw(Drawing3d drawing, IEnumerable<Tuple<T, MessageMetadata>> messages)
{
Draw(drawing, messages.Select(Tuple => Tuple.Item1));
}

public virtual void Draw(Drawing3d drawing, IEnumerable<T> messages) { }

public virtual Action CreateGUI(IEnumerable<Tuple<T, MessageMetadata>> messages)
{
Expand All @@ -38,19 +44,19 @@ public virtual Action CreateGUI(T message, MessageMetadata meta)
return MessageVisualizationUtils.CreateDefaultGUI(message, meta);
}

public class MultiDrawingVisual : IVisual
public class HistoryDrawingVisual : IVisual
{
string m_Topic;
Queue<Tuple<T, MessageMetadata>> messages = new Queue<Tuple<T, MessageMetadata>>();
Queue<Tuple<T, MessageMetadata>> m_History = new Queue<Tuple<T, MessageMetadata>>();

Drawing3d m_BasicDrawing;
Action m_GUIAction;
MultiDrawingVisualizer<T> m_Factory;
HistoryDrawingVisualizer<T> m_Factory;
int m_HistoryLength;
bool m_IsDrawingEnabled;
float m_LastDrawingFrameTime = -1;

public MultiDrawingVisual(string topic, MultiDrawingVisualizer<T> factory, int historyLength)
public HistoryDrawingVisual(string topic, HistoryDrawingVisualizer<T> factory, int historyLength)
{
m_Topic = topic;
m_Factory = factory;
Expand All @@ -64,12 +70,12 @@ public void AddMessage(Message message)
if (!MessageVisualizationUtils.AssertMessageType<T>(message, m_Topic))
return;

messages.Enqueue(new Tuple<T, MessageMetadata>(
m_History.Enqueue(new Tuple<T, MessageMetadata>(
(T)message,
new MessageMetadata(m_Topic, Time.time, DateTime.Now)
));
if (messages.Count > m_HistoryLength)
messages.Dequeue();
if (m_History.Count > m_HistoryLength)
m_History.Dequeue();
m_GUIAction = null;

if (m_IsDrawingEnabled && Time.time > m_LastDrawingFrameTime)
Expand All @@ -96,7 +102,7 @@ public void OnGUI()
{
if (m_GUIAction == null)
{
m_GUIAction = m_Factory.CreateGUI(messages);
m_GUIAction = m_Factory.CreateGUI(m_History);
}
m_GUIAction();
}
Expand All @@ -122,7 +128,7 @@ public void Redraw()
m_BasicDrawing.Clear();
}

m_Factory.Draw(m_BasicDrawing, messages);
m_Factory.Draw(m_BasicDrawing, m_History);
}
}
}
Expand Down