// Width: Nodes are allowed 2 widths // Height: Nodes are allowed 1.5 Heights. 0 = top, 1/2/3/4 = image, 5 = bottom. // offset: pass in horizonal offset, return back middle of image // aligndown : if true, compensate for drawing normal size images and ones 1.5 by shifting down the image and the label by the right amounts // labelvoff : any additional compensation for label pos // return right bottom of area used from curpos Point DrawNode(List <PictureBoxHotspot.ImageElement> pc, StarScan.ScanNode sn, Image notscanned, Point curpos, Size size, ref int offset, bool aligndown = false, int labelvoff = 0) { string tip; Point endpoint = curpos; int quarterheight = size.Height / 4; int alignv = aligndown ? quarterheight : 0; JournalScan sc = sn.ScanData; //System.Diagnostics.Debug.WriteLine("Node " + sn.ownname + " " + curpos + " " + size + " hoff " + offset + " EDSM " + ((sc!= null) ? sc.IsEDSMBody.ToString() : "")); if (sc != null && (!sc.IsEDSMBody || checkBoxEDSM.Checked)) // if got one, and its our scan, or we are showing EDSM { tip = sc.DisplayString(); if (sc.IsStar) { endpoint = CreateImageLabel(pc, sc.GetStarTypeImage().Item1, new Point(curpos.X + offset, curpos.Y + alignv), // WE are basing it on a 1/4 + 1 + 1/4 grid, this is not being made bigger, move off size, sn.customname ?? sn.ownname, tip, alignv + labelvoff, sc.IsEDSMBody, false); // and the label needs to be a quarter height below it.. if (sc.HasRings) { curpos = new Point(endpoint.X + itemsepar.Width, curpos.Y); Point endbelt = curpos; for (int i = 0; i < sc.Rings.Length; i++) { string name = sc.Rings[i].Name; if (name.Length > sn.fullname.Length && name.Substring(0, sn.fullname.Length).Equals(sn.fullname)) { name = name.Substring(sn.fullname.Length).Trim(); } curpos.X += 4; // a little spacing, image is tight endbelt = CreateImageLabel(pc, EDDiscovery.Properties.Resources.Belt, new Point(curpos.X, curpos.Y + alignv), new Size(size.Width / 2, size.Height), name, sc.RingInformationMoons(i), alignv + labelvoff, sc.IsEDSMBody, false); curpos = new Point(endbelt.X + itemsepar.Width, curpos.Y); } endpoint = new Point(curpos.X, endpoint.Y); } offset += size.Width / 2; // return the middle used was this.. } else { bool indicatematerials = sc.HasMaterials && !checkBoxMaterials.Checked; Image nodeimage = sc.GetPlanetClassImage(); if ((sc.IsLandable || sc.HasRings || indicatematerials)) { Bitmap bmp = new Bitmap(size.Width * 2, quarterheight * 6); using (Graphics g = Graphics.FromImage(bmp)) { g.DrawImage(nodeimage, size.Width / 2, quarterheight, size.Width, size.Height); if (sc.IsLandable) { g.DrawImage(EDDiscovery.Properties.Resources.planet_landing, new Rectangle(quarterheight, 0, quarterheight * 6, quarterheight * 6)); } if (sc.HasRings) { g.DrawImage(sc.Rings.Count() > 1 ? EDDiscovery.Properties.Resources.RingGap512 : EDDiscovery.Properties.Resources.Ring_Only_512, new Rectangle(-2, quarterheight, size.Width * 2, size.Height)); } if (indicatematerials) { Image mm = EDDiscovery.Properties.Resources.materiamoreindicator; g.DrawImage(mm, new Rectangle(bmp.Width - mm.Width, bmp.Height - mm.Height, mm.Width, mm.Height)); } } endpoint = CreateImageLabel(pc, bmp, curpos, new Size(bmp.Width, bmp.Height), sn.customname ?? sn.ownname, tip, labelvoff, sc.IsEDSMBody); offset = size.Width; // return that the middle is now this } else { endpoint = CreateImageLabel(pc, nodeimage, new Point(curpos.X + offset, curpos.Y + alignv), size, sn.customname ?? sn.ownname, tip, alignv + labelvoff, sc.IsEDSMBody); offset += size.Width / 2; } if (sc.HasMaterials && checkBoxMaterials.Checked) { Point matpos = new Point(endpoint.X + 4, curpos.Y); Point endmat = CreateMaterialNodes(pc, sc, matpos, materialsize); endpoint = new Point(Math.Max(endpoint.X, endmat.X), Math.Max(endpoint.Y, endmat.Y)); // record new right point.. } } } else { if (sn.type == StarScan.ScanNodeType.barycentre) { tip = "Barycentre of " + sn.ownname; } else { tip = sn.ownname + "\n\nNo scan data available"; } endpoint = CreateImageLabel(pc, notscanned, new Point(curpos.X + offset, curpos.Y + alignv), size, sn.customname ?? sn.ownname, tip, alignv + labelvoff, false); offset += size.Width / 2; // return the middle used was this.. } return(endpoint); }
// return right bottom of area used from curpos Point DrawNode(List <PictureBoxHotspot.ImageElement> pc, StarScan.ScanNode sn, Image notscanned, Point curpos, Size size, ref int offset, bool alignhorz) { string tip; Point endpoint = curpos; int hoff = size.Height / 4; int alignhoff = (alignhorz) ? hoff : 0; JournalScan sc = sn.scandata; if (sc != null) { tip = sc.DisplayString(true); if (sc.IsStar) { endpoint = CreateImageLabel(pc, sc.GetStarTypeImage().Item1, new Point(curpos.X + offset, curpos.Y + alignhoff), size, sn.ownname, tip, alignhoff); if (sc.HasRings) { curpos = new Point(endpoint.X + itemsepar.Width, curpos.Y); Point endbelt = curpos; for (int i = 0; i < sc.Rings.Length; i++) { string name = sc.Rings[i].Name; if (name.Length > sn.fullname.Length && name.Substring(0, sn.fullname.Length).Equals(sn.fullname)) { name = name.Substring(sn.fullname.Length).Trim(); } curpos.X += 4; // a little spacing, image is tight endbelt = CreateImageLabel(pc, EDDiscovery.Properties.Resources.Belt, new Point(curpos.X, curpos.Y + alignhoff), new Size(size.Width / 2, size.Height), name, sc.RingInformationMoons(i), alignhoff); curpos = new Point(endbelt.X + itemsepar.Width, curpos.Y); } endpoint = new Point(curpos.X, endpoint.Y); } offset += size.Width / 2; // return the middle used was this.. } else { bool indicatematerials = sc.HasMaterials && !checkBoxMaterials.Checked; Image nodeimage = sc.GetPlanetClassImage(); if (sc.IsLandable || sc.HasRings || indicatematerials) { Bitmap bmp = new Bitmap(size.Width * 2, hoff * 6); using (Graphics g = Graphics.FromImage(bmp)) { g.DrawImage(nodeimage, size.Width / 2, hoff, size.Width, size.Height); if (sc.IsLandable) { g.DrawImage(EDDiscovery.Properties.Resources.planet_landing, new Rectangle(hoff, 0, hoff * 6, hoff * 6)); } if (sc.HasRings) { g.DrawImage(sc.Rings.Count() > 1 ? EDDiscovery.Properties.Resources.RingGap512 : EDDiscovery.Properties.Resources.Ring_Only_512, new Rectangle(-2, hoff, size.Width * 2, size.Height)); } if (indicatematerials) { Image mm = EDDiscovery.Properties.Resources.materiamoreindicator; g.DrawImage(mm, new Rectangle(bmp.Width - mm.Width, bmp.Height - mm.Height, mm.Width, mm.Height)); } } endpoint = CreateImageLabel(pc, bmp, curpos, new Size(bmp.Width, bmp.Height), sn.ownname, tip, 0); offset = size.Width; // return that the middle is now this } else { endpoint = CreateImageLabel(pc, nodeimage, new Point(curpos.X + offset, curpos.Y + alignhoff), size, sn.ownname, tip, alignhoff); offset += size.Width / 2; } if (sc.HasMaterials && checkBoxMaterials.Checked) { Point matpos = new Point(endpoint.X + 4, curpos.Y); Point endmat = CreateMaterialNodes(pc, sc, matpos, materialsize); endpoint = new Point(Math.Max(endpoint.X, endmat.X), Math.Max(endpoint.Y, endmat.Y)); // record new right point.. } } } else { if (sn.type == StarScan.ScanNodeType.barycentre) { tip = "Barycentre of " + sn.ownname; } else { tip = sn.ownname + "\n\nNo scan data available"; } endpoint = CreateImageLabel(pc, notscanned, new Point(curpos.X + offset, curpos.Y + alignhoff), size, sn.ownname, tip, alignhoff); offset += size.Width / 2; // return the middle used was this.. } return(endpoint); }