Ejemplo n.º 1
0
        public Bitmap DrawAll(Camera cam, ScreenConverter scr, Flat crossing, bool standard, bool firstHalf,
                              bool secondHalf, bool section)
        {
            Bitmap            bmp   = new Bitmap(scr.Size.Width, scr.Size.Height);
            Graphics          g     = Graphics.FromImage(bmp);
            List <PolyLine3D> lines = new List <PolyLine3D>();

            foreach (Polyhedron m in Models)
            {
                if (standard)
                {
                    foreach (PolyLine3D pl in m.GetLines())
                    {
                        var p = new PolyLine3D(pl.Line.ConvertAll(a => cam.Convert(a)));
                        lines.Add(p);
                    }
                }
                if (firstHalf)
                {
                    foreach (PolyLine3D pl in m.Half(crossing, true))
                    {
                        var p = new PolyLine3D(pl.Line.ConvertAll(a => cam.Convert(a)));
                        lines.Add(p);
                    }
                }
                if (secondHalf)
                {
                    foreach (PolyLine3D pl in m.Half(crossing, false))
                    {
                        var p = new PolyLine3D(pl.Line.ConvertAll(a => cam.Convert(a)));
                        lines.Add(p);
                    }
                }
                if (section)
                {
                    var pl = m.Section(crossing);

                    if (pl != null)
                    {
                        var p = new PolyLine3D(pl.Line.ConvertAll(a => cam.Convert(a)));
                        lines.Add(p);
                    }
                }
            }
            lines.Sort(new Comparison <PolyLine3D>((a, b) => { return((int)(a.Line.Average(x => x.Z) - b.Line.Average(x => x.Z))); }));
            foreach (PolyLine3D pl in lines)
            {
                var p = pl.Line.ConvertAll(a => scr.Convert(new Vector3(a.X, a.Y, 0))).ToArray();
                g.DrawLines(Pens.Black, p);
            }
            lines.Clear();
            g.Dispose();
            return(bmp);
        }
Ejemplo n.º 2
0
 public For_Lab6()
 {
     InitializeComponent();
     scene       = new Scene();
     camera      = new Camera();
     MouseWheel += new MouseEventHandler(For_Lab6_MouseWheel);
     modelsCB.Items.AddRange(new object[]
     {
         Polyhedrons.Prisma,
         Polyhedrons.Brick
     });
     scene.Models.Add((Polyhedron)modelsCB.Items[0]);
     current_index = modelsCB.SelectedIndex = 0;
     crossing_flat = new Flat((float)aNumeric.Value, (float)bNumeric.Value,
                              (float)cNumeric.Value, (float)dNumeric.Value);
 }
Ejemplo n.º 3
0
        public bool IsParallelOrEqualTo(Flat flat)
        {
            if (A == 0)
            {
                if (B == 0)
                {
                    if (C == 0)
                    {
                        return(false);
                    }
                    return(flat.A == 0 && flat.B == 0);
                }
                if (C == 0)
                {
                    return(flat.A == 0 && flat.C == 0);
                }
                if (flat.A != 0)
                {
                    return(false);
                }
                return(flat.B / B == flat.C / C);
            }
            if (B == 0)
            {
                if (C == 0)
                {
                    return(flat.B == 0 && flat.C == 0);
                }
                if (flat.B != 0)
                {
                    return(false);
                }
                return(flat.A / A == flat.C / C);
            }
            if (C == 0)
            {
                if (flat.C != 0)
                {
                    return(false);
                }
                return(flat.A / A == flat.B / B);
            }
            float k = flat.A / A;

            return(flat.B / B == k && flat.C / C == k);
        }