public void testShapes()
        {
            for (int i = 0; i < st.Length; i++)
            {
                shape_test_s s = st[i];

                string fname = String.Format("test_shape_{0}.svg", s.name);

                RendererSvg      rsvg = new RendererSvg(800, 600, Rgb.rgb_black);
                RendererViewport r    = rsvg;

                r.set_window(Vector2.vector2_0, 70.0, true);

                {
                    ConsumerTriangle2 d = (Triangle2 t) => {
                        r.draw_triangle(t, true, new Rgb(.2, .2, .2, 1.0));
                        r.draw_triangle(t, false, Rgb.rgb_gray);
                    };
                    s.s.get_triangles(d, 10.0);
                }

                for (int c = 0; c < s.s.get_contour_count(); c++)
                {
                    List <Vector2>  poly = new ();
                    PatternConsumer d    = (Vector2 v) => {
                        poly.Add(v);
                    };
                    s.s.get_contour(c, d, 10.0);
                    r.draw_polygon(poly.ToArray(), Rgb.rgb_yellow, false, true);
                }

                for (double a = 0; a < 2.0 * Math.PI - 1e-8; a += 2.0 * Math.PI / 50.0)
                {
                    Vector2 d = new Vector2(Math.Cos(a), Math.Sin(a));

                    double ro = s.s.get_outter_radius(d);
                    r.draw_point(d.times(ro), Rgb.rgb_magenta, Renderer.PointStyle.PointStyleCross);
                    double rh = s.s.get_hole_radius(d);
                    r.draw_point(d.times(rh), Rgb.rgb_cyan, Renderer.PointStyle.PointStyleCross);
                }

                r.draw_circle(Vector2.vector2_0, s.s.max_radius(), Rgb.rgb_red, false);
                r.draw_circle(Vector2.vector2_0, s.s.min_radius(), Rgb.rgb_blue, false);

                r.draw_box(s.s.get_bounding_box(), Rgb.rgb_cyan);

                {
                    PatternConsumer d = (Vector2 v) => {
                        r.draw_point(v, Rgb.rgb_green, Renderer.PointStyle.PointStyleDot);
                    };
                    Distribution dist = new Distribution();
                    ((ShapeBase)s.s).get_base_pattern(d, dist, false);
                }

                Console.WriteLine(rsvg.write(new StringBuilder()).ToString());
            }
        }
        void draw_2d_fit(RendererViewport r, OpticalSystem system, bool keep_aspect)
        {
            Vector3Pair b = system.get_bounding_box();

            r.set_window(Vector2Pair.from(b, 2, 1), keep_aspect);
            r.set_camera_direction(Vector3.vector3_100);
            r.set_camera_position(Vector3.vector3_0);

            r.set_feature_size(b.v1.y() - b.v0.y() / 20.0);
        }
Exemple #3
0
        public void draw_diagram(RendererViewport renderer, bool centroid_origin)
        {
            process_analysis();

            Vector3 center3 = _results.get_intercepted_center(_image);
            Vector2 center  = new Vector2(center3.x(), center3.y());
            Vector2 radius  = new Vector2(_useful_radius, _useful_radius);

            renderer.set_window(new Vector2Pair(center.minus(radius), center.plus(radius)), true);

            _axes.set_position(_centroid);
            _axes.set_origin(centroid_origin ? _centroid : Vector3.vector3_0);
            _axes.set_tics_count(3, PlotAxes.AxisMask.XY);

            PlotRenderer plotRenderer = new PlotRenderer();

            plotRenderer.draw_axes_2d(renderer, _axes);
            draw_intercepts(renderer, _image);
        }
Exemple #4
0
        void set_2d_plot_window(RendererViewport r, Plot plot)
        {
            Range x_range = plot.get_axes()._axes[0]._range;

            if (x_range.first == x_range.second)
            {
                x_range = plot.get_x_data_range(0);
            }

            Range y_range = plot.get_axes()._axes[1]._range;

            if (y_range.first == y_range.second)
            {
                y_range = plot.get_y_data_range();
            }

            r.set_window(new Vector2Pair(new Vector2(x_range.first, y_range.first),
                                         new Vector2(x_range.second, y_range.second)),
                         false);
        }