Exemple #1
0
            public static void RenderAndDeleteTrajectory(IntPtr trajectory_iterator,
                                                         UnityEngine.Color colour,
                                                         Style style)
            {
                try {
                    Vector3d?previous_point = null;

                    UnityEngine.GL.Color(colour);
                    int size = trajectory_iterator.IteratorSize();

                    for (int i = 0;
                         !trajectory_iterator.IteratorAtEnd();
                         trajectory_iterator.IteratorIncrement(), ++i)
                    {
                        Vector3d current_point = (Vector3d)trajectory_iterator.IteratorGetXYZ();
                        if (previous_point.HasValue)
                        {
                            if (style == Style.FADED)
                            {
                                colour.a = (float)(4 * i + size) / (float)(5 * size);
                                UnityEngine.GL.Color(colour);
                            }
                            if (style != Style.DASHED || i % 2 == 1)
                            {
                                AddSegment(previous_point.Value,
                                           current_point,
                                           hide_behind_bodies: true);
                            }
                        }
                        previous_point = current_point;
                    }
                } finally {
                    Interface.IteratorDelete(ref trajectory_iterator);
                }
            }
Exemple #2
0
            public static void RenderAndDeleteTrajectory(IntPtr trajectory_iterator,
                                               UnityEngine.Color colour,
                                               Style style)
            {
                try {
                  Vector3d? previous_point = null;

                  UnityEngine.GL.Color(colour);
                  int size = trajectory_iterator.IteratorSize();

                  for (int i = 0;
                   !trajectory_iterator.IteratorAtEnd();
                   trajectory_iterator.IteratorIncrement(), ++i) {
                Vector3d current_point = (Vector3d)trajectory_iterator.IteratorGetXYZ();
                if (previous_point.HasValue) {
                  if (style == Style.FADED) {
                colour.a = (float)(4 * i + size) / (float)(5 * size);
                UnityEngine.GL.Color(colour);
                  }
                  if (style != Style.DASHED || i % 2 == 1) {
                AddSegment(previous_point.Value,
                       current_point,
                       hide_behind_bodies : true);
                  }
                }
                previous_point = current_point;
                  }
                } finally {
                  Interface.IteratorDelete(ref trajectory_iterator);
                }
            }
Exemple #3
0
            public static void PlotAndDeleteRP2Lines(IntPtr rp2_lines_iterator,
                                                     UnityEngine.Color colour,
                                                     Style style)
            {
                try {
                    UnityEngine.GL.Color(colour);

                    // First evaluate the total size of the lines.
                    int size = 0;
                    for (;
                         !rp2_lines_iterator.IteratorAtEnd();
                         rp2_lines_iterator.IteratorIncrement())
                    {
                        IntPtr rp2_line_iterator =
                            rp2_lines_iterator.IteratorGetRP2LinesIterator();
                        try {
                            size += rp2_line_iterator.IteratorSize();
                        } finally {
                            Interface.IteratorDelete(ref rp2_line_iterator);
                        }
                    }

                    // Reset the iterator and do the actual plotting.
                    rp2_lines_iterator.IteratorReset();
                    int index = 0;
                    for (;
                         !rp2_lines_iterator.IteratorAtEnd();
                         rp2_lines_iterator.IteratorIncrement())
                    {
                        IntPtr rp2_line_iterator =
                            rp2_lines_iterator.IteratorGetRP2LinesIterator();
                        try {
                            XY?previous_rp2_point = null;
                            for (;
                                 !rp2_line_iterator.IteratorAtEnd();
                                 rp2_line_iterator.IteratorIncrement())
                            {
                                XY current_rp2_point = ToScreen(
                                    rp2_line_iterator.IteratorGetRP2LineXY());
                                if (previous_rp2_point.HasValue)
                                {
                                    if (style == Style.FADED)
                                    {
                                        colour.a = 1 - (float)(4 * index) / (float)(5 * size);
                                        UnityEngine.GL.Color(colour);
                                    }
                                    if (style != Style.DASHED || index % 2 == 1)
                                    {
                                        UnityEngine.GL.Vertex3((float)previous_rp2_point.Value.x,
                                                               (float)previous_rp2_point.Value.y,
                                                               0);
                                        UnityEngine.GL.Vertex3((float)current_rp2_point.x,
                                                               (float)current_rp2_point.y,
                                                               0);
                                    }
                                }
                                previous_rp2_point = current_rp2_point;
                                ++index;
                            }
                        } finally {
                            Interface.IteratorDelete(ref rp2_line_iterator);
                        }
                    }
                } finally {
                    Interface.IteratorDelete(ref rp2_lines_iterator);
                }
            }