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); }
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); }
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); }